Функции Direct3D 11

Руководство по программированию содержит сведения о том, как использовать программируемый конвейер Direct3D 11 для создания трехмерной графики в реальном времени для игр, а также для научных и настольных приложений.

Шейдер вычислений

Шейдер вычислений — это программируемый шейдер, предназначенный для параллельной обработки данных общего назначения. Другими словами, вычислительные шейдеры позволяют использовать GPU в качестве параллельного процессора общего назначения. Вычислительный шейдер аналогичен другим программируемым шейдерам конвейера (таким как вершина, пиксель, геометрия) по способу доступа к входным и выходным данным. Технология шейдера вычислений также называется технологией DirectCompute. Вычислительный шейдер интегрирован в Direct3D и доступен через устройство Direct3D. Он может напрямую совместно использовать ресурсы памяти с графическими шейдерами с помощью устройства Direct3D. Однако он не связан напрямую с другими этапами шейдера.

Шейдер вычислений предназначен для массовых приложений, выполняющих вычисления с интерактивными тарифами, когда затраты на переход между API (и связанным с ним стеком программного обеспечения) и ЦП будут потреблять слишком много накладных расходов.

Шейдер вычислений имеет собственный набор состояний. Шейдер вычислений не обязательно имеет принудительное сопоставление 1–1 с входными записями (как у вершинного шейдера) или выходными записями (как у пиксельного шейдера). Некоторые функции графического шейдера поддерживаются, но другие были удалены, чтобы можно было добавить новые функции шейдера вычислений.

Для поддержки функций шейдера вычислений теперь доступно несколько новых типов ресурсов, таких как буферы чтения и записи, текстуры и структурированные буферы.

Дополнительные сведения см. в статье Общие сведения о шейдере вычислений.

Динамическое связывание шейдеров

Системы отрисовки должны иметь значительные сложности при управлении шейдерами, предоставляя при этом возможность оптимизировать код шейдеров. Это становится еще более сложной задачей, так как шейдеры должны поддерживать различные материалы в отрисовке сцены в различных конфигурациях оборудования. Чтобы решить эту проблему, разработчики шейдеров часто прибегают к одному из двух общих подходов. Они создали либо полнофункционализированные шейдеры общего назначения, которые могут использоваться самыми разными элементами сцены, которые обеспечивают определенную производительность за гибкость, либо создали отдельные шейдеры для каждого геометрического потока, типа материала или сочетания светлых типов.

Эти крупные шейдеры общего назначения решают эту задачу, перекомпиляя один и тот же шейдер с разными определениями препроцессора, и последний метод использует возможности разработчика методом подбора для достижения того же результата. Взрыв перестановки шейдеров часто был проблемой для разработчиков, которые теперь должны управлять тысячами различных перестановок шейдеров в рамках своего игрового конвейера и конвейера активов.

Direct3D 11 и шейдерная модель 5 представляют объектно-ориентированные языковые конструкции и обеспечивают поддержку среды выполнения связывания шейдеров, чтобы помочь разработчикам программировать шейдеры.

Дополнительные сведения см. в разделе Динамическое связывание .

Многопоточность

Многие графические приложения привязаны к ЦП из-за дорогостоящих действий, таких как обход графа сцены, сортировка объектов и физическое моделирование. Так как многоядерные системы становятся все более доступными, Direct3D 11 улучшила поддержку многопоточности, чтобы обеспечить эффективное взаимодействие между несколькими потоками ЦП и графическими API D3D11.

Direct3D 11 включает следующие функции для поддержки многопоточности:

  • Параллельные объекты теперь создаются в отдельных потоках. Создание функций точки входа, создающих объекты в свободном потоке, позволяет нескольким потокам создавать объекты одновременно. Например, приложение теперь может компилировать шейдер или загружать текстуру в одном потоке при отрисовке в другом.
  • Списки команд можно создавать в нескольких потоках. Список команд — это записанная последовательность графических команд. С помощью Direct3D 11 можно создавать списки команд в нескольких потоках ЦП, что обеспечивает возможность параллельного обхода базы данных сцен или физической обработки в нескольких потоках. Это освобождает поток отрисовки main для отправки буферов команд на оборудование.

Дополнительные сведения см. в разделе Многопоточность .

Тесселяция

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

В Direct3D тесселяции реализованы на GPU для вычисления более гладкой изогнутой поверхности на основе грубого (менее подробного) входного патча. Каждая (четырехугольная) грань патч делится на более мелкие треугольные грани, которые лучше приближены к нужной поверхности.

Сведения о реализации тесселяции в графическом конвейере см. в разделе Общие сведения о тесселяции.

Полный список функций

Ниже приведен полный список функций Direct3D 11.

  • Вы можете запустить Direct3D 11 на оборудовании нижнего уровня , определив уровень функций при создании устройства.

  • Вы можете выполнить тесселяции (см. раздел Общие сведения о тесселяции), используя следующие типы шейдеров:

    • Шейдер поверхности
    • Шейдер доменов
  • Direct3D 11 поддерживает многопоточность (см. раздел Многопоточность)

    • Создание многопоточного ресурса, шейдера или объекта
    • Создание многопоточного отображаемого списка
  • Direct3D 11 расширяет шейдеры следующими функциями (см. раздел Шейдерная модель 5)

    • Адресуемые ресурсы — текстуры, буферы констант и образцы

    • Дополнительные типы ресурсов, такие как буферы чтения и записи и текстуры (см. раздел Новые типы ресурсов).

    • Подпрограммы

    • Шейдер вычислений (см. раздел Общие сведения о шейдере вычислений) — шейдер, ускоряющий вычисления за счет разделения проблемного пространства между несколькими программными потоками или группами потоков и совместного использования данных между регистрами шейдера, чтобы значительно сократить объем данных, необходимых для ввода в шейдер. К алгоритмам, которые может значительно улучшить шейдер вычислений, относятся постобработка, анимация, физика и искусственный интеллект.

    • Шейдер геометрии (см. раздел Возможности шейдера геометрии)

      • Instancing — позволяет геометрическому шейдеру выводить не более 1024 вершин или любое сочетание экземпляров и вершин до 1024 (не более 32 экземпляров по 32 вершины каждая).
    • Построитель текстуры

      • Покрытие в качестве входных данных PS

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

      • Центроидная выборка атрибутов должна соответствовать следующим правилам:

        • Если охвачены все образцы в примитиве, атрибут вычисляется по центру пикселей независимо от того, имеет ли шаблон выборки расположение выборки в центре пикселя.

        • В противном случае атрибут вычисляется в первой охваченной выборке, то есть в выборке с наименьшим индексом среди всех индексов выборки. В этом случае охват выборки определяется после применения логической операции AND к состоянию покрытия и растеризатора для маски выборки.

        • Если примеры не охвачены (например, на вспомогательных пикселях, которые выполняются вне границ примитива для заполнения меток 2x2 пикселей), атрибут оценивается одним из следующих способов:

          • Если состояние растеризатора sample-mask является подмножеством выборок в пикселях, первый образец, охваченный состоянием растеризатора sample-mask, является точкой оценки.
          • В противном случае в условии полной маски выборки центр пикселей является точкой оценки.
  • Direct3D 11 расширяет текстуры (см. Обзор текстур) с помощью следующих функций

    • Сбор4

      • Поддержка многокомпонентных текстур — укажите канал для загрузки.
      • Поддержка программируемых смещения
    • Потоковые операторы

      • Зажимы текстуры для ограничения предварительной загрузки WDDM
    • Ограничения текстур в 16 КБ

    • Требуется 8 бит подтекселя и точности sub-MIP при фильтрации текстур

    • Новые форматы сжатия текстур (1 новый формат LDR и 1 новый формат HDR)

  • Direct3D 11 поддерживает консервативный oDepth. Этот алгоритм позволяет пиксельным шейдерам сравнивать значение глубины пикселя шейдера пикселей с значением в растризаторе. Результат позволяет выполнять операции раннего отбраковки глубины, сохраняя при этом возможность вывода oDepth из пиксельного шейдера.

  • Direct3D 11 поддерживает большой объем памяти

    • Разрешить для ресурсов > 4 ГБ
    • Держите индексы ресурсов 32-разрядными, но ресурс больше
  • Direct3D 11 поддерживает улучшения потокового вывода

    • Адресные выходные данные потока
    • Увеличение количества выходных данных stream до 4
    • Измените все буферы вывода потока на многоэлейные
  • Direct3D 11 поддерживает модель шейдера 5 (см. раздел Модель шейдера 5)

    • Удваивает с денормами
    • Инструкция count bits set
    • Найти инструкцию для первого битового набора
    • Обработка переноса и переполнения
    • Инструкции по развороту битов для FFT
    • Встроенная функция условного переключения
    • Повторная info в буферах
    • Обратная точность с пониженной точностью
    • Инструкции по преобразованию шейдера — fp16 в fp32 и наоборот
    • Структурированный буфер, который является новым типом буфера, содержащего структурированные элементы.
  • Direct3D 11 поддерживает представления глубины или трафарета только для чтения.

    • Отключает операции записи в часть, доступную только для чтения, позволяет использовать текстуру в качестве входных данных и для отбраковки глубины.
  • Direct3D 11 поддерживает непрямое рисование. Direct3D 10 реализует DrawAuto, который принимает содержимое (созданное GPU) и отрисовывает его (на GPU). Direct3D 11 обобщает DrawAuto, чтобы его можно было вызывать шейдером вычислений с помощью DrawInstanced и DrawIndexedInstanced.

  • Direct3D 11 поддерживает прочие функции

    • Окна просмотра с плавающей запятой
    • Зажим MIP-карты для каждого ресурса
    • Смещение глубины. Этот алгоритм обновляет поведение смещения глубины с помощью состояния растеризатора. Результат исключает сценарии, в которых вычисляемое смещение может быть NaN.
    • Ограничения ресурсов. Индексы ресурсов по-прежнему должны быть <= 32 бита, но ресурсы могут быть больше 4 ГБ.
    • Точность растеризатора
    • Требования MSAA
    • Счетчики уменьшены
    • Удалены 1-разрядный формат и текстовый фильтр

Функции, добавленные в предыдущих выпусках

Список функций, добавленных в предыдущих выпусках, см. в следующих разделах:

Новые возможности Direct3D 11