diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 96ac8fa9a3a..002f88d99ad 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -268,6 +268,7 @@ typedef enum { nir_resource_intel_pushable = 1u << 1, nir_resource_intel_sampler = 1u << 2, nir_resource_intel_non_uniform = 1u << 3, + nir_resource_intel_sampler_embedded = 1u << 4, } nir_resource_data_intel; /** diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 16567f3ae5e..ab952dad907 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1997,9 +1997,9 @@ intrinsic("load_reloc_const_intel", dest_comp=1, bit_sizes=[32], # With this intrinsic, we can just check the surface_index src with # nir_src_is_const() and ignore set_offset. # -# src[] = { set_offset, surface_index, array_index } +# src[] = { set_offset, surface_index, array_index, bindless_base_offset } intrinsic("resource_intel", dest_comp=1, bit_sizes=[32], - src_comp=[1, 1, 1], + src_comp=[1, 1, 1, 1], indices=[DESC_SET, BINDING, RESOURCE_ACCESS_INTEL, RESOURCE_BLOCK_INTEL], flags=[CAN_ELIMINATE, CAN_REORDER]) diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index 36ebd5b953d..5e6a43dc56f 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -1517,6 +1517,9 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state) case nir_resource_intel_non_uniform: fprintf(fp, "non-uniform"); break; + case nir_resource_intel_sampler_embedded: + fprintf(fp, "sampler-embedded"); + break; default: fprintf(fp, "unknown"); break; diff --git a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c index 2c35623e963..9e68be277b3 100644 --- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c +++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c @@ -867,6 +867,7 @@ build_surface_index_for_binding(nir_builder *b, set_offset, surface_index, array_index, + nir_undef(b, 1, 32) /* bindless_base_offset */, .desc_set = set, .binding = binding, .resource_block_intel = state->set[set].binding[binding].push_block, @@ -946,7 +947,11 @@ build_sampler_handle_for_binding(nir_builder *b, state->set[set].binding[binding].sampler_offset + plane); } - return nir_resource_intel(b, set_offset, sampler_index, array_index, + return nir_resource_intel(b, + set_offset, + sampler_index, + array_index, + nir_undef(b, 1, 32) /* bindless_base_offset */, .desc_set = set, .binding = binding, .resource_access_intel =