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


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

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

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

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

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

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

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

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

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

Шейдер корпуса

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

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

Тесселлатор

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

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

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

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

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

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

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

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

Неупорядоченные представления ресурсов доступа

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

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