mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 12:18:09 +02:00
radv: Support nir_intrinsic_load_global_constant.
SPIR-V parsing can result in some direct constant usage for shader records. Lower this early to a global based intrinsic so that it doesn't interfere with the later 32-bit offset based constants for scratch usage. Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12592>
This commit is contained in:
parent
0d8bd8518d
commit
8ca54b4d38
4 changed files with 6 additions and 1 deletions
|
|
@ -8187,6 +8187,7 @@ visit_intrinsic(isel_context* ctx, nir_intrinsic_instr* instr)
|
|||
case nir_intrinsic_image_deref_samples: visit_image_samples(ctx, instr); break;
|
||||
case nir_intrinsic_load_ssbo: visit_load_ssbo(ctx, instr); break;
|
||||
case nir_intrinsic_store_ssbo: visit_store_ssbo(ctx, instr); break;
|
||||
case nir_intrinsic_load_global_constant:
|
||||
case nir_intrinsic_load_global: visit_load_global(ctx, instr); break;
|
||||
case nir_intrinsic_load_buffer_amd: visit_load_buffer(ctx, instr); break;
|
||||
case nir_intrinsic_store_buffer_amd: visit_store_buffer(ctx, instr); break;
|
||||
|
|
|
|||
|
|
@ -805,6 +805,7 @@ init_context(isel_context* ctx, nir_shader* shader)
|
|||
case nir_intrinsic_load_ubo:
|
||||
case nir_intrinsic_load_ssbo:
|
||||
case nir_intrinsic_load_global:
|
||||
case nir_intrinsic_load_global_constant:
|
||||
case nir_intrinsic_vulkan_resource_index:
|
||||
case nir_intrinsic_get_ssbo_size:
|
||||
type = nir_dest_is_divergent(intrinsic->dest) ? RegType::vgpr : RegType::sgpr;
|
||||
|
|
|
|||
|
|
@ -3703,6 +3703,7 @@ static void visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
|
|||
case nir_intrinsic_load_ssbo:
|
||||
result = visit_load_buffer(ctx, instr);
|
||||
break;
|
||||
case nir_intrinsic_load_global_constant:
|
||||
case nir_intrinsic_load_global:
|
||||
result = visit_load_global(ctx, instr);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -516,6 +516,7 @@ radv_shader_compile_to_nir(struct radv_device *device, struct vk_shader_module *
|
|||
.phys_ssbo_addr_format = nir_address_format_64bit_global,
|
||||
.push_const_addr_format = nir_address_format_logical,
|
||||
.shared_addr_format = nir_address_format_32bit_offset,
|
||||
.constant_addr_format = nir_address_format_64bit_global,
|
||||
.frag_coord_is_sysval = true,
|
||||
.use_deref_buffer_array_length = true,
|
||||
.debug =
|
||||
|
|
@ -719,7 +720,8 @@ radv_shader_compile_to_nir(struct radv_device *device, struct vk_shader_module *
|
|||
}
|
||||
}
|
||||
|
||||
nir_lower_explicit_io(nir, nir_var_mem_global, nir_address_format_64bit_global);
|
||||
nir_lower_explicit_io(nir, nir_var_mem_global | nir_var_mem_constant,
|
||||
nir_address_format_64bit_global);
|
||||
|
||||
/* Lower large variables that are always constant with load_constant
|
||||
* intrinsics, which get turned into PC-relative loads from a data
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue