fix(vulkan): revert query cache FlushBeginTFB order to fix menu freeze

Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit is contained in:
Zephyron
2026-02-10 17:42:15 +10:00
parent 66ca68a52e
commit c116f001b5
2 changed files with 8 additions and 8 deletions

View File

@@ -873,16 +873,17 @@ private:
return; return;
} }
has_flushed_end_pending = true; has_flushed_end_pending = true;
UpdateBuffers();
if (!has_started || buffers_count == 0) { if (!has_started || buffers_count == 0) {
scheduler.Record([](vk::CommandBuffer cmdbuf) { scheduler.Record([](vk::CommandBuffer cmdbuf) {
cmdbuf.BeginTransformFeedbackEXT(0, 0, nullptr, nullptr); cmdbuf.BeginTransformFeedbackEXT(0, 0, nullptr, nullptr);
}); });
UpdateBuffers();
return; return;
} }
scheduler.Record([this, total = static_cast<u32>(buffers_count)](vk::CommandBuffer cmdbuf) { scheduler.Record([this, total = static_cast<u32>(buffers_count)](vk::CommandBuffer cmdbuf) {
cmdbuf.BeginTransformFeedbackEXT(0, total, counter_buffers.data(), offsets.data()); cmdbuf.BeginTransformFeedbackEXT(0, total, counter_buffers.data(), offsets.data());
}); });
UpdateBuffers();
} }
void FlushEndTFB() { void FlushEndTFB() {

View File

@@ -67,14 +67,13 @@ struct DrawParams {
VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index, float scale) { VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index, float scale) {
const auto& src = regs.viewport_transform[index]; const auto& src = regs.viewport_transform[index];
const auto conv = [scale](float value) { 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<double>(value) * static_cast<double>(scale); const double new_value = static_cast<double>(value) * static_cast<double>(scale);
if (scale < 1.0f) {
const bool sign = std::signbit(value); const bool sign = std::signbit(value);
const double rounded = std::round(std::abs(new_value)); double rounded = std::round(std::abs(new_value));
return static_cast<float>(sign ? -rounded : rounded); return static_cast<float>(sign ? -rounded : rounded);
}
return static_cast<float>(new_value);
}; };
const float x = conv(src.translate_x - src.scale_x); const float x = conv(src.translate_x - src.scale_x);
const float width = conv(src.scale_x * 2.0f); const float width = conv(src.scale_x * 2.0f);