diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index fdc102f51..82890e4a8 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -214,8 +215,6 @@ void RasterizerVulkan::PrepareDraw(bool is_indexed, Func&& draw_func) { FlushWork(); gpu_memory->FlushCaching(); - query_cache.NotifySegment(true); - GraphicsPipeline* const pipeline{pipeline_cache.CurrentGraphicsPipeline()}; if (!pipeline) { return; @@ -307,8 +306,6 @@ void RasterizerVulkan::DrawTexture() { }; FlushWork(); - query_cache.NotifySegment(true); - std::scoped_lock l{texture_cache.mutex}; texture_cache.SynchronizeGraphicsDescriptors(); texture_cache.UpdateRenderTargets(false); @@ -355,7 +352,6 @@ void RasterizerVulkan::Clear(u32 layer_count) { FlushWork(); gpu_memory->FlushCaching(); - query_cache.NotifySegment(true); query_cache.CounterEnable(VideoCommon::QueryType::ZPassPixelCount64, maxwell3d->regs.zpass_pixel_count_enable); @@ -875,7 +871,6 @@ std::optional RasterizerVulkan::AccelerateDisplay( if (!image_view) { return {}; } - query_cache.NotifySegment(false); const auto& resolution = Settings::values.resolution_info; @@ -1028,9 +1023,14 @@ void RasterizerVulkan::HandleTransformFeedback() { }); return; } - query_cache.CounterEnable(VideoCommon::QueryType::StreamingByteCount, - regs.transform_feedback_enabled); - if (regs.transform_feedback_enabled != 0) { + // Only update counter state when transform feedback enable state changes + const bool transform_feedback_enabled = regs.transform_feedback_enabled != 0; + if (last_transform_feedback_enabled != transform_feedback_enabled) { + query_cache.CounterEnable(VideoCommon::QueryType::StreamingByteCount, + transform_feedback_enabled); + last_transform_feedback_enabled = transform_feedback_enabled; + } + if (transform_feedback_enabled) { UNIMPLEMENTED_IF(regs.IsShaderConfigEnabled(Maxwell::ShaderType::TessellationInit) || regs.IsShaderConfigEnabled(Maxwell::ShaderType::Tessellation)); } diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index 9107efa61..da1428ea5 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h @@ -219,6 +219,7 @@ private: boost::container::static_vector sampler_handles; u32 draw_counter = 0; + bool last_transform_feedback_enabled = false; }; } // namespace Vulkan