Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
If you filled your g-buffer you already rasterized the scene...What's the difference between a TBDR's parameter buffer of binned triangles and what's in a G buffer? Once you've got the G buffer, why isn't that enough to start rasterizing tile by tile?
What's the difference between a TBDR's parameter buffer of binned triangles and what's in a G buffer? Once you've got the G buffer, why isn't that enough to start rasterizing tile by tile?
What's the difference between a TBDR's parameter buffer of binned triangles and what's in a G buffer? Once you've got the G buffer, why isn't that enough to start rasterizing tile by tile?
It's not agnostic to underlying geometry otherwise you won't be able to compute SSAO or even lighting. You only store the Z as you already know the X,Y of the pixel.I think he got hang up on the "G" from G-buffer, and wrongly assumed it stores geometry infotmation as in verts and polys, which it doesn't. It stores geometrical information as in depth and normals, on a per-sample basis. The normals are usually already modulated by normalmaps in the buffer, and even depth, in some next-gen engines, might also have been displaced by a parallax shader. After written, its completely agnostic to actual underlying polygonal geometry.
The point milk is making is that it's rasterizing the geometry and storing properties in screen-space, rather than being pre-raster data in geometry primitive space.That's true generally as you've moved from object space to screen-space however you can store anything inside your gbuffer even the primitiveIDs. Depends on your use case.
From my testing on a GTX 970, I think the explanation for the weirdness is something like:There's definitely some weirdness in the 970 that David tested though that is almost certainly related to there being some disabled clusters. On "fully enabled" parts you don't see any of that weird hashed run-ahead of multiple tiles - it's all very balanced and it goes from one tile to the next.
p = [0,1,2,3,0,2,3,0,1,3,0,1,2]
partition(x, y) = p[(x + y*2) % 13]
p = [0,1,2,3,0,1,2,0,1,3,0,1,2]
partition(x, y) = p[(x + y*2) % 13]
partition(x, y) = x % 3
It also looks compressed to me - I see it handling a lot more triangles per pass if I put duplicated values in the vertex shader outputs, than if the values are all unique. So that makes it even more complicated to analyseVertices/triangles are fully buffered (with all attributes) on-chip, up to about ~2k triangles (depending on the SKU and vertex output size) before a tile "pass" is run. Again this gets a lot more complicated when not considering full screen triangles but I think keeping the original article high level makes sense.
Hmm, I see there are screenshots from other devices on http://www.neogaf.com/forum/showthread.php?t=1256067 which look to me like:(I'm mildly surprised they don't do something like "(x + y) % 3" on the 1070 to make thin vertical objects get distributed more evenly between the partitions.)
That's a surprise. I expected the buffer to hold full triangles in unpacked form.It also looks compressed to me - I see it handling a lot more triangles per pass if I put duplicated values in the vertex shader outputs, than if the values are all unique. So that makes it even more complicated to analyse![]()
Maybe they push the vertex data through DCC or similar. DCC could actually benefit vertex buffers as well.That's a surprise. I expected the buffer to hold full triangles in unpacked form.
Full compression appears unlikely though, more likely just de-duplication of vertices (by hash?) and (re)indexing?
Unlikely, unless you expect the compiler to evaluate which vertex IDs would result in identical vertex data, and the result of that evaluation would then be used to reorganize the geometry completely?Couldn't the compiler be removing duplicates?
Furthermore, the observations made are in line with a patent Nvidia filed: https://www.google.com/patents/US20140118366
I read Philip's post differently than you did. It seems to me that he's outputting the same data for multiple attributes, from a single vertex. There's no need to compare data across vertices.Unlikely, unless you expect the compiler to evaluate which vertex IDs would result in identical vertex data, and the result of that evaluation would then be used to reorganize the geometry completely?