From 7b21af3f5189ef0613132194a6ee587af5dd05a5 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Thu, 21 Jul 2022 15:12:38 +0100 Subject: [PATCH] aco: improve wait_imm unpack MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Add GFX11 support and use wait_imm::unset_counter. Looping in the waitcnt pass was probably broken on GFX11 because of this. fossil-db (gfx1100): Totals from 899 (0.56% of 161689) affected shaders: Instrs: 1319368 -> 1319179 (-0.01%) CodeSize: 7124640 -> 7123884 (-0.01%) Latency: 26554304 -> 26404606 (-0.56%) InvThroughput: 9032485 -> 8978773 (-0.59%); split: -0.59%, +0.00% No navi10 fossil-db changes. Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_ir.cpp | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/amd/compiler/aco_ir.cpp b/src/amd/compiler/aco_ir.cpp index 04bb850..08c7372 100644 --- a/src/amd/compiler/aco_ir.cpp +++ b/src/amd/compiler/aco_ir.cpp @@ -835,15 +835,28 @@ wait_imm::wait_imm(uint16_t vm_, uint16_t exp_, uint16_t lgkm_, uint16_t vs_) wait_imm::wait_imm(enum amd_gfx_level gfx_level, uint16_t packed) : vs(unset_counter) { - vm = packed & 0xf; - if (gfx_level >= GFX9) - vm |= (packed >> 10) & 0x30; + if (gfx_level == GFX11) { + vm = (packed >> 10) & 0x3f; + lgkm = (packed >> 4) & 0x3f; + exp = packed & 0x7; + } else { + vm = packed & 0xf; + if (gfx_level >= GFX9) + vm |= (packed >> 10) & 0x30; + + exp = (packed >> 4) & 0x7; - exp = (packed >> 4) & 0x7; + lgkm = (packed >> 8) & 0xf; + if (gfx_level >= GFX10) + lgkm |= (packed >> 8) & 0x30; + } - lgkm = (packed >> 8) & 0xf; - if (gfx_level >= GFX10) - lgkm |= (packed >> 8) & 0x30; + if (vm == (gfx_level >= GFX9 ? 0x3f : 0xf)) + vm = wait_imm::unset_counter; + if (exp == 0x7) + exp = wait_imm::unset_counter; + if (lgkm == (gfx_level >= GFX10 ? 0x3f : 0xf)) + lgkm = wait_imm::unset_counter; } uint16_t -- 2.7.4