--- src/gallium/drivers/r600/r600_llvm.c | 2 ++ src/gallium/drivers/r600/r600_llvm.h | 1 + src/gallium/drivers/r600/r600_shader.c | 8 ++++++-- 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 2050be2..83d7340 100644 --- a/src/gallium/drivers/r600/r600_llvm.c +++ b/src/gallium/drivers/r600/r600_llvm.c @@ -556,6 +556,7 @@ unsigned r600_llvm_compile( unsigned * inst_byte_count, enum radeon_family family, struct r600_bytecode *bc, + boolean *use_kill, unsigned dump) { unsigned r; @@ -566,6 +567,7 @@ unsigned r600_llvm_compile( *inst_byte_count = binary.code_size; bc->ngpr = util_le32_to_cpu(*(uint32_t*)binary.config); bc->nstack = util_le32_to_cpu(*(uint32_t*)(binary.config + 4)); + *use_kill = util_le32_to_cpu(*(uint32_t*)(binary.config + 8)); return r; } diff --git a/src/gallium/drivers/r600/r600_llvm.h b/src/gallium/drivers/r600/r600_llvm.h index 919dd24..50bbca6 100644 --- a/src/gallium/drivers/r600/r600_llvm.h +++ b/src/gallium/drivers/r600/r600_llvm.h @@ -22,6 +22,7 @@ unsigned r600_llvm_compile( unsigned * inst_byte_count, enum radeon_family family, struct r600_bytecode *bc, + boolean *use_kill, unsigned dump); #endif /* defined R600_USE_LLVM || defined HAVE_OPENCL */ diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index 0204f80..25f900f 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -272,6 +272,7 @@ int r600_compute_shader_create(struct pipe_context * ctx, unsigned byte_count; struct r600_shader_ctx shader_ctx; bool dump = (r600_ctx->screen->debug_flags & DBG_CS) != 0; + boolean use_kill; shader_ctx.bc = bytecode; r600_bytecode_init(shader_ctx.bc, r600_ctx->chip_class, r600_ctx->family, @@ -279,7 +280,7 @@ int r600_compute_shader_create(struct pipe_context * ctx, shader_ctx.bc->type = TGSI_PROCESSOR_COMPUTE; shader_ctx.bc->isa = r600_ctx->isa; r600_llvm_compile(mod, &bytes, &byte_count, r600_ctx->family, - shader_ctx.bc, dump); + shader_ctx.bc, &use_kill, dump); r600_bytecode_from_byte_stream(&shader_ctx, bytes, byte_count); if (shader_ctx.bc->chip_class == CAYMAN) { cm_bytecode_add_cf_end(shader_ctx.bc); @@ -1444,6 +1445,7 @@ static int r600_shader_from_tgsi(struct r600_screen *rscreen, if (use_llvm) { struct radeon_llvm_context radeon_llvm_ctx; LLVMModuleRef mod; + boolean use_kill; bool dump = r600_can_dump_shader(rscreen, ctx.type); memset(&radeon_llvm_ctx, 0, sizeof(radeon_llvm_ctx)); @@ -1461,13 +1463,15 @@ static int r600_shader_from_tgsi(struct r600_screen *rscreen, mod = r600_tgsi_llvm(&radeon_llvm_ctx, tokens); if (r600_llvm_compile(mod, &inst_bytes, &inst_byte_count, - rscreen->family, ctx.bc, dump)) { + rscreen->family, ctx.bc, &use_kill, dump)) { FREE(inst_bytes); radeon_llvm_dispose(&radeon_llvm_ctx); use_llvm = 0; fprintf(stderr, "R600 LLVM backend failed to compile " "shader. Falling back to TGSI\n"); } else { + if (use_kill) + ctx.shader->uses_kill = use_kill; ctx.file_offset[TGSI_FILE_OUTPUT] = ctx.file_offset[TGSI_FILE_INPUT]; } -- 1.8.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev