[Mesa-dev] [PATCH] i965: Set the fast clear color value for texture surfaces
Chris Forbes
chrisf at ijw.co.nz
Tue Jun 10 12:50:07 PDT 2014
Reviewed-by: Chris Forbes <chrisf at ijw.co.nz>
On Wed, Jun 11, 2014 at 6:51 AM, Ian Romanick <idr at freedesktop.org> wrote:
> 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) |
>>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list