DX11 - Vertex To Pixel Shaders - Return Types

Started by
2 comments, last by insan3 10 years, 10 months ago

Hello once again!

I have a question that hasn't really been bothering me, but it interests me!

So consider the following simple shader:


cbuffer ConstantObjectBuffer : register(c1)
{
    matrix worldMatrix;
    matrix viewMatrix;
    matrix projectionMatrix;

    matrix rotationMatrix;
}

cbuffer ConstantFrameBuffer : register(c0)
{
    float4 lDir;
    float4 lColor;
}

struct VOut
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
};

VOut VShader(float4 position : POSITION, float4 normal : NORMAL)
{
    VOut output;
    output.position = mul(position, worldMatrix);
    output.position = mul(output.position, viewMatrix);
    output.position = mul(output.position, projectionMatrix);
	
    float4 n = normalize(mul(rotationMatrix, normal));
    float diffusebrightness = saturate(dot(n, lDir));
    output.color = lColor * diffusebrightness;

    return output;
}

float4 PShader(VOut input) : SV_TARGET
{
    return input.color;
} 

Now in the vertex shaders parameters, it has the vertex position and normal, simple right? But these needs to be defined in the input layout, which I fully understand. But the structure that the vertex shader returns to the pixel shader, called VOut, also have these type definitions. Now what I mean with 'type definitions' (NOT A REAL THING happy.png ), is the following:

In the vertex function VOut VShader(float4 position : POSITION, float4 normal : NORMAL), you see that we have a 4 component float called position, and after that we define the input layout schematic: "POSITION". Now the "POSITION" is what I call a type definition wink.png .

So back to the vertex returning VOut. In the structure VOut I also define different variables, like .color, and give it a schematic : COLOR, now if I did this in the vertex shader it would crash! But not in this return structure.... So what is the point in defining the non-existing schematic in the vertex return structure? ohmy.png

PS. I know that you have to define SV_POSITION as a schematic, as it's kinda fundamental! tongue.png

THANKS!

FastCall22: "I want to make the distinction that my laptop is a whore-box that connects to different network"

Blog about... stuff (GDNet, WordPress): www.gamedev.net/blog/1882-the-cuboid-zone/, cuboidzone.wordpress.com/

Advertisement

Hey Migi0027,

The semantic does exist. It exists for the pixel shader.

You could write the pixel shader like this if you wanted:


float4 PShader(float4 color : COLOR) : SV_TARGET
{
    return color;
} 

The SV_POSITION semantic exists for the non-programmable rasterization stage.

So the semantic is automatically created for each variable, which is sen't to the pixel shader?

Because I could type in some crazy names and it would still work.

FastCall22: "I want to make the distinction that my laptop is a whore-box that connects to different network"

Blog about... stuff (GDNet, WordPress): www.gamedev.net/blog/1882-the-cuboid-zone/, cuboidzone.wordpress.com/

float5(shaderspixel color: COLOR) :SV TARGET

{

return COLOR;

}

if (COLOR == !=COLOR)

{

return 0;

}

This topic is closed to new replies.

Advertisement