From: Christian König Date: Sun, 12 Aug 2012 18:06:21 +0000 (+0200) Subject: radeon/llvm: add support to fetch temps as vectors X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4444b9d1ecddb09468d2878ffb1463a66ea0ffd3;p=mesa.git radeon/llvm: add support to fetch temps as vectors Necessary for texture fetches with temp regs as source on SI. Signed-off-by: Christian König Reviewed-by: Tom Stellard Reviewed-by: Alex Deucher --- diff --git a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c index 641d27745c3..04469e28759 100644 --- a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c +++ b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c @@ -159,11 +159,21 @@ emit_fetch_temporary( { struct lp_build_tgsi_soa_context *bld = lp_soa_context(bld_base); LLVMBuilderRef builder = bld_base->base.gallivm->builder; + if (swizzle == ~0) { + LLVMValueRef values[TGSI_NUM_CHANNELS] = {}; + unsigned chan; + for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) { + values[chan] = emit_fetch_temporary(bld_base, reg, type, chan); + } + return lp_build_gather_values(bld_base->base.gallivm, values, + TGSI_NUM_CHANNELS); + } + if (reg->Register.Indirect) { LLVMValueRef array_index = emit_array_index(bld, reg, swizzle); LLVMValueRef ptr = LLVMBuildGEP(builder, bld->temps_array, &array_index, 1, ""); - return LLVMBuildLoad(builder, ptr, ""); + return LLVMBuildLoad(builder, ptr, ""); } else { LLVMValueRef temp_ptr; temp_ptr = lp_get_temp_ptr_soa(bld, reg->Register.Index, swizzle);