From 4f8230e247a222314ab124e348482628adb5af32 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 19 Nov 2014 12:59:57 -0800 Subject: [PATCH] nir: Add a concept of a wildcard array dereference Reviewed-by: Connor Abbott --- src/glsl/nir/nir.h | 9 +++++++++ src/glsl/nir/nir_print.c | 3 +++ 2 files changed, 12 insertions(+) diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index 021d4c91323..a9a77f395f3 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -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 { diff --git a/src/glsl/nir/nir_print.c b/src/glsl/nir/nir_print.c index 0156582c20c..ec60981b548 100644 --- a/src/glsl/nir/nir_print.c +++ b/src/glsl/nir/nir_print.c @@ -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, "]"); } -- 2.30.2