mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-21 18:29:05 +02:00
thin3d: Add Framebuffer::HasDepthStencil, check it before depth/stencil copies
ResizeFramebufFBO now asks the framebuffer whether it has a depth/stencil buffer instead of guessing from the z address and stride. Vulkan CopyFramebuffer gets the debug asserts and bail-out BlitFramebuffer already had, and GL copies and blits get the same, so a copy out of a framebuffer without depth/stencil asserts where it's queued instead of in the queue runner. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
8fb0f74255
commit
074b66b49b
6 files changed
+35
-5
No files matched your search
@@ -1440,6 +1440,16 @@ void VulkanRenderManager::CopyFramebuffer(VKRFramebuffer *src, VkRect2D srcRect,
|
||||
_dbg_assert_msg_(dstPos.x + srcRect.extent.width <= (uint32_t)dst->width, "dstPos + extent x > width");
|
||||
_dbg_assert_msg_(dstPos.y + srcRect.extent.height <= (uint32_t)dst->height, "dstPos + extent y > height");
|
||||
|
||||
if (aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
|
||||
_dbg_assert_msg_(src->depth.image != VK_NULL_HANDLE, "%s", src->Tag());
|
||||
_dbg_assert_msg_(dst->depth.image != VK_NULL_HANDLE, "%s", dst->Tag());
|
||||
|
||||
if (!src->depth.image || !dst->depth.image) {
|
||||
// Something has gone wrong, but let's try to stumble along.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
VkImageLayout finalSrcLayoutBeforeCopy = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
|
||||
if (src == dst) {
|
||||
// We only use the first loop before, and transition to VK_IMAGE_LAYOUT_GENERAL.
|
||||
|
||||
Reference in new issue
Block a user