what is the difference between "float4 pos:SV_POSITION"and "float4 pos;"

why do we need sv_position?

SV_Position is a semantic, they’re used to tell the engine how to move data through the graphics pipeline. You can’t just send data between steps (e.g.: from vertex shader to pixel shader), because there are steps in between that you don’t see in Shaderlab code.

1 Like

As I remember,it is the second time you ask this question,Martin answered it fews month ago

Also cross-posted in Scripting with a slightly different wording: http://forum.unity3d.com/threads/165342-why-do-we-need-quot-TEXCOORD0-quot-after-quot-float2-uv-quot

I am a dull boy,and computer graphics is not my major,it is however sometimes too abstract for me… Thank you all…it takes time

1 Like

is sv_position something from the hardware?like video card???some data slot or bus from the video card???

“Kind of”.

SV_Position is one of “predefined” semantics, that is telling the GPU “this is the position”. That’s how it knows which value, well, determines the position on the screen.

2 Likes

I love you Aras…

What I never understood is why the Unity documentation is using “SV_POSITION” instead of “POSITION” for the output of the vertex shader (and the input of the fragment shader). Is there a particular reason? Or was it just to use something different to distinguish the vertex attribute from the transformed position?

1 Like

Why doesn’t whatever you give the POSITION / SV_POSITION semantic work with the inout keyword? (i.e. you use that as a vert shader parameter instead of passing in a struct.) It compiles, but doesn’t render, or at least in the expected way.

all of you are masters…

Yes, the reason is compatibility with DX11.

SV_POSITION expands to just POSITION on all other platforms, and SV_Position on DX11. Why Microsoft made DX11 have “SV_Position” for the output position? I don’t know :wink:

2 Likes

I assume because they want to group together all System Values. I don’t really understand what their definition for a System Value is, though. At first they mention that:

But then they go on to list all the exceptions, where system values are NOT valid at other parts of the pipeline…

Hopefully NVIDIA documents this stuff at some point. I usually prefer the way they explain things.

1 Like

Hi,
I have the same issue.
When to use POSITION and when to use SV_POSITION?

SV seems to be a screenspace x y position, with z not doing very much. i do sin(svpos.x) it does straight bars in line with the screen sides.

Best use SV_POSITION. This will work on all platforms; whereas “POSITION” will work only on “most of them”. For example, I think shaders on PS4 require SV_POSITION.

4 Likes

Joined this forum just now just to say that I found this explanation exactly ten years later. (Albeit for the sake of Monogame instead of Unity). I found it shockingly uncanny. Thanks for the info!