radeonsi: Pass shader type to the compiler
authorTom Stellard <thomas.stellard@amd.com>
Fri, 7 Sep 2012 13:12:51 +0000 (09:12 -0400)
committerTom Stellard <thomas.stellard@amd.com>
Tue, 11 Sep 2012 18:53:47 +0000 (14:53 -0400)
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeonsi/radeonsi_shader.c

index 9fc344607cbc4c84bf9731337b5706b1339d4e5d..0994fac6f219336a01e2b34599b20b08e42f53a9 100644 (file)
@@ -476,6 +476,17 @@ 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));
+}
+
+
 /* XXX: This is partially implemented for VS only at this point.  It is not complete */
 static void si_llvm_emit_epilogue(struct lp_build_tgsi_context * bld_base)
 {
@@ -705,6 +716,7 @@ int si_pipe_shader_create(
        tgsi_scan_shader(sel->tokens, &shader_info);
        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;