From f13d9ba6cc7c232dbaf0ab9d602e328b5af595c1 Mon Sep 17 00:00:00 2001 From: averne <45773016+averne@users.noreply.github.com> Date: Thu, 8 Aug 2019 12:41:10 +0200 Subject: [PATCH] Added viDestroyManagedLayer (#316) --- nx/include/switch/services/vi.h | 1 + nx/source/services/vi.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/nx/include/switch/services/vi.h b/nx/include/switch/services/vi.h index 21722346..1414acc4 100644 --- a/nx/include/switch/services/vi.h +++ b/nx/include/switch/services/vi.h @@ -92,6 +92,7 @@ Result viSetLayerSize(ViLayer *layer, u64 width, u64 height); Result viSetLayerZ(ViLayer *layer, u64 z); Result viSetLayerPosition(ViLayer *layer, float x, float y); Result viCloseLayer(ViLayer *layer); +Result viDestroyManagedLayer(ViLayer *layer); Result viSetLayerScalingMode(ViLayer *layer, ViScalingMode scaling_mode); diff --git a/nx/source/services/vi.c b/nx/source/services/vi.c index 03f5d5a6..924f4f7f 100644 --- a/nx/source/services/vi.c +++ b/nx/source/services/vi.c @@ -615,6 +615,39 @@ Result viCreateManagedLayer(const ViDisplay *display, ViLayerFlags layer_flags, return rc; } +Result viDestroyManagedLayer(ViLayer *layer) { + IpcCommand c; + ipcInitialize(&c); + + struct { + u64 magic; + u64 cmd_id; + u64 layer_id; + } *raw; + + raw = ipcPrepareHeader(&c, sizeof(*raw)); + raw->magic = SFCI_MAGIC; + raw->cmd_id = 2011; + raw->layer_id = layer->layer_id; + + Result rc = serviceIpcDispatch(&g_viIManagerDisplayService); + + if (R_SUCCEEDED(rc)) { + IpcParsedCommand r; + ipcParse(&r); + + struct { + u64 magic; + u64 result; + } *resp = r.Raw; + + rc = resp->result; + memset(layer, 0, sizeof(ViLayer)); + } + + return rc; +} + Result viSetContentVisibility(bool v) { IpcCommand c; ipcInitialize(&c);