Fix Star Ocean with MSAA enabled: don't use the blit optimization, can't blit to multisampled images.

This commit is contained in:
Henrik Rydgård
2025-04-10 21:33:05 +02:00
parent d52a7ee67e
commit 73cdbe204e
2 changed files with 9 additions and 0 deletions
+4
View File
@@ -1525,6 +1525,10 @@ void VulkanQueueRunner::PerformBlit(const VKRStep &step, VkCommandBuffer cmd) {
int layerCount = std::min(step.blit.src->numLayers, step.blit.dst->numLayers);
_dbg_assert_(step.blit.src->numLayers >= step.blit.dst->numLayers);
// Blitting is not allowed for multisample images. You're suppose to use vkCmdResolveImage but it only goes in one direction (multi to single).
_dbg_assert_(step.blit.src->sampleCount == VkSampleCountFlagBits::VK_SAMPLE_COUNT_1_BIT);
_dbg_assert_(step.blit.dst->sampleCount == VkSampleCountFlagBits::VK_SAMPLE_COUNT_1_BIT);
VKRFramebuffer *src = step.blit.src;
VKRFramebuffer *dst = step.blit.dst;
+5
View File
@@ -290,6 +290,11 @@ bool FramebufferManagerCommon::PerformWriteStencilFromMemory(u32 addr, int size,
useBlit = false;
}
// Blitting to (or from) multisampled images is not allowed.
if (dstBuffer->fbo && dstBuffer->fbo->MultiSampleLevel() != 0) {
useBlit = false;
}
u16 w = useBlit ? dstBuffer->width : dstBuffer->renderWidth;
u16 h = useBlit ? dstBuffer->height : dstBuffer->renderHeight;