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 ) может зависеть не более чем от третьего порядка. Зависимая инструкция текстуры первого порядка — это инструкция текстуры, в которой:
- src0 — это временный регистр (r#)
- dst было ранее записано, а теперь записывается снова.
Зависимая инструкция текстуры второго порядка определяется как инструкция текстуры, которая считывает или записывает во временный регистр (r#), содержимое которого перед выполнением инструкции текстуры зависит (возможно, косвенно) от результата зависимой инструкции текстуры первого порядка. Зависимая инструкция текстуры (n)-го порядка является производным от инструкции текстуры (n–1)го порядка.
ps_3_0
Для ps_3_0 src1 должен быть sampler (Direct3D 9 asm-ps) (s#) без модификатора. Swizzle разрешено в src1, и при применении результаты поиска текстуры предварительно свернуты перед записью в dst.
Связанные темы