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


Конвейеры для Direct3D версии 11

Этот раздел относится только к Windows 7 и более поздних версий, а также Windows Server 2008 R2 и более поздних версий операционной системы Windows.

Конвейер отрисовки графики для Direct3D версии 11 расширен из конвейера отрисовки графики для Direct3D версии 10. Помимо общих программируемых ядер шейдеров, поддерживаемых Direct3D версии 10, Direct3D версии 11 также поддерживает ядра оболочки, домены и вычислительные ядра шейдеров.

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

На следующем рисунке показаны функциональные блоки конвейера рисования для Direct3D версии 11.

Схема, иллюстрирующая функциональные блоки конвейера рисования Direct3D версии 11.

На следующем рисунке показаны функциональные блоки конвейера диспетчеризации для Direct3D версии 11.

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

В следующих разделах описываются блоки new-for-Direct3D 11, показанные на предыдущих рисунках.

Шейдер поверхности

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

Среда выполнения Direct3D вызывает следующие функции драйвера для создания, настройки и уничтожения шейдера корпуса:

Тесселлатор

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

Среда выполнения Direct3D вызывает функцию CalcPrivateTessellationShaderSize драйвера для вычисления размера области памяти для оболочки или шейдера домена.

Шейдер доменов

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

Среда выполнения Direct3D вызывает следующие функции драйвера для создания, настройки и уничтожения шейдера домена:

Вычислительный шейдер

Вычислительный шейдер позволяет рассматривать GPU как универсальную сетку процессоров с параллелизмом данных без каких-либо графических препятствий в конвейере рисования. Вычислительный шейдер имеет явный доступ к быстрой общей памяти для упрощения взаимодействия между группами вызовов шейдеров. Вычислительный шейдер также может выполнять разрозненные операции чтения и записи в память. Доступность атомарных операций обеспечивает уникальный доступ к адресам общей памяти. Вычислительный шейдер не является частью конвейера рисования. Вычислительный шейдер существует сам по себе. Однако вычислительный шейдер существует на том же устройстве, что и все остальные этапы шейдера. Среда выполнения Direct3D вызывает функции DispatchXxx, а не функции DrawXxx драйвера для вызова вычислительного шейдера.

Среда выполнения Direct3D вызывает следующие функции драйвера для создания, настройки и уничтожения вычислительного шейдера:

Представления ресурсов неупорядоченного доступа

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

Среда выполнения Direct3D вызывает следующие функции драйвера для создания, настройки и уничтожения представлений ресурсов неупорядоченного доступа: