diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 5c9515aff76..6b27d2c07b3 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -2572,6 +2572,10 @@ nir_intrinsic_from_system_value(gl_system_value val) return nir_intrinsic_load_warp_id_arm; case SYSTEM_VALUE_WARP_MAX_ID_ARM: return nir_intrinsic_load_warp_max_id_arm; + case SYSTEM_VALUE_SAMPLER_HEAP_PTR: + return nir_intrinsic_load_sampler_heap_ptr; + case SYSTEM_VALUE_RESOURCE_HEAP_PTR: + return nir_intrinsic_load_resource_heap_ptr; default: return nir_num_intrinsics; } @@ -2758,6 +2762,10 @@ nir_system_value_from_intrinsic(nir_intrinsic_op intrin) return SYSTEM_VALUE_WARP_ID_ARM; case nir_intrinsic_load_warp_max_id_arm: return SYSTEM_VALUE_WARP_MAX_ID_ARM; + case nir_intrinsic_load_sampler_heap_ptr: + return SYSTEM_VALUE_SAMPLER_HEAP_PTR; + case nir_intrinsic_load_resource_heap_ptr: + return SYSTEM_VALUE_RESOURCE_HEAP_PTR; default: UNREACHABLE("intrinsic doesn't produce a system value"); } diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 1cd063ca24c..df6f65b4161 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -365,6 +365,8 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) case nir_intrinsic_load_call_return_address_amd: case nir_intrinsic_load_indirect_address_intel: case nir_intrinsic_load_alpha_to_coverage_enable_ir3: + case nir_intrinsic_load_sampler_heap_ptr: + case nir_intrinsic_load_resource_heap_ptr: is_divergent = false; break; diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index d65a75d16a8..e5a388a11c4 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1449,6 +1449,10 @@ intrinsic("cmat_insert", src_comp=[-1, 1, -1, 1]) intrinsic("cmat_copy", src_comp=[-1, -1]) intrinsic("cmat_transpose", src_comp=[-1, -1], indices=[FP_MATH_CTRL]) +# VK_EXT_descriptor_heap +system_value("sampler_heap_ptr", 1, bit_sizes=[64]) +system_value("resource_heap_ptr", 1, bit_sizes=[64]) + # Select an output vertex in a poly GS. Takes the stream-local vertex ID. intrinsic("select_vertex_poly", src_comp=[1], indices=[STREAM_ID]) diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c index 1d5a2bc2438..4e59f5b3e37 100644 --- a/src/compiler/shader_enums.c +++ b/src/compiler/shader_enums.c @@ -459,6 +459,8 @@ gl_system_value_name(gl_system_value sysval) ENUM(SYSTEM_VALUE_CORE_MAX_ID_ARM), ENUM(SYSTEM_VALUE_WARP_ID_ARM), ENUM(SYSTEM_VALUE_WARP_MAX_ID_ARM), + ENUM(SYSTEM_VALUE_SAMPLER_HEAP_PTR), + ENUM(SYSTEM_VALUE_RESOURCE_HEAP_PTR), }; STATIC_ASSERT(ARRAY_SIZE(names) == SYSTEM_VALUE_MAX); return NAME(sysval); diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index a45fda6458a..6f9f37f8961 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -969,6 +969,10 @@ typedef enum SYSTEM_VALUE_WARP_ID_ARM, SYSTEM_VALUE_WARP_MAX_ID_ARM, + /* SPV_EXT_descriptor_heap */ + SYSTEM_VALUE_SAMPLER_HEAP_PTR, + SYSTEM_VALUE_RESOURCE_HEAP_PTR, + SYSTEM_VALUE_MAX /**< Number of values */ } gl_system_value;