[Mesa-dev] [PATCH] i965: Set the fast clear color value for texture surfaces

Ian Romanick idr at freedesktop.org
Tue Jun 10 11:51:55 PDT 2014


On 06/09/2014 09:43 AM, Neil Roberts wrote:
> When a multisampled texture is used for sampling the fast clear color value
> needs to be programmed into the surface state. This was being left as all
> zeroes so if the surface was cleared to a value other than black then it
> wouldn't work properly. This doesn't matter for single-sample textures because
> in that case the MCS buffer is resolved before it is used as a texture source.
> 
> https://bugs.freedesktop.org/show_bug.cgi?id=79729

This sounds believable.  We should get a R-b from one of the guys more
familiar with the backend, but, FWIW,

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
Cc: "10.1 10.2" <mesa-stable at lists.freedesktop.org>

I expect this bug is reproducible on both 10.1.x and 10.2...

> ---
>  src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 4 +++-
>  src/mesa/drivers/dri/i965/gen8_surface_state.c    | 4 +++-
>  2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> index b31f491..12cdc2b 100644
> --- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
> @@ -337,6 +337,8 @@ gen7_update_texture_surface(struct gl_context *ctx,
>                /* mip count */
>                (intelObj->_MaxLevel - tObj->BaseLevel));
>  
> +   surf[7] = mt->fast_clear_color_value;
> +
>     if (brw->is_haswell) {
>        /* Handling GL_ALPHA as a surface format override breaks 1.30+ style
>         * texturing functions that return a float, as our code generation always
> @@ -351,7 +353,7 @@ gen7_update_texture_surface(struct gl_context *ctx,
>  
>        const bool need_scs_green_to_blue = for_gather && tex_format == BRW_SURFACEFORMAT_R32G32_FLOAT_LD;
>  
> -      surf[7] =
> +      surf[7] |=
>           SET_FIELD(brw_swizzle_to_scs(GET_SWZ(swizzle, 0), need_scs_green_to_blue), GEN7_SURFACE_SCS_R) |
>           SET_FIELD(brw_swizzle_to_scs(GET_SWZ(swizzle, 1), need_scs_green_to_blue), GEN7_SURFACE_SCS_G) |
>           SET_FIELD(brw_swizzle_to_scs(GET_SWZ(swizzle, 2), need_scs_green_to_blue), GEN7_SURFACE_SCS_B) |
> diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c b/src/mesa/drivers/dri/i965/gen8_surface_state.c
> index 406f68e..80ac4f3 100644
> --- a/src/mesa/drivers/dri/i965/gen8_surface_state.c
> +++ b/src/mesa/drivers/dri/i965/gen8_surface_state.c
> @@ -207,9 +207,11 @@ gen8_update_texture_surface(struct gl_context *ctx,
>        (firstImage->_BaseFormat == GL_DEPTH_COMPONENT ||
>         firstImage->_BaseFormat == GL_DEPTH_STENCIL);
>  
> +   surf[7] = mt->fast_clear_color_value;
> +
>     const int swizzle =
>        unlikely(alpha_depth) ? SWIZZLE_XYZW : brw_get_texture_swizzle(ctx, tObj);
> -   surf[7] =
> +   surf[7] |=
>        SET_FIELD(brw_swizzle_to_scs(GET_SWZ(swizzle, 0), false), GEN7_SURFACE_SCS_R) |
>        SET_FIELD(brw_swizzle_to_scs(GET_SWZ(swizzle, 1), false), GEN7_SURFACE_SCS_G) |
>        SET_FIELD(brw_swizzle_to_scs(GET_SWZ(swizzle, 2), false), GEN7_SURFACE_SCS_B) |
> 



More information about the mesa-dev mailing list