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


Маскирование целевого регистра

Маскирование указывает, какие компоненты целевого регистра будут обновлены с результатом инструкции. Регистры текстур имеют один набор правил и нетекстовые регистры имеют другой набор правил.

  • dx9_graphics_reference_asm_vs_registers_modifiers_masking; в этом разделе содержатся правила применения масок к регистрам назначения.
  • Texture_Register_Masks — регистры текстур имеют некоторые уникальные правила.

Маскирование целевого регистра

Как показано в следующей таблице, маскирование (где r является одним из допустимых регистров вершинных шейдеров ) можно применять к отдельным компонентам векторных данных.

Модификатор компонентов Описание
r.{x}{y}{z}{w} Маска назначения

 

  • Как правило, указание маски записи регистра назначения является хорошим стилем написания кода. Это упрощает чтение и обслуживание кода.
  • Любое сочетание компонентов может быть указано (включая отсутствие компонентов), до тех пор, пока x предшествует y, y предшествует z, и z предшествует w.
  • Регистры выходных данных oPts и oFog должны использовать только одну маску.
  • Для некоторых инструкций требуется использование регистров назначения с одной маской записи: exp, expp, log, logp, pow, rcp и rsq.
  • В версии 1.0 инструкция frc требовала одного из следующих комбинаций маски: .x или .y или .xy. Версия 2.0 не имеет ограничения маски.
  • sincos требует одного из следующих сочетаний маски: .x или .y или Xyz.
  • m3x2 требует маски записи .xy.
  • m3x3 и m4x3 требуют маски записи .xyz.
  • m3x4 и m4x4 требуют маски записи xyz или маски записи по умолчанию (xyzw).

Маски регистра текстур

Правила проверки для использования модификаторов в регистрах координат текстуры являются более жесткими, чем правила проверки для других регистров.

  • Если oTn написан, все предыдущие регистры (oTn-1 ~ oT0) также должны быть записаны.
  • Маска "объединенной" записи для любого регистра oT# должна быть ровно одной из следующих:
    • .x
    • .xy
    • .xyz
    • Xyzw (что эквивалентно отсутствию модификаторов компонентов)

Например, шейдер вершин может записывать данные в регистры текстур с помощью отдельных инструкций.

    oT1.y  
    oT0.y  
    oT2  
    oT0.xz  
    oT1.x

Кроме того, инструкции можно объединить.

    oT0.xyz  
    oT1.xy  
    oT2.xyzw    

Эти ограничения применяются только к регистрам координат текстуры.

модификаторы регистра вершинных шейдеров