texbem - ps

Примените фиктивное преобразование схемы среды с фиктивным ударом. Это достигается путем изменения данных адреса текстуры целевого регистра с использованием данных об возмущении адресов (du,dv) и матрицы 2D-среды удара.

Синтаксис

texbem dst, src

 

where

  • dst — регистр назначения.
  • src — это регистр источника.

Комментарии

Версии шейдера пикселей 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texbem x x x

 

Данные красного и зеленого цветов в регистре src интерпретируются как данные возмущения (du,dv).

Эта инструкция преобразует красные и зеленые компоненты в исходном регистре с помощью матрицы сопоставления 2D-ударов среды. Результат добавляется в набор координат текстуры, соответствующий номеру регистра назначения, и используется для выборки текущего этапа текстуры.

Эта операция всегда интерпретирует du и dv как количество со знаком. Для версий 1_0 и 1_1 модификатор входных данных регистра со знаком источника (_bx2) не допускается для входного аргумента.

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

Это можно использовать для различных методов, основанных на возмущении адресов, включая фиктивное сопоставление среды по пикселям и диффузное освещение (сопоставление ударов).

При использовании этой инструкции регистры текстур должны выполняться в следующей последовательности.

// The texture assigned to stage t(n) contains the (du,dv) data
// The texture assigned to stage t(m) is sampled
tex     t(n)                    
texbem  t(m),  t(n)      where m > n

Ниже приведены вычисления, выполненные в инструкции.

// 1. New values for texture addresses (u',v') are calculated
// 2. Sample the texture using (u',v')

u' = TextureCoordinates(stage m)u + D3DTSS_BUMPENVMAT00(stage m)*t(n)R + D3DTSS_BUMPENVMAT10(stage m)*t(n)G v' = TextureCoordinates(stage m)v + D3DTSS_BUMPENVMAT01(stage m)*t(n)R + D3DTSS_BUMPENVMAT11(stage m)*t(n)G t(m)RGBA = TextureSample(stage m)

использование (u',v') в качестве координат

Регистрация данных, прочитанных инструкцией texbem - ps или texbeml - ps , не может быть прочитана позже, за исключением другой texbem - ps или texbeml - ps.

// This example demonstrates the validation error caused by t0 being reread:
ps_1_1
tex t0
texbem t1, t0
add r0, t1, t0

(Instruction Error) (Statement 4) Register data that has been read by 
texbem or texbeml instruction cannot be read by other instructions

Примеры

Ниже приведен пример шейдера с идентифицированными картами текстур и этапами текстуры.

ps_1_1
tex t0              ; Define t0 to get a 2-tuple DuDv
texbem t1, t0       ; Compute (u',v')
                    ; Sample t1 using (u',v')
mov r0, t1          ; Output result

Для texbem требуются следующие текстуры на следующих этапах текстуры.

  • Этапу 0 назначается карта удара с данными о возмущении (du, dv).
  • На этапе 1 используется карта текстур с цветными данными.
  • Эта инструкция задает матричные данные на этапе текстуры, которая является выборкой.
  • Это отличается от функциональных возможностей конвейера фиксированной функции, где данные о возмущении и матрицы занимают одну и ту же стадию текстуры.

Инструкции по шейдеру пикселей