HLSL像素着色器Sematics

我有一个HLSl像素着色器,我正在使用它来创建一个延迟缓冲区,我简化了代码以向您展示:

struct PS_INPUT { float4 PosWVP : SV_POSITION; float4 NormalWorld : NORMAL2; }; struct PS_OUTPUT { float4 PosWorld : POSITION; float4 NormalWorld : NORMAL2; }; PS_OUTPUT main(PS_INPUT input) : SV_Target { PS_OUTPUT output = (PS_OUTPUT)0; output.PosWorld = input.PosWorld; output.NormalWorld = input.NormalWorld; return output; } 

当我编译这段代码的时候,我得到这个警告warning X3576: semantics in type overridden by variable/function or enclosing type ,这个警告是什么,我该如何解决这个问题?

我认为问题是你的像素着色器返回一个结构,所以这个结构的每个元素都需要一个SV_TARGET语义而不是整个结构,所以:

 struct PS_OUTPUT { float4 PosWorld : SV_TARGET0; //changed sematic float4 NormalWorld : SV_TARGET1; //changed sematic }; PS_OUTPUT main(PS_INPUT input) //there is no semantic here { PS_OUTPUT output = (PS_OUTPUT)0; output.PosWorld = input.PosWorld; output.NormalWorld = input.NormalWorld; return output; }