zink: don't remove psiz from linked shaders if the consumer reads it
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Thu, 25 May 2023 19:37:45 +0000 (15:37 -0400)
committerMarge Bot <emma+marge@anholt.net>
Fri, 26 May 2023 12:16:04 +0000 (12:16 +0000)
it's valid for psiz to be piped through successive stages, so don't
delete it unnecessarily

cc: mesa-stable

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23240>

src/gallium/drivers/zink/zink_compiler.c

index 806b40c..32fee0b 100644 (file)
@@ -2684,7 +2684,7 @@ zink_compiler_assign_io(struct zink_screen *screen, nir_shader *producer, nir_sh
    if (consumer->info.stage != MESA_SHADER_FRAGMENT) {
       /* remove injected pointsize from all but the last vertex stage */
       nir_variable *var = nir_find_variable_with_location(producer, nir_var_shader_out, VARYING_SLOT_PSIZ);
-      if (var && !var->data.explicit_location) {
+      if (var && !var->data.explicit_location && !nir_find_variable_with_location(consumer, nir_var_shader_in, VARYING_SLOT_PSIZ)) {
          var->data.mode = nir_var_shader_temp;
          nir_fixup_deref_modes(producer);
          NIR_PASS_V(producer, nir_remove_dead_variables, nir_var_shader_temp, NULL);