From b8f4ca3d85b8a192b5c1940f9a4b558f1ce78d8f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20K=C3=B6nig?= Date: Mon, 4 Mar 2013 15:35:30 +0100 Subject: [PATCH] radeon/llvm: replace shader type intrinsic with function attribute MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König Reviewed-by: Tom Stellard --- .../drivers/radeon/radeon_llvm_emit.cpp | 22 +++++++++++++++++++ src/gallium/drivers/radeon/radeon_llvm_emit.h | 2 ++ .../drivers/radeonsi/radeonsi_shader.c | 14 ++---------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp index 0491e64bb6f..ee82a902872 100644 --- a/src/gallium/drivers/radeon/radeon_llvm_emit.cpp +++ b/src/gallium/drivers/radeon/radeon_llvm_emit.cpp @@ -28,10 +28,12 @@ #if HAVE_LLVM < 0x0303 #include #include +#include #include #else #include #include +#include #include #endif @@ -68,6 +70,26 @@ static LLVMEnsureMultithreaded lLVMEnsureMultithreaded; } +/** + * Set the shader type we want to compile + * + * @param type shader type to set + */ +extern "C" void +radeon_llvm_shader_type(LLVMValueRef F, unsigned type) +{ + Function *Func = unwrap(F); + int Idx = AttributeSet::FunctionIndex; + AttrBuilder B; + char Str[2]; + + sprintf(Str, "%1d", type); + B.addAttribute("ShaderType", Str); + + AttributeSet Set = AttributeSet::get(Func->getContext(), Idx, B); + Func->addAttributes(Idx, Set); +} + /** * Compile an LLVM module to machine code. * diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.h b/src/gallium/drivers/radeon/radeon_llvm_emit.h index bdb242bfa0e..b68100f372f 100644 --- a/src/gallium/drivers/radeon/radeon_llvm_emit.h +++ b/src/gallium/drivers/radeon/radeon_llvm_emit.h @@ -33,6 +33,8 @@ extern "C" { #endif +void radeon_llvm_shader_type(LLVMValueRef F, unsigned type); + unsigned radeon_llvm_bitcode_compile( unsigned char * bitcode, unsigned bitcode_len, unsigned char ** bytes, unsigned * byte_count, diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c index 958d3a3a4d6..af05078012e 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_shader.c +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c @@ -542,17 +542,6 @@ static void si_llvm_init_export_args(struct lp_build_tgsi_context *bld_base, * stage. */ } -static void si_llvm_emit_prologue(struct lp_build_tgsi_context *bld_base) -{ - struct si_shader_context *si_shader_ctx = si_shader_context(bld_base); - struct gallivm_state *gallivm = bld_base->base.gallivm; - lp_build_intrinsic_unary(gallivm->builder, - "llvm.AMDGPU.shader.type", - LLVMVoidTypeInContext(gallivm->context), - lp_build_const_int32(gallivm, si_shader_ctx->type)); -} - - static void si_alpha_test(struct lp_build_tgsi_context *bld_base, unsigned index) { @@ -1032,7 +1021,6 @@ int si_pipe_shader_create( shader->shader.uses_kill = shader_info.uses_kill; bld_base->info = &shader_info; bld_base->emit_fetch_funcs[TGSI_FILE_CONSTANT] = fetch_constant; - bld_base->emit_prologue = si_llvm_emit_prologue; bld_base->emit_epilogue = si_llvm_emit_epilogue; bld_base->op_actions[TGSI_OPCODE_TEX] = tex_action; @@ -1048,6 +1036,8 @@ int si_pipe_shader_create( si_shader_ctx.type = si_shader_ctx.parse.FullHeader.Processor.Processor; si_shader_ctx.rctx = rctx; + radeon_llvm_shader_type(si_shader_ctx.radeon_bld.main_fn, si_shader_ctx.type); + shader->shader.nr_cbufs = rctx->framebuffer.nr_cbufs; /* Dump TGSI code before doing TGSI->LLVM conversion in case the -- 2.30.2