Microsoft DirectX 8.1 (vertex shader versions 1.0, 1.1)

rsq

Computes the reciprocal square root of the source scalar.

rsq dest, src

Registers

dest
Destination register.
src
Input source register.

To learn more about registers, see Registers.

Remarks

The following code fragment shows the operations performed.

float v = ABSF(src.w);
if(v == 1.0f)
{
    dest.x = dest.y = dest.z = dest.w = 1.0f;
}
else if(v == 0)
{
    dest.x = dest.y = dest.z = dest.w = PLUS_INFINITY();
}
else
{
    v = (float)(1.0f / sqrt(v));
    dest.x = dest.y = dest.z = dest.w = v;
}

The absolute value is taken before processing.

Precision should be at least 1.0/(222) absolute error over the range (1.0, 4.0) because common implementations will separate mantissa and exponent.

If source has no subscripts, the x-component is used. The output must be exactly 1.0 if the input is exactly 1.0. A source of 0.0 yields infinity.

Example

// This example changes the vertex color from dark red to white. 
// The max instruction clamps the result to 1.0

vs.1.0
m4x4 oPos, v0, c0	; transform vertices by view/projection matrix

rsq r0,  c5 		; take the reciprocal square root of 0.2
max r2, r0, c4.y	         ; clamp the output to max of 1
mov oD0, r2	    	; result is white

//The resultant vertex color is white and is shown below.
// Additional code is used to initialize the constant registers.

D3DXMATRIX mat, matView, matProj;
D3DXMatrixMultiply(&mat, &matView, &matProj);
D3DXMatrixTranspose(&mat, &mat);
// set C0 with the view and projection matrix
m_pd3dDevice->SetVertexShaderConstant(0, &mat, 4);

// set register c4
float colorGreen[4] = {0, 1, 0, 0};
m_pd3dDevice->SetVertexShaderConstant(4, &colorGreen, 1);

// set register c5
float colorDarkRed[] = {0.2f, 0.0f, 0.0f, 0.0f};
m_pd3dDevice->SetVertexShaderConstant(5, &colorDarkRed, 1);

// The first SetVertexShaderConstant method binds the C0 register 
// with the first row of the view/projection matrix (rows 2, 3 and 4 are 
// bound to registers C2, C3 and c4 also). The m4x4 instruction (in the 
// shader file) loads the data.
// The second SetVertexShaderConstant method binds the C4 register 
// with the color green. The last SetVertexShaderConstant method 
// binds the C5 register with the color dark red.