Pixel Shader Source Register Modifiers

Use source register modifiers to change the value read from a register before an instruction runs. The contents of a source register are left unchanged. Modifiers are useful for adjusting the range of register data in preparation for the instruction. A set of modifiers called selectors copies or replicates the data from a single channel (r,g,b,a) into the other channels.

ps_1_1 - ps_1_4

This table identifies the versions that support each modifier:

Source register modifiers Syntax Version 1_1 Version 1_2 Version 1_3 Version 1_4
bias register_bias X X X X
invert 1 - register X X X X
negate - register X X X X
scale by 2 register_x2 X
signed scaling register_bx2 X X X X
texld and texcrd modifiers register_d* X X X X
source register swizzling register.xyzw X X X X


Source register modifiers can be used only on arithmetic instructions. They cannot be used on texture address instructions. The exception to this is the scale by 2 modifier. For version 1_1, signed scale can be used on the source argument of any texm* instruction. For version 1_2 or 1_3, signed scale can be used on the source argument of any texture address instruction.

Some modifier specific restrictions:

  • Negate can be combined with either the bias, signed scaling, or scalex2 modifier. When combined, negate is run last.
  • Invert cannot be combined with any other modifier.
  • Invert, negate, bias, signed scaling, and scalex2 can be combined with any of the selectors.
  • Source register modifiers should not be used on constant registers because they will cause undefined results. For version 1_4, modifiers on constants are not allowed and will fail validation.

ps_2_0 and Above

For version ps_2_0 and up, the number of modifiers has been simplified.


Negate the contents of the source register.

Component modifier Description
- r Source negation


The negate modifier cannot be used on second source register of these instructions: m3x2 - ps, m3x3 - ps, m3x4 - ps, m4x3 - ps, and m4x4 - ps.

Pixel shader versions 2_0 2_x 2_sw 3_0 3_sw
- x x x x x


Absolute Value

Take the absolute value of the register.

Pixel shader versions 2_0 2_x 2_sw 3_0 3_sw
abs x x


If any version 3 shader reads from one or more constant float registers (c#), one of the following must be true.

  • All of the constant floating-point registers must use the abs modifier.
  • None of the constant floating-point registers can use the abs modifier.

Pixel Shader Register Modifiers