Not deferred, still immediate-mode

Article: Tile-based Rasterization in Nvidia GPUs
By: Philip Taylor (philip.delete@this.zaynar.co.uk), August 1, 2016 6:33 pm
Room: Moderated Discussions
Rob Clark (robdclark.delete@this.gmail.com) on August 1, 2016 5:56 pm wrote:
> [...]
>
> But there are gains to be had for IMR's with clever thread scheduling like this.
> So it is still neat. And a lot less driver trickery needed (at least for ogl..
> vulkan looks friendlier for tilers in that regard, at least if used properly).

Yep, as far as I can tell (based on some research and a lot of wild speculation) it's essentially changing from the traditional IMR rasterisation process of:

for each draw:
  for each primitive:
    for each tile:
      fetch framebuffer tile
      for each pixel:
        execute pixel shader
        update framebuffer tile
      store framebuffer tile

to something more like:

for each draw:
  for each batch of primitives:
    for each tile:
      fetch framebuffer tile
      for each primitive:
        for each pixel:
          execute pixel shader
          update framebuffer tile
      store framebuffer tile

which benefits by improving the spatial locality of framebuffer updates (so they can be cached closer to the shader cores), and looks like it wouldn't have a major impact outside the rasteriser.

It should help when you've got a single dense mesh (many tiny primitives per tile), but probably won't really help at all with overdraw or with low-detail meshes (less than 1 primitive per tile per draw call). (So, it's not very useful for mobile GPUs that spend nearly all their life rendering UIs made of way too many alpha-blended layers.)

> Interesting about the amount of geometry it can accumulate for executing frag shader stage
> OoO.. given that a lot of games have a lot of geom. I guess that must include varying
> data, which would cut down on # of primitives somewhat? Otherwise they would need to split
> out separate binning shader (which from what I know about nouveau, they do not)

I think they do store the varyings. Dense meshes should already be constructed with good spatial locality between primitives, so the primitive batching buffer only needs to be large enough to collect enough spatially-local primitives to fill up a few tiles, it doesn't need to contain an entire draw call. On my device it looks a bit like it's processing 8 tiles concurrently in each of the 13 SMs, and if each primitive is ~1 quad (2x2 px) in size then it needs to buffer ~512 primitives per SM to cover all its tiles, so a 64KB buffer should be enough for ~8 vec4 varyings per vertex (ignoring the other per-primitive state), which doesn't sound off by too many orders of magnitude.

(I'm sure my numbers (and possibly my theories) are completely bogus but hopefully they're sort of pointing in a plausible direction.)
< Previous Post in ThreadNext Post in Thread >
TopicPosted ByDate
Article: Tile-based Rasterization in Nvidia GPUsDavid Kanter2016/07/31 11:01 PM
  Article: Tile-based Rasterization in Nvidia GPUsBenjamin2016/08/01 01:22 AM
    GM, M = Maxwell, Tile = YesJohn H2016/08/01 04:59 AM
      GM, M = Maxwell, Tile = YesDavid Kanter2016/08/01 07:33 AM
        Updated articleDavid Kanter2016/08/01 07:35 AM
    Article: Tile-based Rasterization in Nvidia GPUsDavid Kanter2017/01/17 04:56 PM
      Optimus (d*mn, it isn't blue now)blue2017/01/19 05:34 PM
    Probably not in earlier MaxwellsDavid Kanter2017/01/17 04:56 PM
  Article: Tile-based Rasterization in Nvidia GPUsDan2016/08/01 02:12 AM
    Article: Tile-based Rasterization in Nvidia GPUsGionatan Danti2016/08/01 02:20 AM
      Article: Tile-based Rasterization in Nvidia GPUsSimon Farnsworth2016/08/01 03:00 AM
      Article: Tile-based Rasterization in Nvidia GPUsGiGNiC2016/08/01 03:30 AM
      Not deferred, still immediate-modeDavid Kanter2016/08/01 06:25 AM
        Not deferred, still immediate-modeRob Clark2016/08/01 08:44 AM
          Not deferred, still immediate-modeRob Clark2016/08/01 09:12 AM
            Not deferred, still immediate-modeSeni2016/08/01 11:25 AM
              Not deferred, still immediate-modeRob Clark2016/08/01 01:38 PM
              Not deferred, still immediate-modevvid2016/08/02 11:59 PM
            Not deferred, still immediate-modePhilip Taylor2016/08/01 03:55 PM
              Not deferred, still immediate-modeRob Clark2016/08/01 04:56 PM
                Not deferred, still immediate-modePhilip Taylor2016/08/01 06:33 PM
                  Not deferred, still immediate-modePhilip Taylor2016/08/02 03:46 PM
                    Not deferred, still immediate-modePhilip Taylor2016/08/03 12:36 PM
    Article: Tile-based Rasterization in Nvidia GPUsGabriele Svelto2016/08/01 05:48 AM
      Article: Tile-based Rasterization in Nvidia GPUsExophase2016/08/01 10:35 AM
        Article: Tile-based Rasterization in Nvidia GPUsGabriele Svelto2016/08/04 12:22 AM
  Article: Tile-based Rasterization in Nvidia GPUsGionatan Danti2016/08/01 02:16 AM
    Not deferred, still immediate-modeDavid Kanter2016/08/01 06:40 AM
  Article: Tile-based Rasterization in Nvidia GPUsJohn H2016/08/01 05:13 AM
    Article: Tile-based Rasterization in Nvidia GPUsAndrei Frumusanu2016/08/01 05:21 AM
      Article: Tile-based Rasterization in Nvidia GPUsblue2016/08/01 07:58 AM
        Article: Tile-based Rasterization in Nvidia GPUsAndrei Frumusanu2016/08/01 09:38 AM
          Article: Tile-based Rasterization in Nvidia GPUsblue2016/08/01 12:02 PM
  Article: Tile-based Rasterization in Nvidia GPUsKlimax2016/08/01 06:14 AM
    Article: Tile-based Rasterization in Nvidia GPUsAaron Spink2016/08/01 06:29 AM
  Everybody using tilesvvid2016/08/01 08:45 AM
    Everybody using tilesRob Clark2016/08/01 08:49 AM
      Everybody using tileswumpus2016/08/01 10:29 AM
        Everybody using tilesSimon Farnsworth2016/08/01 12:01 PM
          Everybody using tileswumpus2016/08/02 06:57 AM
            Everybody using tilesSimon Farnsworth2016/08/02 07:12 AM
  Testing MethodologyDavid2016/08/01 12:22 PM
    Testing MethodologyJoel H2016/08/01 12:57 PM
      Testing MethodologyDavid2016/08/01 03:09 PM
  Flicker?Wanderer2016/08/01 04:08 PM
    Flicker?Philip Taylor2016/08/01 04:30 PM
      Flicker?Beastian2016/08/01 08:33 PM
    Flicker?David Kanter2016/08/01 05:19 PM
      Flicker?Wanderer2016/08/02 06:14 AM
  Article: Tile-based Rasterization in Nvidia GPUsPM2016/08/01 05:39 PM
    Article: Tile-based Rasterization in Nvidia GPUsGiGNiC2016/08/02 11:03 AM
    GCN Imagesvvid2016/08/02 11:22 PM
      GCN ImagesVertexMaster2016/08/04 09:06 AM
        GCN Imagesvvid2016/08/04 10:30 AM
          GCN ImagesVertexMaster2016/08/04 03:38 PM
            GCN Imagesvvid2016/08/05 02:30 AM
              GCN ImagesVertexMaster2016/08/05 04:16 AM
                TBDRvvid2016/08/05 08:15 AM
                GCN1.2?vvid2016/08/07 03:33 AM
  Sorry, this is not a tile based renderer.Peter McGuinness2016/08/02 07:11 AM
    Render != RasterizeDavid Kanter2016/08/02 07:30 AM
      Render != RasterizePeter McGuinness2016/08/02 07:43 AM
        Render != RasterizeDavid Kanter2016/08/02 08:45 AM
          Render != RasterizePeter McGuinness2016/08/02 09:05 AM
            Render != RasterizePhilip Taylor2016/08/02 05:53 PM
              Render != RasterizePeter McGuinness2016/08/02 08:41 PM
                Render != RasterizePhilip Taylor2016/08/03 02:41 AM
                  Render != RasterizePeter McGuinness2016/08/04 11:34 AM
                    Render != RasterizePhilip Taylor2016/08/04 03:06 PM
                      Render != RasterizeMontaray Jack2016/08/05 01:26 PM
                        Render != RasterizeJouni Osmala2016/08/05 10:49 PM
                          Render != RasterizeMegol2016/08/06 02:30 AM
                            Render != RasterizeJouni Osmala2016/08/06 08:08 AM
                              Scratching that itchMontaray Jack2016/08/06 09:42 AM
                            Render != RasterizeMontaray Jack2016/08/06 09:08 AM
  Article: Tile-based Rasterization in Nvidia GPUsDoug Patel2016/08/02 08:39 AM
  Article: Tile-based Rasterization in Nvidia GPUsMontaray Jack2016/08/02 09:35 AM
    Article: Tile-based Rasterization in Nvidia GPUsdglow2016/08/02 04:08 PM
      Article: Tile-based Rasterization in Nvidia GPUsMontaray Jack2016/08/03 03:43 AM
        Article: Tile-based Rasterization in Nvidia GPUsdglow2016/08/03 06:04 AM
          Article: Tile-based Rasterization in Nvidia GPUsmarees2016/08/03 11:46 AM
      Article: Tile-based Rasterization in Nvidia GPUsDavid Kanter2016/08/04 07:03 AM
        Article: Tile-based Rasterization in Nvidia GPUsMontaray Jack2016/08/04 10:47 AM
    Oh god, the spambots have finally found us (NT)Anon2017/01/17 04:27 AM
      Delete the messages ASAPGtoo2017/01/17 02:19 PM
  Article: Tile-based Rasterization in Nvidia GPUssteve m2017/05/10 04:16 PM
    Article: Tile-based Rasterization in Nvidia GPUsGabriele Svelto2017/05/10 06:15 PM
      Article: Tile-based Rasterization in Nvidia GPUssteve m2017/05/11 09:11 AM
        Article: Tile-based Rasterization in Nvidia GPUsGabriele Svelto2017/05/12 01:15 AM
          Article: Tile-based Rasterization in Nvidia GPUssteve m2017/05/16 10:49 AM
            Article: Tile-based Rasterization in Nvidia GPUsGabriele Svelto2017/05/17 04:43 AM
              Article: Tile-based Rasterization in Nvidia GPUssteve m2017/05/17 07:35 PM
                Article: Tile-based Rasterization in Nvidia GPUspocak2017/05/18 03:19 PM
                  Article: Tile-based Rasterization in Nvidia GPUsDavid Kanter2017/05/20 06:55 AM
Reply to this Topic
Name:
Email:
Topic:
Body: No Text
How do you spell green?