Module: Mesa
Branch: main
Commit: b5c6416d40aa267c51318e8a8df0df63583bcef0
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5c6416d40aa267c51318e8a8df0df63583bcef0

Author: Jesse Natalie <[email protected]>
Date:   Thu Aug 11 10:23:22 2022 -0700

microsoft/compiler: Add dynamic create handle helper

Reviewed-by: Giancarlo Devich <[email protected]>
Reviewed-by: Boris Brezillon <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18022>

---

 src/microsoft/compiler/nir_to_dxil.c | 35 ++++++++++++++++++++++++-----------
 1 file changed, 24 insertions(+), 11 deletions(-)

diff --git a/src/microsoft/compiler/nir_to_dxil.c 
b/src/microsoft/compiler/nir_to_dxil.c
index 84bdf4e229a..c9e4affb3ad 100644
--- a/src/microsoft/compiler/nir_to_dxil.c
+++ b/src/microsoft/compiler/nir_to_dxil.c
@@ -976,6 +976,21 @@ get_resource_id(struct ntd_context *ctx, enum 
dxil_resource_class class,
    return 0;
 }
 
+static const struct dxil_value *
+emit_createhandle_call_dynamic(struct ntd_context *ctx,
+                               enum dxil_resource_class resource_class,
+                               unsigned space,
+                               unsigned binding,
+                               const struct dxil_value *resource_range_index,
+                               bool non_uniform_resource_index)
+{
+   return emit_createhandle_call(ctx,
+                                 resource_class,
+                                 get_resource_id(ctx, resource_class, space, 
binding),
+                                 resource_range_index,
+                                 non_uniform_resource_index);
+}
+
 static bool
 emit_srv(struct ntd_context *ctx, nir_variable *var, unsigned count)
 {
@@ -2903,8 +2918,8 @@ get_resource_handle(struct ntd_context *ctx, nir_src 
*src, enum dxil_resource_cl
        class == DXIL_RESOURCE_CLASS_CBV)
       base_binding = 1;
 
-   const struct dxil_value *handle = emit_createhandle_call(ctx, class, 
-      get_resource_id(ctx, class, space, base_binding), value, 
!const_block_index);
+   const struct dxil_value *handle = emit_createhandle_call_dynamic(ctx, class,
+      space, base_binding, value, !const_block_index);
    if (handle_entry)
       *handle_entry = handle;
 
@@ -4163,9 +4178,7 @@ emit_load_vulkan_descriptor(struct ntd_context *ctx, 
nir_intrinsic_instr *intr)
    if (!index_value)
       return false;
 
-   handle = emit_createhandle_call(ctx, resource_class,
-      get_resource_id(ctx, resource_class, space, binding),
-      index_value, false);
+   handle = emit_createhandle_call_dynamic(ctx, resource_class, space, 
binding, index_value, false);
 
    store_dest_value(ctx, &intr->dest, 0, handle);
    store_dest(ctx, &intr->dest, 1, get_src(ctx, &intr->src[0], 1, 
nir_type_uint32), nir_type_uint32);
@@ -4532,8 +4545,8 @@ emit_deref(struct ntd_context* ctx, nir_deref_instr* 
instr)
    
    unsigned descriptor_set = ctx->opts->environment == DXIL_ENVIRONMENT_VULKAN 
?
       var->data.descriptor_set : (glsl_type_is_image(type) ? 1 : 0);
-   const struct dxil_value *handle = emit_createhandle_call(ctx, res_class,
-      get_resource_id(ctx, res_class, descriptor_set, binding_val), binding, 
false);
+   const struct dxil_value *handle = emit_createhandle_call_dynamic(ctx, 
res_class,
+      descriptor_set, binding_val, binding, false);
    if (!handle)
       return false;
 
@@ -4929,8 +4942,8 @@ emit_tex(struct ntd_context *ctx, nir_tex_instr *instr)
          break;
 
       case nir_tex_src_texture_offset:
-         params.tex = emit_createhandle_call(ctx, DXIL_RESOURCE_CLASS_SRV,
-            get_resource_id(ctx, DXIL_RESOURCE_CLASS_SRV, 0, 
instr->texture_index),
+         params.tex = emit_createhandle_call_dynamic(ctx, 
DXIL_RESOURCE_CLASS_SRV,
+            0, instr->texture_index,
             dxil_emit_binop(&ctx->mod, DXIL_BINOP_ADD,
                get_src_ssa(ctx, instr->src[i].src.ssa, 0),
                dxil_module_get_int32_const(&ctx->mod, instr->texture_index), 
0),
@@ -4939,8 +4952,8 @@ emit_tex(struct ntd_context *ctx, nir_tex_instr *instr)
 
       case nir_tex_src_sampler_offset:
          if (nir_tex_instr_need_sampler(instr)) {
-            params.sampler = emit_createhandle_call(ctx, 
DXIL_RESOURCE_CLASS_SAMPLER,
-               get_resource_id(ctx, DXIL_RESOURCE_CLASS_SAMPLER, 0, 
instr->sampler_index),
+            params.sampler = emit_createhandle_call_dynamic(ctx, 
DXIL_RESOURCE_CLASS_SAMPLER,
+               0, instr->sampler_index,
                dxil_emit_binop(&ctx->mod, DXIL_BINOP_ADD,
                   get_src_ssa(ctx, instr->src[i].src.ssa, 0),
                   dxil_module_get_int32_const(&ctx->mod, 
instr->sampler_index), 0),

Reply via email to