The following flags are used for parsing, compiling, or assembling shaders:
Parse time flags are only used by the effect system (before effect compilation) when you create an effect compiler. For example, you could create a compiler object with D3DXSHADER_PACKMATRIX_COLUMNMAJOR, and then use that compiler object repeatedly with different compiler flags to generate specialized code.
#define | Description |
---|---|
D3DXSHADER_PACKMATRIX_COLUMNMAJOR | Unless explicitly specified, matrices will be packed in column-major order (each vector will be in a single column) when passed to and from the shader. This is generally more efficient because it allows vector-matrix multiplication to be performed using a series of dot products. |
D3DXSHADER_PACKMATRIX_ROWMAJOR | Unless explicitly specified, matrices will be packed in row-major order (each vector will be in a single row) when passed to or from the shader. |
The effect system will use Parser Flags when called by the following functions:
Compiler flags are used by the effect system to optimize shader and effect code compilation.
#define | Description |
---|---|
D3DXSHADER_AVOID_FLOW_CONTROL | This is a hint to the compiler to avoid using flow-control instructions. |
D3DXSHADER_DEBUG | Insert debug filename, line numbers, and type and symbol information during shader compile. |
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT | Force the compiler to compile against the next highest available software target for pixel shaders. This flag also turns optimizations off and debugging on. |
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT | Force the compiler to compile against the next highest available software target for vertex shaders. This flag also turns optimizations off and debugging on. |
D3DXSHADER_NO_PRESHADER | Disables preshaders. The compiler will not pull out static expressions for evaluation on the host CPU. Additionally, the compiler will not loft any expressions when compiling stand-alone functions. |
D3DXSHADER_PARTIALPRECISION | Force all computations in the resulting shader to occur at partial precision. This may result in faster evaluation of shaders on some hardware. |
D3DXSHADER_PREFER_FLOW_CONTROL | This is a hint to the compiler to prefer using flow-control instructions. |
D3DXSHADER_SKIPOPTIMIZATION | Instruct the compiler to skip optimization steps during code generation. Unless you are trying to isolate a problem in your code and you suspect the compiler, using this option is not recommended. |
D3DXSHADER_SKIPVALIDATION | Do not validate the generated code against known capabilities and constraints. This option is recommended only when compiling shaders that are known to work (that is, shaders that have compiled before without this option). Shaders are always validated by the runtime before they are set to the device. |
The effect system will use Compiler Flags when called by the following functions:
In addition, you can use compiler flags when creating an effect by calling D3DXCreateEffect (or D3DXCreateEffectFromFile or D3DXCreateEffectFromResource).
The DirectX 10 shader compiler has been integrated into the DirectX 9 SDK. Applications may use the DirectX 10 shader compiler on existing shaders to take advantage of its improvements in code generation. To use the DirectX 10 shader compiler, applications must be built with the d3dx9d_31_beta.dll instead of the d3dx9d_31.dll. Note that this is a debug-only library. The compiler is only available through use of the D3DXCompileShader, D3DXCompileShaderFromFile, and D3DXCompileShaderFromResourcefunctions.
When using the DirectX 10 shader compiler, there are flags available in addition to the ones avaiable for the DirectX 9 compiler. The following table contains these new flags.
#define | Description |
---|---|
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY | Compile ps_1_x shaders as ps_2_0. Effects that specify ps_1_x targets will instead compile to ps_2_0 targets because this is the minimum shader version supported by the DirectX 10 shader compiler. This flag has no effect when used with higher level compile targets. |
D3DXSHADER_IEEE_STRICTNESS | Disable optimizations that may cause the output of a compiled shader program to differ from the output of a program compiled with the DirectX 9 shader compiler due to small precision erros in floating point math. |
D3DXSHADER_OPTIMIZATION_LEVEL0 | Lowest optimization level. May produce slower code but will do so more quickly. This may be useful in a highly iterative shader development cycle. |
D3DXSHADER_OPTIMIZATION_LEVEL1 | Second lowest optimization level. |
D3DXSHADER_OPTIMIZATION_LEVEL2 | Second highest optimization level. |
D3DXSHADER_OPTIMIZATION_LEVEL3 | Highest optimization level. Will produce best possible code but may take significantly longer to do so. This will be useful for final builds of an application where performance is the most important factor. |
Assembler flags are used by the effect system to optimize shader and effect assembly code.
#define | Description |
---|---|
D3DXSHADER_DEBUG | Insert debug filename, line numbers, and type and symbol information during shader compile. |
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT | Force the compiler to compile against the next highest available software target for pixel shaders. This flag also turns optimizations off and debugging on. |
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT | Force the compiler to compile against the next highest available software target for vertex shaders. This flag also turns optimizations off and debugging on. |
D3DXSHADER_SKIPVALIDATION | Do not validate the generated code against known capabilities and constraints. This option is recommended only when compiling shaders that are known to work (that is, shaders that have compiled before without this option). Shaders are always validated by the runtime before they are set to the device. |
The effect system will use Assembler Flags when called by the following functions:
Applying Compiler Flags or Assembler Flags to the incorrect API will fail shader validation. Check the Direct3D error code return value from the function (with the DirectX Error Lookup Tool) to help track down this error.