diff options
| author | Alex <78863999+Sssnowyyy@users.noreply.github.com> | 2026-11-03 01:29:23 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-11-03 07:29:23 +0100 |
| commit | f50099038ee4c95901821e137471a8ce87bf52a4 (patch) | |
| tree | 25dc841aa63c9958687a7d28fa84bd7d226598f9 /src/video_core/texture_cache/texture_cache.cpp | |
| parent | ad7282cd736ae75b126088d7d6986efebd048c15 (diff) | |
nx2: fewer render pass splits on tiled GPUs, log failed GPU waits (Pokopia) (#361)
* buffer_cache: don't end the render pass after mapped buffer uploads
Every upload set any_buffer_uploaded, and the next draw or dispatch then
recorded a transfer-to-shader barrier outside the render pass. On Vulkan
the uploads are mapped: each copy either records its own barriers
(CopyBuffer with barrier set) or goes to the upload command buffer,
which ends with a barrier before the frame's commands run. The extra
barrier only ended the render pass.
On tiled GPUs every such split writes the attachments out and reads
them back. Pokopia's first gameplay scene had ~50 of these splits a
frame. Without them, an M3 MacBook Air (MoltenVK, 1x docked) goes from
~35 to ~29.5 ms of GPU time a frame and from 28.5 to 32 fps.
OpenGL uploads immediately and keeps the barrier.
Assisted-by: Claude Opus 5.5 (profiling, implementation and commit message)
* vulkan: log a failed GPU wait before it ends the process
When the device is lost, vkWaitSemaphores in MasterSemaphore::Wait
returns VK_ERROR_DEVICE_LOST and the exception goes uncaught on the
fence thread or the GPU thread, so the process aborts without a line in
the log: ReportLoss is only reached from submit and present. A Pokopia
crash on macOS left the log ending a second before the abort, with no
hint that the GPU was lost.
Log the wait's result before rethrowing. On macOS, MoltenVK prints the
Metal reason (a GPU hang or page fault) to stderr only.
Assisted-by: Claude Opus 5.5 (diagnosis, implementation and commit message)
Diffstat (limited to 'src/video_core/texture_cache/texture_cache.cpp')
0 files changed, 0 insertions, 0 deletions
