Mesa (master): r600/llvm: Fix texbuf for pre EG gen

Vincent Lejeune vlj at kemper.freedesktop.org
Wed Nov 6 16:36:30 UTC 2013


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

Author: Vincent Lejeune <vljn at ovi.com>
Date:   Mon Oct 21 18:48:21 2013 +0200

r600/llvm: Fix texbuf for pre EG gen

---

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

diff --git a/src/gallium/drivers/r600/r600_llvm.c b/src/gallium/drivers/r600/r600_llvm.c
index 34dd3ad..d7fa5f8 100644
--- a/src/gallium/drivers/r600/r600_llvm.c
+++ b/src/gallium/drivers/r600/r600_llvm.c
@@ -427,6 +427,35 @@ static void llvm_emit_tex(
 			emit_data->output[0] = build_intrinsic(gallivm->builder,
 							"llvm.R600.load.texbuf",
 							emit_data->dst_type, args, 2, LLVMReadNoneAttribute);
+			if (ctx->chip_class >= EVERGREEN)
+				return;
+			ctx->uses_tex_buffers = true;
+			LLVMDumpValue(emit_data->output[0]);
+			emit_data->output[0] = LLVMBuildBitCast(gallivm->builder,
+				emit_data->output[0], LLVMVectorType(bld_base->base.int_elem_type, 4),
+				"");
+			LLVMValueRef Mask = llvm_load_const_buffer(bld_base,
+				lp_build_const_int32(gallivm, 0),
+				LLVM_R600_BUFFER_INFO_CONST_BUFFER);
+			Mask = LLVMBuildBitCast(gallivm->builder, Mask,
+				LLVMVectorType(bld_base->base.int_elem_type, 4), "");
+			emit_data->output[0] = lp_build_emit_llvm_binary(bld_base, TGSI_OPCODE_AND,
+				emit_data->output[0],
+				Mask);
+			LLVMValueRef WComponent = LLVMBuildExtractElement(gallivm->builder,
+				emit_data->output[0], lp_build_const_int32(gallivm, 3), "");
+			Mask = llvm_load_const_buffer(bld_base, lp_build_const_int32(gallivm, 1),
+				LLVM_R600_BUFFER_INFO_CONST_BUFFER);
+			Mask = LLVMBuildExtractElement(gallivm->builder, Mask,
+				lp_build_const_int32(gallivm, 0), "");
+			Mask = LLVMBuildBitCast(gallivm->builder, Mask,
+				bld_base->base.int_elem_type, "");
+			WComponent = lp_build_emit_llvm_binary(bld_base, TGSI_OPCODE_OR,
+				WComponent, Mask);
+			emit_data->output[0] = LLVMBuildInsertElement(gallivm->builder,
+				emit_data->output[0], WComponent, lp_build_const_int32(gallivm, 3), "");
+			emit_data->output[0] = LLVMBuildBitCast(gallivm->builder,
+				emit_data->output[0], LLVMVectorType(bld_base->base.elem_type, 4), "");
 		}
 			return;
 		default:




More information about the mesa-commit mailing list