radeon/llvm: fix sampler index in llvm_emit_tex
authorVadim Girlin <vadimgirlin@gmail.com>
Fri, 25 May 2012 13:27:23 +0000 (17:27 +0400)
committerVadim Girlin <vadimgirlin@gmail.com>
Fri, 25 May 2012 13:27:23 +0000 (17:27 +0400)
Sampler index isn't a second source operand for some tgsi texture
instructions. Let's assume it's always the last.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=50230

Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/drivers/r600/r600_llvm.c

index 2ca838f87fa130c7fd6ba0acdd9a7cdf0009acc0..5e073e0d3af9ae7e48005779b36cb364af00d850 100644 (file)
@@ -144,15 +144,17 @@ static void llvm_emit_tex(
 {
        struct gallivm_state * gallivm = bld_base->base.gallivm;
        LLVMValueRef args[6];
-       unsigned c;
+       unsigned c, sampler_src;
 
        assert(emit_data->arg_count + 2 <= Elements(args));
 
        for (c = 0; c < emit_data->arg_count; ++c)
                args[c] = emit_data->args[c];
 
+       sampler_src = emit_data->inst->Instruction.NumSrcRegs-1;
+
        args[c++] = lp_build_const_int32(gallivm,
-                                       emit_data->inst->Src[1].Register.Index);
+                                       emit_data->inst->Src[sampler_src].Register.Index);
        args[c++] = lp_build_const_int32(gallivm,
                                        emit_data->inst->Texture.Texture);