radeonsi: preload tess offchip ring for tcs

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Sigend-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16705>
This commit is contained in:
Qiang Yu 2022-05-24 14:40:05 +08:00 committed by Marge Bot
parent ae9b02b4d0
commit 4ec864c057
3 changed files with 7 additions and 5 deletions

View file

@ -244,7 +244,7 @@ void si_llvm_init_gs_callbacks(struct si_shader_context *ctx);
/* si_shader_llvm_tess.c */
LLVMValueRef si_get_tcs_in_vertex_dw_stride(struct si_shader_context *ctx);
LLVMValueRef si_get_num_tcs_out_vertices(struct si_shader_context *ctx);
void si_llvm_preload_tes_rings(struct si_shader_context *ctx);
void si_llvm_preload_tess_rings(struct si_shader_context *ctx);
void si_llvm_ls_build_end(struct si_shader_context *ctx);
void si_llvm_build_tcs_epilog(struct si_shader_context *ctx, union si_shader_part_key *key);
void si_llvm_tcs_build_end(struct si_shader_context *ctx);

View file

@ -824,6 +824,7 @@ bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shader *shad
case MESA_SHADER_TESS_CTRL:
si_llvm_init_tcs_callbacks(ctx);
si_llvm_preload_tess_rings(ctx);
if (sel->info.tessfactors_are_def_in_all_invocs) {
for (unsigned i = 0; i < 6; i++)
@ -833,7 +834,7 @@ bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shader *shad
case MESA_SHADER_TESS_EVAL:
si_llvm_init_tes_callbacks(ctx, ngg_cull_shader);
si_llvm_preload_tes_rings(ctx);
si_llvm_preload_tess_rings(ctx);
break;
case MESA_SHADER_GEOMETRY:

View file

@ -370,9 +370,10 @@ static LLVMValueRef get_tess_ring_descriptor(struct si_shader_context *ctx, enum
return ac_build_gather_values(&ctx->ac, desc, 4);
}
void si_llvm_preload_tes_rings(struct si_shader_context *ctx)
void si_llvm_preload_tess_rings(struct si_shader_context *ctx)
{
ctx->tess_offchip_ring = get_tess_ring_descriptor(ctx, TESS_OFFCHIP_RING_TES);
ctx->tess_offchip_ring = get_tess_ring_descriptor(
ctx, ctx->stage == MESA_SHADER_TESS_CTRL ? TESS_OFFCHIP_RING_TCS : TESS_OFFCHIP_RING_TES);
}
static LLVMValueRef si_nir_load_tcs_varyings(struct ac_shader_abi *abi, LLVMTypeRef type,
@ -498,7 +499,7 @@ static void si_nir_store_output_tcs(struct ac_shader_abi *abi,
}
}
buffer = get_tess_ring_descriptor(ctx, TESS_OFFCHIP_RING_TCS);
buffer = ctx->tess_offchip_ring;
base = ac_get_arg(&ctx->ac, ctx->args.tess_offchip_offset);