From a56dfd99e2cf2b7a0916cb59d2866303a627b02f Mon Sep 17 00:00:00 2001 From: Michel Dänzer Date: Mon, 21 Jan 2013 19:08:24 +0100 Subject: radeon/llvm: Handle LP_CHAN_ALL in emit_fetch_immediate(). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes piglit spec/ARB_sampler_objects/sampler-incomplete and spec/EXT_texture_swizzle/depth_texture_mode_and_swizzle. Reviewed-by: Tom Stellard Signed-off-by: Michel Dänzer --- src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/gallium') diff --git a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c index 4eb860307df..c645326e610 100644 --- a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c +++ b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c @@ -125,7 +125,17 @@ emit_fetch_immediate( } struct lp_build_tgsi_soa_context *bld = lp_soa_context(bld_base); - return LLVMConstBitCast(bld->immediates[reg->Register.Index][swizzle], ctype); + if (swizzle == ~0) { + LLVMValueRef values[TGSI_NUM_CHANNELS] = {}; + unsigned chan; + for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) { + values[chan] = LLVMConstBitCast(bld->immediates[reg->Register.Index][chan], ctype); + } + return lp_build_gather_values(bld_base->base.gallivm, values, + TGSI_NUM_CHANNELS); + } else { + return LLVMConstBitCast(bld->immediates[reg->Register.Index][swizzle], ctype); + } } static LLVMValueRef -- cgit v1.2.3