From 259cdc549650a08a548befc69964e0d9f998f113 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Tue, 21 Mar 2023 10:36:24 +0200 Subject: [PATCH] nir: add additional flag to resource_intel for embedded samplers This will enable specific lowering of embedded samplers. Signed-off-by: Lionel Landwerlin Reviewed-by: Ivan Briano Part-of: --- src/compiler/nir/nir.h | 1 + src/compiler/nir/nir_intrinsics.py | 4 ++-- src/compiler/nir/nir_print.c | 3 +++ src/intel/vulkan/anv_nir_apply_pipeline_layout.c | 7 ++++++- 4 files changed, 12 insertions(+), 3 deletions(-) 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 =