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

Jason Ekstrand jason at jlekstrand.net
Mon Nov 21 05:12:39 UTC 2016


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_
> stencil8_sample_stencil.nearest_size_pot
> ES31-CTS.functional.texture.border_clamp.formats.depth24_
> stencil8_sample_stencil.nearest_size_npot
> ES31-CTS.functional.texture.border_clamp.formats.depth32f_
> stencil8_sample_stencil.nearest_size_pot
> ES31-CTS.functional.texture.border_clamp.formats.depth32f_
> stencil8_sample_stencil.nearest_size_npot
> ES31-CTS.functional.texture.border_clamp.unused_channels.
> depth24_stencil8_sample_stencil
> ES31-CTS.functional.texture.border_clamp.unused_channels.
> depth32f_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_
> COLOR,
>                                        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);
>
>        /* 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/3213dea1/attachment.html>


More information about the mesa-dev mailing list