mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 09:20:12 +01:00
nir: assign IO bases in nir_lower_io_passes
Reviewed-by: Qiang Yu <yuq825@gmail.com> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21861>
This commit is contained in:
parent
bd9ea4b5bc
commit
d29dd3333b
1 changed files with 18 additions and 0 deletions
|
|
@ -3122,6 +3122,10 @@ type_size_vec4(const struct glsl_type *type, bool bindless)
|
|||
return glsl_count_attribute_slots(type, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* This runs all compiler passes needed to lower IO, lower indirect IO access,
|
||||
* set transform feedback info in IO intrinsics, and clean up the IR.
|
||||
*/
|
||||
void
|
||||
nir_lower_io_passes(nir_shader *nir)
|
||||
{
|
||||
|
|
@ -3156,6 +3160,20 @@ nir_lower_io_passes(nir_shader *nir)
|
|||
NIR_PASS_V(nir, nir_lower_io, nir_var_shader_out | nir_var_shader_in,
|
||||
type_size_vec4, nir_lower_io_lower_64bit_to_32);
|
||||
|
||||
/* If IO is lowered before var->data.driver_location is assigned, driver
|
||||
* locations are all 0, which means IO bases are all 0. It's not necessary
|
||||
* to set driver_location before lowering IO because the only thing that
|
||||
* identifies outputs is their semantic, and IO bases can always be
|
||||
* computed from the semantics.
|
||||
*
|
||||
* This assigns IO bases from scratch, using IO semantics to tell which
|
||||
* intrinsics refer to the same IO. If the bases already exist, they
|
||||
* will be reassigned, sorted by the semantic, and all holes removed.
|
||||
* This kind of canonicalizes all bases.
|
||||
*/
|
||||
NIR_PASS_V(nir, nir_recompute_io_bases,
|
||||
nir_var_shader_in | nir_var_shader_out);
|
||||
|
||||
/* nir_io_add_const_offset_to_base needs actual constants. */
|
||||
NIR_PASS_V(nir, nir_opt_constant_folding);
|
||||
NIR_PASS_V(nir, nir_io_add_const_offset_to_base, nir_var_shader_in |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue