Mesa (master): r600g/llvm: Undefines unrequired texture coord values

Vincent Lejeune vlj at kemper.freedesktop.org
Sat May 4 21:38:56 UTC 2013


Module: Mesa
Branch: master
Commit: b42fe195a2578473c433695fe417253e8786c4c6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b42fe195a2578473c433695fe417253e8786c4c6

Author: Vincent Lejeune <vljn at ovi.com>
Date:   Tue Apr 30 15:58:00 2013 +0200

r600g/llvm: Undefines unrequired texture coord values

This is a port of "r600g:mask unused source components for SAMPLE"
patch from Vadim Girlin.

---

 src/gallium/drivers/r600/r600_llvm.c |   29 ++++++++++++++++++++++++++++-
 1 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_llvm.c b/src/gallium/drivers/r600/r600_llvm.c
index 83d7340..2ff109c 100644
--- a/src/gallium/drivers/r600/r600_llvm.c
+++ b/src/gallium/drivers/r600/r600_llvm.c
@@ -429,9 +429,36 @@ static void llvm_emit_tex(
 		}
 	}
 
+	if (emit_data->inst->Instruction.Opcode == TGSI_OPCODE_TEX) {
+		LLVMValueRef Vector[4] = {
+			LLVMBuildExtractElement(gallivm->builder, emit_data->args[0],
+				lp_build_const_int32(gallivm, 0), ""),
+			LLVMBuildExtractElement(gallivm->builder, emit_data->args[0],
+				lp_build_const_int32(gallivm, 1), ""),
+			LLVMBuildExtractElement(gallivm->builder, emit_data->args[0],
+				lp_build_const_int32(gallivm, 2), ""),
+			LLVMBuildExtractElement(gallivm->builder, emit_data->args[0],
+				lp_build_const_int32(gallivm, 3), ""),
+		};
+		switch (emit_data->inst->Texture.Texture) {
+		case TGSI_TEXTURE_2D:
+		case TGSI_TEXTURE_RECT:
+			Vector[2] = Vector[3] = LLVMGetUndef(bld_base->base.elem_type);
+			break;
+		case TGSI_TEXTURE_1D:
+			Vector[1] = Vector[2] = Vector[3] = LLVMGetUndef(bld_base->base.elem_type);
+			break;
+		default:
+			break;
+		}
+		args[0] = lp_build_gather_values(gallivm, Vector, 4);
+	} else {
+		args[0] = emit_data->args[0];
+	}
+
 	assert(emit_data->arg_count + 2 <= Elements(args));
 
-	for (c = 0; c < emit_data->arg_count; ++c)
+	for (c = 1; c < emit_data->arg_count; ++c)
 		args[c] = emit_data->args[c];
 
 	sampler_src = emit_data->inst->Instruction.NumSrcRegs-1;




More information about the mesa-commit mailing list