diff --git a/src/rendervulkan.cpp b/src/rendervulkan.cpp index e42fbd0876..18e31641b2 100644 --- a/src/rendervulkan.cpp +++ b/src/rendervulkan.cpp @@ -1684,7 +1684,7 @@ void CVulkanCmdBuffer::insertBarrier(const barrier_info_t * const barrier_info) VkFlags srcStageMask = m_previousCopy ? VK_PIPELINE_STAGE_TRANSFER_BIT : 0; VkAccessFlags src_write_bits = m_previousCopy ? VK_ACCESS_TRANSFER_WRITE_BIT : 0; - VkFlags dstStageMask = 0; + VkFlags dstStageMask = srcStageMask; VkAccessFlags dst_write_bits; VkAccessFlags dst_read_bits; @@ -1711,12 +1711,9 @@ void CVulkanCmdBuffer::insertBarrier(const barrier_info_t * const barrier_info) srcStageMask |= (!isFirst ? VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT : 0); - srcStageMask = (srcStageMask == 0) ? static_cast(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT) : srcStageMask; - dstStageMask = (m_previousCopy ? VK_PIPELINE_STAGE_TRANSFER_BIT : 0) - | ( multipleShaders ? VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT : 0); + dstStageMask |= ( multipleShaders ? VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT : 0); - dstStageMask = (dstStageMask == 0) ? static_cast(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT) : dstStageMask; break; } case (pipeline_task::copy): { @@ -1727,8 +1724,7 @@ void CVulkanCmdBuffer::insertBarrier(const barrier_info_t * const barrier_info) dst_read_bits = VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_SHADER_READ_BIT; dst_write_bits = VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_WRITE_BIT; - srcStageMask = (srcStageMask == 0) ? static_cast(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT) : srcStageMask; - dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; + dstStageMask |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; break; } case (pipeline_task::end): { @@ -1740,7 +1736,6 @@ void CVulkanCmdBuffer::insertBarrier(const barrier_info_t * const barrier_info) dst_read_bits = dst_write_bits = 0; srcStageMask |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; - dstStageMask = m_previousCopy ? VK_PIPELINE_STAGE_TRANSFER_BIT : VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; break; } default: @@ -1749,6 +1744,12 @@ void CVulkanCmdBuffer::insertBarrier(const barrier_info_t * const barrier_info) break; } } + + if (srcStageMask == 0) + srcStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; + if (dstStageMask == 0) + dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; + for (auto& pair : m_textureState) { @@ -3842,13 +3843,18 @@ std::optional vulkan_composite( struct FrameInfo_t *frameInfo, std::sh for (uint32_t i = 0; i < EOTF_Count; i++) cmdBuffer->bindColorMgmtLuts(i, frameInfo->shaperLut[i], frameInfo->lut3D[i]); - unsigned int total_dispatches = ( pPipewireTexture != nullptr ) ? 1 : 0; - total_dispatches += ( - ( frameInfo->useFSRLayer0 || frameInfo->useNISLayer0 || frameInfo->blurLayer0 ) ? 2 : 1 - ); + + + unsigned int total_dispatches = 1; + if ( frameInfo->useFSRLayer0 || frameInfo->useNISLayer0 || frameInfo->blurLayer0 ) + total_dispatches = 2; + + if ( pPipewireTexture != nullptr ) + total_dispatches++; unsigned int curr_dispatch_no = 1; + if ( frameInfo->useFSRLayer0 ) { uint32_t inputX = frameInfo->layers[0].tex->width();