mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[dxvk] Actually transition source image in fragment shader blits
All meta ops should transition all involved images to the correct image layout.
This commit is contained in:
parent
9c6d3a2bf6
commit
1b97ca253f
@ -2469,6 +2469,24 @@ namespace dxvk {
|
|||||||
|| m_execBarriers.isImageDirty(srcImage, srcSubresourceRange, DxvkAccess::Write))
|
|| m_execBarriers.isImageDirty(srcImage, srcSubresourceRange, DxvkAccess::Write))
|
||||||
m_execBarriers.recordCommands(m_cmd);
|
m_execBarriers.recordCommands(m_cmd);
|
||||||
|
|
||||||
|
bool isDepthStencil = region.srcSubresource.aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT);
|
||||||
|
|
||||||
|
VkImageLayout srcLayout = srcImage->pickLayout(isDepthStencil
|
||||||
|
? VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
|
||||||
|
: VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||||
|
|
||||||
|
if (srcImage->info().layout != srcLayout) {
|
||||||
|
m_execAcquires.accessImage(
|
||||||
|
srcImage, srcSubresourceRange,
|
||||||
|
srcImage->info().layout,
|
||||||
|
srcImage->info().stages, 0,
|
||||||
|
srcLayout,
|
||||||
|
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
||||||
|
VK_ACCESS_SHADER_READ_BIT);
|
||||||
|
|
||||||
|
m_execAcquires.recordCommands(m_cmd);
|
||||||
|
}
|
||||||
|
|
||||||
// Sort out image offsets so that dstOffset[0] points
|
// Sort out image offsets so that dstOffset[0] points
|
||||||
// to the top-left corner of the target area
|
// to the top-left corner of the target area
|
||||||
VkOffset3D srcOffsets[2] = { region.srcOffsets[0], region.srcOffsets[1] };
|
VkOffset3D srcOffsets[2] = { region.srcOffsets[0], region.srcOffsets[1] };
|
||||||
@ -2542,7 +2560,7 @@ namespace dxvk {
|
|||||||
VkDescriptorImageInfo descriptorImage;
|
VkDescriptorImageInfo descriptorImage;
|
||||||
descriptorImage.sampler = m_common->metaBlit().getSampler(filter);
|
descriptorImage.sampler = m_common->metaBlit().getSampler(filter);
|
||||||
descriptorImage.imageView = passObjects.srcView;
|
descriptorImage.imageView = passObjects.srcView;
|
||||||
descriptorImage.imageLayout = srcImage->info().layout;
|
descriptorImage.imageLayout = srcLayout;
|
||||||
|
|
||||||
VkWriteDescriptorSet descriptorWrite;
|
VkWriteDescriptorSet descriptorWrite;
|
||||||
descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
||||||
@ -2595,7 +2613,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
m_execBarriers.accessImage(srcImage,
|
m_execBarriers.accessImage(srcImage,
|
||||||
vk::makeSubresourceRange(region.srcSubresource),
|
vk::makeSubresourceRange(region.srcSubresource),
|
||||||
srcImage->info().layout,
|
srcLayout,
|
||||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
||||||
VK_ACCESS_SHADER_READ_BIT,
|
VK_ACCESS_SHADER_READ_BIT,
|
||||||
srcImage->info().layout,
|
srcImage->info().layout,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user