ac/nir: Emit legacy GS DONE signal in NIR.
Legacy GS needs to emit a DONE signal at the end. Do this in NIR instead of in the backends. Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Qiang Yu <yuq825@gmail.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22690>
This commit is contained in:
@@ -280,37 +280,6 @@ radv_load_output(struct radv_shader_context *ctx, unsigned index, unsigned chan)
|
||||
return LLVMBuildLoad2(ctx->ac.builder, type, output, "");
|
||||
}
|
||||
|
||||
static void
|
||||
emit_gs_epilogue(struct radv_shader_context *ctx)
|
||||
{
|
||||
if (ctx->ac.gfx_level >= GFX10)
|
||||
ac_build_waitcnt(&ctx->ac, AC_WAIT_VSTORE);
|
||||
|
||||
ac_build_sendmsg(&ctx->ac, AC_SENDMSG_GS_OP_NOP | AC_SENDMSG_GS_DONE, ctx->gs_wave_id);
|
||||
}
|
||||
|
||||
static void
|
||||
handle_shader_outputs_post(struct ac_shader_abi *abi)
|
||||
{
|
||||
struct radv_shader_context *ctx = radv_shader_context_from_abi(abi);
|
||||
|
||||
switch (ctx->stage) {
|
||||
case MESA_SHADER_VERTEX:
|
||||
case MESA_SHADER_TESS_CTRL:
|
||||
case MESA_SHADER_TESS_EVAL:
|
||||
case MESA_SHADER_FRAGMENT:
|
||||
break; /* Lowered in NIR */
|
||||
case MESA_SHADER_GEOMETRY:
|
||||
if (ctx->shader_info->is_ngg)
|
||||
break; /* Lowered in NIR */
|
||||
else
|
||||
emit_gs_epilogue(ctx);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ac_llvm_finalize_module(struct radv_shader_context *ctx, LLVMPassManagerRef passmgr)
|
||||
{
|
||||
@@ -523,9 +492,6 @@ ac_translate_nir_to_llvm(struct ac_llvm_compiler *ac_llvm,
|
||||
abort();
|
||||
}
|
||||
|
||||
if (!gl_shader_stage_is_compute(shaders[shader_idx]->info.stage))
|
||||
handle_shader_outputs_post(&ctx.abi);
|
||||
|
||||
if (check_merged_wave_info) {
|
||||
LLVMBuildBr(ctx.ac.builder, merge_block);
|
||||
LLVMPositionBuilderAtEnd(ctx.ac.builder, merge_block);
|
||||
|
Reference in New Issue
Block a user