In my HLSL pixel shader, SV_POSITION seems to have different values to any other semantic I use. I don't understand why this is. Can you please explain it?

For example, I am using a triangle with the following coordinates:

(0.0f, 0.5f)
(0.5f, -0.5f)
(-0.5f, -0.5f)

The w and z values are 0 and 1, respectively.

This is the pixel shader.

struct VS_IN
{
    float4 pos : POSITION;
};

struct PS_IN
{
    float4 pos : SV_POSITION;
    float4 k : LOLIMASEMANTIC;
};

PS_IN VS( VS_IN input )
{
    PS_IN output = (PS_IN)0;
    output.pos = input.pos;
    output.k = input.pos;
    return output;
}

float4 PS( PS_IN input ) : SV_Target
{
    // screenshot 1
    return input.pos;

    // screenshot 2
    return input.k;
}

technique10 Render
{
    pass P0
    {
        SetGeometryShader( 0 );
        SetVertexShader( CompileShader( vs_4_0, VS() ) );
        SetPixelShader( CompileShader( ps_4_0, PS() ) );
    }
}

In HLSL pixel shader , why is SV_POSITION different to other semantics?

In HLSL pixel shader , why is SV_POSITION different to other semantics?

When I use the first statement (result is first screenshot), the one that uses the SV_POSITIONsemantic, the result is completely unexpected and is yellow, whereas using any other semantic will produce the expected result. Why is this?

directx hlsl fragment-shader

shareimprove this question

edited Nov 26 '12 at 9:58

In HLSL pixel shader , why is SV_POSITION different to other semantics?

Laurent Couvidou

8,23623254

asked Nov 25 '12 at 12:09

In HLSL pixel shader , why is SV_POSITION different to other semantics?

tina nyaa

133116

add a comment

1 Answer

activeoldestvotes

11

 

SV_Position gives you the position in screen coordinates, not in a [0,1] range though but basically in pixel coordinates. The range will correspond to the D3D11_VIEWPORT you set, possibly something along the lines of:

D3D11_VIEWPORT viewport = {0};
viewport.Width = 1280;
viewport.Height = 720;

So in order to get a [0,1] range again, for the colors, you could do:

return float4(input.pos.r/1280, input.pos.g/720, 0, 1);

In HLSL pixel shader , why is SV_POSITION different to other semantics?

shareimprove this answer

edited May 18 '13 at 2:59

answered Nov 25 '12 at 16:30

相关文章:

  • 2021-08-25
  • 2021-06-24
  • 2021-05-18
  • 2021-09-20
  • 2021-11-14
  • 2022-12-23
  • 2021-08-15
  • 2021-12-30
猜你喜欢
  • 2022-12-23
  • 2022-01-19
  • 2021-08-22
  • 2022-12-23
  • 2021-06-04
  • 2022-12-23
  • 2021-09-10
相关资源
相似解决方案