[Mesa-dev] [PATCH] i965/hsw: Set integer mode in sampling state for stencil texturing

Jason Ekstrand jason at jlekstrand.net
Mon Nov 21 05:15:24 UTC 2016


On Sun, Nov 20, 2016 at 9:12 PM, Jason Ekstrand <jason at jlekstrand.net>
wrote:

> On Sun, Nov 20, 2016 at 8:03 PM, Jordan Justen <jordan.l.justen at intel.com>
> wrote:
>
>> Fixes:
>>
>> ES31-CTS.functional.texture.border_clamp.formats.depth24_ste
>> ncil8_sample_stencil.nearest_size_pot
>> ES31-CTS.functional.texture.border_clamp.formats.depth24_ste
>> ncil8_sample_stencil.nearest_size_npot
>> ES31-CTS.functional.texture.border_clamp.formats.depth32f_st
>> encil8_sample_stencil.nearest_size_pot
>> ES31-CTS.functional.texture.border_clamp.formats.depth32f_st
>> encil8_sample_stencil.nearest_size_npot
>> ES31-CTS.functional.texture.border_clamp.unused_channels.dep
>> th24_stencil8_sample_stencil
>> ES31-CTS.functional.texture.border_clamp.unused_channels.dep
>> th32f_stencil8_sample_stencil
>>
>> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
>> ---
>>  src/mesa/drivers/dri/i965/brw_sampler_state.c | 18 +++++++++---------
>>  src/mesa/drivers/dri/i965/brw_state.h         |  9 ---------
>>  2 files changed, 9 insertions(+), 18 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_sampler_state.c
>> b/src/mesa/drivers/dri/i965/brw_sampler_state.c
>> index 7df2c55..412efb9 100644
>> --- a/src/mesa/drivers/dri/i965/brw_sampler_state.c
>> +++ b/src/mesa/drivers/dri/i965/brw_sampler_state.c
>> @@ -213,7 +213,7 @@ static void
>>  upload_default_color(struct brw_context *brw,
>>                       const struct gl_sampler_object *sampler,
>>                       mesa_format format, GLenum base_format,
>> -                     bool is_integer_format,
>> +                     bool is_integer_format, bool is_stencil_sampling,
>>                       uint32_t *sdc_offset)
>>  {
>>     union gl_color_union color;
>> @@ -277,7 +277,7 @@ upload_default_color(struct brw_context *brw,
>>        uint32_t *sdc = brw_state_batch(brw, AUB_TRACE_SAMPLER_DEFAULT_COLO
>> R,
>>                                        4 * 4, 64, sdc_offset);
>>        memcpy(sdc, color.ui, 4 * 4);
>> -   } else if (brw->is_haswell && is_integer_format) {
>> +   } else if (brw->is_haswell && (is_integer_format ||
>> is_stencil_sampling)) {
>>        /* Haswell's integer border color support is completely insane:
>>         * SAMPLER_BORDER_COLOR_STATE is 20 DWords.  The first four are
>>         * for float colors.  The next 12 DWords are MBZ and only exist to
>> @@ -291,10 +291,9 @@ upload_default_color(struct brw_context *brw,
>>        memset(sdc, 0, 20 * 4);
>>        sdc = &sdc[16];
>>
>> +      bool stencil = format == MESA_FORMAT_S_UINT8 ||
>> is_stencil_sampling;
>>        const int bits_per_channel =
>> -         _mesa_get_format_bits(format,
>> -                               format == MESA_FORMAT_S_UINT8 ?
>> -                               GL_STENCIL_BITS : GL_RED_BITS);
>> +         _mesa_get_format_bits(format, stencil ? GL_STENCIL_BITS :
>> GL_RED_BITS);
>>
>
I guess my suggestion could cause problems here.  When we're stencil
sampling, does the format come in as anything other than S_UINT8?  Do we
ever get combined dept-stencil formats in here?


>
>>        /* From the Haswell PRM, "Command Reference: Structures", Page 36:
>>         * "If any color channel is missing from the surface format,
>> @@ -389,12 +388,13 @@ upload_default_color(struct brw_context *brw,
>>   * Sets the sampler state for a single unit based off of the sampler key
>>   * entry.
>>   */
>> -void
>> +static void
>>  brw_update_sampler_state(struct brw_context *brw,
>>                           GLenum target, bool tex_cube_map_seamless,
>>                           GLfloat tex_unit_lod_bias,
>>                           mesa_format format, GLenum base_format,
>>                           bool is_integer_format,
>> +                         bool is_stencil_sampling,
>>
>
> Doesn't is_stencil_sampling imply is_integer_format?  I mean, stencil is
> always R8_UINT, right?
>
>
>>                           const struct gl_sampler_object *sampler,
>>                           uint32_t *sampler_state,
>>                           uint32_t batch_offset_for_sampler_state)
>> @@ -516,8 +516,8 @@ brw_update_sampler_state(struct brw_context *brw,
>>     if (wrap_mode_needs_border_color(wrap_s) ||
>>         wrap_mode_needs_border_color(wrap_t) ||
>>         wrap_mode_needs_border_color(wrap_r)) {
>> -      upload_default_color(brw, sampler,
>> -                           format, base_format, is_integer_format,
>> +      upload_default_color(brw, sampler, format, base_format,
>> +                           is_integer_format, is_stencil_sampling,
>>                             &border_color_offset);
>>     }
>>
>> @@ -555,7 +555,7 @@ update_sampler_state(struct brw_context *brw,
>>     brw_update_sampler_state(brw, texObj->Target,
>> ctx->Texture.CubeMapSeamless,
>>                              texUnit->LodBias,
>>                              firstImage->TexFormat,
>> firstImage->_BaseFormat,
>> -                            texObj->_IsIntegerFormat,
>> +                            texObj->_IsIntegerFormat,
>> texObj->StencilSampling,
>>
>
> In other words, you could just make that comma a pipe and call it a day.
>
>
>>                              sampler,
>>                              sampler_state, batch_offset_for_sampler_state
>> );
>>  }
>> diff --git a/src/mesa/drivers/dri/i965/brw_state.h
>> b/src/mesa/drivers/dri/i965/brw_state.h
>> index 07126e8..176557b 100644
>> --- a/src/mesa/drivers/dri/i965/brw_state.h
>> +++ b/src/mesa/drivers/dri/i965/brw_state.h
>> @@ -335,15 +335,6 @@ void brw_emit_sampler_state(struct brw_context *brw,
>>                              bool non_normalized_coordinates,
>>                              uint32_t border_color_offset);
>>
>> -void brw_update_sampler_state(struct brw_context *brw,
>> -                              GLenum target, bool tex_cube_map_seamless,
>> -                              GLfloat tex_unit_lod_bias,
>> -                              mesa_format format, GLenum base_format,
>> -                              bool is_integer_format,
>> -                              const struct gl_sampler_object *sampler,
>> -                              uint32_t *sampler_state,
>> -                              uint32_t batch_offset_for_sampler_state);
>> -
>>  /* gen6_wm_state.c */
>>  void
>>  gen6_upload_wm_state(struct brw_context *brw,
>> --
>> 2.10.2
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161120/9f219ddf/attachment-0001.html>


More information about the mesa-dev mailing list