Mesa (master): spirv/vtn: handle variable pointers without offset lowering

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 19 19:39:17 UTC 2018


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Jul  4 16:21:49 2018 +1000

spirv/vtn: handle variable pointers without offset lowering

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/compiler/spirv/spirv_to_nir.c  | 15 ++++++++-------
 src/compiler/spirv/vtn_variables.c |  3 ++-
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index 4fa02b6fd7..a05c4d236c 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -1224,17 +1224,18 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,
          val->type->type = glsl_uint_type();
       }
 
-      if (storage_class == SpvStorageClassWorkgroup &&
-          b->options->lower_workgroup_access_to_offsets) {
-         uint32_t size, align;
-         val->type->deref = vtn_type_layout_std430(b, val->type->deref,
-                                                   &size, &align);
-         val->type->length = size;
-         val->type->align = align;
+      if (storage_class == SpvStorageClassWorkgroup) {
          /* These can actually be stored to nir_variables and used as SSA
           * values so they need a real glsl_type.
           */
          val->type->type = glsl_uint_type();
+         if (b->options->lower_workgroup_access_to_offsets) {
+            uint32_t size, align;
+            val->type->deref = vtn_type_layout_std430(b, val->type->deref,
+                                                      &size, &align);
+            val->type->length = size;
+            val->type->align = align;
+         }
       }
       break;
    }
diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c
index 53f52255dc..55721fc36e 100644
--- a/src/compiler/spirv/vtn_variables.c
+++ b/src/compiler/spirv/vtn_variables.c
@@ -1650,7 +1650,8 @@ vtn_pointer_from_ssa(struct vtn_builder *b, nir_ssa_def *ssa,
       vtn_assert(ssa->num_components == 2);
       ptr->block_index = nir_channel(&b->nb, ssa, 0);
       ptr->offset = nir_channel(&b->nb, ssa, 1);
-   } else if (ptr->mode == vtn_variable_mode_workgroup ||
+   } else if ((ptr->mode == vtn_variable_mode_workgroup &&
+               b->options->lower_workgroup_access_to_offsets) ||
               ptr->mode == vtn_variable_mode_push_constant) {
       /* This pointer type needs to have actual storage */
       vtn_assert(ptr_type->type);




More information about the mesa-commit mailing list