Merge pull request #24 from shinyquagsire23/vi-managedlayer

vi:m ManagedLayer support
This commit is contained in:
plutoo 2018-01-12 18:25:30 +01:00 committed by GitHub
commit 3ac366528e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 1 deletions

View File

@ -38,6 +38,7 @@ Handle viGetSession_IHOSBinderDriverIndirect(void);
Result viOpenDisplay(const char *DisplayName, ViDisplay *display);
Result viCloseDisplay(ViDisplay *display);
Result viCreateManagedLayer(const ViDisplay *display, u32 LayerFlags, u64 AppletResourceUserId, u64 *layer_id);
Result viOpenLayer(u8 NativeWindow[0x100], u64 *NativeWindow_Size, const ViDisplay *display, ViLayer *layer, u32 LayerFlags, u64 LayerId);
Result viCloseLayer(ViLayer *layer);

View File

@ -313,7 +313,7 @@ void gfxInitDefault(void)
break;
}
Result rc = _gfxInit(ViLayerFlags_Default, "Default", ViLayerFlags_Default, 0, nv_servicetype, 0x300000);
Result rc = _gfxInit(ViServiceType_Default, "Default", ViLayerFlags_Default, 0, nv_servicetype, 0x300000);
if (R_FAILED(rc)) fatalSimple(rc);
}

View File

@ -249,6 +249,49 @@ Result viCloseDisplay(ViDisplay *display) {
return rc;
}
Result viCreateManagedLayer(const ViDisplay *display, u32 LayerFlags, u64 AppletResourceUserId, u64 *layer_id) {
IpcCommand c;
ipcInitialize(&c);
struct {
u64 magic;
u64 cmd_id;
u32 LayerFlags;
u32 pad;
u64 display_id;
u64 AppletResourceUserId;
} *raw;
raw = ipcPrepareHeader(&c, sizeof(*raw));
raw->magic = SFCI_MAGIC;
raw->cmd_id = 2010;
raw->LayerFlags = LayerFlags;
raw->pad = 0;
raw->display_id = display->display_id;
raw->AppletResourceUserId = AppletResourceUserId;
Result rc = ipcDispatch(g_viIManagerDisplayService);
if (R_SUCCEEDED(rc)) {
IpcCommandResponse r;
ipcParseResponse(&r);
struct {
u64 magic;
u64 result;
u64 layer_id;
} *resp = r.Raw;
rc = resp->result;
if (R_SUCCEEDED(rc)) {
*layer_id = resp->layer_id;
}
}
return rc;
}
static Result _viOpenLayer(u8 NativeWindow[0x100], u64 *NativeWindow_Size, const ViDisplay *display, u64 layer_id, u64 AppletResourceUserId) {
IpcCommand c;
ipcInitialize(&c);
@ -354,6 +397,7 @@ Result viOpenLayer(u8 NativeWindow[0x100], u64 *NativeWindow_Size, const ViDispl
else {
if (layer_id==0) {
rc = appletCreateManagedDisplayLayer(&layer_id);
if (R_FAILED(rc)) return rc;
}