summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2024-02-14 06:17:48 +0100
committerLiam <byteslice@airmail.cc>2024-02-14 18:03:32 +0100
commitb1c71f976c1311caa6cb7dec1fdbbc1d611e0e7a (patch)
treeec51ea1edde81e66c39119cb2d015255e5dff053
parentvi: rewrite IHOSBinderDriver (diff)
downloadyuzu-b1c71f976c1311caa6cb7dec1fdbbc1d611e0e7a.tar
yuzu-b1c71f976c1311caa6cb7dec1fdbbc1d611e0e7a.tar.gz
yuzu-b1c71f976c1311caa6cb7dec1fdbbc1d611e0e7a.tar.bz2
yuzu-b1c71f976c1311caa6cb7dec1fdbbc1d611e0e7a.tar.lz
yuzu-b1c71f976c1311caa6cb7dec1fdbbc1d611e0e7a.tar.xz
yuzu-b1c71f976c1311caa6cb7dec1fdbbc1d611e0e7a.tar.zst
yuzu-b1c71f976c1311caa6cb7dec1fdbbc1d611e0e7a.zip
-rw-r--r--src/core/hle/service/vi/manager_display_service.cpp76
-rw-r--r--src/core/hle/service/vi/manager_display_service.h13
2 files changed, 28 insertions, 61 deletions
diff --git a/src/core/hle/service/vi/manager_display_service.cpp b/src/core/hle/service/vi/manager_display_service.cpp
index 650b420cc..17f2f3b8f 100644
--- a/src/core/hle/service/vi/manager_display_service.cpp
+++ b/src/core/hle/service/vi/manager_display_service.cpp
@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
-#include "core/hle/service/ipc_helpers.h"
+#include "core/hle/service/cmif_serialization.h"
#include "core/hle/service/nvnflinger/nvnflinger.h"
#include "core/hle/service/vi/manager_display_service.h"
#include "core/hle/service/vi/vi_results.h"
@@ -9,15 +9,14 @@
namespace Service::VI {
IManagerDisplayService::IManagerDisplayService(Core::System& system_,
- Nvnflinger::Nvnflinger& nvnflinger_)
- : ServiceFramework{system_, "IManagerDisplayService"}, nvnflinger{nvnflinger_} {
+ Nvnflinger::Nvnflinger& nvnflinger)
+ : ServiceFramework{system_, "IManagerDisplayService"}, m_nvnflinger{nvnflinger} {
// clang-format off
static const FunctionInfo functions[] = {
{200, nullptr, "AllocateProcessHeapBlock"},
{201, nullptr, "FreeProcessHeapBlock"},
- {1020, &IManagerDisplayService::CloseDisplay, "CloseDisplay"},
{1102, nullptr, "GetDisplayResolution"},
- {2010, &IManagerDisplayService::CreateManagedLayer, "CreateManagedLayer"},
+ {2010, C<&IManagerDisplayService::CreateManagedLayer>, "CreateManagedLayer"},
{2011, nullptr, "DestroyManagedLayer"},
{2012, nullptr, "CreateStrayLayer"},
{2050, nullptr, "CreateIndirectLayer"},
@@ -45,9 +44,9 @@ IManagerDisplayService::IManagerDisplayService(Core::System& system_,
{4208, nullptr, "SetDisplayFatalErrorEnabled"},
{4209, nullptr, "IsDisplayPanelOn"},
{4300, nullptr, "GetInternalPanelId"},
- {6000, &IManagerDisplayService::AddToLayerStack, "AddToLayerStack"},
+ {6000, C<&IManagerDisplayService::AddToLayerStack>, "AddToLayerStack"},
{6001, nullptr, "RemoveFromLayerStack"},
- {6002, &IManagerDisplayService::SetLayerVisibility, "SetLayerVisibility"},
+ {6002, C<&IManagerDisplayService::SetLayerVisibility>, "SetLayerVisibility"},
{6003, nullptr, "SetLayerConfig"},
{6004, nullptr, "AttachLayerPresentationTracer"},
{6005, nullptr, "DetachLayerPresentationTracer"},
@@ -103,62 +102,29 @@ IManagerDisplayService::IManagerDisplayService(Core::System& system_,
IManagerDisplayService::~IManagerDisplayService() = default;
-void IManagerDisplayService::CloseDisplay(HLERequestContext& ctx) {
- IPC::RequestParser rp{ctx};
- const u64 display = rp.Pop<u64>();
+Result IManagerDisplayService::CreateManagedLayer(Out<u64> out_layer_id, u32 unknown,
+ u64 display_id, AppletResourceUserId aruid) {
+ LOG_WARNING(Service_VI, "(STUBBED) called. unknown={}, display={}, aruid={}", unknown,
+ display_id, aruid.pid);
- const Result rc = nvnflinger.CloseDisplay(display) ? ResultSuccess : ResultUnknown;
-
- IPC::ResponseBuilder rb{ctx, 2};
- rb.Push(rc);
-}
-
-void IManagerDisplayService::CreateManagedLayer(HLERequestContext& ctx) {
- IPC::RequestParser rp{ctx};
- const u32 unknown = rp.Pop<u32>();
- rp.Skip(1, false);
- const u64 display = rp.Pop<u64>();
- const u64 aruid = rp.Pop<u64>();
-
- LOG_WARNING(Service_VI,
- "(STUBBED) called. unknown=0x{:08X}, display=0x{:016X}, aruid=0x{:016X}", unknown,
- display, aruid);
-
- const auto layer_id = nvnflinger.CreateLayer(display);
+ const auto layer_id = m_nvnflinger.CreateLayer(display_id);
if (!layer_id) {
- LOG_ERROR(Service_VI, "Layer not found! display=0x{:016X}", display);
- IPC::ResponseBuilder rb{ctx, 2};
- rb.Push(ResultNotFound);
- return;
+ LOG_ERROR(Service_VI, "Layer not found! display={}", display_id);
+ R_THROW(VI::ResultNotFound);
}
- IPC::ResponseBuilder rb{ctx, 4};
- rb.Push(ResultSuccess);
- rb.Push(*layer_id);
+ *out_layer_id = *layer_id;
+ R_SUCCEED();
}
-void IManagerDisplayService::AddToLayerStack(HLERequestContext& ctx) {
- IPC::RequestParser rp{ctx};
- const u32 stack = rp.Pop<u32>();
- const u64 layer_id = rp.Pop<u64>();
-
- LOG_WARNING(Service_VI, "(STUBBED) called. stack=0x{:08X}, layer_id=0x{:016X}", stack,
- layer_id);
-
- IPC::ResponseBuilder rb{ctx, 2};
- rb.Push(ResultSuccess);
+Result IManagerDisplayService::AddToLayerStack(u32 stack_id, u64 layer_id) {
+ LOG_WARNING(Service_VI, "(STUBBED) called. stack_id={}, layer_id={}", stack_id, layer_id);
+ R_SUCCEED();
}
-void IManagerDisplayService::SetLayerVisibility(HLERequestContext& ctx) {
- IPC::RequestParser rp{ctx};
- const u64 layer_id = rp.Pop<u64>();
- const bool visibility = rp.Pop<bool>();
-
- LOG_WARNING(Service_VI, "(STUBBED) called, layer_id=0x{:X}, visibility={}", layer_id,
- visibility);
-
- IPC::ResponseBuilder rb{ctx, 2};
- rb.Push(ResultSuccess);
+Result IManagerDisplayService::SetLayerVisibility(bool visible, u64 layer_id) {
+ LOG_WARNING(Service_VI, "(STUBBED) called, layer_id={}, visible={}", layer_id, visible);
+ R_SUCCEED();
}
} // namespace Service::VI
diff --git a/src/core/hle/service/vi/manager_display_service.h b/src/core/hle/service/vi/manager_display_service.h
index 6a5554eff..60e646ee0 100644
--- a/src/core/hle/service/vi/manager_display_service.h
+++ b/src/core/hle/service/vi/manager_display_service.h
@@ -1,23 +1,24 @@
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+#include "core/hle/service/cmif_types.h"
#include "core/hle/service/service.h"
namespace Service::VI {
class IManagerDisplayService final : public ServiceFramework<IManagerDisplayService> {
public:
- explicit IManagerDisplayService(Core::System& system_, Nvnflinger::Nvnflinger& nvnflinger_);
+ explicit IManagerDisplayService(Core::System& system_, Nvnflinger::Nvnflinger& nvnflinger);
~IManagerDisplayService() override;
private:
- void CloseDisplay(HLERequestContext& ctx);
- void CreateManagedLayer(HLERequestContext& ctx);
- void AddToLayerStack(HLERequestContext& ctx);
- void SetLayerVisibility(HLERequestContext& ctx);
+ Result CreateManagedLayer(Out<u64> out_layer_id, u32 unknown, u64 display_id,
+ AppletResourceUserId aruid);
+ Result AddToLayerStack(u32 stack_id, u64 layer_id);
+ Result SetLayerVisibility(bool visible, u64 layer_id);
private:
- Nvnflinger::Nvnflinger& nvnflinger;
+ Nvnflinger::Nvnflinger& m_nvnflinger;
};
} // namespace Service::VI