mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-15 07:29:17 +01:00
[dxvk] Fix acquire barriers in resolveImageHw
This commit is contained in:
parent
b370d13743
commit
dcc38c98e7
@ -3122,35 +3122,42 @@ namespace dxvk {
|
|||||||
|
|
||||||
// We only support resolving to the entire image
|
// We only support resolving to the entire image
|
||||||
// area, so we might as well discard its contents
|
// area, so we might as well discard its contents
|
||||||
VkImageLayout initialLayout = dstImage->info().layout;
|
VkImageLayout dstLayout = dstImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||||
|
VkImageLayout srcLayout = srcImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||||
|
|
||||||
|
VkImageLayout initialLayout = dstLayout;
|
||||||
|
|
||||||
if (dstImage->isFullSubresource(region.dstSubresource, region.extent))
|
if (dstImage->isFullSubresource(region.dstSubresource, region.extent))
|
||||||
initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||||
|
|
||||||
m_execAcquires.accessImage(
|
if (dstLayout != dstImage->info().layout) {
|
||||||
dstImage, dstSubresourceRange,
|
m_execAcquires.accessImage(
|
||||||
initialLayout, 0, 0,
|
dstImage, dstSubresourceRange, initialLayout,
|
||||||
dstImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
|
VK_PIPELINE_STAGE_TRANSFER_BIT, 0,
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
dstLayout,
|
||||||
VK_ACCESS_TRANSFER_WRITE_BIT);
|
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
|
VK_ACCESS_TRANSFER_WRITE_BIT);
|
||||||
|
}
|
||||||
|
|
||||||
m_execAcquires.accessImage(
|
if (srcLayout != srcImage->info().layout) {
|
||||||
srcImage, srcSubresourceRange,
|
m_execAcquires.accessImage(
|
||||||
srcImage->info().layout, 0, 0,
|
srcImage, srcSubresourceRange,
|
||||||
srcImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL),
|
srcImage->info().layout,
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
VK_PIPELINE_STAGE_TRANSFER_BIT, 0,
|
||||||
VK_ACCESS_TRANSFER_READ_BIT);
|
srcLayout,
|
||||||
|
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
|
VK_ACCESS_TRANSFER_READ_BIT);
|
||||||
|
}
|
||||||
|
|
||||||
m_execAcquires.recordCommands(m_cmd);
|
m_execAcquires.recordCommands(m_cmd);
|
||||||
|
|
||||||
m_cmd->cmdResolveImage(
|
m_cmd->cmdResolveImage(
|
||||||
srcImage->handle(), srcImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL),
|
srcImage->handle(), srcLayout,
|
||||||
dstImage->handle(), dstImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
|
dstImage->handle(), dstLayout,
|
||||||
1, ®ion);
|
1, ®ion);
|
||||||
|
|
||||||
m_execBarriers.accessImage(
|
m_execBarriers.accessImage(
|
||||||
dstImage, dstSubresourceRange,
|
dstImage, dstSubresourceRange, dstLayout,
|
||||||
dstImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL),
|
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
VK_ACCESS_TRANSFER_WRITE_BIT,
|
VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||||
dstImage->info().layout,
|
dstImage->info().layout,
|
||||||
@ -3158,8 +3165,7 @@ namespace dxvk {
|
|||||||
dstImage->info().access);
|
dstImage->info().access);
|
||||||
|
|
||||||
m_execBarriers.accessImage(
|
m_execBarriers.accessImage(
|
||||||
srcImage, srcSubresourceRange,
|
srcImage, srcSubresourceRange, srcLayout,
|
||||||
srcImage->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL),
|
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
VK_ACCESS_TRANSFER_READ_BIT,
|
VK_ACCESS_TRANSFER_READ_BIT,
|
||||||
srcImage->info().layout,
|
srcImage->info().layout,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user