intel/rt: Implement push constants as global memory reads
They're not really "push" anymore but that's because there is no such thing as push constants in bindless shaders on Intel. They should be fast enough, though. There is some room for debate here as to whether we want to do the pull in NIR or push it into the back-end. The advantage of doing it in the back-end is that it'd be easier to use MOV_INDIRECT for indirect push constant access rather than falling back to a dataport message. Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7356>
This commit is contained in:
committed by
Marge Bot
parent
f7e24e559f
commit
9fa1cdfe7f
@@ -1495,6 +1495,21 @@ nir_store_global(nir_builder *build, nir_ssa_def *addr, unsigned align,
|
||||
nir_builder_instr_insert(build, &store->instr);
|
||||
}
|
||||
|
||||
static inline nir_ssa_def *
|
||||
nir_load_global_constant(nir_builder *build, nir_ssa_def *addr, unsigned align,
|
||||
unsigned num_components, unsigned bit_size)
|
||||
{
|
||||
nir_intrinsic_instr *load =
|
||||
nir_intrinsic_instr_create(build->shader, nir_intrinsic_load_global_constant);
|
||||
load->num_components = num_components;
|
||||
load->src[0] = nir_src_for_ssa(addr);
|
||||
nir_intrinsic_set_align(load, align, 0);
|
||||
nir_ssa_dest_init(&load->instr, &load->dest,
|
||||
num_components, bit_size, NULL);
|
||||
nir_builder_instr_insert(build, &load->instr);
|
||||
return &load->dest.ssa;
|
||||
}
|
||||
|
||||
static inline nir_ssa_def *
|
||||
nir_load_param(nir_builder *build, uint32_t param_idx)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user