diff options
| -rw-r--r-- | src/core/memory.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/fence_manager.h | 9 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_query_cache.cpp | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 2 | 
4 files changed, 11 insertions, 5 deletions
| diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 432310632..a9667463f 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -462,7 +462,7 @@ struct Memory::Impl {          }          if (Settings::IsFastmemEnabled()) { -            const bool is_read_enable = Settings::IsGPULevelHigh() || !cached; +            const bool is_read_enable = !Settings::IsGPULevelExtreme() || !cached;              system.DeviceMemory().buffer.Protect(vaddr, size, is_read_enable, !cached);          } diff --git a/src/video_core/fence_manager.h b/src/video_core/fence_manager.h index 027e663bf..19bbdd547 100644 --- a/src/video_core/fence_manager.h +++ b/src/video_core/fence_manager.h @@ -64,19 +64,24 @@ public:      }      void SignalFence(std::function<void()>&& func) { +        bool delay_fence = Settings::IsGPULevelHigh();          if constexpr (!can_async_check) {              TryReleasePendingFences<false>();          } -        std::function<void()> callback = std::move(func);          const bool should_flush = ShouldFlush();          CommitAsyncFlushes();          TFence new_fence = CreateFence(!should_flush);          if constexpr (can_async_check) {              guard.lock();          } +        if (delay_fence) { +            uncommitted_operations.emplace_back(std::move(func)); +        }          pending_operations.emplace_back(std::move(uncommitted_operations));          QueueFence(new_fence); -        callback(); +        if (!delay_fence) { +            func(); +        }          fences.push(std::move(new_fence));          if (should_flush) {              rasterizer.FlushCommands(); diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp index 929c8ece6..0701e572b 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp @@ -98,8 +98,9 @@ HostCounter::HostCounter(QueryCache& cache_, std::shared_ptr<HostCounter> depend        query{cache_.AllocateQuery(type_)}, tick{cache_.GetScheduler().CurrentTick()} {      const vk::Device* logical = &cache.GetDevice().GetLogical();      cache.GetScheduler().Record([logical, query = query](vk::CommandBuffer cmdbuf) { +        const bool use_precise = Settings::IsGPULevelHigh();          logical->ResetQueryPool(query.first, query.second, 1); -        cmdbuf.BeginQuery(query.first, query.second, VK_QUERY_CONTROL_PRECISE_BIT); +        cmdbuf.BeginQuery(query.first, query.second, use_precise ? VK_QUERY_CONTROL_PRECISE_BIT : 0);      });  } diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 673ab478e..f366fdd2a 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -675,7 +675,7 @@ bool RasterizerVulkan::AccelerateConditionalRendering() {      const GPUVAddr condition_address{maxwell3d->regs.render_enable.Address()};      Maxwell::ReportSemaphore::Compare cmp;      if (gpu_memory->IsMemoryDirty(condition_address, sizeof(cmp), -                                  VideoCommon::CacheType::BufferCache)) { +                                  VideoCommon::CacheType::BufferCache | VideoCommon::CacheType::QueryCache)) {          return true;      }      return false; | 
