diff options
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/service/nvnflinger/nvnflinger.cpp | 11 | ||||
-rw-r--r-- | src/core/hle/service/nvnflinger/nvnflinger.h | 14 | ||||
-rw-r--r-- | src/core/hle/service/vi/fbshare_buffer_manager.cpp (renamed from src/core/hle/service/nvnflinger/fb_share_buffer_manager.cpp) | 44 | ||||
-rw-r--r-- | src/core/hle/service/vi/fbshare_buffer_manager.h (renamed from src/core/hle/service/nvnflinger/fb_share_buffer_manager.h) | 23 |
4 files changed, 36 insertions, 56 deletions
diff --git a/src/core/hle/service/nvnflinger/nvnflinger.cpp b/src/core/hle/service/nvnflinger/nvnflinger.cpp index cd8062a2b..a20ef14af 100644 --- a/src/core/hle/service/nvnflinger/nvnflinger.cpp +++ b/src/core/hle/service/nvnflinger/nvnflinger.cpp @@ -9,7 +9,6 @@ #include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" #include "core/hle/service/nvdrv/nvdrv.h" #include "core/hle/service/nvdrv/nvdrv_interface.h" -#include "core/hle/service/nvnflinger/fb_share_buffer_manager.h" #include "core/hle/service/nvnflinger/hardware_composer.h" #include "core/hle/service/nvnflinger/hos_binder_driver.h" #include "core/hle/service/nvnflinger/hos_binder_driver_server.h" @@ -311,16 +310,6 @@ s64 Nvnflinger::GetNextTicks() const { return static_cast<s64>(speed_scale * (1000000000.f / effective_fps)); } -FbShareBufferManager& Nvnflinger::GetSystemBufferManager() { - const auto lock_guard = Lock(); - - if (!system_buffer_manager) { - system_buffer_manager = std::make_unique<FbShareBufferManager>(system, *this, nvdrv); - } - - return *system_buffer_manager; -} - void LoopProcess(Core::System& system) { const auto binder_server = std::make_shared<HosBinderDriverServer>(system); const auto surface_flinger = std::make_shared<Nvnflinger>(system, *binder_server); diff --git a/src/core/hle/service/nvnflinger/nvnflinger.h b/src/core/hle/service/nvnflinger/nvnflinger.h index 5ed7dc317..941a98418 100644 --- a/src/core/hle/service/nvnflinger/nvnflinger.h +++ b/src/core/hle/service/nvnflinger/nvnflinger.h @@ -35,6 +35,7 @@ class Module; namespace Service::VI { class Display; +class FbshareBufferManager; class Layer; } // namespace Service::VI @@ -45,7 +46,6 @@ class BufferQueueProducer; namespace Service::Nvnflinger { -class FbShareBufferManager; class HardwareComposer; class HosBinderDriverServer; @@ -101,17 +101,9 @@ public: [[nodiscard]] s64 GetNextTicks() const; - FbShareBufferManager& GetSystemBufferManager(); - private: - struct Layer { - std::unique_ptr<android::BufferQueueCore> core; - std::unique_ptr<android::BufferQueueProducer> producer; - }; - - friend class FbShareBufferManager; + friend class VI::FbshareBufferManager; -private: [[nodiscard]] std::unique_lock<std::mutex> Lock() const { return std::unique_lock{*guard}; } @@ -150,8 +142,6 @@ private: std::shared_ptr<Core::Timing::EventType> multi_composition_event; std::shared_ptr<Core::Timing::EventType> single_composition_event; - std::unique_ptr<FbShareBufferManager> system_buffer_manager; - std::shared_ptr<std::mutex> guard; Core::System& system; diff --git a/src/core/hle/service/nvnflinger/fb_share_buffer_manager.cpp b/src/core/hle/service/vi/fbshare_buffer_manager.cpp index 90f7248a0..e61c02e1c 100644 --- a/src/core/hle/service/nvnflinger/fb_share_buffer_manager.cpp +++ b/src/core/hle/service/vi/fbshare_buffer_manager.cpp @@ -9,15 +9,15 @@ #include "core/hle/service/nvdrv/devices/nvmap.h" #include "core/hle/service/nvdrv/nvdrv.h" #include "core/hle/service/nvnflinger/buffer_queue_producer.h" -#include "core/hle/service/nvnflinger/fb_share_buffer_manager.h" #include "core/hle/service/nvnflinger/pixel_format.h" #include "core/hle/service/nvnflinger/ui/graphic_buffer.h" +#include "core/hle/service/vi/fbshare_buffer_manager.h" #include "core/hle/service/vi/layer/vi_layer.h" #include "core/hle/service/vi/vi_results.h" #include "video_core/gpu.h" #include "video_core/host1x/host1x.h" -namespace Service::Nvnflinger { +namespace Service::VI { namespace { @@ -26,7 +26,6 @@ Result AllocateSharedBufferMemory(std::unique_ptr<Kernel::KPageGroup>* out_page_ using Core::Memory::YUZU_PAGESIZE; // Allocate memory for the system shared buffer. - // FIXME: This memory belongs to vi's .data section. auto& kernel = system.Kernel(); // Hold a temporary page group reference while we try to map it. @@ -204,15 +203,16 @@ void MakeGraphicBuffer(android::BufferQueueProducer& producer, u32 slot, u32 han } // namespace -FbShareBufferManager::FbShareBufferManager(Core::System& system, Nvnflinger& flinger, +FbshareBufferManager::FbshareBufferManager(Core::System& system, + std::shared_ptr<Nvnflinger::Nvnflinger> surface_flinger, std::shared_ptr<Nvidia::Module> nvdrv) - : m_system(system), m_flinger(flinger), m_nvdrv(std::move(nvdrv)) {} + : m_system(system), m_surface_flinger(std::move(surface_flinger)), m_nvdrv(std::move(nvdrv)) {} -FbShareBufferManager::~FbShareBufferManager() = default; +FbshareBufferManager::~FbshareBufferManager() = default; -Result FbShareBufferManager::Initialize(Kernel::KProcess* owner_process, u64* out_buffer_id, +Result FbshareBufferManager::Initialize(Kernel::KProcess* owner_process, u64* out_buffer_id, u64* out_layer_handle, u64 display_id, - LayerBlending blending) { + Nvnflinger::LayerBlending blending) { std::scoped_lock lk{m_guard}; // Ensure we haven't already created. @@ -237,7 +237,7 @@ Result FbShareBufferManager::Initialize(Kernel::KProcess* owner_process, u64* ou owner_process, m_system)); // Create new session. - auto [it, was_emplaced] = m_sessions.emplace(aruid, FbShareSession{}); + auto [it, was_emplaced] = m_sessions.emplace(aruid, FbshareSession{}); auto& session = it->second; auto& container = m_nvdrv->GetContainer(); @@ -249,11 +249,11 @@ Result FbShareBufferManager::Initialize(Kernel::KProcess* owner_process, u64* ou session.nvmap_fd, map_address, SharedBufferSize)); // Create and open a layer for the display. - session.layer_id = m_flinger.CreateLayer(m_display_id, blending).value(); - m_flinger.OpenLayer(session.layer_id); + session.layer_id = m_surface_flinger->CreateLayer(m_display_id, blending).value(); + m_surface_flinger->OpenLayer(session.layer_id); // Get the layer. - VI::Layer* layer = m_flinger.FindLayer(m_display_id, session.layer_id); + VI::Layer* layer = m_surface_flinger->FindLayer(m_display_id, session.layer_id); ASSERT(layer != nullptr); // Get the producer and set preallocated buffers. @@ -269,7 +269,7 @@ Result FbShareBufferManager::Initialize(Kernel::KProcess* owner_process, u64* ou R_SUCCEED(); } -void FbShareBufferManager::Finalize(Kernel::KProcess* owner_process) { +void FbshareBufferManager::Finalize(Kernel::KProcess* owner_process) { std::scoped_lock lk{m_guard}; if (m_buffer_id == 0) { @@ -285,7 +285,7 @@ void FbShareBufferManager::Finalize(Kernel::KProcess* owner_process) { auto& session = it->second; // Destroy the layer. - m_flinger.DestroyLayer(session.layer_id); + m_surface_flinger->DestroyLayer(session.layer_id); // Close nvmap handle. FreeHandle(session.buffer_nvmap_handle, *m_nvdrv, session.nvmap_fd); @@ -301,7 +301,7 @@ void FbShareBufferManager::Finalize(Kernel::KProcess* owner_process) { m_sessions.erase(it); } -Result FbShareBufferManager::GetSharedBufferMemoryHandleId(u64* out_buffer_size, +Result FbshareBufferManager::GetSharedBufferMemoryHandleId(u64* out_buffer_size, s32* out_nvmap_handle, SharedMemoryPoolLayout* out_pool_layout, u64 buffer_id, @@ -319,12 +319,12 @@ Result FbShareBufferManager::GetSharedBufferMemoryHandleId(u64* out_buffer_size, R_SUCCEED(); } -Result FbShareBufferManager::GetLayerFromId(VI::Layer** out_layer, u64 layer_id) { +Result FbshareBufferManager::GetLayerFromId(VI::Layer** out_layer, u64 layer_id) { // Ensure the layer id is valid. R_UNLESS(layer_id > 0, VI::ResultNotFound); // Get the layer. - VI::Layer* layer = m_flinger.FindLayer(m_display_id, layer_id); + VI::Layer* layer = m_surface_flinger->FindLayer(m_display_id, layer_id); R_UNLESS(layer != nullptr, VI::ResultNotFound); // We succeeded. @@ -332,7 +332,7 @@ Result FbShareBufferManager::GetLayerFromId(VI::Layer** out_layer, u64 layer_id) R_SUCCEED(); } -Result FbShareBufferManager::AcquireSharedFrameBuffer(android::Fence* out_fence, +Result FbshareBufferManager::AcquireSharedFrameBuffer(android::Fence* out_fence, std::array<s32, 4>& out_slot_indexes, s64* out_target_slot, u64 layer_id) { std::scoped_lock lk{m_guard}; @@ -359,7 +359,7 @@ Result FbShareBufferManager::AcquireSharedFrameBuffer(android::Fence* out_fence, R_SUCCEED(); } -Result FbShareBufferManager::PresentSharedFrameBuffer(android::Fence fence, +Result FbshareBufferManager::PresentSharedFrameBuffer(android::Fence fence, Common::Rectangle<s32> crop_region, u32 transform, s32 swap_interval, u64 layer_id, s64 slot) { @@ -397,7 +397,7 @@ Result FbShareBufferManager::PresentSharedFrameBuffer(android::Fence fence, R_SUCCEED(); } -Result FbShareBufferManager::GetSharedFrameBufferAcquirableEvent(Kernel::KReadableEvent** out_event, +Result FbshareBufferManager::GetSharedFrameBufferAcquirableEvent(Kernel::KReadableEvent** out_event, u64 layer_id) { std::scoped_lock lk{m_guard}; @@ -415,7 +415,7 @@ Result FbShareBufferManager::GetSharedFrameBufferAcquirableEvent(Kernel::KReadab R_SUCCEED(); } -Result FbShareBufferManager::WriteAppletCaptureBuffer(bool* out_was_written, s32* out_layer_index) { +Result FbshareBufferManager::WriteAppletCaptureBuffer(bool* out_was_written, s32* out_layer_index) { std::vector<u8> capture_buffer(m_system.GPU().GetAppletCaptureBuffer()); Common::ScratchBuffer<u32> scratch; @@ -444,4 +444,4 @@ Result FbShareBufferManager::WriteAppletCaptureBuffer(bool* out_was_written, s32 R_SUCCEED(); } -} // namespace Service::Nvnflinger +} // namespace Service::VI diff --git a/src/core/hle/service/nvnflinger/fb_share_buffer_manager.h b/src/core/hle/service/vi/fbshare_buffer_manager.h index b79a7d23a..b9e99e61f 100644 --- a/src/core/hle/service/nvnflinger/fb_share_buffer_manager.h +++ b/src/core/hle/service/vi/fbshare_buffer_manager.h @@ -16,7 +16,7 @@ namespace Kernel { class KPageGroup; } -namespace Service::Nvnflinger { +namespace Service::VI { struct SharedMemorySlot { u64 buffer_offset; @@ -32,16 +32,17 @@ struct SharedMemoryPoolLayout { }; static_assert(sizeof(SharedMemoryPoolLayout) == 0x188, "SharedMemoryPoolLayout has wrong size"); -struct FbShareSession; +struct FbshareSession; -class FbShareBufferManager final { +class FbshareBufferManager final { public: - explicit FbShareBufferManager(Core::System& system, Nvnflinger& flinger, + explicit FbshareBufferManager(Core::System& system, + std::shared_ptr<Nvnflinger::Nvnflinger> surface_flinger, std::shared_ptr<Nvidia::Module> nvdrv); - ~FbShareBufferManager(); + ~FbshareBufferManager(); Result Initialize(Kernel::KProcess* owner_process, u64* out_buffer_id, u64* out_layer_handle, - u64 display_id, LayerBlending blending); + u64 display_id, Nvnflinger::LayerBlending blending); void Finalize(Kernel::KProcess* owner_process); Result GetSharedBufferMemoryHandleId(u64* out_buffer_size, s32* out_nvmap_handle, @@ -63,20 +64,20 @@ private: u64 m_display_id = 0; u64 m_buffer_id = 0; SharedMemoryPoolLayout m_pool_layout = {}; - std::map<u64, FbShareSession> m_sessions; + std::map<u64, FbshareSession> m_sessions; std::unique_ptr<Kernel::KPageGroup> m_buffer_page_group; std::mutex m_guard; Core::System& m_system; - Nvnflinger& m_flinger; - std::shared_ptr<Nvidia::Module> m_nvdrv; + const std::shared_ptr<Nvnflinger::Nvnflinger> m_surface_flinger; + const std::shared_ptr<Nvidia::Module> m_nvdrv; }; -struct FbShareSession { +struct FbshareSession { Nvidia::DeviceFD nvmap_fd = {}; Nvidia::NvCore::SessionId session_id = {}; u64 layer_id = {}; u32 buffer_nvmap_handle = 0; }; -} // namespace Service::Nvnflinger +} // namespace Service::VI |