Fragment Declaration Syntax (Direct3D 9 HLSL)

Each Microsoft High Level Shader Language (HLSL) function can be converted into a shader fragment with the addition of a fragment declaration.


fragmentKeyword FragmentName = compile_fragment shaderProfile FunctionName();


fragmentKeywordRequired keyword. Either pixelfragment or vertexfragment.
FragmentNameAn ASCII text string that specifies the compiled fragment name.
compile_fragmentRequired keyword.
shaderProfileThe shader model to compile against. Any valid vertex shader profile (see D3DXGetVertexShaderProfile) or pixel shader profile (see D3DXGetPixelShaderProfile).
FunctionName()The shader function name, followed by parentheses.


Shared fragment parameters are marked by adding an 'r_' prefix to their semantic.

void AmbientDiffuse( float3 vPosWorld: r_PosWorld,
                     float3 vNormalWorld: r_NormalWorld,
                     out float4 vColor: COLOR0 )
    // Compute the light vector
    float3 vLight = normalize( g_vLightPosition - vPosWorld );
    // Compute the ambient and diffuse components of illumination
    vColor = g_vLightColor * g_vMaterialAmbient;
    vColor += g_vLightColor * g_vMaterialDiffuse * saturate( dot( vLight, vNormalWorld ) );
vertexfragment AmbientDiffuseFragment = compile_fragment vs_1_1 AmbientDiffuse();

In this example, the r_PosWorld and r_NormalWorld semantics identify that these two parameters are shared parameters among other fragments.

Note  Fragment linker was a Microsoft Direct3D 9 technology in D3DX 9. Fragment linker was a tool (Flink.exe), a D3DX 9 API, and an HLSL enhancement. Fragment linker was dropped as of the August 2009 DirectX SDK release. Fragment linker never applied to Microsoft Direct3D 10, Microsoft Direct3D 10.1, or Microsoft Direct3D 11.

Related topics

Shader Model 3 (DirectX HLSL)