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


ld2dms (sm4.1 — asm)

Считывает отдельные образцы из двухмерных многомерных текстур.

ld2dms[_aoffimmi(u,v)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], sampleIndex
Элемент Описание
Dest
[in] Адрес результата операции.
srcAddress
[in] Координаты текстуры, необходимые для выполнения выборки.
srcResource
[in] Регистр текстуры (t#), который должен быть объявлен, идентифицирующий, из какой текстуры или буфера следует получить
sampleIndex
[in] Указывает примеры для чтения из srcResource (скалярный операнд).

Комментарии

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

srcAddress предоставляет набор координат текстуры, необходимых для выполнения выборки в виде целых чисел без знака. Если srcAddress выходит за пределы диапазона[0...( #texels в измерении -1)], ld2dms всегда возвращает 0 во всех компонентах, присутствующих в формате ресурса, и значения по умолчанию (0,0,0,1.0f/0x00000001) для отсутствующих компонентов.

SampleIndex не обязательно должен быть литералом. Число нескольких выборок не требуется указывать в ресурсе текстуры, и оно работает с представлениями глубины или трафарета.

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

srcAddress.b (post-swizzle) игнорируется для Texture2Ds. Если значение выходит за пределы диапазона доступных индексов массива [0...( размер массива 1)], то ld2dms всегда возвращает 0 во всех компонентах, присутствующих в формате ресурса, и значения по умолчанию (0,0,0,1,0f/0x00000001) для отсутствующих компонентов.

Для массивов Texture2D srcAddress.b (post-swizzle) предоставляет индекс массива. Oherwise он имеет то же поведение, что и Texture2D.

srcAddress.a (post-swizzle) всегда игнорируется. Компилятор HLSL никогда не выводит в нее ничего.

srcResource — это регистр текстуры (t#), который должен быть объявлен (22.3.11), определяющий, из какой текстуры следует получить.

При выборе из t#, с которым ничего не связано, возвращается значение 0 для всех компонентов.

Смещение адреса

Необязательный суффикс [_aoffimmi(u,v,w)] (смещение адреса на непосредственное целое число) указывает, что координаты текстуры для ld2dms должны быть смещены набором предоставленных непосредственных целочисленных значений пространства текселя. Литеральные значения представляют собой набор из 4-разрядных чисел дополнения 2 с целым диапазоном [-8,7].

Смещения добавляются к координатам текстуры в пространстве текселя.

Смещения адресов не применяются по оси массива текстур1D/2D Массивов.

Компоненты _aoffimmi v,w игнорируются для Texture1D.

Компонент _aoffimmi w игнорируется для Texture2Ds.

Так как координаты текстуры для ld2dms являются целыми числами без знака, если смещение приводит к тому, что адрес становится ниже нуля, он преобразуется в большой адрес и приведет к выходу за пределы доступа, который, например ld , возвращает 0 во всех компонентах, присутствующих в формате ресурса, и значения по умолчанию (0,0,0,1.0f/0x00000001) для отсутствующих компонентов.

Пример номера

ld2dms доступен для использования на любом ресурсе. Ld2dms работает одинаково с ld , за исключением двухмерных ресурсов multsample, используя дополнительный (основанный на 0) операнд sampleIndex , чтобы определить, какой образец следует считать из ресурса.

Результат указания sampleIndex , который превышает количество выборок в ресурсе, не определен, но не может возвращать данные за пределами адресного пространства контекста устройства.

Элемент управления "Тип возвращаемого значения"

Формат данных, возвращаемый ld2dms в целевой регистр, определяется так же, как описано в примере инструкции. Он основан на формате, привязанном к параметру srcResource (t#).

Как и в примере инструкции, возвращаемые значения для ld2dms являются 4-векторными значениями по умолчанию для компонентов, не присутствующих в формате. Swizzle в srcResource определяет, как свертываться 4-компонентный результат, возвращающийся из нагрузки текстуры, после чего .mask on dest определяет, какие компоненты в dest обновляются.

Когда 32-разрядное значение float считывается ld2dms в 32-разрядный регистр, биты не затрагиваются; то есть денормальные значения остаются денормальными. Это отличается от примера инструкции.

Прочие сведения

Так как с этой инструкцией не связана фильтрация, такие понятия, как смещение LOD, не применяются. Соответственно, параметр s# для выборки отсутствует.

Ограничения

  • srcResource должен быть регистром t#, а не TextureCube, Texture1D или Texture1DArray. srcResource не может быть ConstantBuffer, который не может быть привязан к регистрам t#.
  • Относительная адресация в srcResource не разрешена.
  • srcAddress и sampleIndex должны быть временным (r#/x#), константным (cb#) или входным (v#) регистром.
  • dest должен быть временным (r#/x#) или выходным регистром (o*#).

Эта инструкция применяется к следующим этапам шейдера:

Вершинный построитель текстуры Шейдер геометрии Построитель текстуры
x x x

Минимальная модель шейдера

Эта функция поддерживается в следующих моделях шейдеров.

Модель шейдера Поддерживается
Модель шейдера 5 да
Модель шейдера 4.1 да
Модель шейдера 4 нет
Модель шейдера 3 (DirectX HLSL) нет
Модель шейдера 2 (DirectX HLSL) нет
Модель шейдера 1 (DirectX HLSL) нет

Сборка модели шейдера 4 (DirectX HLSL)