Mesa (master): aco: readfirstlane vgpr pointers in convert_pointer_to_64_bit()

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


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

Author: Rhys Perry <pendingchaos02 at gmail.com>
Date:   Sat Sep 21 11:48:27 2019 +0100

aco: readfirstlane vgpr pointers in convert_pointer_to_64_bit()

This can happen when bcsel is used between the results of two
vulkan_resource_index. It's also probably needed for non-uniform
descriptor indexing

Fixes dEQP-VK.spirv_assembly.instruction.compute.variable_pointers.compute.reads_opselect_two_buffers

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 | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp
index 6d31cb7cf6b..c5f840361cc 100644
--- a/src/amd/compiler/aco_instruction_selection.cpp
+++ b/src/amd/compiler/aco_instruction_selection.cpp
@@ -369,6 +369,8 @@ Temp convert_pointer_to_64_bit(isel_context *ctx, Temp ptr)
    if (ptr.size() == 2)
       return ptr;
    Builder bld(ctx->program, ctx->block);
+   if (ptr.type() == RegType::vgpr)
+      ptr = bld.vop1(aco_opcode::v_readfirstlane_b32, bld.def(s1), ptr);
    return bld.pseudo(aco_opcode::p_create_vector, bld.def(s2),
                      ptr, Operand((unsigned)ctx->options->address32_hi));
 }




More information about the mesa-commit mailing list