Module: Mesa
Branch: main
Commit: 6aeb93d5551947720c896a1a79d1cb330d05ebde
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6aeb93d5551947720c896a1a79d1cb330d05ebde

Author: Erik Faye-Lund <[email protected]>
Date:   Mon Jul 25 14:46:47 2022 +0200

zink: more accurately set {Sampled,Image}1D caps

We don't really need to set this for every shader that uses textures,
only the ones that use 1D textures.

Reviewed-by: Mike Blumenkrantz <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17734>

---

 src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c 
b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
index 4e1203d3f6d..bf1eda42534 100644
--- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
+++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c
@@ -871,6 +871,13 @@ get_bare_image_type(struct ntv_context *ctx, struct 
nir_variable *var, bool is_s
    }
 
    SpvDim dimension = type_to_dim(glsl_get_sampler_dim(type), &is_ms);
+   if (dimension == SpvDim1D) {
+      if (is_sampler)
+         spirv_builder_emit_cap(&ctx->builder, SpvCapabilitySampled1D);
+      else
+         spirv_builder_emit_cap(&ctx->builder, SpvCapabilityImage1D);
+   }
+
    bool arrayed = glsl_sampler_type_is_array(type);
    if (dimension == SpvDimCube && arrayed)
       spirv_builder_emit_cap(&ctx->builder, SpvCapabilityImageCubeArray);
@@ -4180,15 +4187,11 @@ nir_to_spirv(struct nir_shader *s, const struct 
zink_shader_info *sinfo, uint32_
          spirv_builder_emit_cap(&ctx.builder, SpvCapabilityMultiViewport);
    }
 
-   if (s->info.num_textures) {
-      spirv_builder_emit_cap(&ctx.builder, SpvCapabilitySampled1D);
+   if (s->info.num_textures)
       spirv_builder_emit_cap(&ctx.builder, SpvCapabilityImageQuery);
-   }
 
-   if (s->info.num_images) {
-      spirv_builder_emit_cap(&ctx.builder, SpvCapabilityImage1D);
+   if (s->info.num_images)
       spirv_builder_emit_cap(&ctx.builder, SpvCapabilityImageQuery);
-   }
 
    ctx.stage = s->info.stage;
    ctx.sinfo = sinfo;

Reply via email to