mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 11:30:11 +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);
|
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
|
void
|
||||||
nir_lower_io_passes(nir_shader *nir)
|
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,
|
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);
|
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_io_add_const_offset_to_base needs actual constants. */
|
||||||
NIR_PASS_V(nir, nir_opt_constant_folding);
|
NIR_PASS_V(nir, nir_opt_constant_folding);
|
||||||
NIR_PASS_V(nir, nir_io_add_const_offset_to_base, nir_var_shader_in |
|
NIR_PASS_V(nir, nir_io_add_const_offset_to_base, nir_var_shader_in |
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue