spirv: Add a switch statement for the block store opcode
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 18 Oct 2017 23:36:04 +0000 (16:36 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 6 Dec 2017 04:55:39 +0000 (20:55 -0800)
This parallels what we do for vtn_block_load except that we don't yet
support anything except SSBO loads through this path.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
src/compiler/spirv/vtn_variables.c

index 08428a2823fcf56ad67898a3c4d735f32d764ef4..49d9d39962530efab2a9d4fff4d892b3eb8de489 100644 (file)
@@ -850,11 +850,20 @@ static void
 vtn_block_store(struct vtn_builder *b, struct vtn_ssa_value *src,
                 struct vtn_pointer *dst)
 {
+   nir_intrinsic_op op;
+   switch (dst->mode) {
+   case vtn_variable_mode_ssbo:
+      op = nir_intrinsic_store_ssbo;
+      break;
+   default:
+      vtn_fail("Invalid block variable mode");
+   }
+
    nir_ssa_def *offset, *index = NULL;
    unsigned chain_idx;
    offset = vtn_pointer_to_offset(b, dst, &index, &chain_idx);
 
-   _vtn_block_load_store(b, nir_intrinsic_store_ssbo, false, index, offset,
+   _vtn_block_load_store(b, op, false, index, offset,
                          0, 0, dst->chain, chain_idx, dst->type, &src);
 }