From 20d3a4370ab5ada66df337de57930024b7174792 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Sat, 19 Sep 2026 05:42:55 -0400 Subject: [PATCH] Remove the dependency test + remove color texture filter per shasder storage view --- .../renderer_vulkan/vk_render_pass_cache.cpp | 86 ++++++------------- .../renderer_vulkan/vk_texture_cache.cpp | 3 - 2 files changed, 25 insertions(+), 64 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_render_pass_cache.cpp b/src/video_core/renderer_vulkan/vk_render_pass_cache.cpp index fc65596eb8..4d8fa15d16 100644 --- a/src/video_core/renderer_vulkan/vk_render_pass_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_render_pass_cache.cpp @@ -4,8 +4,6 @@ // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include - #include "common/container/unordered_map.h" #include @@ -231,48 +229,17 @@ VkRenderPass RenderPassCache::Get(const RenderPassKey& key) { .preserveAttachmentCount = 0, .pPreserveAttachments = nullptr, }; - static constexpr VkPipelineStageFlags ATTACHMENT_STAGES = - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | - VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | - VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; - static constexpr VkAccessFlags ATTACHMENT_WRITE_ACCESS = - VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; - static constexpr VkAccessFlags ATTACHMENT_ACCESS = - ATTACHMENT_WRITE_ACCESS | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | - VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; - static constexpr VkPipelineStageFlags OUTSIDE_STAGES = - VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | - VK_PIPELINE_STAGE_TRANSFER_BIT; - - const std::array dependencies{ - VkSubpassDependency{ - .srcSubpass = VK_SUBPASS_EXTERNAL, - .dstSubpass = 0, - .srcStageMask = OUTSIDE_STAGES, - .dstStageMask = ATTACHMENT_STAGES, - .srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, - .dstAccessMask = ATTACHMENT_ACCESS, - .dependencyFlags = 0, - }, - VkSubpassDependency{ - .srcSubpass = 0, - .dstSubpass = 0, - .srcStageMask = ATTACHMENT_STAGES, + const VkSubpassDependency dependency{ + .srcSubpass = 0, // Current subpass + .dstSubpass = 0, // Same subpass (self-dependency) + .srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | + VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | + VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, .dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, - .srcAccessMask = ATTACHMENT_WRITE_ACCESS, + .srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | + VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, .dstAccessMask = VK_ACCESS_SHADER_READ_BIT, - .dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT, - }, - VkSubpassDependency{ - .srcSubpass = 0, - .dstSubpass = VK_SUBPASS_EXTERNAL, - .srcStageMask = ATTACHMENT_STAGES, - .dstStageMask = OUTSIDE_STAGES, - .srcAccessMask = ATTACHMENT_WRITE_ACCESS, - .dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_TRANSFER_READ_BIT | - VK_ACCESS_TRANSFER_WRITE_BIT, - .dependencyFlags = 0, - }, + .dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT }; if (device->IsKhrCreateRenderPass2Supported()) { @@ -332,21 +299,18 @@ VkRenderPass RenderPassCache::Get(const RenderPassKey& key) { .preserveAttachmentCount = 0, .pPreserveAttachments = nullptr, }; - boost::container::static_vector dependencies2; - for (const VkSubpassDependency& dependency : dependencies) { - dependencies2.push_back(VkSubpassDependency2{ - .sType = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, - .pNext = nullptr, - .srcSubpass = dependency.srcSubpass, - .dstSubpass = dependency.dstSubpass, - .srcStageMask = dependency.srcStageMask, - .dstStageMask = dependency.dstStageMask, - .srcAccessMask = dependency.srcAccessMask, - .dstAccessMask = dependency.dstAccessMask, - .dependencyFlags = dependency.dependencyFlags, - .viewOffset = 0, - }); - } + const VkSubpassDependency2 dependency2{ + .sType = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, + .pNext = nullptr, + .srcSubpass = dependency.srcSubpass, + .dstSubpass = dependency.dstSubpass, + .srcStageMask = dependency.srcStageMask, + .dstStageMask = dependency.dstStageMask, + .srcAccessMask = dependency.srcAccessMask, + .dstAccessMask = dependency.dstAccessMask, + .dependencyFlags = dependency.dependencyFlags, + .viewOffset = 0, + }; pair->second = device->GetLogical().CreateRenderPass2({ .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, .pNext = nullptr, @@ -355,8 +319,8 @@ VkRenderPass RenderPassCache::Get(const RenderPassKey& key) { .pAttachments = descriptions2.empty() ? nullptr : descriptions2.data(), .subpassCount = 1, .pSubpasses = &subpass2, - .dependencyCount = static_cast(dependencies2.size()), - .pDependencies = dependencies2.data(), + .dependencyCount = 1, + .pDependencies = &dependency2, .correlatedViewMaskCount = 0, .pCorrelatedViewMasks = nullptr, }); @@ -371,8 +335,8 @@ VkRenderPass RenderPassCache::Get(const RenderPassKey& key) { .pAttachments = descriptions.empty() ? nullptr : descriptions.data(), .subpassCount = 1, .pSubpasses = &subpass, - .dependencyCount = static_cast(dependencies.size()), - .pDependencies = dependencies.data(), + .dependencyCount = 1, + .pDependencies = &dependency, }); return *pair->second; } diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index f3142215ff..4c2617144e 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -205,9 +205,6 @@ constexpr VkBorderColor ConvertBorderColor(const std::array& color) { } [[nodiscard]] std::array ShaderStorageViewFormats(PixelFormat format) { - if (VideoCore::Surface::GetFormatType(format) != SurfaceType::ColorTexture) { - return {}; - } if (DefaultBlockWidth(format) != 1 || DefaultBlockHeight(format) != 1) { return {}; }