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);