nir: Add a concept of a wildcard array dereference
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 19 Nov 2014 20:59:57 +0000 (12:59 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 15 Jan 2015 15:19:02 +0000 (07:19 -0800)
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/glsl/nir/nir.h
src/glsl/nir/nir_print.c

index 021d4c91323d4d0bdafb3046c00a3129a83d7c7a..a9a77f395f3f90bec3e834fce08269260b0925b6 100644 (file)
@@ -625,9 +625,18 @@ typedef struct {
    nir_variable *var;
 } nir_deref_var;
 
+/* This enum describes how the array is referenced.  If the deref is
+ * direct then the base_offset is used.  If the deref is indirect then then
+ * offset is given by base_offset + indirect.  If the deref is a wildcard
+ * then the deref refers to all of the elements of the array at the same
+ * time.  Wildcard dereferences are only ever allowed in copy_var
+ * intrinsics and the source and destination derefs must have matching
+ * wildcards.
+ */
 typedef enum {
    nir_deref_array_type_direct,
    nir_deref_array_type_indirect,
+   nir_deref_array_type_wildcard,
 } nir_deref_array_type;
 
 typedef struct {
index 0156582c20c9416ba004b15f98a2bbd818479b7b..ec60981b5483bc80b16c39266e3c4a67c3b85ef4 100644 (file)
@@ -274,6 +274,9 @@ print_deref_array(nir_deref_array *deref, print_var_state *state, FILE *fp)
          fprintf(fp, "%u + ", deref->base_offset);
       print_src(&deref->indirect, fp);
       break;
+   case nir_deref_array_type_wildcard:
+      fprintf(fp, "*");
+      break;
    }
    fprintf(fp, "]");
 }