Repository navigation
fix(agc): draw rect lists in last provoking vertex mode - #7251
oneandonlydean merged 1 commit into
Conversation
The generated rect-list control stage gave every corner of a rectangle the flat inputs of its first vertex, so last mode was refused for rect lists. BuildRectListShaders now also builds a control stage that takes them from the rectangle's third vertex when the pixel shader has a flat input, and a draw in last mode uses it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
First NVIDIA + Intel runs, head
This is the guard behind the Tekken Dark Resurrection abort in #7118 — last-mode rect lists now draw on three vendor stacks. |
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
|
Thanks for the focused independent GPU run on |
What
TEKKEN DARK RESURRECTION (PPSA31371) aborts right after its controller screen with
AGC graphics: last provoking vertex is unsupported for generated primitive pipelines(#7118). The log line before it is a rect-list preparation, and withPROVOKING_VTX_LASTcleared locally the reporter's run got past this stop.Rect lists are drawn through a generated tessellation control stage that writes the four corners of each rectangle. It gave every corner the flat inputs of the rectangle's first vertex, so
ValidateProvokingVertexrefused last mode for every rect list.BuildRectListShadersnow also builds a control stage that gives the corners the flat inputs of the rectangle's third vertex, the last of its three, as @MarcZX100 outlined on #7118. A draw whose state asks for the last provoking vertex uses it. When the pixel shader has no flat input the two stages are the same module, so nothing extra is built. Since all four corners carry the same flat values, it doesn't matter which provoking vertex Vulkan picks for the tessellated triangles, as in first mode. The pipeline key already includes the provoking vertex mode, and the new module has its own content identity, so the pipeline cache and the journal keep the two apart.ValidateProvokingVertexnow accepts rect lists in last mode. Its other checks still apply: it still needsVK_EXT_provoking_vertexand still refuses explicit per-vertex flat inputs. ThePROVOKING_VTX_LASTdebt entry says which vertex is used and that, like the rest of that entry, it is not measured on a console.Not covered: the title's next stop with the bit cleared,
Videodec2: reset required after flushing(#7118), is a separate failure.Overlaps:
RectListEmitterconstructor. Whichever of the two merges second has to pass that count to the new emitter as well.ValidateProvokingVertexabove the changed line.Tested
Windows 11 26200, AMD Radeon RX 6700 XT (gfx1031), driver 32.0.21045.5002, WinLibs GCC 15.2.0 r7, Release,
BUILD_TESTING=ON,ANYPS5_REQUIRE_VULKAN=1:agc_driver_provoking_vertexhas a new rect-list case. A guest pixel shader with a flatv_interp_mov_f32P0 input reads a rectangle whose three vertices are red, green and blue. It is drawn in three panels in first, last and first mode, and every checked pixel of the rectangle must be red in first mode and blue in last mode.ValidateProvokingVertexas onmainit fails with the title's message.guest P0 rect list, last provoking vertex: pixel (80, 16) channel 0 is 255, expected 0.agc_driver_graphics:ValidateProvokingVertexaccepts a rect list in last mode with a flat pixel input; with the check as onmainit fails with the title's message.ValidateShaders.ctest --parallel 4 --timeout 120onmain5859889b2with this change (mainhas since moved to922dc8999without touching these files): 1400 tests. Onlyagc_driver_lds_mixed_width_atomics(agc_* tests: 3 of 483 fail on AMD Radeon RX 6400, pass on NVIDIA RTX 4080 SUPER #5271, fixed by fix(shader): release the LDS lock with an exchange and drop fences inside it #6976) andagc_driver_layered_volume_vertex_no_gpl(AMD Windows: alpha-to-coverage still fails at the original executable path after #6436 #4768) fail, as onmainhere.python tools/check_conventions.py --base origin/mainwith this title and body passes.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)🤖 Generated with Claude Code