Skip to content

AGC: pending-producer fixture passes with invalid host-event synchronization #7868

Closed

Description

@Amoenus

Reproduction

The new pending-producer fixture passes 3/3 fresh executions on each physical GPU, but Khronos validation reports two errors per process, 12 total:

VUID-vkCmdWaitEvents-srcStageMask-01158
VUID-vkSetEvent-event-09543

Main production: 7a36de66b91217fb00fe6751343506ab01e677b3. Tested control f1a91a8656 differs only in the unrelated OversizedDispatch.cpp regression; this fixture and every production file are identical to main. Fixture blob: d1cc6ec8e0f2acedfeb224f24e3370184cbfeb40.

After a full default and explicit relinker/library/selected-target build with BUILD_TESTING=ON:

$env:ANYPS5_REQUIRE_VULKAN = '1'
$env:ANYPS5_NO_SHADER_CACHE = '1'
$env:ANYPS5_GPU = 'NVIDIA GeForce RTX 5080'
$env:VK_INSTANCE_LAYERS = 'VK_LAYER_KHRONOS_validation'
$env:VK_LAYER_PATH = '<VulkanSDK>/Bin'
ctest --test-dir build -V -j1 --no-tests=error --repeat until-fail:3 --timeout 30 -R '^agc_driver_indirect_arguments_pending_producer$'

Repeat with ANYPS5_GPU=AMD Radeon(TM) Graphics. Other inherited APS5_*, ANYPS5_* and VK_* overrides were cleared; the pipeline journal was disabled. Driver caches were uncontrolled.

Actual GPU Driver Behavioral passes Validation errors
NVIDIA GeForce RTX 5080, 10de:2c02 610.62 / 32.0.16.1062 3/3 6
AMD Radeon(TM) Graphics, 1002:13c0 32.0.21036.18 3/3 6

Windows 11 Enterprise 26200, WinLibs GCC 15.2 r7, Release, Khronos 1.4.363 confirmed loaded on each device. No warnings, whole-test skips, timeouts or watchdog releases. Each process still reports pending producer CPU fallback: cpuReason 2.

Cause and scope

ProducerSubmissionGate::Record submits a wait for an unsignaled event with HOST_BIT. Its worker subsequently calls vkSetEvent after observing the later producer submission. Khronos rejects both the event's unsignaled state at submission and the host signal while the wait is pending.

The official vkSetEvent specification requires host signaling before submitting the waiting command buffer; 09543 forbids signaling an event with a pending command-buffer wait. The vkCmdWaitEvents rules describe the corresponding source-stage restriction (01158).

This concerns the test gate introduced in merged #6786, not a demonstrated defect in its production FinishLeaseWork correction or a Sonic/title stop. A replacement gate should preserve the deterministic pending real label, deferred/unsubmitted leased producer, cpuReason == 2, fresh-argument/readback checks and failing watchdog control. Signaling before submission merely to remove the VUIDs would remove the gate's intended condition.

Full logs retained. NVIDIA SHA256: 578baeefe4f8f6eeee7bcfc37fbc982ad21ac7f6c20ecec3ee163465c6af365f; AMD: 58b8183f47204ea4ca8761ce2cd6acb117167ece28f2d7d58cbfb685e5b47520. Searched both exact VUIDs, the fixture name and pending-producer/event reports; no matching open issue/PR found. No implementation proposed or console/performance claim. AI-assisted validation/report: Codex.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions