From 0a3adff79e920e097e67a6491f3b7506fa39bdae Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Fri, 26 Feb 2021 16:05:40 +0000 Subject: [PATCH] aco: add missing usable_read2 check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A Hitman 2 shader does: read64(local_invocation_index() * 4 - 4). This was likely emitting a ds_read2_b32 on GFX6. For local_invocation_index()=0, because the first dword was out-of-bounds, the second was likely also considered out-of-bounds (even though it's not, at offset 0). Likely fixes https://gitlab.freedesktop.org/mesa/mesa/-/issues/3882 Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann Fixes: 57e6886f981 ("aco: refactor load_lds to use new helpers") Part-of: (cherry picked from commit 3a72044ece27f6a06d7819bcd6ba3fcc2f786d0c) --- .pick_status.json | 2 +- src/amd/compiler/aco_instruction_selection.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 7188b1faa96..7457362dfe5 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1372,7 +1372,7 @@ "description": "aco: add missing usable_read2 check", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "57e6886f981ca629a863544df253b9ecb3604eec" }, diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 6b39d87e3a0..379a13efc44 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -3489,7 +3489,7 @@ Temp lds_load_callback(Builder& bld, const LoadEmitInfo &info, } else if (bytes_needed >= 8 && align % 8 == 0) { size = 8; op = aco_opcode::ds_read_b64; - } else if (bytes_needed >= 8 && align % 4 == 0 && const_offset % 4 == 0) { + } else if (bytes_needed >= 8 && align % 4 == 0 && const_offset % 4 == 0 && usable_read2) { size = 8; read2 = true; op = aco_opcode::ds_read2_b32;