From: Timur Kristóf Date: Wed, 12 Feb 2020 14:33:02 +0000 (+0100) Subject: aco: Setup correct HW stages when tessellation is used. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=90167112736c603f9f839506e4aa69fe3b8c848d;p=mesa.git aco: Setup correct HW stages when tessellation is used. Signed-off-by: Timur Kristóf Reviewed-by: Rhys Perry Part-of: --- diff --git a/src/amd/compiler/aco_instruction_selection_setup.cpp b/src/amd/compiler/aco_instruction_selection_setup.cpp index 9005c707586..5d6fd1b9f53 100644 --- a/src/amd/compiler/aco_instruction_selection_setup.cpp +++ b/src/amd/compiler/aco_instruction_selection_setup.cpp @@ -1038,6 +1038,18 @@ setup_isel_context(Program* program, program->stage |= hw_vs; else if (program->stage == (sw_vs | sw_gs) && gfx9_plus && !ngg) program->stage |= hw_gs; + else if (program->stage == sw_vs && args->shader_info->vs.as_ls) + program->stage |= hw_ls; /* GFX6-8: VS is a Local Shader, when tessellation is used */ + else if (program->stage == sw_tcs) + program->stage |= hw_hs; /* GFX6-8: TCS is a Hull Shader */ + else if (program->stage == (sw_vs | sw_tcs)) + program->stage |= hw_hs; /* GFX9-10: VS+TCS merged into a Hull Shader */ + else if (program->stage == sw_tes && !args->shader_info->tes.as_es && !ngg) + program->stage |= hw_vs; /* GFX6-9: TES without GS uses the HW VS stage (and GFX10/legacy) */ + else if (program->stage == sw_tes && args->shader_info->tes.as_es && !ngg) + program->stage |= hw_es; /* GFX6-8: TES is an Export Shader */ + else if (program->stage == (sw_tes | sw_gs) && gfx9_plus && !ngg) + program->stage |= hw_gs; /* GFX9: TES+GS merged into a GS (and GFX10/legacy) */ else unreachable("Shader stage not implemented"); diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h index 889c594634d..2d5e59c3e2b 100644 --- a/src/amd/compiler/aco_ir.h +++ b/src/amd/compiler/aco_ir.h @@ -1142,7 +1142,7 @@ static constexpr Stage tess_eval_geometry_gs = sw_tes | sw_gs | hw_gs; static constexpr Stage vertex_ls = sw_vs | hw_ls; /* vertex before tesselation control */ static constexpr Stage vertex_es = sw_vs | hw_es; /* vertex before geometry */ static constexpr Stage tess_control_hs = sw_tcs | hw_hs; -static constexpr Stage tess_eval_es = sw_tes | hw_gs; /* tesselation evaluation before geometry */ +static constexpr Stage tess_eval_es = sw_tes | hw_es; /* tesselation evaluation before geometry */ static constexpr Stage geometry_gs = sw_gs | hw_gs; class Program final {