microsoft/compiler: Support raw SRVs/UAVs through dxil_module_get_res_type
authorJesse Natalie <jenatali@microsoft.com>
Fri, 9 Apr 2021 20:43:25 +0000 (13:43 -0700)
committerMarge Bot <eric+marge@anholt.net>
Fri, 16 Apr 2021 17:08:17 +0000 (17:08 +0000)
Switch the OpenCL "globals" array to use that helper

Reviewed-by: Enrico Galli <enrico.galli@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10149>

src/microsoft/compiler/dxil_module.c
src/microsoft/compiler/nir_to_dxil.c

index 7f772c9..86cd946 100644 (file)
@@ -830,6 +830,14 @@ dxil_module_get_res_type(struct dxil_module *m, enum dxil_resource_kind kind,
       return dxil_module_get_struct_type(m, class_name, &vec_type, 1);
    }
 
+   case DXIL_RESOURCE_KIND_RAW_BUFFER:
+   {
+      const struct dxil_type *component_type = dxil_module_get_int_type(m, 32);
+      char class_name[64] = { 0 };
+      snprintf(class_name, 64, "struct.%sByteAddressBuffer", readwrite ? "RW" : "");
+      return dxil_module_get_struct_type(m, class_name, &component_type, 1);
+   }
+
    default:
       unreachable("resource type not supported");
    }
index e8b4506..b21c13a 100644 (file)
@@ -795,12 +795,8 @@ emit_globals(struct ntd_context *ctx, nir_shader *s, unsigned size)
    if (!size)
       return true;
 
-   const struct dxil_type *type = dxil_module_get_int_type(&ctx->mod, 32);
-   if (!type)
-      return false;
-
-   const struct dxil_type *struct_type =
-      dxil_module_get_struct_type(&ctx->mod, NULL, &type, 1);
+   const struct dxil_type *struct_type = dxil_module_get_res_type(&ctx->mod,
+      DXIL_RESOURCE_KIND_RAW_BUFFER, DXIL_COMP_TYPE_INVALID, true /* readwrite */);
    if (!struct_type)
       return false;