radeonsi: remove SI.vs.load.buffer.index
authorChristian König <christian.koenig@amd.com>
Tue, 5 Mar 2013 11:14:02 +0000 (12:14 +0100)
committerChristian König <christian.koenig@amd.com>
Thu, 7 Mar 2013 09:03:22 +0000 (10:03 +0100)
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/drivers/radeonsi/radeonsi_shader.c
src/gallium/drivers/radeonsi/radeonsi_shader.h

index 9e1e25eacfb374fd6a222e4c31eb57d715d78b90..6873f1271cb818d1f66d52a220148c492a62026c 100644 (file)
@@ -118,7 +118,6 @@ static void declare_input_vs(
        LLVMValueRef args[3];
        LLVMTypeRef vec4_type;
        LLVMValueRef input;
-       struct lp_build_context * uint = &si_shader_ctx->radeon_bld.soa.bld_base.uint_bld;
        struct lp_build_context * base = &si_shader_ctx->radeon_bld.soa.bld_base.base;
        //struct pipe_vertex_element *velem = &rctx->vertex_elements->elements[input_index];
        unsigned chan;
@@ -133,11 +132,9 @@ static void declare_input_vs(
        /* Build the attribute offset */
        attribute_offset = lp_build_const_int32(base->gallivm, 0);
 
-       /* Load the buffer index is always, which is always stored in VGPR0
+       /* Load the buffer index, which is always stored in VGPR0
         * for Vertex Shaders */
-       buffer_index_reg = build_intrinsic(base->gallivm->builder,
-               "llvm.SI.vs.load.buffer.index", uint->elem_type, NULL, 0,
-               LLVMReadNoneAttribute);
+       buffer_index_reg = LLVMGetParam(si_shader_ctx->radeon_bld.main_fn, SI_PARAM_VERTEX_INDEX);
 
        vec4_type = LLVMVectorType(base->elem_type, 4);
        args[0] = t_list;
@@ -922,21 +919,25 @@ static const struct lp_build_tgsi_action txl_action = {
 static void create_function(struct si_shader_context *si_shader_ctx)
 {
        struct gallivm_state *gallivm = si_shader_ctx->radeon_bld.soa.bld_base.base.gallivm;
-       LLVMTypeRef params[4], f, i8;
+       LLVMTypeRef params[5], f, i8, i32;
        unsigned i;
 
        f = LLVMFloatTypeInContext(gallivm->context);
        i8 = LLVMInt8TypeInContext(gallivm->context);
+       i32 = LLVMInt32TypeInContext(gallivm->context);
+
        params[SI_PARAM_CONST] = LLVMPointerType(f, CONST_ADDR_SPACE);
        params[SI_PARAM_SAMPLER] = LLVMPointerType(LLVMVectorType(i8, 16), CONST_ADDR_SPACE);
        params[SI_PARAM_RESOURCE] = LLVMPointerType(LLVMVectorType(i8, 32), CONST_ADDR_SPACE);
 
-       if (si_shader_ctx->type == TGSI_PROCESSOR_VERTEX)
+       if (si_shader_ctx->type == TGSI_PROCESSOR_VERTEX) {
                params[SI_PARAM_VERTEX_BUFFER] = params[SI_PARAM_SAMPLER];
-       else
+               params[SI_PARAM_VERTEX_INDEX] = i32;
+               radeon_llvm_create_func(&si_shader_ctx->radeon_bld, params, 5);
+       } else {
                params[SI_PARAM_PRIM_MASK] = LLVMInt32TypeInContext(gallivm->context);
-
-       radeon_llvm_create_func(&si_shader_ctx->radeon_bld, params, 4);
+               radeon_llvm_create_func(&si_shader_ctx->radeon_bld, params, 4);
+       }
 
        radeon_llvm_shader_type(si_shader_ctx->radeon_bld.main_fn, si_shader_ctx->type);
        for (i = SI_PARAM_CONST; i <= SI_PARAM_VERTEX_BUFFER; ++i) {
index 37123470e5176fd8921eb8043cab7d0d5a20a051..4c2be80d366429367d57f8bcd62651a33eb2fffe 100644 (file)
@@ -44,6 +44,7 @@
 
 /* VS only parameters */
 #define SI_PARAM_VERTEX_BUFFER 3
+#define SI_PARAM_VERTEX_INDEX  4
 
 /* PS only parameters */
 #define SI_PARAM_PRIM_MASK     3