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

Author: Pavel Ondračka <pavel.ondra...@gmail.com>
Date:   Thu Jan 11 16:10:45 2024 +0100

r300: skip draw if vertex shader does not write gl_Position

Fixes few more piglit crashes.

Signed-off-by: Pavel Ondračka <pavel.ondra...@gmail.com>
Reviewed-by: Filip Gawin <filip.ga...@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27006>

---

 src/gallium/drivers/r300/ci/r300-rv530-nohiz-fails.txt | 7 -------
 src/gallium/drivers/r300/r300_vs.c                     | 6 ++++++
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/r300/ci/r300-rv530-nohiz-fails.txt 
b/src/gallium/drivers/r300/ci/r300-rv530-nohiz-fails.txt
index 5bebb4eb040..4b5c3969004 100644
--- a/src/gallium/drivers/r300/ci/r300-rv530-nohiz-fails.txt
+++ b/src/gallium/drivers/r300/ci/r300-rv530-nohiz-fails.txt
@@ -490,13 +490,6 @@ spec@arb_point_sprite@arb_point_sprite-mipmap,Fail
 
 spec@arb_sampler_objects@sampler-incomplete,Fail
 
-# The test accidentally assigns a varying output instead of an attribute input 
to
-# gl_Position, then it gets optimized out and then set_vertex_inputs_outputs 
gets
-# angry that nobody set gl_Position.
-spec@arb_separate_shader_objects@getprogrampipelineiv,Crash
-spec@glsl-1.20@linker@invariant-propagation-globals,Crash
-spec@glsl-es-1.00@linker@glsl-no-glposition,Crash
-
 spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail
 spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail
 spec@arb_shader_texture_lod@execution@tex-miplevel-selection *gradarb 1d,Fail
diff --git a/src/gallium/drivers/r300/r300_vs.c 
b/src/gallium/drivers/r300/r300_vs.c
index 6449584bc09..bb34259d96d 100644
--- a/src/gallium/drivers/r300/r300_vs.c
+++ b/src/gallium/drivers/r300/r300_vs.c
@@ -199,6 +199,12 @@ void r300_translate_vertex_shader(struct r300_context 
*r300,
 
     r300_init_vs_outputs(r300, shader);
 
+    /* Nothing to do if the shader does not write gl_Position. */
+    if (vs->outputs.pos == ATTR_UNUSED) {
+        vs->dummy = true;
+        return;
+    }
+
     /* Setup the compiler */
     memset(&compiler, 0, sizeof(compiler));
     rc_init(&compiler.Base, &r300->vs_regalloc_state);

Reply via email to