[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