mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-08 23:25:40 +12:00
Add initial render-target layout transition, depth-stencil aspect fix
Fixes a lot of the render-target validation error messages. We "might" change the default layout for render-targets to shader-read-only and only use attachment-optimal layouts when they are armed for a render-pass. Render-Textures more often need to be ready for shaders than they need to be ready for render-passes.
This commit is contained in:
parent
d35c803ad6
commit
84e0d58d9e
1 changed files with 25 additions and 1 deletions
|
@ -309,6 +309,16 @@ RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt
|
|||
Helpers::panic("Error creating color render-texture: %s\n", vk::to_string(createResult.result).c_str());
|
||||
}
|
||||
|
||||
// Initial layout transition
|
||||
getCurrentCommandBuffer().pipelineBarrier(
|
||||
vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllCommands, vk::DependencyFlags{}, {}, {},
|
||||
{vk::ImageMemoryBarrier(
|
||||
vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eColorAttachmentRead, vk::ImageLayout::eUndefined,
|
||||
vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, newTexture.image.get(),
|
||||
viewInfo.subresourceRange
|
||||
)}
|
||||
);
|
||||
|
||||
return newTexture;
|
||||
}
|
||||
|
||||
|
@ -352,9 +362,13 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt
|
|||
viewInfo.viewType = vk::ImageViewType::e2D;
|
||||
viewInfo.format = textureInfo.format;
|
||||
viewInfo.components = vk::ComponentMapping();
|
||||
//viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1);
|
||||
// viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1);
|
||||
viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth, 0, 1, 0, 1);
|
||||
|
||||
if (PICA::hasStencil(format)) {
|
||||
viewInfo.subresourceRange.aspectMask |= vk::ImageAspectFlagBits::eStencil;
|
||||
}
|
||||
|
||||
if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, {&newTexture.image.get(), 1});
|
||||
result == vk::Result::eSuccess) {
|
||||
newTexture.imageMemory = std::move(imageMemory);
|
||||
|
@ -368,6 +382,16 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt
|
|||
Helpers::panic("Error creating depth render-texture: %s\n", vk::to_string(createResult.result).c_str());
|
||||
}
|
||||
|
||||
// Initial layout transition
|
||||
getCurrentCommandBuffer().pipelineBarrier(
|
||||
vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllCommands, vk::DependencyFlags{}, {}, {},
|
||||
{vk::ImageMemoryBarrier(
|
||||
vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eDepthStencilAttachmentRead, vk::ImageLayout::eUndefined,
|
||||
vk::ImageLayout::eDepthStencilAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, newTexture.image.get(),
|
||||
viewInfo.subresourceRange
|
||||
)}
|
||||
);
|
||||
|
||||
return newTexture;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue