Point size is a single component value and drivers might write the full vec4
potentially overwriting other values.

Signed-off-by: Karol Herbst <kher...@redhat.com>
---
 src/mesa/program/prog_to_nir.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c
index cb1c19e9dfa..7d17e1da48a 100644
--- a/src/mesa/program/prog_to_nir.c
+++ b/src/mesa/program/prog_to_nir.c
@@ -868,7 +868,8 @@ ptn_add_output_stores(struct ptn_compile *c)
          src = nir_channel(b, src, 2);
       }
       if (c->prog->Target == GL_VERTEX_PROGRAM_ARB &&
-          var->data.location == VARYING_SLOT_FOGC) {
+          (var->data.location == VARYING_SLOT_FOGC ||
+           var->data.location == VARYING_SLOT_PSIZ)) {
          /* result.fogcoord is a single component value */
          src = nir_channel(b, src, 0);
       }
@@ -956,7 +957,8 @@ setup_registers_and_variables(struct ptn_compile *c)
 
       nir_variable *var = rzalloc(shader, nir_variable);
       if ((c->prog->Target == GL_FRAGMENT_PROGRAM_ARB && i == 
FRAG_RESULT_DEPTH) ||
-          (c->prog->Target == GL_VERTEX_PROGRAM_ARB && i == VARYING_SLOT_FOGC))
+          (c->prog->Target == GL_VERTEX_PROGRAM_ARB &&
+           (i == VARYING_SLOT_FOGC || i == VARYING_SLOT_PSIZ)))
          var->type = glsl_float_type();
       else
          var->type = glsl_vec4_type();
-- 
2.20.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to