<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Halotroop2288</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Halotroop2288"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Halotroop2288"/>
	<updated>2026-05-08T08:31:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Display_services&amp;diff=6081</id>
		<title>Display services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Display_services&amp;diff=6081"/>
		<updated>2019-01-24T09:37:44Z</updated>

		<summary type="html">&lt;p&gt;Halotroop2288: Link to EDID wikipedia page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The only image data contained in this sysmodule is basically a saved display framebuffer, no image data for actively-used layers/framebuffers.&lt;br /&gt;
&lt;br /&gt;
= caps:sc =&lt;br /&gt;
This is &amp;quot;nn::capsrv::sf::IScreenShotControlService&amp;quot;. This is available with [2.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1001 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1002 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1003 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1011 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1012 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1201 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1202 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1203 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cmd1 ==&lt;br /&gt;
Takes a type-0x46 output buffer, an input u32, two input u64s &#039;&#039;&#039;width&#039;&#039;&#039;/&#039;&#039;&#039;height&#039;&#039;&#039;, an input s64 &#039;&#039;&#039;buffer_count&#039;&#039;&#039;, and an input s64 &#039;&#039;&#039;buffer_index&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;width&#039;&#039;&#039;/&#039;&#039;&#039;height&#039;&#039;&#039; must match 1280/720. &#039;&#039;&#039;buffer_index&#039;&#039;&#039; must be &amp;lt; &#039;&#039;&#039;buffer_count&#039;&#039;&#039;. &#039;&#039;&#039;buffer_index&#039;&#039;&#039; and &#039;&#039;&#039;buffer_count&#039;&#039;&#039; must not be negative.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;buffer_index&#039;&#039;&#039; and &#039;&#039;&#039;buffer_count&#039;&#039;&#039; correspond to buffers with size 0x384000(1280*720*4).&lt;br /&gt;
&lt;br /&gt;
Value 0 is usable for the input u32.&lt;br /&gt;
&lt;br /&gt;
This takes a screenshot, the output buffer contains the RGBA8 image.&lt;br /&gt;
&lt;br /&gt;
Stubbed with [5.0.0+], where it now returns error 0x7FECE.&lt;br /&gt;
&lt;br /&gt;
== Cmd2 ==&lt;br /&gt;
Calls the same internal func as cmd1, where the last param is an additional cmd input u64 instead of hard-coded value 0x5f5e100.&lt;br /&gt;
&lt;br /&gt;
Stubbed with [5.0.0+], where it now returns error 0x7FECE.&lt;br /&gt;
&lt;br /&gt;
= caps:ss =&lt;br /&gt;
This is &amp;quot;nn::capsrv::sf::IScreenShotService&amp;quot;. This is available with [2.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 201 ||&lt;br /&gt;
|-&lt;br /&gt;
| 202 ||&lt;br /&gt;
|-&lt;br /&gt;
| 203 ||&lt;br /&gt;
|-&lt;br /&gt;
| 204 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= caps:su =&lt;br /&gt;
This is &amp;quot;nn::capsrv::sf::IScreenShotApplicationService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 201 || SaveScreenShot&lt;br /&gt;
|-&lt;br /&gt;
| 203 || SaveScreenShotEx0&lt;br /&gt;
|-&lt;br /&gt;
| 210 || [6.0.0+] SaveScreenShotEx2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= cec-mgr =&lt;br /&gt;
This is &amp;quot;nn::cec::ICecManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= mm:u =&lt;br /&gt;
This is &amp;quot;nn::mmnv::IRequest&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
NVIDIA multimedia (NvMM) platform service.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || InitializeOld&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeOld&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetAndWaitOld&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetOld&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetAndWait&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Get&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= vi:u =&lt;br /&gt;
This is &amp;quot;nn::visrv::sf::IApplicationRootService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#vi:u|GetDisplayService]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetDisplayService ==&lt;br /&gt;
Returns an [[#IApplicationDisplayService]]. Takes an input u32, user-processes use 0 or 1, with 0 for regular-applications normally. 0 = user-service(vi:u), 1 = non-user-service? Returns an error when using value 1 with vi:u(same error listed below for IApplicationDisplayService for unavailable commands).&lt;br /&gt;
&lt;br /&gt;
= vi:s =&lt;br /&gt;
This is &amp;quot;nn::visrv::sf::ISystemRootService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#vi:s|GetDisplayService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#vi:s|GetDisplayServiceWithProxyNameExchange]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetDisplayService ==&lt;br /&gt;
Returns an [[#IApplicationDisplayService]]. Same input as vi:u.&lt;br /&gt;
&lt;br /&gt;
== GetDisplayServiceWithProxyNameExchange ==&lt;br /&gt;
Returns an [[#IApplicationDisplayService]].&lt;br /&gt;
&lt;br /&gt;
= vi:m =&lt;br /&gt;
This is &amp;quot;nn::visrv::sf::IManagerRootService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#vi:m|GetDisplayService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#vi:m|GetDisplayServiceWithProxyNameExchange]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetDisplayService ==&lt;br /&gt;
Returns an [[#IApplicationDisplayService]]. Same input as vi:u.&lt;br /&gt;
&lt;br /&gt;
== GetDisplayServiceWithProxyNameExchange ==&lt;br /&gt;
Takes an input u64 and u32. Returns an [[#IApplicationDisplayService]].&lt;br /&gt;
&lt;br /&gt;
= IApplicationDisplayService =&lt;br /&gt;
This is &amp;quot;nn::visrv::sf::IApplicationDisplayService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#GetRelayService]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetSystemDisplayService]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetManagerDisplayService]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [2.0.0+] [[#GetIndirectDisplayTransactionService]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [[#ListDisplays]]&lt;br /&gt;
|-&lt;br /&gt;
| 1010 || [[#OpenDisplay]]&lt;br /&gt;
|-&lt;br /&gt;
| 1011 || [[#OpenDefaultDisplay]]&lt;br /&gt;
|-&lt;br /&gt;
| 1020 || [[#CloseDisplay]]&lt;br /&gt;
|-&lt;br /&gt;
| 1101 || [[#SetDisplayEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 1102 || [[#GetDisplayResolution]]&lt;br /&gt;
|-&lt;br /&gt;
| 2020 || [[#OpenLayer]]&lt;br /&gt;
|-&lt;br /&gt;
| 2021 || [[#CloseLayer]]&lt;br /&gt;
|-&lt;br /&gt;
| 2030 || [[#CreateStrayLayer]]&lt;br /&gt;
|-&lt;br /&gt;
| 2031 || [[#DestroyStrayLayer]]&lt;br /&gt;
|-&lt;br /&gt;
| 2101 || [[#SetLayerScalingMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 2102 || [5.0.0+] ConvertScalingMode&lt;br /&gt;
|-&lt;br /&gt;
| 2450 || [[#GetIndirectLayerImageMap]]&lt;br /&gt;
|-&lt;br /&gt;
| 2451 || [[#GetIndirectLayerImageCropMap]]&lt;br /&gt;
|-&lt;br /&gt;
| 2460 || [[#GetIndirectLayerImageRequiredMemoryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 5202 || [[#GetDisplayVsyncEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5203 || [[#GetDisplayVsyncEventForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Available sessions for each service:&lt;br /&gt;
* &amp;quot;vi:u&amp;quot;: Only GetRelayService.&lt;br /&gt;
* &amp;quot;vi:s&amp;quot;: Everything except GetManagerDisplayService.&lt;br /&gt;
* &amp;quot;vi:m&amp;quot;: All.&lt;br /&gt;
&lt;br /&gt;
When attempting to use a get-session cmd with a service it&#039;s not available with, error 0xA72 is returned.&lt;br /&gt;
&lt;br /&gt;
These commands using PIDs have AppletResourceUserId as the last input u64, hence AppletResourceUserId must [[IPC_Marshalling|match]] the user-process PID(no special handling for value 0).&lt;br /&gt;
&lt;br /&gt;
== GetRelayService ==&lt;br /&gt;
Returns an [[Nvnflinger_services#dispdrv|IHOSBinderDriver]] interface which abstracts &amp;quot;nn::visrv::service::RelayServiceImpl&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== GetIndirectDisplayTransactionService ==&lt;br /&gt;
Returns an [[Nvnflinger_services#dispdrv|IHOSBinderDriver]] interface which abstracts &amp;quot;nn::visrv::service::IndirectDisplayTransactionServiceImpl&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== GetSystemDisplayService ==&lt;br /&gt;
Returns an [[#ISystemDisplayService]].&lt;br /&gt;
&lt;br /&gt;
== GetManagerDisplayService ==&lt;br /&gt;
Returns an [[#IManagerDisplayService]].&lt;br /&gt;
&lt;br /&gt;
== ListDisplays ==&lt;br /&gt;
Takes a type-0x6 output buffer containing the array of [[#DisplayInfo]] output entries. Returns an output u64: total number of output entries.&lt;br /&gt;
&lt;br /&gt;
Normally(?) this only returns the &amp;quot;Default&amp;quot; display.&lt;br /&gt;
&lt;br /&gt;
== OpenDisplay ==&lt;br /&gt;
Takes a [[#DisplayName]] as input. Returns an output u64, the DisplayId.&lt;br /&gt;
&lt;br /&gt;
To open the default display, input string &amp;quot;Default&amp;quot; can be used.&lt;br /&gt;
&lt;br /&gt;
== OpenDefaultDisplay ==&lt;br /&gt;
Returns an output u64.&lt;br /&gt;
&lt;br /&gt;
Probably not (?) used by newer official user-processes, since those use OpenDisplay with the default string instead.&lt;br /&gt;
&lt;br /&gt;
== CloseDisplay ==&lt;br /&gt;
Takes an input u64, DisplayId.&lt;br /&gt;
&lt;br /&gt;
== SetDisplayEnabled ==&lt;br /&gt;
Takes an input u32 boolean, and an u64 DisplayId.&lt;br /&gt;
&lt;br /&gt;
== GetDisplayResolution ==&lt;br /&gt;
Takes an input u64 DisplayId and returns two output u64s: width and height.&lt;br /&gt;
&lt;br /&gt;
== OpenLayer ==&lt;br /&gt;
Takes a PID-descriptor, a type-0x6 buffer for the output [[#NativeWindow]], a [[#DisplayName]](which was previously used with [[#OpenDisplay]]), an u64 LayerId, and an u64 [[AM_services|AppletResourceUserId]]. Returns an output u64 NativeWindow_Size.&lt;br /&gt;
&lt;br /&gt;
Official user-processes use a LayerId stored in a global state field(&amp;quot;...ExternalLayerId&amp;quot;) if non-zero, otherwise:&lt;br /&gt;
* When AppletResourceUserId==0, [[#CreateStrayLayer]] is used instead of the OpenLayer cmd.&lt;br /&gt;
* When AppletResourceUserId!=0, [[AM_services#CreateManagedDisplayLayer]] is used and the output from that is used for LayerId with the OpenLayer cmd.&lt;br /&gt;
&lt;br /&gt;
This OpenLayer command returns error 0x272 when the AppletResourceUserId is invalid.&lt;br /&gt;
&lt;br /&gt;
== CloseLayer ==&lt;br /&gt;
Takes an input u64: LayerId which was used with [[#OpenLayer]].&lt;br /&gt;
&lt;br /&gt;
== CreateStrayLayer ==&lt;br /&gt;
Takes a type-0x6 buffer for the output [[#NativeWindow]], an u32(LayerFlags bitmask), and an u64 DisplayId. Returns two output u64s: LayerId and NativeWindow_Size.&lt;br /&gt;
&lt;br /&gt;
== DestroyStrayLayer ==&lt;br /&gt;
Takes an input u64: LayerId from [[#CreateStrayLayer]].&lt;br /&gt;
&lt;br /&gt;
== SetLayerScalingMode ==&lt;br /&gt;
Takes an input u64(&amp;quot;ScalingMode&amp;quot;) and u64 (&amp;quot;LayerId&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== GetIndirectLayerImageMap ==&lt;br /&gt;
Takes a PID-descriptor, an type-0x46 buffer, and four u64s: width(s32), height(s32), &amp;lt;output from [[AM_services|AM]] GetIndirectLayerConsumerHandle&amp;gt;, and [[AM_services|AppletResourceUserId]]. Returns two output u64s.&lt;br /&gt;
&lt;br /&gt;
Calls the same func as [[#GetIndirectLayerImageCropMap]] internally, with the input floats set to 0.0f, then 1.0f for the rest.&lt;br /&gt;
&lt;br /&gt;
== GetIndirectLayerImageCropMap ==&lt;br /&gt;
Takes a PID-descriptor, an type-0x46 buffer, four floats, four u64s(last u64 is [[AM_services|AppletResourceUserId]]). Returns two output u64s. The floats are stored immediately after each other(32bits).&lt;br /&gt;
&lt;br /&gt;
== GetIndirectLayerImageRequiredMemoryInfo ==&lt;br /&gt;
Takes two input u64s: width and height. Returns two output u64s. First u64 is the buffer size to use with the ImageMap cmds, second u64 is the buffer address alignment for those cmds.&lt;br /&gt;
&lt;br /&gt;
== GetDisplayVsyncEvent ==&lt;br /&gt;
Takes an input u64 DisplayId and returns a handle.&lt;br /&gt;
&lt;br /&gt;
== GetDisplayVsyncEventForDebug ==&lt;br /&gt;
Takes an input u64 DisplayId and returns a handle.&lt;br /&gt;
&lt;br /&gt;
== ISystemDisplayService ==&lt;br /&gt;
This is &amp;quot;nn::visrv::sf::ISystemDisplayService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || GetZOrderCountMin&lt;br /&gt;
|-&lt;br /&gt;
| 1202 || GetZOrderCountMax&lt;br /&gt;
|-&lt;br /&gt;
| 1203 || GetDisplayLogicalResolution&lt;br /&gt;
|-&lt;br /&gt;
| 1204 || SetDisplayMagnification&lt;br /&gt;
|-&lt;br /&gt;
| 2201 || SetLayerPosition&lt;br /&gt;
|-&lt;br /&gt;
| 2203 || SetLayerSize&lt;br /&gt;
|-&lt;br /&gt;
| 2204 || GetLayerZ&lt;br /&gt;
|-&lt;br /&gt;
| 2205 || SetLayerZ&lt;br /&gt;
|-&lt;br /&gt;
| 2207 || SetLayerVisibility&lt;br /&gt;
|-&lt;br /&gt;
| 2209 || SetLayerAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 2312 || CreateStrayLayer&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || OpenIndirectLayer&lt;br /&gt;
|-&lt;br /&gt;
| 2401 || CloseIndirectLayer&lt;br /&gt;
|-&lt;br /&gt;
| 2402 || FlipIndirectLayer&lt;br /&gt;
|-&lt;br /&gt;
| 3000 || ListDisplayModes&lt;br /&gt;
|-&lt;br /&gt;
| 3001 || ListDisplayRgbRanges&lt;br /&gt;
|-&lt;br /&gt;
| 3002 || ListDisplayContentTypes&lt;br /&gt;
|-&lt;br /&gt;
| 3200 || GetDisplayMode&lt;br /&gt;
|-&lt;br /&gt;
| 3201 || SetDisplayMode&lt;br /&gt;
|-&lt;br /&gt;
| 3202 || GetDisplayUnderscan&lt;br /&gt;
|-&lt;br /&gt;
| 3203 || SetDisplayUnderscan&lt;br /&gt;
|-&lt;br /&gt;
| 3204 || GetDisplayContentType&lt;br /&gt;
|-&lt;br /&gt;
| 3205 || SetDisplayContentType&lt;br /&gt;
|-&lt;br /&gt;
| 3206 || GetDisplayRgbRange&lt;br /&gt;
|-&lt;br /&gt;
| 3207 || SetDisplayRgbRange&lt;br /&gt;
|-&lt;br /&gt;
| 3208 || GetDisplayCmuMode&lt;br /&gt;
|-&lt;br /&gt;
| 3209 || SetDisplayCmuMode&lt;br /&gt;
|-&lt;br /&gt;
| 3210 || GetDisplayContrastRatio&lt;br /&gt;
|-&lt;br /&gt;
| 3211 || SetDisplayContrastRatio&lt;br /&gt;
|-&lt;br /&gt;
| 3214 || GetDisplayGamma&lt;br /&gt;
|-&lt;br /&gt;
| 3215 || SetDisplayGamma&lt;br /&gt;
|-&lt;br /&gt;
| 3216 || GetDisplayCmuLuma&lt;br /&gt;
|-&lt;br /&gt;
| 3217 || SetDisplayCmuLuma&lt;br /&gt;
|-&lt;br /&gt;
| 8225 || [4.0.0+] GetSharedBufferMemoryHandleId&lt;br /&gt;
|-&lt;br /&gt;
| 8250 || [4.0.0+] OpenSharedLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8251 || [4.0.0+] CloseSharedLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8252 || [4.0.0+] ConnectSharedLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8253 || [4.0.0+] DisconnectSharedLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8254 || [4.0.0+] AcquireSharedFrameBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 8255 || [4.0.0+] PresentSharedFrameBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 8256 || [4.0.0+] GetSharedFrameBufferAcquirableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8257 || [4.0.0+] FillSharedFrameBufferColor&lt;br /&gt;
|-&lt;br /&gt;
| 8258 || [5.0.0+] CancelSharedFrameBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IManagerDisplayService ==&lt;br /&gt;
This is &amp;quot;nn::visrv::sf::IManagerDisplayService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [4.0.0+] AllocateProcessHeapBlock&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [4.0.0+] FreeProcessHeapBlock&lt;br /&gt;
|-&lt;br /&gt;
| 1102 || GetDisplayResolution&lt;br /&gt;
|-&lt;br /&gt;
| 2010 || CreateManagedLayer&lt;br /&gt;
|-&lt;br /&gt;
| 2011 || DestroyManagedLayer&lt;br /&gt;
|-&lt;br /&gt;
| 2050 || CreateIndirectLayer&lt;br /&gt;
|-&lt;br /&gt;
| 2051 || DestroyIndirectLayer&lt;br /&gt;
|-&lt;br /&gt;
| 2052 || CreateIndirectProducerEndPoint&lt;br /&gt;
|-&lt;br /&gt;
| 2053 || DestroyIndirectProducerEndPoint&lt;br /&gt;
|-&lt;br /&gt;
| 2054 || CreateIndirectConsumerEndPoint&lt;br /&gt;
|-&lt;br /&gt;
| 2055 || DestroyIndirectConsumerEndPoint&lt;br /&gt;
|-&lt;br /&gt;
| 2300 || AcquireLayerTexturePresentingEvent&lt;br /&gt;
|-&lt;br /&gt;
| 2301 || ReleaseLayerTexturePresentingEvent&lt;br /&gt;
|-&lt;br /&gt;
| 2302 || GetDisplayHotplugEvent&lt;br /&gt;
|-&lt;br /&gt;
| 2402 || GetDisplayHotplugState&lt;br /&gt;
|-&lt;br /&gt;
| 2501 || [4.0.0+] GetCompositorErrorInfo&lt;br /&gt;
|-&lt;br /&gt;
| 2601 || [4.0.0+] GetDisplayErrorEvent&lt;br /&gt;
|-&lt;br /&gt;
| 4201 || SetDisplayAlpha&lt;br /&gt;
|-&lt;br /&gt;
| 4203 || SetDisplayLayerStack&lt;br /&gt;
|-&lt;br /&gt;
| 4205 || SetDisplayPowerState&lt;br /&gt;
|-&lt;br /&gt;
| 4206 || [4.0.0+] SetDefaultDisplay&lt;br /&gt;
|-&lt;br /&gt;
| 6000 || AddToLayerStack&lt;br /&gt;
|-&lt;br /&gt;
| 6001 || RemoveFromLayerStack&lt;br /&gt;
|-&lt;br /&gt;
| 6002 || SetLayerVisibility&lt;br /&gt;
|-&lt;br /&gt;
| 6003 || [5.0.0+] SetLayerConfig&lt;br /&gt;
|-&lt;br /&gt;
| 6004 || [5.0.0+] AttachLayerPresentationTracer&lt;br /&gt;
|-&lt;br /&gt;
| 6005 || [5.0.0+] DetachLayerPresentationTracer&lt;br /&gt;
|-&lt;br /&gt;
| 6006 || [5.0.0+] StartLayerPresentationRecording&lt;br /&gt;
|-&lt;br /&gt;
| 6007 || [5.0.0+] StopLayerPresentationRecording&lt;br /&gt;
|-&lt;br /&gt;
| 6008 || [5.0.0+] StartLayerPresentationFenceWait&lt;br /&gt;
|-&lt;br /&gt;
| 6009 || [5.0.0+] StopLayerPresentationFenceWait&lt;br /&gt;
|-&lt;br /&gt;
| 6010 || [5.0.0+] GetLayerPresentationAllFencesExpiredEvent&lt;br /&gt;
|-&lt;br /&gt;
| 7000 || SetContentVisibility&lt;br /&gt;
|-&lt;br /&gt;
| 8000 || SetConductorLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8100 || SetIndirectProducerFlipOffset&lt;br /&gt;
|-&lt;br /&gt;
| 8200 || [4.0.0+] CreateSharedBufferStaticStorage&lt;br /&gt;
|-&lt;br /&gt;
| 8201 || [4.0.0+] CreateSharedBufferTransferMemory&lt;br /&gt;
|-&lt;br /&gt;
| 8202 || [4.0.0+] DestroySharedBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 8203 || [4.0.0+] BindSharedLowLevelLayerToManagedLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8204 || [4.0.0+] BindSharedLowLevelLayerToIndirectLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8207 || [4.0.0+] UnbindSharedLowLevelLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8208 || [4.0.0+] ConnectSharedLowLevelLayerToSharedBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 8209 || [4.0.0+] DisconnectSharedLowLevelLayerFromSharedBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 8210 || [4.0.0+] CreateSharedLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8211 || [4.0.0+] DestroySharedLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8216 || [4.0.0+] AttachSharedLayerToLowLevelLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8217 || [4.0.0+] ForceDetachSharedLayerFromLowLevelLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8218 || [4.0.0+] StartDetachSharedLayerFromLowLevelLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8219 || [4.0.0+] FinishDetachSharedLayerFromLowLevelLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8220 || [4.0.0+] GetSharedLayerDetachReadyEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8221 || [4.0.0+] GetSharedLowLevelLayerSynchronizedEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8222 || [4.0.0+] CheckSharedLowLevelLayerSynchronized&lt;br /&gt;
|-&lt;br /&gt;
| 8223 || [4.0.0+] RegisterSharedBufferImporterAruid&lt;br /&gt;
|-&lt;br /&gt;
| 8224 || [4.0.0+] UnregisterSharedBufferImporterAruid&lt;br /&gt;
|-&lt;br /&gt;
| 8227 || [4.0.0+] CreateSharedBufferProcessHeap&lt;br /&gt;
|-&lt;br /&gt;
| 8228 || [4.0.0+] GetSharedLayerLayerStacks&lt;br /&gt;
|-&lt;br /&gt;
| 8229 || [4.0.0+] SetSharedLayerLayerStacks&lt;br /&gt;
|-&lt;br /&gt;
| 8291 || [4.0.0+] PresentDetachedSharedFrameBufferToLowLevelLayer&lt;br /&gt;
|-&lt;br /&gt;
| 8292 || [4.0.0+] FillDetachedSharedFrameBufferColor&lt;br /&gt;
|-&lt;br /&gt;
| 8293 || [4.0.0+] GetDetachedSharedFrameBufferImage&lt;br /&gt;
|-&lt;br /&gt;
| 8294 || [4.0.0+] SetDetachedSharedFrameBufferImage&lt;br /&gt;
|-&lt;br /&gt;
| 8295 || [4.0.0+] CopyDetachedSharedFrameBufferImage&lt;br /&gt;
|-&lt;br /&gt;
| 8296 || [4.0.0+] SetDetachedSharedFrameBufferSubImage&lt;br /&gt;
|-&lt;br /&gt;
| 8297 || [4.0.0+] GetSharedFrameBufferContentParameter&lt;br /&gt;
|-&lt;br /&gt;
| 8298 || [5.0.0+] ExpandStartupLogoOnSharedFrameBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DisplayInfo =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x40 || [[#DisplayName]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x1 || Whether or not the display has a constrained number of layers.&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x7 || Padding/Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || If this display has a constrained number of layers (0x40 is set), indicates the maximum number of layers.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || Width in pixels&lt;br /&gt;
|- &lt;br /&gt;
| 0x58 || 0x8 || Height in pixels&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a 0x60-byte structure.&lt;br /&gt;
&lt;br /&gt;
The width/height for the &amp;quot;Default&amp;quot; Display is the resolution for 1080p even when in handheld-mode.&lt;br /&gt;
&lt;br /&gt;
= DisplayName =&lt;br /&gt;
This is a 0x40-byte block: a NUL-terminated string.&lt;br /&gt;
&lt;br /&gt;
Can be &amp;quot;Default&amp;quot;, &amp;quot;External&amp;quot;, &amp;quot;[https://en.wikipedia.org/wiki/Extended_Display_Identification_Data Edid]&amp;quot;, &amp;quot;Internal&amp;quot; or &amp;quot;Null&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Parcel =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || ParcelDataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || ParcelDataOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || ParcelObjectsSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || ParcelObjectsOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ? || FlattenedBinder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NativeWindow =&lt;br /&gt;
Max size of this buffer is 0x100-bytes(outbuf size used by official user-processes). Parsed(&amp;quot;...DeserializeNativeWindow()&amp;quot;) by a function called by the code described under [[#OpenLayer]], which executes code with Android symbols.&lt;br /&gt;
&lt;br /&gt;
This is a [[#Parcel]].&lt;br /&gt;
&lt;br /&gt;
== ParcelData ==&lt;br /&gt;
This normally contains the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Probably the user-process PID?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || ID&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0xC || All-zero normally?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x8 || NUL-terminated &amp;quot;dispdrv&amp;quot; string.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x8 || All-zero normally?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above ID is used for the ID param for the binder commands with [[#GetRelayService|IHOSBinderDriver]].&lt;br /&gt;
&lt;br /&gt;
== ParcelObjects ==&lt;br /&gt;
This normally contains an u32 with value 0?&lt;br /&gt;
&lt;br /&gt;
= Resolution handling =&lt;br /&gt;
There doesn&#039;t seem to be a way to get the actual TV resolution while using the &amp;quot;Default&amp;quot; Display. Official apps just hard-code what resolution to use depending on the current [[AM_services|OperationMode]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Halotroop2288</name></author>
	</entry>
</feed>