radeon/llvm: Handle LP_CHAN_ALL in emit_fetch_immediate().
authorMichel Dänzer <michel.daenzer@amd.com>
Mon, 21 Jan 2013 18:08:24 +0000 (19:08 +0100)
committerMichel Dänzer <michel@daenzer.net>
Tue, 22 Jan 2013 17:50:02 +0000 (18:50 +0100)
Fixes piglit spec/ARB_sampler_objects/sampler-incomplete and
spec/EXT_texture_swizzle/depth_texture_mode_and_swizzle.

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c

index 4eb860307dfdafa11d79660ae674e37255814343..c645326e6100df2480d9aaaaf87139a8ec09112d 100644 (file)
@@ -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