Module: Mesa
Branch: main
Commit: 0a5d3ac8d2b245e8b3f3589d3ade3de7356fe637
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0a5d3ac8d2b245e8b3f3589d3ade3de7356fe637

Author: Georg Lehmann <[email protected]>
Date:   Tue Nov 21 15:24:35 2023 +0100

aco/sched: treat p_dual_src_export_gfx11 like export

This prevents the scheduler from moving the dual source export above mrtz
export, which caused hangs.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10173

Cc: mesa-stable
Reviewed-by: Rhys Perry <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26317>

---

 src/amd/compiler/aco_scheduler.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/amd/compiler/aco_scheduler.cpp 
b/src/amd/compiler/aco_scheduler.cpp
index 592e42c54c4..f4cebf7a493 100644
--- a/src/amd/compiler/aco_scheduler.cpp
+++ b/src/amd/compiler/aco_scheduler.cpp
@@ -596,13 +596,15 @@ perform_hazard_query(hazard_query* query, Instruction* 
instr, bool upwards)
       return hazard_fail_exec;
 
    /* Don't move exports so that they stay closer together.
+    * Since GFX11, export order matters. MRTZ must come first,
+    * then color exports sorted from first to last.
     * Also, with Primitive Ordered Pixel Shading on GFX11+, the `done` export 
must not be moved
     * above the memory accesses before the queue family scope (more precisely, 
fragment interlock
     * scope, but it's not available in ACO) release barrier that is expected 
to be inserted before
     * the export, as well as before any `s_wait_event export_ready` which 
enters the ordered
     * section, because the `done` export exits the ordered section.
     */
-   if (instr->isEXP())
+   if (instr->isEXP() || instr->opcode == aco_opcode::p_dual_src_export_gfx11)
       return hazard_fail_export;
 
    /* don't move non-reorderable instructions */

Reply via email to