[Mesa-dev] [PATCH] i965/gen5: Fix rendering of depth buffers without stencil

Kenneth Graunke kenneth at whitecape.org
Tue Jan 17 17:10:54 PST 2012


On 01/17/2012 04:03 PM, Chad Versace wrote:
> Fixes the following OGLConform tests on gen5:
>      depth-stencil(misc.state_on.depth_int)
>      fbo_db_ARBfp(basic.OnlyDepthBuffDrawBufferRender)
>
> The problem was that, if the depth buffer's Mesa format was X8_Z24, then
> we emitted the hardware format D24_UNORM_X8. But, on gen5, D24_UNORM_S8
> must be emitted.
>
> This bug was introduced by:
>      commit d84a180417d1eabd680554970f1eaaa93abcd41e
>      Author: Eric Anholt<eric at anholt.net>
>      i965: Base HW depth format setup based on MESA_FORMAT, not bpp.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=43408
> Reported-by: xunx.fang at intel.com
> Note: This is a candidate for the 8.0 branch.
> Signed-off-by: Chad Versace<chad.versace at linux.intel.com>
> ---
>   src/mesa/drivers/dri/i965/brw_misc_state.c |   16 +++++++++++++---
>   1 files changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
> index b6bca4b..852c770 100644
> --- a/src/mesa/drivers/dri/i965/brw_misc_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
> @@ -223,10 +223,20 @@ brw_depthbuffer_format(struct brw_context *brw)
>      case MESA_FORMAT_Z32_FLOAT:
>         return BRW_DEPTHFORMAT_D32_FLOAT;
>      case MESA_FORMAT_X8_Z24:
> -      if (intel->gen>= 5)
> -	 return BRW_DEPTHFORMAT_D24_UNORM_X8_UINT;
> -      else /* Gen4 doesn't support X8; use S8 instead. */
> +      if (brw->intel.gen<  6) {

Please just use intel->gen here (like the existing code).  I'd also be 
inclined to format this as:

       if (intel->gen >= 6)
          return BRW_DEPTHFORMAT_D24_UNORM_X8_UINT;

       /* comment...
        */
       return BRW_DEPTHFORMAT_D24_UNORM_S8_UINT;

so the forward looking code is at the top.  But that's bike-shedding, 
and I don't really care.  You can also include "From the Ironlake PRM, 
Volume 2, Part 1, page 326:" if you wish.

Assuming you make the brw.intel->gen => intel->gen change:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

Thanks for fixing this.  I totally missed that text.

> +	 /* Use D24_UNORM_S8, not D24_UNORM_X8.
> +	  *
> +	  * D24_UNORM_X8 was not introduced until Gen5 (See field
> +	  * 3DSTATE_DEPTH_BUFFER.Surface_Format in the PRM).
> +	  *
> +	  * However, on Gen5, D24_UNORM_X8 may be used only if separate
> +	  * stencil is enabled, and we never enable it.  (See field
> +	  * 3DSTATE_DEPTH_BUFFER.Separate_Stencil_Buffer_Enable),
> +	  */
>   	 return BRW_DEPTHFORMAT_D24_UNORM_S8_UINT;
> +      } else {
> +	 return BRW_DEPTHFORMAT_D24_UNORM_X8_UINT;
> +      }
>      case MESA_FORMAT_S8_Z24:
>         return BRW_DEPTHFORMAT_D24_UNORM_S8_UINT;
>      case MESA_FORMAT_Z32_FLOAT_X24S8:


More information about the mesa-dev mailing list