Skip to content

Fix: Synchronization bug when dumping swapchain in DX12 path #155

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

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

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