From c116f001b5c437830562c47b117a820892b521e4 Mon Sep 17 00:00:00 2001 From: Zephyron Date: Tue, 10 Feb 2026 17:42:15 +1000 Subject: [PATCH] fix(vulkan): revert query cache FlushBeginTFB order to fix menu freeze Signed-off-by: Zephyron --- src/video_core/renderer_vulkan/vk_query_cache.cpp | 3 ++- src/video_core/renderer_vulkan/vk_rasterizer.cpp | 13 ++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp index 608cb131f..78e97ca25 100644 --- a/src/video_core/renderer_vulkan/vk_query_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp @@ -873,16 +873,17 @@ private: return; } has_flushed_end_pending = true; - UpdateBuffers(); if (!has_started || buffers_count == 0) { scheduler.Record([](vk::CommandBuffer cmdbuf) { cmdbuf.BeginTransformFeedbackEXT(0, 0, nullptr, nullptr); }); + UpdateBuffers(); return; } scheduler.Record([this, total = static_cast(buffers_count)](vk::CommandBuffer cmdbuf) { cmdbuf.BeginTransformFeedbackEXT(0, total, counter_buffers.data(), offsets.data()); }); + UpdateBuffers(); } void FlushEndTFB() { diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index ddc935503..d3ca9c51f 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -67,14 +67,13 @@ struct DrawParams { VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index, float scale) { const auto& src = regs.viewport_transform[index]; const auto conv = [scale](float value) { - if (scale >= 1.0f) { - return value * scale; - } - // Use double only when scaling down to avoid sub-pixel jitter (MP4 fix) const double new_value = static_cast(value) * static_cast(scale); - const bool sign = std::signbit(value); - const double rounded = std::round(std::abs(new_value)); - return static_cast(sign ? -rounded : rounded); + if (scale < 1.0f) { + const bool sign = std::signbit(value); + double rounded = std::round(std::abs(new_value)); + return static_cast(sign ? -rounded : rounded); + } + return static_cast(new_value); }; const float x = conv(src.translate_x - src.scale_x); const float width = conv(src.scale_x * 2.0f);