summaryrefslogtreecommitdiff
path: root/src/core/hle/service/am
diff options
context:
space:
mode:
authorGravatar Liam2024-02-14 16:29:24 -0500
committerGravatar Liam2024-02-17 18:01:41 -0500
commitdcce9837d240fa2492f29e5ae2649085ae8f711c (patch)
tree8a93012b952276e29fa63490b4183a57cf346878 /src/core/hle/service/am
parentnvnflinger: convert to process (diff)
downloadyuzu-dcce9837d240fa2492f29e5ae2649085ae8f711c.tar.gz
yuzu-dcce9837d240fa2492f29e5ae2649085ae8f711c.tar.xz
yuzu-dcce9837d240fa2492f29e5ae2649085ae8f711c.zip
vi: move shared buffer management from nvnflinger
Diffstat (limited to 'src/core/hle/service/am')
-rw-r--r--src/core/hle/service/am/display_layer_manager.cpp18
-rw-r--r--src/core/hle/service/am/display_layer_manager.h5
2 files changed, 17 insertions, 6 deletions
diff --git a/src/core/hle/service/am/display_layer_manager.cpp b/src/core/hle/service/am/display_layer_manager.cpp
index 6cf3c369c..dc742c1f6 100644
--- a/src/core/hle/service/am/display_layer_manager.cpp
+++ b/src/core/hle/service/am/display_layer_manager.cpp
@@ -3,11 +3,13 @@
3 3
4#include "core/core.h" 4#include "core/core.h"
5#include "core/hle/service/am/display_layer_manager.h" 5#include "core/hle/service/am/display_layer_manager.h"
6#include "core/hle/service/nvnflinger/fb_share_buffer_manager.h"
7#include "core/hle/service/nvnflinger/hos_binder_driver.h" 6#include "core/hle/service/nvnflinger/hos_binder_driver.h"
8#include "core/hle/service/nvnflinger/nvnflinger.h"
9#include "core/hle/service/sm/sm.h" 7#include "core/hle/service/sm/sm.h"
8#include "core/hle/service/vi/application_display_service.h"
9#include "core/hle/service/vi/fbshare_buffer_manager.h"
10#include "core/hle/service/vi/manager_root_service.h"
10#include "core/hle/service/vi/vi_results.h" 11#include "core/hle/service/vi/vi_results.h"
12#include "core/hle/service/vi/vi_types.h"
11 13
12namespace Service::AM { 14namespace Service::AM {
13 15
@@ -18,10 +20,14 @@ DisplayLayerManager::~DisplayLayerManager() {
18 20
19void DisplayLayerManager::Initialize(Core::System& system, Kernel::KProcess* process, 21void DisplayLayerManager::Initialize(Core::System& system, Kernel::KProcess* process,
20 AppletId applet_id, LibraryAppletMode mode) { 22 AppletId applet_id, LibraryAppletMode mode) {
21 m_process = process;
22 m_surface_flinger = system.ServiceManager() 23 m_surface_flinger = system.ServiceManager()
23 .GetService<Nvnflinger::IHOSBinderDriver>("dispdrv", true) 24 .GetService<Nvnflinger::IHOSBinderDriver>("dispdrv", true)
24 ->GetSurfaceFlinger(); 25 ->GetSurfaceFlinger();
26 R_ASSERT(system.ServiceManager()
27 .GetService<VI::IManagerRootService>("vi:m", true)
28 ->GetDisplayService(&m_display_service, VI::Policy::Compositor));
29
30 m_process = process;
25 m_system_shared_buffer_id = 0; 31 m_system_shared_buffer_id = 0;
26 m_system_shared_layer_id = 0; 32 m_system_shared_layer_id = 0;
27 m_applet_id = applet_id; 33 m_applet_id = applet_id;
@@ -46,7 +52,7 @@ void DisplayLayerManager::Finalize() {
46 52
47 // Clean up shared layers. 53 // Clean up shared layers.
48 if (m_buffer_sharing_enabled) { 54 if (m_buffer_sharing_enabled) {
49 m_surface_flinger->GetSystemBufferManager().Finalize(m_process); 55 m_display_service->GetSharedBufferManager()->Finalize(m_process);
50 } 56 }
51 57
52 m_surface_flinger = nullptr; 58 m_surface_flinger = nullptr;
@@ -103,7 +109,7 @@ Result DisplayLayerManager::IsSystemBufferSharingEnabled() {
103 const auto blend = 109 const auto blend =
104 m_blending_enabled ? Nvnflinger::LayerBlending::Coverage : Nvnflinger::LayerBlending::None; 110 m_blending_enabled ? Nvnflinger::LayerBlending::Coverage : Nvnflinger::LayerBlending::None;
105 const auto display_id = m_surface_flinger->OpenDisplay("Default").value(); 111 const auto display_id = m_surface_flinger->OpenDisplay("Default").value();
106 R_TRY(m_surface_flinger->GetSystemBufferManager().Initialize( 112 R_TRY(m_display_service->GetSharedBufferManager()->Initialize(
107 m_process, &m_system_shared_buffer_id, &m_system_shared_layer_id, display_id, blend)); 113 m_process, &m_system_shared_buffer_id, &m_system_shared_layer_id, display_id, blend));
108 114
109 // We succeeded, so set up remaining state. 115 // We succeeded, so set up remaining state.
@@ -147,7 +153,7 @@ bool DisplayLayerManager::GetWindowVisibility() const {
147Result DisplayLayerManager::WriteAppletCaptureBuffer(bool* out_was_written, 153Result DisplayLayerManager::WriteAppletCaptureBuffer(bool* out_was_written,
148 s32* out_fbshare_layer_index) { 154 s32* out_fbshare_layer_index) {
149 R_UNLESS(m_buffer_sharing_enabled, VI::ResultPermissionDenied); 155 R_UNLESS(m_buffer_sharing_enabled, VI::ResultPermissionDenied);
150 R_RETURN(m_surface_flinger->GetSystemBufferManager().WriteAppletCaptureBuffer( 156 R_RETURN(m_display_service->GetSharedBufferManager()->WriteAppletCaptureBuffer(
151 out_was_written, out_fbshare_layer_index)); 157 out_was_written, out_fbshare_layer_index));
152} 158}
153 159
diff --git a/src/core/hle/service/am/display_layer_manager.h b/src/core/hle/service/am/display_layer_manager.h
index 92ab9399f..7591b0e60 100644
--- a/src/core/hle/service/am/display_layer_manager.h
+++ b/src/core/hle/service/am/display_layer_manager.h
@@ -21,6 +21,10 @@ namespace Service::Nvnflinger {
21class Nvnflinger; 21class Nvnflinger;
22} 22}
23 23
24namespace Service::VI {
25class IApplicationDisplayService;
26}
27
24namespace Service::AM { 28namespace Service::AM {
25 29
26class DisplayLayerManager { 30class DisplayLayerManager {
@@ -47,6 +51,7 @@ public:
47private: 51private:
48 Kernel::KProcess* m_process{}; 52 Kernel::KProcess* m_process{};
49 std::shared_ptr<Nvnflinger::Nvnflinger> m_surface_flinger{}; 53 std::shared_ptr<Nvnflinger::Nvnflinger> m_surface_flinger{};
54 std::shared_ptr<VI::IApplicationDisplayService> m_display_service{};
50 std::set<u64> m_managed_display_layers{}; 55 std::set<u64> m_managed_display_layers{};
51 std::set<u64> m_managed_display_recording_layers{}; 56 std::set<u64> m_managed_display_recording_layers{};
52 u64 m_system_shared_buffer_id{}; 57 u64 m_system_shared_buffer_id{};