[Mesa-dev] [PATCH 03/16] spirv/nir: Properly handle gather components

Jason Ekstrand jason at jlekstrand.net
Fri Jul 22 04:21:45 UTC 2016


Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
Cc: "12.0" <mesa-dev at lists.freedesktop.org>
---
 src/compiler/spirv/spirv_to_nir.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index c32dfaa..b1bb48b 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -1368,14 +1368,23 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
       break;
    }
 
-   /* These all have an explicit depth value as their next source */
+   unsigned gather_component = 0;
    switch (opcode) {
    case SpvOpImageSampleDrefImplicitLod:
    case SpvOpImageSampleDrefExplicitLod:
    case SpvOpImageSampleProjDrefImplicitLod:
    case SpvOpImageSampleProjDrefExplicitLod:
+   case SpvOpImageDrefGather:
+      /* These all have an explicit depth value as their next source */
       (*p++) = vtn_tex_src(b, w[idx++], nir_tex_src_comparitor);
       break;
+
+   case SpvOpImageGather:
+      /* This has a component as its next source */
+      gather_component =
+         vtn_value(b, w[idx++], vtn_value_type_constant)->constant->value.u[0];
+      break;
+
    default:
       break;
    }
@@ -1481,6 +1490,7 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode,
    instr->is_shadow = glsl_sampler_type_is_shadow(image_type);
    instr->is_new_style_shadow = instr->is_shadow &&
                                 glsl_get_components(ret_type->type) == 1;
+   instr->component = gather_component;
 
    if (has_coord) {
       switch (instr->sampler_dim) {
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list