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@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
This commit is contained in:
Rhys Perry 2019-09-21 11:48:27 +01:00
parent 45d6c69b99
commit 5526a557ee

View file

@ -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));
}