-
Notifications
You must be signed in to change notification settings - Fork 0
DX12 per-slot fence counters signalled into a single shared fence #165
Copy link
Copy link
Open
Labels
area: renderingRenderer, shaders, post processingRenderer, shaders, post processingbackend: dx12Specific to the dx12 backendSpecific to the dx12 backendbugSomething isn't workingSomething isn't workingpriority: criticalCrash, data loss, or blocks other workCrash, data loss, or blocks other workvisualIncorrect or degraded rendering outputIncorrect or degraded rendering output
Milestone
Description
Activity
Metadata
Metadata
Assignees
Labels
area: renderingRenderer, shaders, post processingRenderer, shaders, post processingbackend: dx12Specific to the dx12 backendSpecific to the dx12 backendbugSomething isn't workingSomething isn't workingpriority: criticalCrash, data loss, or blocks other workCrash, data loss, or blocks other workvisualIncorrect or degraded rendering outputIncorrect or degraded rendering output
src/Graphics/DirectX12/DirectX12Renderer.cpp:776-777, wait loop at:631-642;writes at
:1265andsrc/Graphics/DirectX12/DirectX12Buffer.cpp:382With
FrameCount == 2and both slots starting at 0, the two per-slot counters advance independently but aresignalled into one shared fence. Odd frames therefore re-signal a value the fence has already reached.
The "wait for ALL pending GPU work" loop at :631-642: whose own comment says it exists specifically to
prevent constant-buffer races: consequently short-circuits on every second frame, while the CPU overwrites
mapped UPLOAD-heap memory at :1265 and DirectX12Buffer.cpp:382.
Severity: corruption (races on every other frame).
Found by a full audit of the graphics layer. Assessed severity: corruption: every frame.