diff options
-rw-r--r-- | src/gallium/drivers/radeon/radeon_llvm_emit.cpp | 22 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/radeon_llvm_emit.h | 2 | ||||
-rw-r--r-- | src/gallium/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 <llvm/LLVMContext.h> #include <llvm/Module.h> +#include <llvm/Function.h> #include <llvm/DataLayout.h> #else #include <llvm/IR/LLVMContext.h> #include <llvm/IR/Module.h> +#include <llvm/IR/Function.h> #include <llvm/IR/DataLayout.h> #endif @@ -69,6 +71,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<Function>(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. * * @param bytes This function allocates memory for the byte stream, it is the 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 |