diff --git a/src/microsoft/compiler/dxil_function.c b/src/microsoft/compiler/dxil_function.c index e7b3ab36cff..a0121855df6 100644 --- a/src/microsoft/compiler/dxil_function.c +++ b/src/microsoft/compiler/dxil_function.c @@ -88,6 +88,8 @@ static struct predefined_func_descr predefined_funcs[] = { {"dx.op.storePatchConstant", "v", "iiicO", DXIL_ATTR_KIND_NO_UNWIND}, {"dx.op.loadPatchConstant", "O", "iiic", DXIL_ATTR_KIND_READ_NONE}, {"dx.op.loadOutputControlPoint", "O", "iiici", DXIL_ATTR_KIND_READ_NONE}, +{"dx.op.createHandleFromBinding", "@", "i#ib", DXIL_ATTR_KIND_READ_NONE}, +{"dx.op.annotateHandle", "@", "i@P", DXIL_ATTR_KIND_READ_NONE}, }; struct func_descr { @@ -192,6 +194,8 @@ get_type_from_string(struct dxil_module *mod, const char *param_descr, case DXIL_FUNC_PARAM_SAMPLE_POS: return dxil_module_get_samplepos_type(mod); case DXIL_FUNC_PARAM_CBUF_RET: return dxil_module_get_cbuf_ret_type(mod, overload); case DXIL_FUNC_PARAM_SPLIT_DOUBLE: return dxil_module_get_split_double_ret_type(mod); + case DXIL_FUNC_PARAM_RES_BIND: return dxil_module_get_res_bind_type(mod); + case DXIL_FUNC_PARAM_RES_PROPS: return dxil_module_get_res_props_type(mod); case DXIL_FUNC_PARAM_POINTER: { const struct dxil_type *target = get_type_from_string(mod, param_descr, overload, idx); return dxil_module_get_pointer_type(mod, target); diff --git a/src/microsoft/compiler/dxil_function.h b/src/microsoft/compiler/dxil_function.h index 0c5a651634d..c8950e18d88 100644 --- a/src/microsoft/compiler/dxil_function.h +++ b/src/microsoft/compiler/dxil_function.h @@ -42,6 +42,8 @@ #define DXIL_FUNC_PARAM_DIM 'D' #define DXIL_FUNC_PARAM_SPLIT_DOUBLE 'G' #define DXIL_FUNC_PARAM_SAMPLE_POS 'S' +#define DXIL_FUNC_PARAM_RES_BIND '#' +#define DXIL_FUNC_PARAM_RES_PROPS 'P' #include "dxil_module.h" #include "util/rb_tree.h" diff --git a/src/microsoft/compiler/dxil_module.c b/src/microsoft/compiler/dxil_module.c index 8909df99d04..bd5cd227cb2 100644 --- a/src/microsoft/compiler/dxil_module.c +++ b/src/microsoft/compiler/dxil_module.c @@ -887,6 +887,27 @@ dxil_module_get_samplepos_type(struct dxil_module *m) return dxil_module_get_struct_type(m, "dx.types.SamplePos", samplepos, 2); } +const struct dxil_type * +dxil_module_get_res_bind_type(struct dxil_module *mod) +{ + /* %dx.types.ResBind = type { i32, i32, i32, i8 } */ + const struct dxil_type *int32_type = dxil_module_get_int_type(mod, 32); + const struct dxil_type *int8_type = dxil_module_get_int_type(mod, 8); + const struct dxil_type *fields[4] = { int32_type, int32_type, int32_type, int8_type }; + + return dxil_module_get_struct_type(mod, "dx.types.ResBind", fields, 4); +} + +const struct dxil_type * +dxil_module_get_res_props_type(struct dxil_module *mod) +{ + /* %dx.types.ResourceProperties = type { i32, i32 } */ + const struct dxil_type *int32_type = dxil_module_get_int_type(mod, 32); + const struct dxil_type *fields[2] = { int32_type, int32_type }; + + return dxil_module_get_struct_type(mod, "dx.types.ResourceProperties", fields, 2); +} + const struct dxil_type * dxil_module_add_function_type(struct dxil_module *m, const struct dxil_type *ret_type, diff --git a/src/microsoft/compiler/dxil_module.h b/src/microsoft/compiler/dxil_module.h index db778014423..1a5563109a0 100644 --- a/src/microsoft/compiler/dxil_module.h +++ b/src/microsoft/compiler/dxil_module.h @@ -308,6 +308,12 @@ dxil_module_get_dimret_type(struct dxil_module *m); const struct dxil_type * dxil_module_get_samplepos_type(struct dxil_module *m); +const struct dxil_type * +dxil_module_get_res_bind_type(struct dxil_module *m); + +const struct dxil_type * +dxil_module_get_res_props_type(struct dxil_module *m); + const struct dxil_type * dxil_module_get_struct_type(struct dxil_module *m, const char *name, diff --git a/src/microsoft/compiler/nir_to_dxil.c b/src/microsoft/compiler/nir_to_dxil.c index 0dc79ac0ca4..84bdf4e229a 100644 --- a/src/microsoft/compiler/nir_to_dxil.c +++ b/src/microsoft/compiler/nir_to_dxil.c @@ -327,6 +327,9 @@ enum dxil_intr { DXIL_INTR_LEGACY_F16TOF32 = 131, DXIL_INTR_ATTRIBUTE_AT_VERTEX = 137, + + DXIL_INTR_ANNOTATE_HANDLE = 216, + DXIL_INTR_CREATE_HANDLE_FROM_BINDING = 217, }; enum dxil_atomic_op {