1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-02 22:29:16 +01:00

[dxvk] Fixed potentially problematic image barriers

This commit is contained in:
Philip Rebohle 2018-01-23 19:00:48 +01:00
parent a1a7bb9092
commit f53ada57f9
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99

View File

@ -182,14 +182,14 @@ namespace dxvk {
const VkImageSubresourceRange& subresources) { const VkImageSubresourceRange& subresources) {
this->renderPassEnd(); this->renderPassEnd();
if (image->info().layout != VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) { m_barriers.accessImage(image, subresources,
m_barriers.accessImage(image, subresources, VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_UNDEFINED, 0, 0, image->info().stages,
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, image->info().access,
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
VK_ACCESS_TRANSFER_WRITE_BIT); VK_PIPELINE_STAGE_TRANSFER_BIT,
m_barriers.recordCommands(m_cmd); VK_ACCESS_TRANSFER_WRITE_BIT);
} m_barriers.recordCommands(m_cmd);
m_cmd->cmdClearColorImage(image->handle(), m_cmd->cmdClearColorImage(image->handle(),
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
@ -214,14 +214,14 @@ namespace dxvk {
const VkImageSubresourceRange& subresources) { const VkImageSubresourceRange& subresources) {
this->renderPassEnd(); this->renderPassEnd();
if (image->info().layout != VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) { m_barriers.accessImage(image, subresources,
m_barriers.accessImage(image, subresources, VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_UNDEFINED, 0, 0, image->info().stages,
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, image->info().access,
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
VK_ACCESS_TRANSFER_WRITE_BIT); VK_PIPELINE_STAGE_TRANSFER_BIT,
m_barriers.recordCommands(m_cmd); VK_ACCESS_TRANSFER_WRITE_BIT);
} m_barriers.recordCommands(m_cmd);
m_cmd->cmdClearDepthStencilImage(image->handle(), m_cmd->cmdClearDepthStencilImage(image->handle(),
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
@ -603,7 +603,8 @@ namespace dxvk {
const Rc<DxvkImage>& image, const Rc<DxvkImage>& image,
const VkImageSubresourceRange& subresources) { const VkImageSubresourceRange& subresources) {
m_barriers.accessImage(image, subresources, m_barriers.accessImage(image, subresources,
VK_IMAGE_LAYOUT_UNDEFINED, 0, 0, VK_IMAGE_LAYOUT_UNDEFINED,
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0,
image->info().layout, image->info().layout,
image->info().stages, image->info().stages,
image->info().access); image->info().access);
@ -782,7 +783,9 @@ namespace dxvk {
// area, so we might as well discard its contents // area, so we might as well discard its contents
m_barriers.accessImage( m_barriers.accessImage(
dstImage, dstSubresourceRange, dstImage, dstSubresourceRange,
VK_IMAGE_LAYOUT_UNDEFINED, 0, 0, VK_IMAGE_LAYOUT_UNDEFINED,
dstImage->info().stages,
dstImage->info().access,
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 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);