diff options
| author | 2024-02-14 16:29:24 -0500 | |
|---|---|---|
| committer | 2024-02-17 18:01:41 -0500 | |
| commit | dcce9837d240fa2492f29e5ae2649085ae8f711c (patch) | |
| tree | 8a93012b952276e29fa63490b4183a57cf346878 /src/core/hle/service/am | |
| parent | nvnflinger: convert to process (diff) | |
| download | yuzu-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.cpp | 18 | ||||
| -rw-r--r-- | src/core/hle/service/am/display_layer_manager.h | 5 |
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 | ||
| 12 | namespace Service::AM { | 14 | namespace Service::AM { |
| 13 | 15 | ||
| @@ -18,10 +20,14 @@ DisplayLayerManager::~DisplayLayerManager() { | |||
| 18 | 20 | ||
| 19 | void DisplayLayerManager::Initialize(Core::System& system, Kernel::KProcess* process, | 21 | void 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 { | |||
| 147 | Result DisplayLayerManager::WriteAppletCaptureBuffer(bool* out_was_written, | 153 | Result 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 { | |||
| 21 | class Nvnflinger; | 21 | class Nvnflinger; |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | namespace Service::VI { | ||
| 25 | class IApplicationDisplayService; | ||
| 26 | } | ||
| 27 | |||
| 24 | namespace Service::AM { | 28 | namespace Service::AM { |
| 25 | 29 | ||
| 26 | class DisplayLayerManager { | 30 | class DisplayLayerManager { |
| @@ -47,6 +51,7 @@ public: | |||
| 47 | private: | 51 | private: |
| 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{}; |