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


Маскирование регистра назначения

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

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

Маскирование регистра назначения

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

Модификатор компонента Описание
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    

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

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