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


texldl — ps

Выборка текстуры с помощью определенного образца. Определенный уровень детализации MIP-карты, для которого выполняется выборка, должен быть указан в качестве четвертого компонента координаты текстуры.

Синтаксис

texldl dst, src0, src1

 

Где:

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

Комментарии

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

 

texldl ищет набор текстур на этапе выборки, на который ссылается src1. Уровень детализации выбирается в src0.w. Это значение может быть отрицательным, и в этом случае выбран нулевой уровень детализации (самая большая карта) с MAGFILTER. Так как src0.w является значением с плавающей запятой, дробное значение используется для интерполяции (если MIPFILTER — LINEAR) между двумя уровнями MIP. Состояния выборки MIPMAPLODBIAS и MAXMIPLEVEL соблюдаются. Дополнительные сведения о состояниях выборки см. в разделе D3DSAMPLERSTATETYPE.

Если программа шейдера выполняет выборку из выборки, которая не имеет набора текстур, то 0001 получается в целевом регистре.

Ниже приведен примерный алгоритм, которому следует эталонное устройство.

LOD = src0.w + LODBIAS;
if (LOD <= 0 )
{
   LOD = 0;
   Filter = MagFilter;
   tex = Lookup( MAX(MAXMIPLEVEL, LOD), Filter );
}
else
{
   Filter = MinFilter;
   LOD = MAX( MAXMIPLEVEL, LOD );
   tex = Lookup( Floor(LOD), Filter );
   if( MipFilter == LINEAR )
   {
      tex1 = Lookup( Ceil(LOD), Filter );                        
      tex = (1 - frac(src0.w))*tex + frac(src0.w)*tex1;
   }
}

Ограничения.

  • Координаты текстуры не должны масштабироваться по размеру текстуры.
  • dst должен быть временным регистром (r#).
  • dst может принимать маску записи. См. раздел Маска записи регистра назначения.
  • Значения по умолчанию для отсутствующих компонентов : 0 или 1 и зависят от формата текстуры.
  • src1 должен быть sampler (Direct3D 9 asm-ps) (s#). src1 не может использовать модификатор неустрашаемого значения (см. раздел Маска записи регистра назначения). src1 может использовать swizzle (см. раздел Swizzling source Register Swizzling), который применяется после выборки, но до того, как маска записи (см. маску записи целевого регистра). Средство выборки должно быть объявлено (с помощью dcl_samplerType (sm2, sm3 - ps asm)) в начале шейдера.
  • Количество координат, необходимых для выполнения выборки текстуры, зависит от того, как было объявлено средство выборки. Если он был объявлен как куб, требуется трехкомпонентная координата текстуры (RGB). При проверке необходимо, чтобы координаты, предоставленные tex_ldl, были достаточными для измерения текстуры, объявленного для выборки. Однако не гарантируется, что приложение фактически задает текстуру (через API) с измерениями, равными измерению, объявленному для выборки. В этом случае среда выполнения попытается обнаружить несоответствия (возможно, только при отладке). Выборка текстуры с меньшими размерами, чем в координате текстуры, будет разрешена, и предполагается, что дополнительные компоненты координат текстуры игнорируются. И наоборот, выборка текстуры с большими размерами, чем в координате текстуры, является недопустимой.
  • Если src0 (координата текстуры) — Временный регистр, компоненты, необходимые для поиска (описанные выше), должны быть ранее написаны.
  • Выборка неподписанных текстур RGB приведет к значению с плавающей точкой в диапазоне от 0,0 до 1,0.
  • Выборка подписанных текстур приведет к значению с плавающей точкой в диапазоне от -1,0 до 1,0.
  • При выборке текстур с плавающей запятой Float16 означает, что данные будут варьироваться в пределах MAX_FLOAT16. Float32 означает, что будет использоваться максимальный диапазон конвейера. Выборка за пределами любого диапазона не определена.
  • Зависимое ограничение на чтение отсутствует.

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