[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