Fragment Declaration Syntax

Each HLSL function can be converted into a shader fragment with the addition of a fragment declaration.

Syntax

fragmentKeyword FragmentName = compile_fragment shaderProfile FunctionName();

where:

fragmentKeyword Required keyword. Either pixelfragment or vertexfragment.
FragmentName An ASCII text string that specifies the compiled fragment name.
compile_fragment Required keyword.
shaderProfile The 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. Here is an example of a vertex shader fragment declaration from the FragmentLinker Sample:

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.