nir: Add reorderable memory access enum
authorConnor Abbott <cwabbott0@gmail.com>
Fri, 31 May 2019 17:03:48 +0000 (19:03 +0200)
committerConnor Abbott <cwabbott0@gmail.com>
Wed, 19 Jun 2019 12:08:28 +0000 (14:08 +0200)
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/compiler/nir/nir_print.c
src/compiler/shader_enums.h

index 6dac4eb..6b5e739 100644 (file)
@@ -448,7 +448,8 @@ print_var_decl(nir_variable *var, print_state *state)
    const char *const restr = (access & ACCESS_RESTRICT) ? "restrict " : "";
    const char *const ronly = (access & ACCESS_NON_WRITEABLE) ? "readonly " : "";
    const char *const wonly = (access & ACCESS_NON_READABLE) ? "writeonly " : "";
-   fprintf(fp, "%s%s%s%s%s", coher, volat, restr, ronly, wonly);
+   const char *const reorder = (access & ACCESS_CAN_REORDER) ? "reorderable " : "";
+   fprintf(fp, "%s%s%s%s%s%s", coher, volat, restr, ronly, wonly, reorder);
 
 #define FORMAT_CASE(x) case x: fprintf(stderr, #x " "); break
    switch (var->data.image.format) {
index 47b1ca0..cf753df 100644 (file)
@@ -725,6 +725,14 @@ enum gl_access_qualifier
 
    /** The access may use a non-uniform buffer or image index */
    ACCESS_NON_UNIFORM   = (1 << 5),
+
+   /* This has the same semantics as NIR_INTRINSIC_CAN_REORDER, only to be
+    * used with loads. In other words, it means that the load can be
+    * arbitrarily reordered, or combined with other loads to the same address.
+    * It is implied by ACCESS_NON_WRITEABLE together with ACCESS_RESTRICT, and
+    * a lack of ACCESS_COHERENT and ACCESS_VOLATILE.
+    */
+   ACCESS_CAN_REORDER = (1 << 6),
 };
 
 /**