diff --git a/src/freedreno/ci/freedreno-a630-fails.txt b/src/freedreno/ci/freedreno-a630-fails.txt index e2b50755547..7cf4c79b415 100644 --- a/src/freedreno/ci/freedreno-a630-fails.txt +++ b/src/freedreno/ci/freedreno-a630-fails.txt @@ -53,7 +53,6 @@ glx@glx-swap-pixmap-bad,Fail glx@glx-visuals-depth -pixmap,Crash glx@glx-visuals-stencil -pixmap,Crash shaders@glsl-fs-fogscale,Fail -shaders@glsl-fs-fogscale@gs-out and fs,Fail # "../src/freedreno/ir3/ir3_shader.h:968:ir3_link_add: Assertion `i < ARRAY_SIZE(l->var)' failed." shaders@glsl-max-varyings >max_varying_components,Crash @@ -462,27 +461,17 @@ spec@!opengl 2.0@gl-2.0-edgeflag-immediate,Crash spec@!opengl 2.0@vertex-program-two-side back back2,Crash spec@!opengl 2.0@vertex-program-two-side back front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side back front2 back2@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side back front2,Fail -spec@!opengl 2.0@vertex-program-two-side back front2@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side back,Crash spec@!opengl 2.0@vertex-program-two-side back2,Crash spec@!opengl 2.0@vertex-program-two-side enabled back back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled back back2@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side enabled back front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled back front2 back2@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side enabled back front2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled back front2@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side enabled back,Fail -spec@!opengl 2.0@vertex-program-two-side enabled back@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side enabled back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled back2@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side enabled front back back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back back2@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side enabled front back front2 back2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back front2 back2@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side enabled front back front2,Fail -spec@!opengl 2.0@vertex-program-two-side enabled front back front2@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side enabled front back,Fail spec@!opengl 2.0@vertex-program-two-side enabled front back@gs-out and fs,Fail spec@!opengl 2.0@vertex-program-two-side enabled front back2,Fail diff --git a/src/freedreno/ir3/ir3_nir_lower_tess.c b/src/freedreno/ir3/ir3_nir_lower_tess.c index b0a5bd57f00..b03f88f5f08 100644 --- a/src/freedreno/ir3/ir3_nir_lower_tess.c +++ b/src/freedreno/ir3/ir3_nir_lower_tess.c @@ -1001,6 +1001,20 @@ ir3_nir_lower_gs(nir_shader *shader) nir_ssa_def *cond = nir_ieq_imm(&b, nir_load_var(&b, state.emitted_vertex_var), 0); + /* If we haven't emitted any vertex we need to copy the shadow (old) + * outputs to emit outputs here. + * + * Also some piglit GS tests[1] don't have EndPrimitive() so throw + * in an extra vertex_flags write for good measure. If unneeded it + * will be optimized out. + * + * [1] ex, tests/spec/glsl-1.50/execution/compatibility/clipping/gs-clip-vertex-const-accept.shader_test + */ + nir_push_if(&b, cond); + nir_store_var(&b, state.vertex_flags_out, nir_imm_int(&b, 4), 0x1); + copy_vars(&b, &state.emit_outputs, &state.old_outputs); + nir_pop_if(&b, NULL); + nir_discard_if(&b, cond); copy_vars(&b, &state.new_outputs, &state.emit_outputs);