texldl — vs
Выборка текстуры с помощью определенного образца. Определенный уровень детализации MIP-карты, для которого выполняется выборка, должен быть указан в качестве четвертого компонента координаты текстуры.
Синтаксис
texldl dst, src0, src1 |
---|
Где:
- dst является регистром назначения.
- src0 — это регистр источника, предоставляющий координаты текстуры для образца текстуры.
- src1 определяет регистр исходной выборки (s#), где # указывает номер выборки текстуры. Средство выборки связано с текстурой и состоянием элемента управления, определенным перечислением D3DSAMPLERSTATETYPE (например, D3DSAMP_MINFILTER).
Комментарии
Версии вершинного шейдера | 1_1 | 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-vs) (s#). src1 не может использовать модификатор неверта. src1 может использовать swizzle, который применяется после выборки до выполнения маски записи. Выборка должна быть объявлена (с помощью dcl_samplerType (sm3 – vs asm)) в начале шейдера.
- Количество координат, необходимых для выполнения выборки текстуры, зависит от того, как было объявлено средство выборки. Если он был объявлен как куб, требуется трехкомпонентная координата текстуры (RGB). Проверка обеспечивает, чтобы координаты, предоставленные texldl, были достаточными для измерения текстуры, объявленного для средства выборки. Однако не гарантируется, что приложение фактически задает текстуру (через API) с измерениями, равными измерению, объявленному для выборки. В этом случае среда выполнения попытается обнаружить несоответствия (возможно, только при отладке). Выборка текстуры с меньшими размерами, чем в координате текстуры, будет разрешена, и предполагается, что дополнительные компоненты координат текстуры игнорируются. И наоборот, выборка текстуры с большими размерами, чем присутствует в координате текстуры, не допускается.
- Если src0 (координата текстуры) является временным регистром (r#), компоненты, необходимые для поиска (описанные выше), должны быть ранее написаны.
- Выборка неподписанных текстур RGB приведет к значению с плавающей точкой в диапазоне от 0,0 до 1,0.
- Выборка подписанных текстур приведет к значению с плавающей точкой в диапазоне от -1,0 до 1,0.
- При выборке текстур с плавающей запятой Float16 означает, что данные будут варьироваться в пределах MAX_FLOAT16. Float32 означает, что будет использоваться максимальный диапазон конвейера. Выборка за пределами любого диапазона не определена.
- Зависимое ограничение на чтение отсутствует.
Связанные темы