Repository navigation
feat(agc): replay proven finite stencil reference exports - #5466
Conversation
fff34dc to
d87ea1b
Compare
d87ea1b to
c7595e9
Compare
c7595e9 to
63368e1
Compare
|
Intel run for this PR: Intel UHD Graphics 770 (Raptor Lake iGPU of an i9-13900K), driver 32.0.101.6129, Windows 11, MinGW-w64 GCC 15.2.0 Release, device picked with
AI-assisted (Claude Code). |
|
Thanks for testing head 63368e1. I have recorded the Intel UHD 770 result separately from the local RTX 3060 matrix: both stencil pipeline modes and the masked-select/graphics checks passed, with 362 passes and the same 28 main-branch skips in the broader selection. The current rebase also needs compatibility checks for the disk resource-plan format that merged into main; those CPU results will be reported separately. A further vertex-mask case is being verified and is not covered by the tested head. |
|
Demon's Souls (PPSA01341 v1.07) on Linux, RTX 5070 Ti, NVIDIA 595.91 (no With your three #758 adaptations applied (the first removes a separate blocker, #758's EXEC operand on
With both rules bypassed locally, the shader recompiles (66435 SPIR-V words). The title then stops at t+513, still in the level load, on another limit: The captured request holds the game's shader binary and captured guest memory, so I can't attach it. I can run a build or log specific values on request. AI-assisted: yes |
Preserve instance and triangle order with one dynamic-reference shader pipeline. Require bounded references, complete export coverage, replay-safe mask control and resources; refuse unsupported side effects and feedback. Co-Authored-By: Codex <noreply@openai.com>
Update only dynamic reference state between replay classes so asynchronous pipeline optimization cannot switch the shader prefix within an original draw. Co-Authored-By: Codex <noreply@openai.com>
Main now uses disk cache format30 for persisted resource plans. Stencil replay adds artifact and binding fields, so reject that format instead of sharing its version. Keep format31 for the combined codec and cover rejection of a format30 artifact header. Co-Authored-By: Codex <noreply@openai.com>
Preserve replay refusal for observable lane-dependent values, non-vertex stages, unknown subgroup widths and varying-size modules. Validate the actual native vertex subgroup contract and retain compiled single-lane targets. Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Codex <noreply@openai.com>
Advance the stencil artifact schema past current main format 31 and retain explicit rejection of that format. Update Linux artifact size guards for main runtime image resource metadata. Co-Authored-By: Codex <noreply@openai.com>
Advance stencil artifacts to format 33 after main's format 32 change. Keep explicit rejection of upstream format 32 while preserving the existing stencil fields and runtime image metadata. Co-Authored-By: Codex <noreply@openai.com>
Keep format 33 and its previous-format 32 refusal; also cover the current main format 31 explicitly. Co-Authored-By: Codex <noreply@openai.com>
Move bounded vertex folding and empty-image feedback into separate topics. Keep the replay coverage proof, stage contracts, finite-reference tests and mapped cache regressions; version the stencil layout separately as format 34. Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Codex <noreply@openai.com>
Check sampled image-table entries with the existing stencil replay depth-feedback refusal. Keep the cache regression tied to current upstream format 33 while stencil artifacts use format 34. Co-Authored-By: Codex <noreply@openai.com>
Main's flatVolumeLineCompatible change also took format 34 with another layout, so entries of either would load as the other. Co-Authored-By: Claude <noreply@anthropic.com>
436fc35 to
d8e97a7
Compare
adriadam10
left a comment
There was a problem hiding this comment.
Re-checked at 436fc35: the build error, the title/"Unblocks" claim and the topic split are fixed, thanks.
Since your base, dd8f2eb also moved the shader disk cache to format 34 (with a different layout), so both would have loaded each other's entries. I rebased onto current main, resolved the docs/dev/ARCHITECTURE.md conflict, and moved the stencil artifacts to format 35 (ShaderDiskCache.hpp, ARCHITECTURE.md now says entries from formats 31 to 34 are rejected; the existing previous-version test covers 34).
Checked on the rebased tree: build, agc_driver_stencil_replay, agc_driver_stencil_replay_no_gpl, agc_shader_disk_cache, agc_masked_select, agc_driver_graphics pass; the PR's tests don't build without the code change. The only failing test in the area, agc_driver_tessellation, segfaults inside RADV on plain main too. Merging once the full Build is green.
|
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.
|
What
Replay finite stencil reference exports on devices without
VK_EXT_shader_stencil_export, for a conservative subset of shaders and draws whose equivalence can be proved. This PR establishes synthetic replay cases; it does not establish advancement in Demon's Souls. The title's quad DPP and ballot-based kill early-outs remain refused.The recompiler proves complete export coverage and at most 16 eight-bit references, and reserves a bounded word in the existing push block. The driver keeps one Vulkan pipeline bound throughout each original draw and preserves instance, primitive and reference order. Both faces retain their stencil operations and masks, including depth-fail replacement. Multiple-reference replay admits direct triangle lists and preserves indexed offsets, base vertex and first instance.
Replay requires deterministic, read-only stages and no attachment feedback. Unsupported topology, indirect/restart draws, multisampling, early/ordered tests, incomplete coverage, unbounded references, side effects and surviving subgroup/helper dependence throw. Guarded read-only SRT faults are checked synchronously before host copyback. The native extension path is retained.
This revision separates the vertex lane-bound fold into #5914 and the empty-image feedback check into dependent #5917.
GuardImpliesand masked-export coverage helpers remain here because they prove the pixel export coverage needed for replay; the separate vertex optimizer is absent from this diff. Current-main vertex input layouts, sample-location grids and per-sample shading are retained.The artifact schema uses format 34 and updates
docs/dev/ARCHITECTURE.md. It rejects formats 31/32/33 and preserves current main's image-table invocation metadata and mapped persistent-cache tests. Merged #758 uses format 33; #5734 also touches this cache. Format 34 keeps the replay schema distinct. The feedback scan now also checks sampled ImageTable entries using main's validated eight-word image elements.Tested
e34c47921; original authors, author dates and full commit messages are preserved. Conventions and diff checks pass.g++ -O3 -fsyntax-onlychecks pass for Recompiler, the full ShaderDiskCache test, Draw, Pipeline, State and the native replay fixture. The fixture now copies the immutable SPIR-V span into a vector before mutation.APS5_NO_GPL=1, without skips: overlapping primitives/instances, indexed offsets/base vertex, first instance, distinct face operations/masks, truncation, depth-fail replacement, fragment kills, adjacent push data and valid/poisoned SRT handling. These results predate this rebase. This current public head has no fresh native GPU or title run; that validation remains pending. Integration character-creation/FPS results are not evidence for this public head.Checklist
main; no other open PR implements the same functions.mdfiles or images added to the repositoryCo-Authored-By: Codex noreply@openai.com