Fix Vulkan presenter synchronization and frame handling issues (#747)

* [VideoOut/Vulkan] Fix boot deadlock, writeback stall, and presentation bugs

- Presenter thread now starts on the compute dispatch path too, fixing
  a boot deadlock when a title's first GPU work is compute (Ghost of
  Yotei G-Buffer clear).
- Guest render-target format swaps between sibling pixel formats now
  reinterpret in place instead of recreating blank, preserving
  GPU-written content.
- Vectorized the guest-buffer writeback scan (equal-byte skip + coarse
  per-page pre-check), fixing multi-second stalls on fragmented buffers
  that starved JobWorker completion signals.
- _presentedSequence now advances on every Render() early-return path,
  fixing an unthrottled busy loop on stale/dropped presentations.

* Remove unnecessary Silk.NET.Windowing dependency
This commit is contained in:
Foued Attar
2026-08-02 23:36:33 +02:00
committed by GitHub
parent 8df4039ca4
commit f3d9439952
4 changed files with 781 additions and 37 deletions
@@ -53,7 +53,6 @@ public sealed class VulkanGuestImageAliasTests
}
[Theory]
[InlineData(Format.R8Srgb, Format.R8Unorm)]
[InlineData(Format.BC3SrgbBlock, Format.BC3UnormBlock)]
public void CounterpartsOutsideTheViewClassTableAreNotAliased(
Format existing,
@@ -68,6 +67,15 @@ public sealed class VulkanGuestImageAliasTests
VulkanVideoPresenter.IsAliasableGuestImageFormat(existing, requested));
}
[Fact]
public void R8SrgbAndR8UnormShareOneCompatibilityClass()
{
Assert.True(
VulkanVideoPresenter.IsCompatibleGuestImageViewFormat(
Format.R8Srgb,
Format.R8Unorm));
}
[Fact]
public void AliasedPairStaysWithinOneCompatibilityClass()
{