签名

着色器签名是着色器函数的输入或输出的参数列表。 在 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 不匹配。

Functions