Mesa (master): aco: don't use p_as_uniform for vgpr sampler/image indices

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Oct 11 15:06:33 UTC 2019


Module: Mesa
Branch: master
Commit: f13ad839f11aed68075b735ca0ac04ab9fecd154
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f13ad839f11aed68075b735ca0ac04ab9fecd154

Author: Rhys Perry <pendingchaos02 at gmail.com>
Date:   Sat Sep 21 15:33:44 2019 +0100

aco: don't use p_as_uniform for vgpr sampler/image indices

p_as_uniform can get CSE'd, which can be incorrect and break some
dEQP-VK.descriptor_indexing.* tests.

Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
Reviewed-by: Daniel Schürmann <daniel at schuermann.dev>

---

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

diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp
index f521492bc78..bdb7e2a549e 100644
--- a/src/amd/compiler/aco_instruction_selection.cpp
+++ b/src/amd/compiler/aco_instruction_selection.cpp
@@ -3439,7 +3439,9 @@ Temp get_sampler_desc(isel_context *ctx, nir_deref_instr *deref_instr,
          if (const_value) {
             constant_index += array_size * const_value->u32;
          } else {
-            Temp indirect = bld.as_uniform(get_ssa_temp(ctx, deref_instr->arr.index.ssa));
+            Temp indirect = get_ssa_temp(ctx, deref_instr->arr.index.ssa);
+            if (indirect.type() == RegType::vgpr)
+               indirect = bld.vop1(aco_opcode::v_readfirstlane_b32, bld.def(s1), indirect);
 
             if (array_size != 1)
                indirect = bld.sop2(aco_opcode::s_mul_i32, bld.def(s1), Operand(array_size), indirect);




More information about the mesa-commit mailing list