nir: Add sampler and resource heap system values

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40649>
This commit is contained in:
Faith Ekstrand 2025-06-12 10:06:51 -04:00 committed by Marge Bot
parent 8f4e209de9
commit c29d8dd4ff
5 changed files with 20 additions and 0 deletions

View file

@ -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");
}

View file

@ -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;

View file

@ -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])

View file

@ -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);

View file

@ -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;