--- src/gallium/drivers/radeonsi/radeonsi_shader.c | 7 ++-- src/gallium/drivers/radeonsi/radeonsi_shader.h | 58 ++++++++++++++------------ src/gallium/drivers/radeonsi/si_state_draw.c | 1 + 3 files changed, 36 insertions(+), 30 deletions(-)
diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c index 18dde61..2806045 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_shader.c +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c @@ -1209,7 +1209,7 @@ static void create_function(struct si_shader_context *si_shader_ctx) { struct lp_build_tgsi_context *bld_base = &si_shader_ctx->radeon_bld.soa.bld_base; struct gallivm_state *gallivm = bld_base->base.gallivm; - LLVMTypeRef params[20], f32, i8, i32, v2i32, v3i32; + LLVMTypeRef params[SI_MAX_PARAMS], f32, i8, i32, v2i32, v3i32; unsigned i; i8 = LLVMInt8TypeInContext(gallivm->context); @@ -1221,6 +1221,7 @@ static void create_function(struct si_shader_context *si_shader_ctx) params[SI_PARAM_CONST] = LLVMPointerType(LLVMVectorType(i8, 16), CONST_ADDR_SPACE); params[SI_PARAM_SAMPLER] = params[SI_PARAM_CONST]; params[SI_PARAM_RESOURCE] = LLVMPointerType(LLVMVectorType(i8, 32), CONST_ADDR_SPACE); + params[SI_PARAM_FMASK_RESOURCE] = params[SI_PARAM_RESOURCE]; if (si_shader_ctx->type == TGSI_PROCESSOR_VERTEX) { params[SI_PARAM_VERTEX_BUFFER] = params[SI_PARAM_SAMPLER]; @@ -1229,7 +1230,7 @@ static void create_function(struct si_shader_context *si_shader_ctx) params[SI_PARAM_DUMMY_0] = i32; params[SI_PARAM_DUMMY_1] = i32; params[SI_PARAM_INSTANCE_ID] = i32; - radeon_llvm_create_func(&si_shader_ctx->radeon_bld, params, 9); + radeon_llvm_create_func(&si_shader_ctx->radeon_bld, params, 10); } else { params[SI_PARAM_PRIM_MASK] = i32; @@ -1249,7 +1250,7 @@ static void create_function(struct si_shader_context *si_shader_ctx) params[SI_PARAM_ANCILLARY] = f32; params[SI_PARAM_SAMPLE_COVERAGE] = f32; params[SI_PARAM_POS_FIXED_PT] = f32; - radeon_llvm_create_func(&si_shader_ctx->radeon_bld, params, 20); + radeon_llvm_create_func(&si_shader_ctx->radeon_bld, params, 21); } radeon_llvm_shader_type(si_shader_ctx->radeon_bld.main_fn, si_shader_ctx->type); diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.h b/src/gallium/drivers/radeonsi/radeonsi_shader.h index 2ce34b9..836b144 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_shader.h +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.h @@ -34,43 +34,47 @@ #define SI_SGPR_CONST 0 #define SI_SGPR_SAMPLER 2 #define SI_SGPR_RESOURCE 4 -#define SI_SGPR_VERTEX_BUFFER 6 -#define SI_SGPR_START_INSTANCE 8 +#define SI_SGPR_FMASK_RESOURCE 6 +#define SI_SGPR_VERTEX_BUFFER 8 +#define SI_SGPR_START_INSTANCE 10 -#define SI_VS_NUM_USER_SGPR 9 -#define SI_PS_NUM_USER_SGPR 6 +#define SI_VS_NUM_USER_SGPR 11 +#define SI_PS_NUM_USER_SGPR 8 /* LLVM function parameter indices */ #define SI_PARAM_CONST 0 #define SI_PARAM_SAMPLER 1 #define SI_PARAM_RESOURCE 2 +#define SI_PARAM_FMASK_RESOURCE 3 /* VS only parameters */ -#define SI_PARAM_VERTEX_BUFFER 3 -#define SI_PARAM_START_INSTANCE 4 -#define SI_PARAM_VERTEX_ID 5 -#define SI_PARAM_DUMMY_0 6 -#define SI_PARAM_DUMMY_1 7 -#define SI_PARAM_INSTANCE_ID 8 +#define SI_PARAM_VERTEX_BUFFER 4 +#define SI_PARAM_START_INSTANCE 5 +#define SI_PARAM_VERTEX_ID 6 +#define SI_PARAM_DUMMY_0 7 +#define SI_PARAM_DUMMY_1 8 +#define SI_PARAM_INSTANCE_ID 9 /* PS only parameters */ -#define SI_PARAM_PRIM_MASK 3 -#define SI_PARAM_PERSP_SAMPLE 4 -#define SI_PARAM_PERSP_CENTER 5 -#define SI_PARAM_PERSP_CENTROID 6 -#define SI_PARAM_PERSP_PULL_MODEL 7 -#define SI_PARAM_LINEAR_SAMPLE 8 -#define SI_PARAM_LINEAR_CENTER 9 -#define SI_PARAM_LINEAR_CENTROID 10 -#define SI_PARAM_LINE_STIPPLE_TEX 11 -#define SI_PARAM_POS_X_FLOAT 12 -#define SI_PARAM_POS_Y_FLOAT 13 -#define SI_PARAM_POS_Z_FLOAT 14 -#define SI_PARAM_POS_W_FLOAT 15 -#define SI_PARAM_FRONT_FACE 16 -#define SI_PARAM_ANCILLARY 17 -#define SI_PARAM_SAMPLE_COVERAGE 18 -#define SI_PARAM_POS_FIXED_PT 19 +#define SI_PARAM_PRIM_MASK 4 +#define SI_PARAM_PERSP_SAMPLE 5 +#define SI_PARAM_PERSP_CENTER 6 +#define SI_PARAM_PERSP_CENTROID 7 +#define SI_PARAM_PERSP_PULL_MODEL 8 +#define SI_PARAM_LINEAR_SAMPLE 9 +#define SI_PARAM_LINEAR_CENTER 10 +#define SI_PARAM_LINEAR_CENTROID 11 +#define SI_PARAM_LINE_STIPPLE_TEX 12 +#define SI_PARAM_POS_X_FLOAT 13 +#define SI_PARAM_POS_Y_FLOAT 14 +#define SI_PARAM_POS_Z_FLOAT 15 +#define SI_PARAM_POS_W_FLOAT 16 +#define SI_PARAM_FRONT_FACE 17 +#define SI_PARAM_ANCILLARY 18 +#define SI_PARAM_SAMPLE_COVERAGE 19 +#define SI_PARAM_POS_FIXED_PT 20 + +#define SI_MAX_PARAMS 21 struct si_shader_io { unsigned name; diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c index 746ace6..4208fa7 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.c +++ b/src/gallium/drivers/radeonsi/si_state_draw.c @@ -241,6 +241,7 @@ static void si_pipe_shader_ps(struct pipe_context *ctx, struct si_pipe_shader *s /* Last 2 reserved SGPRs are used for VCC */ num_sgprs = num_user_sgprs + 2; } + num_sgprs += 1; /* XXX this fixes VM faults */ assert(num_sgprs <= 104); si_pm4_set_reg(pm4, R_00B028_SPI_SHADER_PGM_RSRC1_PS, -- 1.8.1.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev