From 9f183eb7deb2bd40e9717deb723e4976f443fb88 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 21 May 2013 16:34:52 +0200 Subject: [PATCH] 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 03a68e4648f..3fe6a81a540 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 80cdcd500f6..6ad7b2b079e 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 14a8c347006..345ae706cf0 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 ===*/ -- 2.30.2