[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