[Mesa-dev] [PATCH 1/3] compiler: Track which textures are accessed via texelFetch().
Nicolai Hähnle
nhaehnle at gmail.com
Thu Oct 12 06:20:35 UTC 2017
On 11.10.2017 21:15, Kenneth Graunke wrote:
> GL_EXT_texture_sRGB_decode requires us to handle sRGB decoding
> in an inconsistent manner when textures are accessed via texelFetch().
>
> So, we need to track which textures are accessed via texelFetch().
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
> ---
> src/compiler/nir/nir_gather_info.c | 14 +++++++++++++-
> src/compiler/shader_info.h | 3 +++
> 2 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c
> index ac87bec46c0..f46cee7aa5e 100644
> --- a/src/compiler/nir/nir_gather_info.c
> +++ b/src/compiler/nir/nir_gather_info.c
> @@ -264,8 +264,20 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader)
> static void
> gather_tex_info(nir_tex_instr *instr, nir_shader *shader)
> {
> - if (instr->op == nir_texop_tg4)
> + switch (instr->op) {
> + case nir_texop_tg4:
> shader->info.uses_texture_gather = true;
> + break;
> + case nir_texop_txf:
> + case nir_texop_txf_ms:
> + case nir_texop_txf_ms_mcs:
> + shader->info.textures_used_by_txf |=
> + ((1 << MAX2(instr->texture_array_size, 1)) - 1) <<
> + instr->texture_index;
> + break;
> + default:
> + break;
> + }
> }
>
> static void
> diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h
> index 38413940d67..cd044d86094 100644
> --- a/src/compiler/shader_info.h
> +++ b/src/compiler/shader_info.h
> @@ -70,6 +70,9 @@ typedef struct shader_info {
> /* Whether or not this shader ever uses textureGather() */
> bool uses_texture_gather;
>
> + /** Bitfield of which textures are used by texelFetch() */
> + uint32_t textures_used_by_txf;
> +
> /* The size of the gl_ClipDistance[] array, if declared. */
> unsigned clip_distance_array_size;
>
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list