[Mesa-dev] [PATCH 09/18] nir/spirv: Remove unneeded parameters from pointer_to_offset

Jason Ekstrand jason at jlekstrand.net
Thu Jun 29 17:33:31 UTC 2017


Everyone now calls it with stop_at_matrix = false.  Since we're now
always walking all the way to the end of the access chain, the type
returned is just the same as ptr->type;
---
 src/compiler/spirv/spirv_to_nir.c  |  3 +--
 src/compiler/spirv/vtn_private.h   |  3 +--
 src/compiler/spirv/vtn_variables.c | 21 ++++++---------------
 3 files changed, 8 insertions(+), 19 deletions(-)

diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index 72a8904..3d9ef76 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -2173,8 +2173,7 @@ vtn_handle_ssbo_or_shared_atomic(struct vtn_builder *b, SpvOp opcode,
    } else {
       assert(ptr->mode == vtn_variable_mode_ssbo);
       nir_ssa_def *offset, *index;
-      struct vtn_type *type;
-      offset = vtn_pointer_to_offset(b, ptr, &index, &type, NULL, false);
+      offset = vtn_pointer_to_offset(b, ptr, &index, NULL);
 
       nir_intrinsic_op op = get_ssbo_nir_atomic_op(opcode);
 
diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h
index d5963f2..fb2d669 100644
--- a/src/compiler/spirv/vtn_private.h
+++ b/src/compiler/spirv/vtn_private.h
@@ -476,8 +476,7 @@ nir_deref_var *vtn_pointer_to_deref(struct vtn_builder *b,
                                     struct vtn_pointer *ptr);
 nir_ssa_def *
 vtn_pointer_to_offset(struct vtn_builder *b, struct vtn_pointer *ptr,
-                      nir_ssa_def **index_out, struct vtn_type **type_out,
-                      unsigned *end_idx_out, bool stop_at_matrix);
+                      nir_ssa_def **index_out, unsigned *end_idx_out);
 
 struct vtn_ssa_value *vtn_local_load(struct vtn_builder *b, nir_deref_var *src);
 
diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c
index 480bc36..7821663 100644
--- a/src/compiler/spirv/vtn_variables.c
+++ b/src/compiler/spirv/vtn_variables.c
@@ -327,8 +327,7 @@ get_vulkan_resource_index(struct vtn_builder *b, struct vtn_pointer *ptr,
 
 nir_ssa_def *
 vtn_pointer_to_offset(struct vtn_builder *b, struct vtn_pointer *ptr,
-                      nir_ssa_def **index_out, struct vtn_type **type_out,
-                      unsigned *end_idx_out, bool stop_at_matrix)
+                      nir_ssa_def **index_out, unsigned *end_idx_out)
 {
    unsigned idx = 0;
    struct vtn_type *type;
@@ -345,11 +344,6 @@ vtn_pointer_to_offset(struct vtn_builder *b, struct vtn_pointer *ptr,
       case GLSL_TYPE_FLOAT:
       case GLSL_TYPE_DOUBLE:
       case GLSL_TYPE_BOOL:
-         /* Some users may not want matrix or vector derefs */
-         if (stop_at_matrix)
-            goto end;
-         /* Fall through */
-
       case GLSL_TYPE_ARRAY:
          offset = nir_iadd(&b->nb, offset,
                            vtn_access_link_as_ssa(b, ptr->chain->link[idx],
@@ -372,8 +366,7 @@ vtn_pointer_to_offset(struct vtn_builder *b, struct vtn_pointer *ptr,
       }
    }
 
-end:
-   *type_out = type;
+   assert(type == ptr->type);
    if (end_idx_out)
       *end_idx_out = idx;
 
@@ -658,13 +651,12 @@ vtn_block_load(struct vtn_builder *b, struct vtn_pointer *src)
 
    nir_ssa_def *offset, *index = NULL;
    unsigned chain_idx;
-   struct vtn_type *type;
-   offset = vtn_pointer_to_offset(b, src, &index, &type, &chain_idx, false);
+   offset = vtn_pointer_to_offset(b, src, &index, &chain_idx);
 
    struct vtn_ssa_value *value = NULL;
    _vtn_block_load_store(b, op, true, index, offset,
                          access_offset, access_size,
-                         src->chain, chain_idx, type, &value);
+                         src->chain, chain_idx, src->type, &value);
    return value;
 }
 
@@ -674,11 +666,10 @@ vtn_block_store(struct vtn_builder *b, struct vtn_ssa_value *src,
 {
    nir_ssa_def *offset, *index = NULL;
    unsigned chain_idx;
-   struct vtn_type *type;
-   offset = vtn_pointer_to_offset(b, dst, &index, &type, &chain_idx, false);
+   offset = vtn_pointer_to_offset(b, dst, &index, &chain_idx);
 
    _vtn_block_load_store(b, nir_intrinsic_store_ssbo, false, index, offset,
-                         0, 0, dst->chain, chain_idx, type, &src);
+                         0, 0, dst->chain, chain_idx, dst->type, &src);
 }
 
 static bool
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list