[Mesa-dev] [PATCH 1/4] r600g: tgsi-to-llvm path is taken after declarations have been parsed
Tom Stellard
tom at stellard.net
Mon Sep 24 07:11:19 PDT 2012
On Mon, Sep 24, 2012 at 12:43:14AM +0200, Vincent Lejeune wrote:
> ---
> src/gallium/drivers/r600/r600_shader.c | 58 +++++++++++++++++++---------------
> 1 file changed, 32 insertions(+), 26 deletions(-)
>
Reviewed-by: Tom Stellard <thomas.stellard at amd.com>
> diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
> index 3e79764..c363ca5 100644
> --- a/src/gallium/drivers/r600/r600_shader.c
> +++ b/src/gallium/drivers/r600/r600_shader.c
> @@ -1239,7 +1239,6 @@ static int r600_shader_from_tgsi(struct r600_context * rctx, struct r600_pipe_sh
> ctx.file_offset[TGSI_FILE_INPUT] = evergreen_gpr_count(&ctx);
> }
>
> - /* LLVM backend setup */
> #ifdef R600_USE_LLVM
> if (use_llvm && ctx.info.indirect_files) {
> fprintf(stderr, "Warning: R600 LLVM backend does not support "
> @@ -1247,34 +1246,13 @@ static int r600_shader_from_tgsi(struct r600_context * rctx, struct r600_pipe_sh
> "backend.\n");
> use_llvm = 0;
> }
> - if (use_llvm) {
> - struct radeon_llvm_context radeon_llvm_ctx;
> - LLVMModuleRef mod;
> - unsigned dump = 0;
> - memset(&radeon_llvm_ctx, 0, sizeof(radeon_llvm_ctx));
> - radeon_llvm_ctx.reserved_reg_count = ctx.file_offset[TGSI_FILE_INPUT];
> - mod = r600_tgsi_llvm(&radeon_llvm_ctx, tokens);
> - if (debug_get_bool_option("R600_DUMP_SHADERS", FALSE)) {
> - dump = 1;
> - }
> - if (r600_llvm_compile(mod, &inst_bytes, &inst_byte_count,
> - rctx->family, 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 {
> - ctx.file_offset[TGSI_FILE_OUTPUT] =
> - ctx.file_offset[TGSI_FILE_INPUT];
> - }
> - radeon_llvm_dispose(&radeon_llvm_ctx);
> - }
> #endif
> - /* End of LLVM backend setup */
>
> - if (!use_llvm) {
> + if (use_llvm) {
> ctx.file_offset[TGSI_FILE_OUTPUT] =
> + ctx.file_offset[TGSI_FILE_INPUT];
> + } else {
> + ctx.file_offset[TGSI_FILE_OUTPUT] =
> ctx.file_offset[TGSI_FILE_INPUT] +
> ctx.info.file_max[TGSI_FILE_INPUT] + 1;
> }
> @@ -1336,6 +1314,34 @@ static int r600_shader_from_tgsi(struct r600_context * rctx, struct r600_pipe_sh
> }
> }
>
> +/* LLVM backend setup */
> +#ifdef R600_USE_LLVM
> + if (use_llvm) {
> + struct radeon_llvm_context radeon_llvm_ctx;
> + LLVMModuleRef mod;
> + unsigned dump = 0;
> + memset(&radeon_llvm_ctx, 0, sizeof(radeon_llvm_ctx));
> + radeon_llvm_ctx.reserved_reg_count = ctx.file_offset[TGSI_FILE_INPUT];
> + mod = r600_tgsi_llvm(&radeon_llvm_ctx, tokens);
> + if (debug_get_bool_option("R600_DUMP_SHADERS", FALSE)) {
> + dump = 1;
> + }
> + if (r600_llvm_compile(mod, &inst_bytes, &inst_byte_count,
> + rctx->family, 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 {
> + ctx.file_offset[TGSI_FILE_OUTPUT] =
> + ctx.file_offset[TGSI_FILE_INPUT];
> + }
> + radeon_llvm_dispose(&radeon_llvm_ctx);
> + }
> +#endif
> +/* End of LLVM backend setup */
> +
> if (shader->fs_write_all && rctx->chip_class >= EVERGREEN)
> shader->nr_ps_max_color_exports = 8;
>
> --
> 1.7.11.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list