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


sample (sm4 - asm)

Примеры данных из указанного элемента или текстуры с помощью указанного адреса и режима фильтрации, определяемого заданным образцом.

sample[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler
Элемент Description
dest
[in] Адрес результата операции.
srcAddress
[in] Набор координат текстуры. Дополнительные сведения см. в разделе с примечаниями.
srcResource
[in] Регистр текстуры. Дополнительные сведения см. в разделе с примечаниями.
srcSampler
[in] Регистр примера. Дополнительные сведения см. в разделе с примечаниями.

Замечания

Исходные данные могут поступать из любого типа ресурса, отличного от буферов.

srcAddress предоставляет набор координат текстур, необходимых для выполнения примера, как значения с плавающей запятой, ссылающиеся на нормализованное пространство в текстуре. Режимы упаковки адресов (оболочка/зеркало/clamp/border etc.) применяются для координат текстуры вне диапазона [0...1], взятого из состояния выборки (s#), и применяются после применения смещения адреса к координатам текстуры.

srcResource — это регистр текстуры (t#). Это просто заполнитель текстуры, включая тип возвращаемых данных образца ресурса. Все эти сведения объявлены в предварительной версии шейдера. Фактический ресурс для выборки привязан к шейдеру вне слота # (для t#).

srcSampler — это регистр образца (s). Это просто заполнитель для коллекции элементов управления фильтрацией, таких как точки и линейные, mipmapping и элементы управления оболочкой адресов.

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

Ресурсы массива

Для массивов Texture1D компонент srcAddress g (POS-swizzle) выбирает, из какого среза массива требуется получить. Это всегда рассматривается как масштабируемое значение с плавающей запятой, а не нормализованное пространство для стандартных координат текстуры, а кругло-ближайший даже применяется к значению, за которым следует зацеп к доступному диапазону BufferArray.

Для массивов Texture2D компонент srcAddress b (POS-swizzle) выбирает, какой срез массива извлекает из, в противном случае используется та же семантика, описанная для массивов Texture1D.

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

Необязательный суффикс [_aoffimmi(u,v,w)] (смещение адреса по немедленному целочислению) указывает, что координаты текстуры для примера смещаются набором предоставленных непосредственных целых значений целочисленного пространства текселя. Литеральные значения — это набор из 4-разрядных чисел 2, имеющих целый диапазон [-8,7]. Этот модификатор определен для всех ресурсов, включая массивы Текстур1D/2D и Texture3D, но он не определен для TextureCube.

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

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

Смещения адресов не применяются вдоль оси массива Массивов Texture1D/2D.

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

компонент _aoffimmi w игнорируется для текстур2D.

Режимы упаковки адресов (оболочка/зеркало/clamp/border etc.) из состояния образца (s#) применяются после применения любого смещения адреса к координатам текстуры.

Элемент управления возвращаемым типом

Формат данных, возвращаемый примером в целевой регистр, определяется форматом ресурса (DXGI_FORMAT*), привязанным к параметру srcResource (t#). Например, если указанный t# привязан к ресурсу с DXGI_FORMAT_A8B8G8R8_UNORM_SRGB формата, операция выборки преобразует образцы текселей из гамма-2.0 в 1.0, применяет фильтрацию, а результат записывается в регистр назначения в качестве значений с плавающей запятой в диапазоне [0.1].

Возвращаемые значения — это 4 вектора (с значениями по умолчанию для определенных форматов для компонентов, не присутствующих в формате). Swizzle в srcResource определяет, как изменить 4-компонентный результат, возвращающийся из образца текстуры или фильтра, после которого маска на dest определяет, какие компоненты в деста будут обновлены.

Когда пример считывает 32-разрядное значение с плавающей запятой в 32-разрядном регистре с выборкой точек (без фильтрации), он может или не может сбрасывать денормальные значения, но в противном случае числа не изменены. Если неопределенность с денормальными значениями выборки точек является проблемой для приложения, используйте инструкцию ld , которая гарантирует, что 32-разрядные значения с плавающей запятой считываются неизмененные.

Вычисление LOD

Дополнительные сведения о том, как производные вычисляются в процессе определения loD для фильтрации, см. в deriv_rtx и deriv_rty. Пример инструкции неявно вычисляет производные координаты текстуры с использованием того же определения, что и инструкции шейдера производных. Это не относится к sample_l или sample_d инструкциям. Для этих инструкций loD или производные предоставляются непосредственно приложением.

В примере инструкции реализации могут использовать одинаковые вычисления LOD на всех 4 пикселях в метке 2x2 (но не большей области) или выполнять вычисления loD на пиксель.

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

Для буфера и текстур1D компоненты SrcAddress .gba (POS-swizzle) игнорируются. Для массивов Texture1D компоненты SrcAddress .ba (POS-swizzle) игнорируются. Для текстур2D srcAddress .a component (POS-swizzle) игнорируется.

Извлечение из входного слота, не привязанного к нему, возвращает значение 0 для всех компонентов.

Ограничения

  • srcResource должен быть регистром t#. srcResource не может быть константойBuffer, которая не может быть привязана к регистрам t#.
  • srcSampler должен быть регистром s#.
  • Относительная адресация в srcResource или srcSampler запрещена.
  • srcAddress должен быть temp (r#/x#), constantBuffer (cb#), input (v#) register или интерпретация значений.
  • dest должен быть временным (r#/x#) или регистром выходных данных (o*#).
  • _aoffimmi(u,v,w) не разрешено для TextureCubes.

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

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

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

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

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

Модель 4 шейдера (DirectX HLSL)