From 3a104e1343a05eecff2d1b7308cbdcddcfbf5472 Mon Sep 17 00:00:00 2001 From: pineappleEA Date: Sun, 4 Feb 2024 18:12:14 +0100 Subject: [PATCH] early-access version 4111 --- README.md | 2 +- .../service/nvnflinger/hardware_composer.cpp | 50 +++++++++---------- .../service/nvnflinger/hardware_composer.h | 2 +- .../hle/service/nvnflinger/nvnflinger.cpp | 3 +- 4 files changed, 28 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index f38b09cb0..40bc52102 100755 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ yuzu emulator early access ============= -This is the source code for early-access 4110. +This is the source code for early-access 4111. ## Legal Notice diff --git a/src/core/hle/service/nvnflinger/hardware_composer.cpp b/src/core/hle/service/nvnflinger/hardware_composer.cpp index b2e35ffd4..be7eb97a3 100755 --- a/src/core/hle/service/nvnflinger/hardware_composer.cpp +++ b/src/core/hle/service/nvnflinger/hardware_composer.cpp @@ -7,7 +7,6 @@ #include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" #include "core/hle/service/nvnflinger/buffer_item.h" #include "core/hle/service/nvnflinger/buffer_item_consumer.h" -#include "core/hle/service/nvnflinger/buffer_queue_producer.h" #include "core/hle/service/nvnflinger/hardware_composer.h" #include "core/hle/service/nvnflinger/hwc_layer.h" #include "core/hle/service/nvnflinger/ui/graphic_buffer.h" @@ -46,31 +45,9 @@ HardwareComposer::HardwareComposer() = default; HardwareComposer::~HardwareComposer() = default; u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, VI::Display& display, - Nvidia::Devices::nvdisp_disp0& nvdisp, u32 frame_advance) { + Nvidia::Devices::nvdisp_disp0& nvdisp) { boost::container::small_vector composition_stack; - m_frame_number += frame_advance; - - // Release any necessary framebuffers. - for (auto& [layer_id, framebuffer] : m_framebuffers) { - if (framebuffer.release_frame_number > m_frame_number) { - // Not yet ready to release this framebuffer. - continue; - } - - if (!framebuffer.is_acquired) { - // Already released. - continue; - } - - if (auto* layer = display.FindLayer(layer_id); layer != nullptr) { - // TODO: support release fence - // This is needed to prevent screen tearing - layer->GetConsumer().ReleaseBuffer(framebuffer.item, android::Fence::NoFence()); - framebuffer.is_acquired = false; - } - } - // Set default speed limit to 100%. *out_speed_scale = 1.0f; @@ -143,7 +120,30 @@ u32 HardwareComposer::ComposeLocked(f32* out_speed_scale, VI::Display& display, MicroProfileFlip(); // Advance by at least one frame. - return swap_interval.value_or(1); + const u32 frame_advance = swap_interval.value_or(1); + m_frame_number += frame_advance; + + // Release any necessary framebuffers. + for (auto& [layer_id, framebuffer] : m_framebuffers) { + if (framebuffer.release_frame_number > m_frame_number) { + // Not yet ready to release this framebuffer. + continue; + } + + if (!framebuffer.is_acquired) { + // Already released. + continue; + } + + if (auto* layer = display.FindLayer(layer_id); layer != nullptr) { + // TODO: support release fence + // This is needed to prevent screen tearing + layer->GetConsumer().ReleaseBuffer(framebuffer.item, android::Fence::NoFence()); + framebuffer.is_acquired = false; + } + } + + return frame_advance; } void HardwareComposer::RemoveLayerLocked(VI::Display& display, LayerId layer_id) { diff --git a/src/core/hle/service/nvnflinger/hardware_composer.h b/src/core/hle/service/nvnflinger/hardware_composer.h index ddab94ac9..28392c512 100755 --- a/src/core/hle/service/nvnflinger/hardware_composer.h +++ b/src/core/hle/service/nvnflinger/hardware_composer.h @@ -27,7 +27,7 @@ public: ~HardwareComposer(); u32 ComposeLocked(f32* out_speed_scale, VI::Display& display, - Nvidia::Devices::nvdisp_disp0& nvdisp, u32 frame_advance); + Nvidia::Devices::nvdisp_disp0& nvdisp); void RemoveLayerLocked(VI::Display& display, LayerId layer_id); private: diff --git a/src/core/hle/service/nvnflinger/nvnflinger.cpp b/src/core/hle/service/nvnflinger/nvnflinger.cpp index 0ad3e099a..687ccc9f9 100755 --- a/src/core/hle/service/nvnflinger/nvnflinger.cpp +++ b/src/core/hle/service/nvnflinger/nvnflinger.cpp @@ -292,8 +292,7 @@ void Nvnflinger::Compose() { auto nvdisp = nvdrv->GetDevice(disp_fd); ASSERT(nvdisp); - swap_interval = display.GetComposer().ComposeLocked(&compose_speed_scale, display, *nvdisp, - swap_interval); + swap_interval = display.GetComposer().ComposeLocked(&compose_speed_scale, display, *nvdisp); } }