radv: optimize msad_4x8 to mqsad_4x8

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26251>
This commit is contained in:
Rhys Perry 2024-01-05 17:42:41 +00:00 committed by Marge Bot
parent e5976bebed
commit c3c138b10f
3 changed files with 7 additions and 4 deletions

View file

@ -681,7 +681,8 @@ radv_postprocess_nir(struct radv_device *device, const struct radv_graphics_stat
&stage->args.ac);
NIR_PASS_V(stage->nir, radv_nir_lower_abi, gfx_level, stage, gfx_state, pdev->info.address32_hi);
radv_optimize_nir_algebraic(
stage->nir, io_to_mem || lowered_ngg || stage->stage == MESA_SHADER_COMPUTE || stage->stage == MESA_SHADER_TASK);
stage->nir, io_to_mem || lowered_ngg || stage->stage == MESA_SHADER_COMPUTE || stage->stage == MESA_SHADER_TASK,
gfx_level >= GFX7);
NIR_PASS(_, stage->nir, nir_lower_fp16_casts, nir_lower_fp16_split_fp64);

View file

@ -201,7 +201,7 @@ radv_optimize_nir(struct nir_shader *shader, bool optimize_conservatively)
}
void
radv_optimize_nir_algebraic(nir_shader *nir, bool opt_offsets)
radv_optimize_nir_algebraic(nir_shader *nir, bool opt_offsets, bool opt_mqsad)
{
bool more_algebraic = true;
while (more_algebraic) {
@ -222,6 +222,8 @@ radv_optimize_nir_algebraic(nir_shader *nir, bool opt_offsets)
};
NIR_PASS(_, nir, nir_opt_offsets, &offset_options);
}
if (opt_mqsad)
NIR_PASS(_, nir, nir_opt_mqsad);
/* Do late algebraic optimization to turn add(a,
* neg(b)) back into subs, then the mandatory cleanup
@ -848,7 +850,7 @@ radv_lower_ngg(struct radv_device *device, struct radv_shader_stage *ngg_stage,
assert(info->is_ngg);
if (info->has_ngg_culling)
radv_optimize_nir_algebraic(nir, false);
radv_optimize_nir_algebraic(nir, false, false);
options.num_vertices_per_primitive = num_vertices_per_prim;
options.early_prim_export = info->has_ngg_early_prim_export;

View file

@ -504,7 +504,7 @@ struct radv_pipeline_layout;
struct radv_shader_stage;
void radv_optimize_nir(struct nir_shader *shader, bool optimize_conservatively);
void radv_optimize_nir_algebraic(nir_shader *shader, bool opt_offsets);
void radv_optimize_nir_algebraic(nir_shader *shader, bool opt_offsets, bool opt_mqsad);
void radv_nir_lower_rt_io(nir_shader *shader, bool monolithic, uint32_t payload_offset);