Сигнатуры
Подпись шейдера — это список параметров, входных или выходных данных функции шейдера. В 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.
Связанные темы