Mesa (master): spirv/nir: Properly handle gather components

Jason Ekstrand jekstrand at kemper.freedesktop.org
Fri Jul 22 23:20:51 UTC 2016


Module: Mesa
Branch: master
Commit: 95e9d58bdb7df402d9035842c3fe76234a14c2da
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=95e9d58bdb7df402d9035842c3fe76234a14c2da

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Wed Jul 20 19:56:45 2016 -0700

spirv/nir: Properly handle gather components

Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
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) {




More information about the mesa-commit mailing list