[Mesa-dev] [PATCH 2/7] radeon/llvm: replace shader type intrinsic with function attribute
Christian König
deathsimple at vodafone.de
Tue Mar 5 06:27:20 PST 2013
From: Christian König <christian.koenig at amd.com>
Signed-off-by: Christian König <christian.koenig at amd.com>
---
src/gallium/drivers/radeon/radeon_llvm_emit.cpp | 22 ++++++++++++++++++++++
src/gallium/drivers/radeon/radeon_llvm_emit.h | 2 ++
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 0491e64..ee82a90 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 bdb242b..b68100f 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 958d3a3..af05078 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
--
1.7.9.5
More information about the mesa-dev
mailing list