Mesa (main): radv: Move radv_optimize_nir_algebraic to a separate function.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jul 8 15:21:57 UTC 2021
Module: Mesa
Branch: main
Commit: fd64c18214fa77efad45ae73a3c38627839492e0
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd64c18214fa77efad45ae73a3c38627839492e0
Author: Timur Kristóf <timur.kristof at gmail.com>
Date: Mon Jul 5 09:05:43 2021 +0200
radv: Move radv_optimize_nir_algebraic to a separate function.
Signed-off-by: Timur Kristóf <timur.kristof at gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11711>
---
src/amd/vulkan/radv_pipeline.c | 30 +-----------------------------
src/amd/vulkan/radv_shader.c | 33 +++++++++++++++++++++++++++++++++
src/amd/vulkan/radv_shader.h | 1 +
3 files changed, 35 insertions(+), 29 deletions(-)
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index ee0f0a862b6..70f169b4016 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -3449,35 +3449,7 @@ radv_create_shaders(struct radv_pipeline *pipeline, struct radv_device *device,
if (lowered_ngg)
radv_lower_ngg(device, nir[i], &infos[i], pipeline_key, &keys[i]);
- /* optimize the lowered ALU operations */
- bool more_algebraic = true;
- while (more_algebraic) {
- more_algebraic = false;
- NIR_PASS_V(nir[i], nir_copy_prop);
- NIR_PASS_V(nir[i], nir_opt_dce);
- NIR_PASS_V(nir[i], nir_opt_constant_folding);
- NIR_PASS_V(nir[i], nir_opt_cse);
- NIR_PASS(more_algebraic, nir[i], nir_opt_algebraic);
- }
-
- if (io_to_mem || lowered_ngg || i == MESA_SHADER_COMPUTE)
- NIR_PASS_V(nir[i], nir_opt_offsets);
-
- /* Do late algebraic optimization to turn add(a,
- * neg(b)) back into subs, then the mandatory cleanup
- * after algebraic. Note that it may produce fnegs,
- * and if so then we need to keep running to squash
- * fneg(fneg(a)).
- */
- bool more_late_algebraic = true;
- while (more_late_algebraic) {
- more_late_algebraic = false;
- NIR_PASS(more_late_algebraic, nir[i], nir_opt_algebraic_late);
- NIR_PASS_V(nir[i], nir_opt_constant_folding);
- NIR_PASS_V(nir[i], nir_copy_prop);
- NIR_PASS_V(nir[i], nir_opt_dce);
- NIR_PASS_V(nir[i], nir_opt_cse);
- }
+ radv_optimize_nir_algebraic(nir[i], io_to_mem || lowered_ngg || i == MESA_SHADER_COMPUTE);
if (nir[i]->info.bit_sizes_int & (8 | 16)) {
if (device->physical_device->rad_info.chip_class >= GFX8) {
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 0b623a39dcb..cb03e55fc4e 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -189,6 +189,39 @@ radv_optimize_nir(const struct radv_device *device, struct nir_shader *shader,
NIR_PASS(progress, shader, nir_opt_move, nir_move_load_ubo);
}
+void
+radv_optimize_nir_algebraic(nir_shader *nir, bool opt_offsets)
+{
+ bool more_algebraic = true;
+ while (more_algebraic) {
+ more_algebraic = false;
+ NIR_PASS_V(nir, nir_copy_prop);
+ NIR_PASS_V(nir, nir_opt_dce);
+ NIR_PASS_V(nir, nir_opt_constant_folding);
+ NIR_PASS_V(nir, nir_opt_cse);
+ NIR_PASS(more_algebraic, nir, nir_opt_algebraic);
+ }
+
+ if (opt_offsets)
+ NIR_PASS_V(nir, nir_opt_offsets);
+
+ /* Do late algebraic optimization to turn add(a,
+ * neg(b)) back into subs, then the mandatory cleanup
+ * after algebraic. Note that it may produce fnegs,
+ * and if so then we need to keep running to squash
+ * fneg(fneg(a)).
+ */
+ bool more_late_algebraic = true;
+ while (more_late_algebraic) {
+ more_late_algebraic = false;
+ NIR_PASS(more_late_algebraic, nir, nir_opt_algebraic_late);
+ NIR_PASS_V(nir, nir_opt_constant_folding);
+ NIR_PASS_V(nir, nir_copy_prop);
+ NIR_PASS_V(nir, nir_opt_dce);
+ NIR_PASS_V(nir, nir_opt_cse);
+ }
+}
+
static void
shared_var_info(const struct glsl_type *type, unsigned *size, unsigned *align)
{
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index 10015c41eb3..5f1db740b65 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -425,6 +425,7 @@ struct radv_shader_slab {
void radv_optimize_nir(const struct radv_device *device, struct nir_shader *shader,
bool optimize_conservatively, bool allow_copies);
+void radv_optimize_nir_algebraic(nir_shader *shader, bool opt_offsets);
bool radv_nir_lower_ycbcr_textures(nir_shader *shader, const struct radv_pipeline_layout *layout);
nir_shader *radv_shader_compile_to_nir(struct radv_device *device, struct vk_shader_module *module,
More information about the mesa-commit
mailing list