mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 04:10:09 +01:00
nir: add nir_clear_mediump_io_flag
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35315>
This commit is contained in:
parent
13005d5e4e
commit
b636e5ca66
2 changed files with 31 additions and 0 deletions
|
|
@ -5844,6 +5844,7 @@ bool nir_recompute_io_bases(nir_shader *nir, nir_variable_mode modes);
|
|||
bool nir_lower_mediump_vars(nir_shader *nir, nir_variable_mode modes);
|
||||
bool nir_lower_mediump_io(nir_shader *nir, nir_variable_mode modes,
|
||||
uint64_t varying_mask, bool use_16bit_slots);
|
||||
bool nir_clear_mediump_io_flag(nir_shader *nir);
|
||||
bool nir_force_mediump_io(nir_shader *nir, nir_variable_mode modes,
|
||||
nir_alu_type types);
|
||||
bool nir_unpack_16bit_varying_slots(nir_shader *nir, nir_variable_mode modes);
|
||||
|
|
|
|||
|
|
@ -284,6 +284,36 @@ nir_lower_mediump_io(nir_shader *nir, nir_variable_mode modes,
|
|||
return nir_progress(changed, impl, nir_metadata_control_flow);
|
||||
}
|
||||
|
||||
static bool
|
||||
clear_mediump_io_flag(struct nir_builder *b, nir_intrinsic_instr *intr, void *data)
|
||||
{
|
||||
/* The mediump flag must be preserved for XFB, but other IO
|
||||
* doesn't need it.
|
||||
*/
|
||||
if (nir_intrinsic_has_io_semantics(intr) &&
|
||||
!nir_instr_xfb_write_mask(intr)) {
|
||||
nir_io_semantics sem = nir_intrinsic_io_semantics(intr);
|
||||
|
||||
if (sem.medium_precision) {
|
||||
sem.medium_precision = 0;
|
||||
nir_intrinsic_set_io_semantics(intr, sem);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Set nir_io_semantics.medium_precision to 0 if it has no effect.
|
||||
*
|
||||
* This is recommended after nir_lower_mediump_io and before
|
||||
* nir_opt_varyings / nir_opt_vectorize_io.
|
||||
*/
|
||||
bool
|
||||
nir_clear_mediump_io_flag(nir_shader *nir)
|
||||
{
|
||||
return nir_shader_intrinsics_pass(nir, clear_mediump_io_flag, nir_metadata_all, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the mediump precision bit for those shader inputs and outputs that are
|
||||
* set in the "modes" mask. Non-generic varyings (that GLES3 doesn't have)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue