我正在尝试将一些特定于实例的数据通过我的顶点着色器传递到我的Pixel-Shader中。但是,在各个阶段之间,数据会以某种方式变为0。
提供更好的环境。 我的Vertex-Shader从实例流中获取一些数据,只需将其传递给像素着色器即可。在RenderDoc中进行调试时,我从流中读取顶点着色器中的正确值,并将其输出到我的输出结构中。 以后调试像素时,数据设置为0。
我尝试通过RenderDoc和Pix进行调试。 我已经遍历了几次代码,找不到任何可能是问题的相关内容。
由于所有数据都存在于顶点着色器中并且可以很好地输出,因此我认为在此阶段之前不会有任何错误。
这是我正在使用的结构。 请忽略语义,因为我们正在使用自定义语义系统来生成着色器。 (这不是问题,我100%确信,所以请不要对此发表任何评论)
struct VertexInStruct
{
// Vertex-Data
float4 Pos : CUSTOM0;
float4 Color0 : CUSTOM1;
float4 Normal : CUSTOM2;
float4 Tangent : CUSTOM3;
float2 UV0 : CUSTOM4;
// Instance-Data
float4 InstanceStream : CUSTOM5;
};
struct VertexOutStruct
{
// Vertex-Data
float3 WS_Position : WS_Position;
float4 ClipPosition : ClipPosition;
float2 UV0 : UV0;
float4 Color0 : Color0;
float3 WS_Normal : WS_Normal;
// Instance-Data
nointerpolation float4 InstanceStream : InstanceStream;
};
struct PixelInStruct
{
// Vertex-Data
centroid float3 WS_Position : WS_Position;
centroid float4 ClipPosition : ClipPosition;
centroid float2 UV0 : UV0;
centroid float4 Color0 : Color0;
centroid float3 WS_Normal : WS_Normal;
// Instance-Data
nointerpolation float4 InstanceStream : InstanceStream;
};
要在顶点着色器中输出InstanceStream,它看起来像这样:
VertexOutStruct Out;
/*
Other code goes here
*/
Out.InstanceStream = In.InstanceStream;
return Out;
为了在像素着色器中读取它,它看起来像这样:
uint InstanceDataIndex = asuint(In.InstanceStream.y);
使用调试层,不会引发任何相关的错误消息。 我希望像素着色器的输入与顶点着色器的输出相同。
请注意,唯一看起来不正确的值是InstanceStream值!