Direct3D 9 - Vertex Shader - Version Differences

Last edited 2026-02-28


Each version supports a different number of maximum instruction slots.


The meaning of colors in the Type, Version and Working column:

Color

Description

Green

The version works in Fusion.

Yellow

The version has not been confirmed to work in Fusion.

Red

The version does not work in Fusion.

Vertex Shader Version Comparison (Wikipedia)

Type

Version

Working?

Number of instruction slots

Max number of instructions executed

Instruction

predication

Temp

register

Number

constant

registers

Address

register

Static

flow

control

Dynamic

flow

control

Dynamic flow

control depth

Vertex texture

fetch

Number of

texture

samplers

Geometry

instancing

support

Bitwise

operators

Native

integers

Note

hlsl

vs_1_0

No

128

128

No

12

>= 96

No

No

No

0

No

0

No

No

No

Compiler throws a warning about lack of support for vs.1.0 and uses vs.1.1.

hlsl

vs_1_1

Yes

128

128

No

12

>= 96

Yes

No

No

0

No

0

No

No

No


hlsl

vs_2_0

Yes?

256

1024

No

12

>= 256

Yes

Yes

No

0

No

0

No

No

No


hlsl

vs_2_a

Yes?

256

65536

Yes

16

256

Yes

Yes

Yes

24

No

0

No

No

No


hlsl

vs_2_sw

Unknown

256?

1024?

No?

12?

>= 256?

Yes?

Yes?

No?

0?

No?

0?

No?

No?

No?

Executed in software (CPU). Primarily used for debugging, it allows you to verify whether a graphics driver is generating rendering errors by comparing hardware results with a reference software implementation. This is very slow compared to execution on the GPU due to the serial nature of the CPU architecture.

hlsl

vs_3_0

Unknown

>= 512

65536

Yes

32

>= 256

Yes

Yes

Yes

24

Yes

4

Yes

No

No


hlsl

vs_3_sw

Unknown

>= 512?

65536?

Yes?

32?

>= 256?

Yes?

Yes?

Yes?

24?

Yes?

4?

Yes?

No?

No?

Executed in software (CPU). Primarily used for debugging, it allows you to verify whether a graphics driver is generating rendering errors by comparing hardware results with a reference software implementation. This is very slow compared to execution on the GPU due to the serial nature of the CPU architecture.


">= 96" for Number constant registers:

    • The specification guarantees at least 96 constant registers.
    • The GPU can have more, but not less.


  • Number of instruction slots - The maximum number of assembly instructions (instruction slots) that a saved vertex shader program can contain.
  • Max number of instructions executed - The maximum number of instructions the GPU can execute for a single vertex when running a vertex shader.
  • Instruction predication - A predicate instruction mechanism that allows conditional execution without expensive branching: instructions marked with a predicate write their result only if the predicate is true.
  • Temp register - are used to store intermediate values ​​of shader computations (local variables). The limit on the number of temp registers determines how much intermediate data can be stored without additional cost.
  • Number constant registers - Number of constant registers intended for values ​​sent from the application (e.g. matrices, light positions).
  • Address register - Address register used for indirect addressing/tables.
  • Static flow control - Loops/conditions that the compiler can unroll or optimize because their number/nature is known at compilation.
  • Dynamic flow control - True conditions and loops depending on data calculated at runtime (if/else, while, for with variable condition) - that is, control flow depending on values ​​calculated during shader execution.
  • Dynamic flow control depth - Maximum allowed nesting depth for dynamic control statements (if/loop etc.) - This determines how deep data-dependent conditions/loops can be nested.
  • Vertex texture fetch - Ability to sample textures inside the vertex shader.
  • Number of texture samplers - The number of available texture samplers/slots that the vertex shader can use for sampling (if the VF is capable of fetching textures).
  • Geometry instancing support - Geometry instantiation support: ability to read instance ID and draw multiple copies of the same mesh with different parameters in the vertex shader.
  • Bitwise Operators - Support for bitwise logical operations (AND, OR, XOR, bit shifts <<, >>).
  • Native Integers - Support for integer types (int), the lack of which means that everything is a floating-point number (float), which makes precision difficult.

Created with the Personal Edition of HelpNDoc: Produce electronic books easily