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