spirv/cfg: Be a bit more precise about function parameters
authorJason Ekstrand <jason@jlekstrand.net>
Fri, 8 Dec 2017 07:42:14 +0000 (23:42 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 12 Dec 2017 15:34:46 +0000 (07:34 -0800)
Pointers with no storage type are converted to inout variables but SSA
values and pointers with a storage type (which turns into a uint or
uvec2) are just input variables.

src/compiler/spirv/vtn_cfg.c

index 8ddd0f4a40d54adfd16d82b27f2490e2f9f53db4..182251358c93b2784257a401e066414b9985400a 100644 (file)
@@ -55,12 +55,11 @@ vtn_cfg_handle_prepass_instruction(struct vtn_builder *b, SpvOp opcode,
          if (func_type->params[i]->base_type == vtn_base_type_pointer &&
              func_type->params[i]->type == NULL) {
             func->params[i].type = func_type->params[i]->deref->type;
+            func->params[i].param_type = nir_parameter_inout;
          } else {
             func->params[i].type = func_type->params[i]->type;
+            func->params[i].param_type = nir_parameter_in;
          }
-
-         /* TODO: We could do something smarter here. */
-         func->params[i].param_type = nir_parameter_inout;
       }
 
       func->return_type = func_type->return_type->type;