texldp — ps

Инструкция загрузки прогнозируемых текстур. Эта инструкция делит координату входной текстуры на четвертый элемент (.a или .w) непосредственно перед выборкой.

Синтаксис

texldp dst, src0, src1

 

where

  • dst — это регистр назначения.
  • src0 — это регистр источника, предоставляющий координаты текстуры для образца текстуры. См . раздел Регистр координат текстуры.
  • src1 идентифицирует sampler (Direct3D 9 asm-ps) (s#), где # указывает номер выборки текстуры для выборки. С ним связана текстура и состояние выборки, определенное D3DSAMPLERSTATETYPE.

Набор ограничений при использовании texldp см. в разделе texld.

Комментарии

texldp выполняет проекцию на координаты, считанные из src0, перед выполнением выборки. Каждая координата текстуры делится на src0.w, а затем выполняется выборка текстуры. После завершения texldp содержимое src0 не затрагивается (если dst не является тем же регистром). Альтернативой использованию texldp является ручное выполнение деления проекции в шейдере. Однако выполнение деления в коде шейдера обычно выполняется медленнее, чем при выполнении инструкцией texldp, поэтому по возможности избегайте таких дополнительных математических вычислений.

Количество координат, необходимых src0 для выполнения выборки текстуры, зависит от того, как был объявлен src1, а также от компонента .w. Типы выборки объявляются с dcl_samplerType (sm2, sm3 - ps asm). Если src1 объявлен как двухмерный выборщик, то src0 должен содержать координаты XYW; Если src1 объявлен как выборка куба или тома, то src0 должна содержать координаты XYZW. Допускается выборка двухd-текстуры с координатами XYZW (координата .z игнорируется).

Если исходная текстура содержит менее четырех компонентов, значения по умолчанию помещаются в отсутствующие компоненты. Значения по умолчанию зависят от формата текстуры, как показано в следующей таблице.

Формат текстуры Значения по умолчанию для отсутствующих компонентов
D3DFMT_R5G6B5, D3DFMT_R8G8B8, D3DFMT_L8, D3DFMT_L16, D3DFMT_R3G3B2, D3DFMT_CxV8U8 D3DFMT_L6V5U5 A = 1,0
D3DFMT_V8U8, D3DFMT_V16U16, D3DFMT_G16R16, D3DFMT_G16R16F D3DFMT_G32R32F B = A = 1,0
D3DFMT_A8 R = G = B = 0,0
D3DFMT_R16F, D3DFMT_R32F G = B = A = 1,0
Все форматы глубины и трафарета R = B = 0,0, A = 1,0

 

Эта инструкция поддерживается в следующих версиях:

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

 

ps_2_0 и ps_2_x

dst должен быть временным регистром (r#), и разрешена только маска .xyzw (маска по умолчанию).

src0 должен быть либо регистром координат текстуры (t#), либо временным регистром (r#), без модификатора или swizzle.

src1 должен быть sampler (Direct3D 9 asm-ps) (s#) без модификатора или swizzle.

Если бит крышки D3DD3DPSHADERCAPS2_0_NODEPENDENTREADLIMIT не задан (в D3DPSHADERCAPS2_0), то указанная инструкция текстуры (texld, texldp, texldb - ps, texldd ) может зависеть не более чем от третьего порядка. Зависимая инструкция текстуры первого порядка — это инструкция текстуры, в которой:

Зависимая инструкция текстуры второго порядка определяется как инструкция текстуры, которая считывает или записывает во временный регистр (r#), содержимое которого перед выполнением инструкции текстуры зависит (возможно, косвенно) от результата зависимой инструкции текстуры первого порядка. Зависимая инструкция текстуры (n)-го порядка является производным от инструкции текстуры (n–1)го порядка.

ps_3_0

Для ps_3_0 src1 должен быть sampler (Direct3D 9 asm-ps) (s#) без модификатора. Swizzle разрешено в src1, и при применении результаты поиска текстуры предварительно свернуты перед записью в dst.

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