[Mesa-dev] [PATCH] i915g: Fix depth/stencil glClear

Daniel Vetter daniel at ffwll.ch
Sun Jun 10 04:20:36 PDT 2012


On Sun, Jun 10, 2012 at 01:49:30AM +0200, Michael Karcher wrote:
> This patch fixes a copy/paste error and masking of depth/stencil (stencil
> is in the top 8 bits), and makes glean/readPixSanity happy.
> 
> Both the stencil and the depth buffer piglit test also pass if
> glClear(DEPTH | STENCIL) is executed instead of
> glClear(DEPTH)/glClear(STENCIL).

Woot, nice catch - iirc this problem elluded me for about a year, i.e.
since I've enabled hw clears.

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

Do you have commit access or should I do that?

Yours, Daniel
> ---
>  src/gallium/drivers/i915/i915_clear.c |   11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/src/gallium/drivers/i915/i915_clear.c b/src/gallium/drivers/i915/i915_clear.c
> index d6e6f56..30a3926 100644
> --- a/src/gallium/drivers/i915/i915_clear.c
> +++ b/src/gallium/drivers/i915/i915_clear.c
> @@ -95,17 +95,16 @@ i915_clear_emit(struct pipe_context *pipe, unsigned buffers,
>           if (buffers & PIPE_CLEAR_STENCIL
>                 || depth_tex->b.b.format != PIPE_FORMAT_Z24_UNORM_S8_UINT) {
>              clear_params |= CLEARPARAM_WRITE_STENCIL;
> -            clear_stencil = packed_z_stencil & 0xff;
> -            clear_depth = packed_z_stencil;
> -         } else
> -            clear_depth = packed_z_stencil & 0xffffff00;
> +            clear_stencil = packed_z_stencil >> 24;
> +         }
>  
> +         clear_depth = packed_z_stencil & 0xffffff;
>           depth_clear_bbp = 32;
>        } else {
>           clear_depth = (packed_z_stencil & 0xffff) | (packed_z_stencil << 16);
>           depth_clear_bbp = 16;
>        }
> -   } else if (buffers & PIPE_CLEAR_DEPTH) {
> +   } else if (buffers & PIPE_CLEAR_STENCIL) {
>        struct pipe_surface *zbuf = i915->framebuffer.zsbuf;
>  
>        clear_params |= CLEARPARAM_WRITE_STENCIL;
> @@ -114,7 +113,7 @@ i915_clear_emit(struct pipe_context *pipe, unsigned buffers,
>  
>        packed_z_stencil = util_pack_z_stencil(depth_tex->b.b.format, depth, stencil);
>        depth_clear_bbp = 32;
> -      clear_stencil = packed_z_stencil & 0xff;
> +      clear_stencil = packed_z_stencil >> 24;
>     }
>  
>     /* hw can't fastclear both depth and color if their bbp mismatch. */
> -- 
> 1.7.10
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

-- 
Daniel Vetter
Mail: daniel at ffwll.ch
Mobile: +41 (0)79 365 57 48


More information about the mesa-dev mailing list