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


Сигнатуры

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

Функции