Функции выборки текстуры потоковых ресурсов
Функции выборки текстур потоковой передачи ресурсов включают получение отзывов о состоянии шейдера о сопоставленных областях, проверка того, сопоставляются ли все данные в ресурсе, зажимая, чтобы помочь шейдерам избегать областей потоковой передачи mipmapped, которые, как известно, не сопоставлены, и обнаруживая, какой минимальный loD полностью сопоставлен для всего пространства фильтра текстур.
Требования к функциям выборки текстуры потоковых ресурсов
Функции выборки текстур, описанные здесь, требуют поддержки ресурсов потоковой передачи уровня 2 .
Отзывы о состоянии шейдера о сопоставленных областях
Любая инструкция шейдера, которая считывает и /или записывает данные в ресурс потоковой передачи, приводит к записи сведений о состоянии. Это состояние предоставляется как необязательное дополнительное возвращаемое значение для каждой инструкции доступа к ресурсам, которая входит в 32-разрядный временный регистр. Содержимое возвращаемого значения непрозрачно. То есть прямое чтение программы шейдера запрещено. Но для извлечения сведений о состоянии можно использовать функцию CheckAccessFullyMapped.
Полностью сопоставленная проверка
Функция CheckAccessFullyMapped интерпретирует состояние, возвращаемое из доступа к памяти, и указывает, сопоставляются ли все данные в ресурсе. CheckAccessFullyMapped возвращает значение true (0xFFFFFFFF), если данные были сопоставлены или ложны (0x00000000), если данные были не сопоставлены.
Во время операций фильтрации иногда вес заданного текселя заканчивается на 0,0. Примером является линейная выборка с координатами текстуры, которые падают непосредственно на центр текселя: 3 других тексели (которые они могут различаться по оборудованию) способствуют фильтру, но с 0 весом. Эти 0 весовых текселей не способствуют результату фильтра вообще, поэтому если они будут падать на плитки NULL , они не считаются незамеченным доступом. Обратите внимание, что одна и та же гарантия применяется к фильтрам текстур, которые включают несколько уровней MIP; Если тексели на одном из MIP-карт не сопоставлены, но вес этих текселей равен 0, эти тексели не считаются незамеченным доступом.
При выборке из формата с менее чем 4 компонентами (например, DXGI_FORMAT_R8_UNORM), любые тексели, падающие на плитки NULL , приводят к обнаружению доступа, сопоставленного NULL , независимо от того, какие компоненты шейдера фактически смотрят на результат. Например, чтение из R8_UNORM и маскирование результата чтения в шейдере с помощью .gba/.yzw, как представляется, не требуется читать текстуру вообще. Но если адрес текселя является сопоставленной плиткой NULL, операция по-прежнему считается доступом на карту NULL.
Шейдер может проверить состояние и выполнить любой требуемый курс действий по сбою. Например, курс действия может быть ведения журнала "промахов" (например, с помощью записи UAV) и /или выдачи другого чтения, зажатого к грубому loD, известному как сопоставленный. Приложению может потребоваться отслеживать успешные доступы, чтобы получить представление о том, какая часть сопоставленного набора плиток получила доступ.
Одно из осложнений для ведения журнала не существует механизма для создания отчетов о точном наборе плиток, к которым был бы доступ. Приложение может сделать консервативные предположения на основе знания координат, которые он использовал для доступа, а также с помощью инструкции LOD; например, tex2Dlod) возвращает вычисление аппаратного loD.
Другое осложнение заключается в том, что множество доступа будет иметь одинаковые плитки, поэтому много избыточного ведения журнала будет происходить и, возможно, спор в памяти. Это может быть удобно, если оборудование может быть предоставлено возможность не беспокоиться о доступе к плиткам, если они были сообщены в другом месте раньше. Возможно, состояние такого отслеживания может быть сброшено из API (вероятно, на границах кадра).
За образец зажима MinLOD
Чтобы шейдеры избегали областей в ресурсах потоковой передачи mipmapped, которые, как известно, не сопоставлены, большинство инструкций шейдера, которые включают использование примера (фильтрация), имеют режим, позволяющий шейдеру передавать дополнительный параметр зажимки float32 MinLOD в образец текстуры. Это значение находится в пространстве номеров MIP-карты представления, а не в базовом ресурсе.
Оборудование выполняетсяmax(fShaderMinLODClamp,fComputedLOD)
в том же месте в вычислении LOD, где происходит зажим minLOD для каждого ресурса, который также является максимальным().
Если результат применения логарифмы loD на выборку и любых других зажимов LOD, определенных в образце, является пустым набором, результатом является тот же результат доступа вне границ, что и за clamp minLOD для каждого ресурса: 0 для компонентов в формате поверхности и по умолчанию для отсутствующих компонентов.
Инструкция LOD (например, tex2Dlod), которая предопределяет зацепление minLOD, описанное здесь, возвращает как зажатый, так и незаклюживаемый LOD. Зажатый LOD, возвращенный из этой инструкции LOD, отражает все зажимы, включая закладку для каждого ресурса, но не зажимку для каждого образца. При необходимости автор шейдера может вручную применить этот шейдер к возвращаемого значения инструкции LOD вручную.
Фильтрация минимального или максимального уменьшения
Приложения могут управлять собственными структурами данных, которые сообщают им о том, как выглядят сопоставления для ресурса потоковой передачи. Примером будет поверхность, содержащая тексель для хранения информации для каждой плитки в ресурсе потоковой передачи. Можно сохранить первый loD, сопоставленный в заданном расположении плитки. Тщательной выборки этой структуры данных таким же образом, как и выборка ресурса потоковой передачи, может быть обнаружена минимальная модель loD, которая полностью сопоставлена для всего пространства фильтра текстур. Чтобы упростить этот процесс, Direct3D 11.2 представляет новый режим выборки общего назначения, min/max filtering.
Служебная программа фильтрации min/max для отслеживания loD может оказаться полезной для других целей, таких как, возможно, фильтрация поверхностей глубины.
Фильтрация минимального или максимального уменьшения — это режим для выборок, который получает тот же набор текселей, что и обычный фильтр текстуры. Но вместо смешивания значений для получения ответа возвращает min() или max() текселей, полученных на основе каждого компонента (например, мин всех значений R, отдельно от мин всех значений G и т. д.).
Операции min/max соответствуют правилам арифметической точности Direct3D. Порядок сравнений не имеет значения.
Во время операций фильтра, которые не являются минимальной или максимальной, иногда вес заданного текселя заканчивается на 0,0. Примером является линейная выборка с координатами текстуры, которые падают непосредственно на центр текселя; В этом случае 3 других текселя (которые они могут отличаться по оборудованию) способствуют фильтру, но с 0 весом. Для любого из этих текселей, которые будут иметь 0 вес на немин-min/max фильтр, если фильтр имеет минимальное/максимальное значение, эти тексели по-прежнему не способствуют результату (и весы не влияют на операцию фильтра min/max).
Поддержка этой функции зависит от поддержки потоковых ресурсов уровня 2 .
Связанные темы
Доступ к потоковым ресурсам конвейера