Skip to content

Conversation

SiTronXD
Copy link

There is currently a synchronization bug when dumping the swapchain to file in the DX12 path. The cause of the bug is that a semaphore is signaled before the execution of the command buffer responsible for copying the render target into a buffer on a readback heap. Instead, the semaphore should be signaled after the command buffer execution.

Although the bug would be fixed by moving line 225 to line 230, the code becomes more readable by reusing already existing code for handling immediate execution of command buffers. This is what the Vulkan path already does.

Furthermore, a transition barrier was added after the copy operation to transition the render target back to a Present state, similar to what the Vulkan path does.

@SiTronXD
Copy link
Author

Also note that the current code for dumping the swapchain to file does not handle rounding up the texture row pitch to a multiple of 256. Row pitch does not strictly need rounding when the default render target is 2560x1440, R8G8B8A8. But resizing the window and then dumping the swapchain may cause a crash.

For an example of how rounding the row pitch can be implemented, see: https://github.com/microsoft/DirectXTK12/blob/main/Src/ScreenGrab.cpp

@kurbeco kurbeco force-pushed the main branch 3 times, most recently from beeb9fd to c6efa6b Compare August 20, 2025 16:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant