Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


#Actualphil_t

Posted 21 January 2013 - 01:21 PM

The backbuffer can be thought of as just another render target. In that, I mean that it doesn't take up any space in EDRAM if you've currently set another render target to be active. EDRAM is just used for the render target that is currently active. So all you need to do to determine if tiling is triggered is to calculate how much memory your render target + depth buffer requires.

 

So, for a 1280x720 Color render target with a depth/stencil buffer, you have: (1280*720 * 4) + (1280 * 720 * 4) = 7372800 bytes = 7.03MB. So that fits comfortably in EDRAM (NightCreature83's calculation is incorrect - a Color render target is 4 bytes per pixel, not 24).  If you're using multiple render targets (say for deferred rendering), then 2 of those plus a depth buffer gives you 10.54MB, which means you'll end up tiling.

 

FWIW, I've rarely noticed any performance degradation from tiling. I'm sure it could happen if your performance bottleneck is vertex processing, but I think in most cases it's not a big deal.

 

Note that you can also visually see the tiling if you write a shader that uses the VPOS semantic. VPOS, which gives the current pixel position, "resets" for each tile. So you can write a test shader that can show exactly where the tile boundaries are.


#1phil_t

Posted 21 January 2013 - 01:12 PM

The backbuffer can be thought of as just another render target. In that, I mean that it doesn't take up any space in EDRAM if you've currently set another render target to be active. EDRAM is just used for the render target that is currently active. So all you need to do to determine if tiling is triggered is to calculate how much memory your render target + depth buffer requires.

 

So, for a 1280x720 Color render target with a depth/stencil buffer, you have: (1280*720 * 4) + (1280 * 720 * 4) = 7372800 bytes = 7.03MB. So that fits comfortably in EDRAM (NightCreature83's calculation is incorrect).  If you're using multiple render targets (say for deferred rendering), then 2 of those plus a depth buffer gives you 10.54MB, which means you'll end up tiling.

 

FWIW, I've rarely noticed any performance degradation from tiling. I'm sure it could happen if your performance bottleneck is vertex processing, but I think in most cases it's not a big deal.

 

Note that you can also visually see the tiling if you write a shader that uses the VPOS semantic. VPOS, which gives the current pixel position, "resets" for each tile. So you can write a test shader that can show exactly where the tile boundaries are.


PARTNERS