Acked-by: Edward O'Callaghan <funfunc...@folklore1984.net>

On 01/18/2017 07:32 PM, Nicolai Hähnle wrote:
> From: Nicolai Hähnle <nicolai.haeh...@amd.com>
> 
> At least on VI, texture gather doesn't work with a 24_8 data format, so
> use 8_8_8_8 and a modified swizzle instead.
> 
> A bit of background: When creating a GL_STENCIL_INDEX8 texture, we select
> the X24S8 pipe format because we don't support stencil-only render targets
> properly. With mip-mapping this can lead to a setup where the tiling is
> incompatible with stencil texturing, and a flushed stencil texture is
> used. For the flushed stencil, a literal X24S8 is used because there were
> issues with an 8bpp DB->CB copy.
> 
> Longer term, it would be good if we could get away from these workarounds,
> i.e. properly support an S8 format for stencil-only rendering and flushed
> stencil. Since stencil texturing is somewhat rare, it's not a high
> priority.
> 
> Fixes GL45-CTS.texture_cube_map_array.sampling.
> ---
>  src/gallium/drivers/radeonsi/si_state.c | 18 ++++++++++++++++--
>  1 file changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeonsi/si_state.c 
> b/src/gallium/drivers/radeonsi/si_state.c
> index 865a75d..c1a6652 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -1363,11 +1363,17 @@ static uint32_t si_translate_texformat(struct 
> pipe_screen *screen,
>               case PIPE_FORMAT_Z16_UNORM:
>                       return V_008F14_IMG_DATA_FORMAT_16;
>               case PIPE_FORMAT_X24S8_UINT:
> +             case PIPE_FORMAT_S8X24_UINT:
> +                     /*
> +                      * Implemented as an 8_8_8_8 data format to fix texture
> +                      * gathers in stencil sampling. This affects at least
> +                      * GL45-CTS.texture_cube_map_array.sampling on VI.
> +                      */
> +                     return V_008F14_IMG_DATA_FORMAT_8_8_8_8;
>               case PIPE_FORMAT_Z24X8_UNORM:
>               case PIPE_FORMAT_Z24_UNORM_S8_UINT:
>                       return V_008F14_IMG_DATA_FORMAT_8_24;
>               case PIPE_FORMAT_X8Z24_UNORM:
> -             case PIPE_FORMAT_S8X24_UINT:
>               case PIPE_FORMAT_S8_UINT_Z24_UNORM:
>                       return V_008F14_IMG_DATA_FORMAT_24_8;
>               case PIPE_FORMAT_S8_UINT:
> @@ -2794,14 +2800,22 @@ si_make_texture_descriptor(struct si_screen *screen,
>       if (desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) {
>               const unsigned char swizzle_xxxx[4] = {0, 0, 0, 0};
>               const unsigned char swizzle_yyyy[4] = {1, 1, 1, 1};
> +             const unsigned char swizzle_wwww[4] = {3, 3, 3, 3};
>  
>               switch (pipe_format) {
>               case PIPE_FORMAT_S8_UINT_Z24_UNORM:
> -             case PIPE_FORMAT_X24S8_UINT:
>               case PIPE_FORMAT_X32_S8X24_UINT:
>               case PIPE_FORMAT_X8Z24_UNORM:
>                       util_format_compose_swizzles(swizzle_yyyy, 
> state_swizzle, swizzle);
>                       break;
> +             case PIPE_FORMAT_X24S8_UINT:
> +                     /*
> +                      * X24S8 is implemented as an 8_8_8_8 data format, to
> +                      * fix texture gathers. This affects at least
> +                      * GL45-CTS.texture_cube_map_array.sampling on VI.
> +                      */
> +                     util_format_compose_swizzles(swizzle_wwww, 
> state_swizzle, swizzle);
> +                     break;
>               default:
>                       util_format_compose_swizzles(swizzle_xxxx, 
> state_swizzle, swizzle);
>               }
> 

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to