D3DXSHADER Flags

The following flags are used for parsing, compiling, or assembling shaders:

Parser Flags

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

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).

Compiler Flags for DirectX 10

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

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:

Remarks

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.