签名

着色器签名是着色器函数的输入或输出的参数列表。 在 Direct3D 10 中,相邻阶段有效地共享寄存器数组,其中输出着色器 (或管道阶段) 将数据写入寄存器数组中的特定位置,并且输入着色器必须从相同位置读取。 API 使用着色器签名将着色器输出与输入绑定,而不会产生语义解析的开销。

在 Direct3D 10 中,输入签名是从着色器输入声明生成的,输出签名是从着色器输出声明生成的。 当输出签名是输入签名的严格子集 (参数类型和顺序匹配) 时,输入签名与输出签名兼容。 实现此目的的最简单方法是通过同一结构类型链接相应的着色器输入和输出。

下面是兼容签名的示例。

// Vertex Shader Output Signature
Struct VSOut
{
  float4 Pos: SV_Position;
  float3 MyNormal: Normal;
  float2 MyTex : Texcoord0;
}

// Pixel Shader Input Signature
Struct PSInWorks
{
  float4 Pos: SV_Position;
  float3 MyNormal: Normal;
}

下面是不兼容签名的示例:输入签名中参数的顺序与输出签名中的顺序不匹配。

// Vertex Shader Output Signature
Struct VSOut
{
  float4 Pos: SV_Position;
  float3 MyNormal: Normal;
  float2 MyTex : Texcoord0;
}

// Pixel Shader Input Signature
Struct PSInFails
{
  float3 MyNormal: Normal;
  float4 Pos: SV_Position;
}

PSInWorks 是 VSOut 的兼容子集 (前两个条目的类型和顺序都与 VSOut) 中的前两个条目匹配。 但是,PSInFails 不兼容,因为排序与 VSOut 不匹配。

函数