From c8821c73136a192754aa6062852f8ffda7b3e291 Mon Sep 17 00:00:00 2001 From: PixelyIon Date: Sat, 16 Oct 2021 12:59:59 +0100 Subject: [PATCH] Update `nvdrv` perms to 11.0.0+ & Implement `nvdrv:a` service `nvdrv:a` (For Applets) is used by some older homebrew such as SpaceNX which don't fall back to `nvdrv` (For Applications). --- app/src/main/cpp/skyline/services/nvdrv/types.h | 12 ++++++++++++ app/src/main/cpp/skyline/services/serviceman.cpp | 1 + 2 files changed, 13 insertions(+) diff --git a/app/src/main/cpp/skyline/services/nvdrv/types.h b/app/src/main/cpp/skyline/services/nvdrv/types.h index 5633721b..e9ca299a 100644 --- a/app/src/main/cpp/skyline/services/nvdrv/types.h +++ b/app/src/main/cpp/skyline/services/nvdrv/types.h @@ -38,10 +38,22 @@ namespace skyline::service::nvdrv { .AccessGpu = true, .AccessGpuDebug = true, .AccessVic = true, + .AccessVideoEncoder = true, // Enabled in 11.0.0+ .AccessVideoDecoder = true, .ModifyGraphicsMargin = true }; + /** + * @brief Permissions that applets have when using the 'nvdrv:a' service + */ + static constexpr SessionPermissions AppletSessionPermissions { + .AccessGpu = true, + .AccessVic = true, + .AccessVideoDecoder = true, + .AccessJpeg = true, + .DuplicateNvMapHandles = true + }; + /** * @brief A bitfield struct that unpacks an ioctl number, used as an alternative to Linux's macros */ diff --git a/app/src/main/cpp/skyline/services/serviceman.cpp b/app/src/main/cpp/skyline/services/serviceman.cpp index 310fa1c7..82af4f71 100644 --- a/app/src/main/cpp/skyline/services/serviceman.cpp +++ b/app/src/main/cpp/skyline/services/serviceman.cpp @@ -81,6 +81,7 @@ namespace skyline::service { SERVICE_CASE(glue::IStaticService, "time:u", globalServiceState->timesrv.managerServer.GetStaticServiceAsUser(state, *this), globalServiceState->timesrv, timesrv::constant::StaticServiceUserPermissions) SERVICE_CASE(fssrv::IFileSystemProxy, "fsp-srv") SERVICE_CASE(nvdrv::INvDrvServices, "nvdrv", globalServiceState->nvdrv, nvdrv::ApplicationSessionPermissions) + SERVICE_CASE(nvdrv::INvDrvServices, "nvdrv:a", globalServiceState->nvdrv, nvdrv::AppletSessionPermissions) SERVICE_CASE(hosbinder::IHOSBinderDriver, "dispdrv", globalServiceState->nvdrv.core.nvMap) SERVICE_CASE(visrv::IApplicationRootService, "vi:u") SERVICE_CASE(visrv::ISystemRootService, "vi:s")