mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 03:08:05 +02:00
radeonsi: move code writing tess factors into a separate function
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
dc5fc3c2f6
commit
e21142087c
1 changed files with 21 additions and 9 deletions
|
|
@ -1959,21 +1959,20 @@ handle_semantic:
|
|||
}
|
||||
}
|
||||
|
||||
/* This only writes the tessellation factor levels. */
|
||||
static void si_llvm_emit_tcs_epilogue(struct lp_build_tgsi_context *bld_base)
|
||||
static void si_write_tess_factors(struct lp_build_tgsi_context *bld_base,
|
||||
LLVMValueRef rel_patch_id,
|
||||
LLVMValueRef invocation_id,
|
||||
LLVMValueRef tcs_out_current_patch_data_offset)
|
||||
{
|
||||
struct si_shader_context *si_shader_ctx = si_shader_context(bld_base);
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
struct si_shader *shader = si_shader_ctx->shader;
|
||||
unsigned tess_inner_index, tess_outer_index;
|
||||
LLVMValueRef lds_base, lds_inner, lds_outer;
|
||||
LLVMValueRef tf_base, rel_patch_id, byteoffset, buffer, rw_buffers;
|
||||
LLVMValueRef out[6], vec0, vec1, invocation_id;
|
||||
LLVMValueRef lds_base, lds_inner, lds_outer, byteoffset, buffer;
|
||||
LLVMValueRef out[6], vec0, vec1, rw_buffers, tf_base;
|
||||
unsigned stride, outer_comps, inner_comps, i;
|
||||
struct lp_build_if_state if_ctx;
|
||||
|
||||
invocation_id = unpack_param(si_shader_ctx, SI_PARAM_REL_IDS, 8, 5);
|
||||
|
||||
/* Do this only for invocation 0, because the tess levels are per-patch,
|
||||
* not per-vertex.
|
||||
*
|
||||
|
|
@ -2012,7 +2011,7 @@ static void si_llvm_emit_tcs_epilogue(struct lp_build_tgsi_context *bld_base)
|
|||
tess_inner_index = si_shader_io_get_unique_index(TGSI_SEMANTIC_TESSINNER, 0);
|
||||
tess_outer_index = si_shader_io_get_unique_index(TGSI_SEMANTIC_TESSOUTER, 0);
|
||||
|
||||
lds_base = get_tcs_out_current_patch_data_offset(si_shader_ctx);
|
||||
lds_base = tcs_out_current_patch_data_offset;
|
||||
lds_inner = LLVMBuildAdd(gallivm->builder, lds_base,
|
||||
lp_build_const_int32(gallivm,
|
||||
tess_inner_index * 4), "");
|
||||
|
|
@ -2041,7 +2040,6 @@ static void si_llvm_emit_tcs_epilogue(struct lp_build_tgsi_context *bld_base)
|
|||
/* Get the offset. */
|
||||
tf_base = LLVMGetParam(si_shader_ctx->radeon_bld.main_fn,
|
||||
SI_PARAM_TESS_FACTOR_OFFSET);
|
||||
rel_patch_id = get_rel_patch_id(si_shader_ctx);
|
||||
byteoffset = LLVMBuildMul(gallivm->builder, rel_patch_id,
|
||||
lp_build_const_int32(gallivm, 4 * stride), "");
|
||||
|
||||
|
|
@ -2054,6 +2052,20 @@ static void si_llvm_emit_tcs_epilogue(struct lp_build_tgsi_context *bld_base)
|
|||
lp_build_endif(&if_ctx);
|
||||
}
|
||||
|
||||
/* This only writes the tessellation factor levels. */
|
||||
static void si_llvm_emit_tcs_epilogue(struct lp_build_tgsi_context *bld_base)
|
||||
{
|
||||
struct si_shader_context *si_shader_ctx = si_shader_context(bld_base);
|
||||
LLVMValueRef invocation_id;
|
||||
|
||||
invocation_id = unpack_param(si_shader_ctx, SI_PARAM_REL_IDS, 8, 5);
|
||||
|
||||
si_write_tess_factors(bld_base,
|
||||
get_rel_patch_id(si_shader_ctx),
|
||||
invocation_id,
|
||||
get_tcs_out_current_patch_data_offset(si_shader_ctx));
|
||||
}
|
||||
|
||||
static void si_llvm_emit_ls_epilogue(struct lp_build_tgsi_context * bld_base)
|
||||
{
|
||||
struct si_shader_context *si_shader_ctx = si_shader_context(bld_base);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue