Поделиться через


Подписи

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

Функции