summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/nvnflinger
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/nvnflinger/nvnflinger.cpp11
-rw-r--r--src/core/hle/service/nvnflinger/nvnflinger.h14
-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