Shader model support for Windows Phone 8

[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]

On Windows Phone 8, developers can use custom vertex shaders and pixel shaders in apps that use Direct3D. The supported features and limitations of custom shaders on Windows Phone 8 devices are defined by the shader model 4_0_level_9_3. For more info on shader models, see Shader Model vs. Shader Profiles.

The 4_0_level_9_3 shader model encompasses all of the features of the Direct3D 9-era shader model 2.0 with several important differences.

  • Shaders must be written in High Level Shading Language for DirectX. For more info, see HLSL.

  • Static and dynamic flow control is supported.

  • Vertex shaders may be up to 256 equivalent shader assembler instructions in length.

  • Pixel shaders may be up to 512 equivalent shader assembler instructions in lenth.

HLSL is a C-like programming language optimized for writing GPU shader code. When writing shader code in HLSL for use in Windows Phone 8 apps, you should consider the following:

  • Shader code must be compiled offline using FXC.exe, the effect-compiler tool. This is used by Visual Studio by default and can also be invoked from the command line. Runtime shader compilation is not supported.

  • The shader compiler targets for 4_0_level_9_3 are vs_4_0_level_9_3 for vertex shaders and ps_4_0_level_9_3 for pixel shaders. For more info on shader compiler targets, see Specifying Compiler Targets.

  • The semantics for the 4_0_level_9_3 shader model are the same as those documented for Direct3D 9 and, as a result, most system-value semantics, introduced with Direct3D 10 and shader model 4.0, are not available. The exceptions to this are SV_Position, SV_Target, and SV_Depth, which are supported. For more info on semantics, including system-value semantics, see Semantics.

  • When writing larger shaders that may be approaching the instruction count limits, you can use the “/Fc” switch when compiling a shader to obtain and review the resulting assembler code output. For more information on command line options for the effect compiler tool, see Syntax.