Mesa (master): r600g/llvm: fix txq for texture buffer

Vincent Lejeune vlj at kemper.freedesktop.org
Wed Oct 2 15:38:01 UTC 2013


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

Author: Vincent Lejeune <vljn at ovi.com>
Date:   Tue May 21 16:34:52 2013 +0200

r600g/llvm: fix txq for texture buffer

---

 src/gallium/drivers/r600/r600_llvm.c     |    9 +++++++--
 src/gallium/drivers/r600/r600_shader.c   |    1 +
 src/gallium/drivers/radeon/radeon_llvm.h |    1 +
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_llvm.c b/src/gallium/drivers/r600/r600_llvm.c
index 03a68e4..3fe6a81 100644
--- a/src/gallium/drivers/r600/r600_llvm.c
+++ b/src/gallium/drivers/r600/r600_llvm.c
@@ -23,6 +23,8 @@
 #define CONSTANT_BUFFER_0_ADDR_SPACE 8
 #define CONSTANT_BUFFER_1_ADDR_SPACE (CONSTANT_BUFFER_0_ADDR_SPACE + R600_UCP_CONST_BUFFER)
 #define CONSTANT_TXQ_BUFFER (CONSTANT_BUFFER_0_ADDR_SPACE + R600_TXQ_CONST_BUFFER)
+#define LLVM_R600_BUFFER_INFO_CONST_BUFFER \
+	(CONSTANT_BUFFER_0_ADDR_SPACE + R600_BUFFER_INFO_CONST_BUFFER)
 
 static LLVMValueRef llvm_load_const_buffer(
 	struct lp_build_tgsi_context * bld_base,
@@ -410,8 +412,11 @@ static void llvm_emit_tex(
 	if (emit_data->inst->Texture.Texture == TGSI_TEXTURE_BUFFER) {
 		switch (emit_data->inst->Instruction.Opcode) {
 		case TGSI_OPCODE_TXQ: {
-			LLVMValueRef offset = lp_build_const_int32(bld_base->base.gallivm, 1);
-			LLVMValueRef cvecval = llvm_load_const_buffer(bld_base, offset, R600_BUFFER_INFO_CONST_BUFFER);
+			struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
+			ctx->uses_tex_buffers = true;
+			LLVMValueRef offset = lp_build_const_int32(bld_base->base.gallivm, 0);
+			LLVMValueRef cvecval = llvm_load_const_buffer(bld_base, offset,
+				LLVM_R600_BUFFER_INFO_CONST_BUFFER);
 			emit_data->output[0] = cvecval;
 			return;
 		}
diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 80cdcd5..6ad7b2b 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -1112,6 +1112,7 @@ static int r600_shader_from_tgsi(struct r600_screen *rscreen,
 		radeon_llvm_ctx.alpha_to_one = key.alpha_to_one;
 		mod = r600_tgsi_llvm(&radeon_llvm_ctx, tokens);
 		ctx.shader->has_txq_cube_array_z_comp = radeon_llvm_ctx.has_txq_cube_array_z_comp;
+		ctx.shader->uses_tex_buffers = radeon_llvm_ctx.uses_tex_buffers;
 
 		if (r600_llvm_compile(mod, rscreen->b.family, ctx.bc, &use_kill, dump)) {
 			radeon_llvm_dispose(&radeon_llvm_ctx);
diff --git a/src/gallium/drivers/radeon/radeon_llvm.h b/src/gallium/drivers/radeon/radeon_llvm.h
index 14a8c34..345ae70 100644
--- a/src/gallium/drivers/radeon/radeon_llvm.h
+++ b/src/gallium/drivers/radeon/radeon_llvm.h
@@ -67,6 +67,7 @@ struct radeon_llvm_context {
 	unsigned fs_color_all;
 	unsigned alpha_to_one;
 	unsigned has_txq_cube_array_z_comp;
+	unsigned uses_tex_buffers;
 
 	/*=== Front end configuration ===*/
 




More information about the mesa-commit mailing list