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 |