From 1e55d91c82267f728f7e96fa99c4f23f98cfc690 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 23 Jan 2024 17:53:40 +0100 Subject: [PATCH] radv: only merge shader info stages if both stages exist on GFX9+ With shader objects, both stages might not exist and if the src stage doesn't, this will copy garbage data because it's unitialized. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_shader_info.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index dfcb9a41901..8d9892ca573 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -1739,12 +1739,12 @@ radv_nir_shader_info_link(struct radv_device *device, const struct radv_graphics if (device->physical_device->rad_info.gfx_level >= GFX9) { /* Merge shader info for VS+TCS. */ - if (stages[MESA_SHADER_TESS_CTRL].nir) { + if (stages[MESA_SHADER_VERTEX].nir && stages[MESA_SHADER_TESS_CTRL].nir) { radv_nir_shader_info_merge(&stages[MESA_SHADER_VERTEX], &stages[MESA_SHADER_TESS_CTRL]); } /* Merge shader info for VS+GS or TES+GS. */ - if (stages[MESA_SHADER_GEOMETRY].nir) { + if ((stages[MESA_SHADER_VERTEX].nir || stages[MESA_SHADER_TESS_EVAL].nir) && stages[MESA_SHADER_GEOMETRY].nir) { gl_shader_stage pre_stage = stages[MESA_SHADER_TESS_EVAL].nir ? MESA_SHADER_TESS_EVAL : MESA_SHADER_VERTEX; radv_nir_shader_info_merge(&stages[pre_stage], &stages[MESA_SHADER_GEOMETRY]);