Switch 2: GSV services

From Nintendo Switch Brew
Revision as of 03:37, 14 March 2026 by Ootulp (talk | contribs) (Ootulp moved page GSV services to (Switch 2): GSV services without leaving a redirect)
Jump to navigation Jump to search

(S2) GraphicsSupervisor

This is a TIPC interface so the command numbers are subtracted by 16.

Cmd Name
1 #InitializeGraphicsWithTransferMemory
4 #InitializeGraphics
11 #SetCurrentProcessHandle
12
101 #StartGraphics
111
112
114
115
187
201
301
303
311
312
314
315
321
327
391
401 #PrepareGpuManagerSession
402 #StartGpuManagerSession
423
428 #QueryNativeImage
429 #CreateNativeImage
434
435 #CalculateNativeImageSize
494
496 #CreateGpuManagerSessionWithTransferMemory
497 #CreateGpuManagerSession
901
902
903
905
911
912
922
961
991
1001
1002
1003
1101
1102
1301 #InitializeAdraw
1302 #StartAdraw
1325 #GetAdrawFrameBufferHandle
1326 #GetAdrawImageHandle
1401 #CreateNvDrv2UserSessionWithTransferMemory
1402 #CreateNvDrv2UserSession
1411 #GetNvDrv2UserTransferMemoryUsage
1501
1502
1601
1602
1603
1611
1612
1691

InitializeGraphicsWithTransferMemory

Unofficial name.

Takes a TransferMemory handle, an input AppletResourceUserId and an input u64 TransferMemorySize. No output.

InitializeGraphics

Unofficial name.

Takes a Process handle, an input AppletResourceUserId and five input u64s. No output.

The first u64 appears to be a version ([19.0.0] 0x8000000000000001, [20.1.1] 0x8000000000000005), the last u64 is the output from new InfoType 31 or 32 and the remaining u64s are all 0.

SetCurrentProcessHandle

Unofficial name.

Takes a Process handle. No output.

Called directly after #InitializeGraphicsWithTransferMemory or #InitializeGraphics.

StartGraphics

Unofficial name.

No input/output.

Called directly after #SetCurrentProcessHandle.

PrepareGpuManagerSession

Unofficial name.

No input/output.

Called directly after #CreateGpuManagerSessionWithTransferMemory or #CreateGpuManagerSession.

StartGpuManagerSession

Unofficial name.

No input/output.

Called directly after #PrepareGpuManagerSession.

GetImageInfo

Unofficial name.

Takes an input u32 ImageHandle. Returns an ImageInfo.

CreateGpuManagerSessionWithTransferMemory

Unofficial name.

Takes a TransferMemory handle and two input u64s Version and TransferMemorySize. Returns a #GpuManagerSession.

[19.0.0] Version must be 2.

CreateGpuManagerSession

Unofficial name.

Takes an input u64 Version. Returns a #GpuManagerSession.

[19.0.0] Version must be 2.

InitializeAdraw

Unofficial name.

No input/output.

StartAdraw

Unofficial name.

No input/output.

Called directly after #InitializeAdraw.

GetAdrawFrameBufferHandle

Unofficial name.

Takes an input u64. Returns an output u32 FrameBufferHandle.

Official software sends the Id obtained with GetFrameBufferInfo from adraw.

GetAdrawImageHandle

Unofficial name.

Takes seven input u64s, two input u16s and two input u32s. Returns an output u32 ImageHandle.

Official software sends 0x100000000 in the first u64, 0 in all remaining u64s, Width and Height in the two u16s, BlockCount int the first u32 and the FrameBufferHandle from GetAdrawFrameBufferHandle in the last u32.

CreateNvDrv2UserSessionWithTransferMemory

Unofficial name.

Takes a TransferMemory handle, an input u64 TransferMemorySize and an input u8. Returns an INvDrv2User.

CreateNvDrv2UserSession

Unofficial name.

No input. Returns an INvDrv2User.

Only one session can be open at a time, otherwise returns error 0x200f3.

GetNvDrv2UserTransferMemoryUsage

Unofficial name.

No input. Returns three u64s TotalTransferMemorySize, UsedTransferMemorySize and MaxTransferMemorySize.

GpuManagerSession

Unofficial name. This is a TIPC interface so the command numbers are subtracted by 16.

Cmd Name
11 #GetEventIdRange
12 #CreateEvent
21 #RequestGpuSession
22 #GetGpuSession
33
41
42
102
200
201
202

GetEventIdRange

Unofficial name.

No input. Returns two u32s EventIdMin and EventIdMax.

CreateEvent

Unofficial name.

Takes an input u32 EventId. Returns an output Event handle.

RequestGpuSession

Unofficial name.

Takes an input u32 EventId. No output.

EventId must have been previously passed to #CreateEvent and the returned Event handle will be signalled when the session is ready.

GetGpuSession

Unofficial name.

No input. Returns a #GpuSession.

Called after #RequestGpuSession and the Event handle has been signalled.

GpuSession

Unofficial name. This is a TIPC interface so the command numbers are subtracted by 16.

Cmd Name
101 #CreateGpuMemory
102 #DestroyGpuMemory
201 [19.0.0-19.1.0] MapMemory
202 [19.0.0-19.1.0] UnmapMemory
203 [19.0.0-19.1.0] AllocateAddressSpace
204 [19.0.0-19.1.0] FreeAddressSpace
205 [19.0.0-19.1.0] RemapMemory
207 [19.0.0-19.1.0] ModifyMemoryMapping
211 [20.1.1+] MapMemoryV2
212 [20.1.1+] ModifyMemoryMappingV2
213 [20.1.1+] UnmapMemoryV2
214 [20.1.1+] AllocateAddressSpaceV2
215 [20.1.1+] FreeAddressSpaceV2
216 [20.1.1+] RemapMemoryV2

CreateGpuMemory

Unofficial name.

Takes two input u64s MemoryAddressStart and MemoryAddressEnd and two u8s. Returns an output u32 GpuMemoryHandle.

The memory region between MemoryAddressStart and MemoryAddressEnd must have been passed to SVC 0x80 with attribute 0x20.

DestroyGpuMemory

Unofficial name.

Takes two input u32s GpuMemoryHandle and EventId. No output.

The Event handle associated with EventId will be signalled when the memory is released.