diff options
| -rw-r--r-- | src/core/hle/service/nvnflinger/hardware_composer.cpp | 50 | ||||
| -rw-r--r-- | src/core/hle/service/nvnflinger/hardware_composer.h | 2 | ||||
| -rw-r--r-- | src/core/hle/service/nvnflinger/nvnflinger.cpp | 3 | 
3 files changed, 27 insertions, 28 deletions
| diff --git a/src/core/hle/service/nvnflinger/hardware_composer.cpp b/src/core/hle/service/nvnflinger/hardware_composer.cpp index c720dd1f8..ba2b5c28c 100644 --- 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<HwcLayer, 2> 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; @@ -142,7 +119,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 100644 --- 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 a4e848882..d8ba89d43 100644 --- a/src/core/hle/service/nvnflinger/nvnflinger.cpp +++ b/src/core/hle/service/nvnflinger/nvnflinger.cpp @@ -291,8 +291,7 @@ void Nvnflinger::Compose() {          auto nvdisp = nvdrv->GetDevice<Nvidia::Devices::nvdisp_disp0>(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);      }  } | 
