Mesa (main): radv: fix removing PSIZ when it's not emitted by the last VGT stage

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Oct 18 08:34:46 UTC 2021


Module: Mesa
Branch: main
Commit: 61be0bd34b34617e52211280878e71d9d1f174eb
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=61be0bd34b34617e52211280878e71d9d1f174eb

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Fri Oct 15 14:52:13 2021 +0200

radv: fix removing PSIZ when it's not emitted by the last VGT stage

This dereferences a NULL pointer and crash many tests with Zink.

Fixes: 92e1981a800 ("radv: Remove PSIZ output when it isn't needed.")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13378>

---

 src/amd/vulkan/radv_pipeline.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 5cf991dd93d..44ae5d919ea 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -2390,10 +2390,11 @@ radv_link_shaders(struct radv_pipeline *pipeline,
              (info->stage == MESA_SHADER_TESS_EVAL && info->tess.point_mode) ||
              (info->stage == MESA_SHADER_GEOMETRY && info->gs.output_primitive == GL_POINTS));
 
-         if (!next_stage_needs_psiz && !topology_uses_psiz) {
-            /* Change PSIZ to a global variable which allows it to be DCE'd. */
-            nir_variable *psiz_var =
+         nir_variable *psiz_var =
                nir_find_variable_with_location(ordered_shaders[i], nir_var_shader_out, VARYING_SLOT_PSIZ);
+
+         if (!next_stage_needs_psiz && !topology_uses_psiz && psiz_var) {
+            /* Change PSIZ to a global variable which allows it to be DCE'd. */
             psiz_var->data.location = 0;
             psiz_var->data.mode = nir_var_shader_temp;
 



More information about the mesa-commit mailing list