From 542b9aaf18218dd2cf04a07065edafbdcefb60c6 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 29 Jan 2024 14:05:58 +0100 Subject: [PATCH] radv: force TCS stage for VS as LS compiled separately on GFX9+ When VS as LS is compiled separately on GFX9+, the stage/previous_stage must be VERTEX/TESS_CTRL. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_shader.c | 7 +++++++ src/amd/vulkan/radv_shader_args.c | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 0c1a20e67eb..9026bd2a966 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -1580,6 +1580,13 @@ radv_postprocess_binary_config(struct radv_device *device, struct radv_shader_bi config->rsrc2 |= S_00B22C_USER_SGPR_MSB_GFX9(args->num_user_sgprs >> 5); } + if (info->merged_shader_compiled_separately) { + /* Update the stage for merged shaders compiled separately with ESO on GFX9+. */ + if (stage == MESA_SHADER_VERTEX && info->vs.as_ls) { + stage = MESA_SHADER_TESS_CTRL; + } + } + bool wgp_mode = radv_should_use_wgp_mode(device, stage, info); switch (stage) { diff --git a/src/amd/vulkan/radv_shader_args.c b/src/amd/vulkan/radv_shader_args.c index f2e0f1cdcf0..513aa5e97d6 100644 --- a/src/amd/vulkan/radv_shader_args.c +++ b/src/amd/vulkan/radv_shader_args.c @@ -456,6 +456,14 @@ declare_shader_args(const struct radv_device *device, const struct radv_graphics stage = MESA_SHADER_GEOMETRY; } + if (info->merged_shader_compiled_separately) { + /* Update the stage for merged shaders compiled separately with ESO on GFX9+. */ + if (stage == MESA_SHADER_VERTEX && info->vs.as_ls) { + previous_stage = MESA_SHADER_VERTEX; + stage = MESA_SHADER_TESS_CTRL; + } + } + radv_init_shader_args(device, stage, args); if (gl_shader_stage_is_rt(stage)) {