diff options
| author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-05-04 03:16:57 +0200 | 
|---|---|---|
| committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-05-07 23:46:12 +0200 | 
| commit | 6f90dff2938b5bd5e9311e924e8a29945f16ac18 (patch) | |
| tree | 60d757ecc85615cf846b20a8d392261645a997ab | |
| parent | ab0c0a469c29900314847520f30d6edb914fa028 (diff) | |
Address feedback, add CR notice, etc
| -rw-r--r-- | src/core/memory.cpp | 11 | ||||
| -rw-r--r-- | src/video_core/fence_manager.h | 7 | ||||
| -rw-r--r-- | src/video_core/rasterizer_download_area.h | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/texture_cache/image_view_base.cpp | 3 | 
5 files changed, 18 insertions, 10 deletions
| diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 549b64ac4..514ba0d66 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -20,7 +20,6 @@  #include "video_core/gpu.h"  #include "video_core/rasterizer_download_area.h" -  namespace Core::Memory {  // Implementation class used to keep the specifics of the memory subsystem hidden @@ -465,7 +464,8 @@ struct Memory::Impl {          }          if (Settings::IsFastmemEnabled()) { -            const bool is_read_enable = !Settings::values.use_reactive_flushing.GetValue() || !cached; +            const bool is_read_enable = +                !Settings::values.use_reactive_flushing.GetValue() || !cached;              system.DeviceMemory().buffer.Protect(vaddr, size, is_read_enable, !cached);          } @@ -654,9 +654,7 @@ struct Memory::Impl {                  LOG_ERROR(HW_Memory, "Unmapped Read{} @ 0x{:016X}", sizeof(T) * 8,                            GetInteger(vaddr));              }, -            [&]() { -                HandleRasterizerDownload(GetInteger(vaddr), sizeof(T)); -            }); +            [&]() { HandleRasterizerDownload(GetInteger(vaddr), sizeof(T)); });          if (ptr) {              std::memcpy(&result, ptr, sizeof(T));          } @@ -721,7 +719,8 @@ struct Memory::Impl {          const size_t core = system.GetCurrentHostThreadID();          auto& current_area = rasterizer_areas[core];          const VAddr end_address = address + size; -        if (current_area.start_address <= address && end_address <= current_area.end_address) [[likely]] { +        if (current_area.start_address <= address && end_address <= current_area.end_address) +            [[likely]] {              return;          }          current_area = system.GPU().OnCPURead(address, size); diff --git a/src/video_core/fence_manager.h b/src/video_core/fence_manager.h index 850d6f27d..35d699bbf 100644 --- a/src/video_core/fence_manager.h +++ b/src/video_core/fence_manager.h @@ -55,7 +55,12 @@ public:      // Unlike other fences, this one doesn't      void SignalOrdering() { -        std::function<void()> do_nothing([]{}); +        std::scoped_lock lock{buffer_cache.mutex}; +        buffer_cache.AccumulateFlushes(); +    } + +    void SignalReference() { +        std::function<void()> do_nothing([] {});          SignalFence(std::move(do_nothing));      } diff --git a/src/video_core/rasterizer_download_area.h b/src/video_core/rasterizer_download_area.h index 771ce903d..2d7425c79 100644 --- a/src/video_core/rasterizer_download_area.h +++ b/src/video_core/rasterizer_download_area.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later +  #pragma once  #include "common/common_types.h" diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index bae4aa611..2beb0efea 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -621,7 +621,7 @@ void RasterizerVulkan::SignalSyncPoint(u32 value) {  }  void RasterizerVulkan::SignalReference() { -    fence_manager.SignalOrdering(); +    fence_manager.SignalReference();  }  void RasterizerVulkan::ReleaseFences() { @@ -654,7 +654,7 @@ void RasterizerVulkan::WaitForIdle() {          cmdbuf.SetEvent(event, flags);          cmdbuf.WaitEvents(event, flags, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, {}, {}, {});      }); -    SignalReference(); +    fence_manager.SignalOrdering();  }  void RasterizerVulkan::FragmentBarrier() { diff --git a/src/video_core/texture_cache/image_view_base.cpp b/src/video_core/texture_cache/image_view_base.cpp index 30a7c11f5..c3b2b196d 100644 --- a/src/video_core/texture_cache/image_view_base.cpp +++ b/src/video_core/texture_cache/image_view_base.cpp @@ -26,7 +26,8 @@ ImageViewBase::ImageViewBase(const ImageViewInfo& info, const ImageInfo& image_i      ASSERT_MSG(VideoCore::Surface::IsViewCompatible(image_info.format, info.format, false, true),                 "Image view format {} is incompatible with image format {}", info.format,                 image_info.format); -    const bool preemptive = !Settings::values.use_reactive_flushing.GetValue() && image_info.type == ImageType::Linear; +    const bool preemptive = +        !Settings::values.use_reactive_flushing.GetValue() && image_info.type == ImageType::Linear;      if (image_info.forced_flushed || preemptive) {          flags |= ImageViewFlagBits::PreemtiveDownload;      } | 
