Уровень компонентов Direct3D 12 Core 1.0

Уровень компонентов Core 1.0 — это подмножество полного набора функций Direct3D 12. Уровень компонентов Core 1.0 может предоставляться категорией устройств, известных как устройства, доступные только для вычислений. Общая модель драйвера для устройств, доступных только для вычислений, — это модель драйвера вычислений Майкрософт (MCDM). MCDM — это одноранговый узел модели драйвера устройств Windows (WDDM), который имеет более крупный область.

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

Примечание.

Устройство только для вычислений, устройство MCDM, устройство уровня основных компонентов и основное устройство имеют одно и то же значение. Мы предпочитаем основное устройство для простоты.

Создание основного устройства

Как правило, чтобы создать устройство Direct3D 12, вызовите функцию D3D12CreateDevice и укажите минимальный уровень компонентов.

Если указать уровень функций от 9 до 12, то возвращаемое устройство — это устройство с широкими возможностями, например традиционный GPU (который поддерживает супермножество функций основного устройства). Основное устройство никогда не возвращается для этого диапазона уровней компонентов.

С другой стороны, если указать уровень компонентов Core (например, D3D_FEATURE_LEVEL::D 3D_FEATURE_LEVEL_1_0_CORE), устройство, возвращаемое, может быть функциональным или может быть основным устройством.

// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000

Если указать _CORE уровень компонентов, уровень среды выполнения и отладки проверяет, разрешены ли функции, которые используются приложением _CORE . Этот набор функций определяется далее в этом разделе.

Модель шейдера для основных устройств

Основное устройство поддерживает модель шейдера 5.0+.

Среда выполнения выполняет преобразование моделей шейдера 5.x, отличных от DXIL, в 6.0 DXIL. Поэтому драйверу нужна только поддержка версии 6.x.

Модель управления ресурсами для основных устройств

  • Поддерживаемые измерения ресурсов: только необработанные и структурированные буферы (без типизированных буферов, текстур1d/2D и т. д.)
  • Поддержка зарезервированных (плитки) ресурсов не поддерживается
  • Поддержка пользовательских куч не поддерживается
  • Поддержка любого из этих флагов кучи не поддерживается:
    • D3D12_HEAP_FLAG_HARDWARE_PROTECTED
    • D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
    • D3D12_HEAP_FLAG_ALLOW_DISPLAY
    • D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS (атомарные шейдеры заметок необходимы, этот флаг предназначен для другой функции, межадаптерных атомаров)

Модель привязки ресурсов для основных устройств

  • Поддержка только уровня привязки ресурсов 1
  • Исключения:
    • Поддержка примеров текстур не поддерживается
    • Поддержка 64 UAV, таких как уровень компонентов 11.1+ (в отличие от только 8)
    • Реализации не должны реализовывать границы, проверка при доступе шейдера к ресурсам через дескрипторы, вне границ доступа создают неопределенное поведение.
      • В качестве попродукта флаг диапазона дескриптора D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS в корневых сигнатурах не поддерживается.
  • Дескрипторы UAV/CBV могут быть сделаны только на ресурсах из куч по умолчанию (поэтому нет кучи отправки и чтения). Это заставляет приложение выполнять копии для получения данных по ЦП-GPU<>.
  • Несмотря на то, что самый низкий уровень возможностей привязки, существуют все еще некоторые функции, необходимые даже на этом уровне, стоит вызвать следующее:
    • Дескрипторные кучи можно обновить после записи списков команд (см. D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE в спецификации привязки ресурсов)
    • Корневые дескрипторы являются в основном указателями GPUVA
      • Несмотря на отсутствие поддержки MMU /VA, буферные виртуальные машины, используемые в корневых дескрипторах, можно эмулировать реализацией, выполняя исправление адресов.

Ограничения структурированного буфера

Структурированные буферы должны иметь базовый адрес, который равен 4 байтам, и шаг должен иметь 2 или несколько из 4. Дело в шаге 2 для приложений с 16-разрядными данными, особенно учитывая отсутствие поддержки типизированных буферов в D3D_FEATURE_LEVEL_1_0_CORE.

Шаг, указанный в дескрипторах, должен соответствовать шагу, указанному в HLSL.

Поддержка очереди команд для основных устройств

Только очереди вычислений и копирования (без 3D, видео и т. д. очередей).

Поддержка шейдера для основных устройств

Вычислительные шейдеры только, ни графические шейдеры (вершины, шейдеры пикселей и т. д.), ни какие-либо связанные функции, такие как целевые объекты отрисовки, цепочки буферов, сборщик входных данных.

Арифметическая точность

Основные устройства не должны поддерживать денормы для 16-разрядных операций с плавающей запятой.

Поддерживаемые API для основных устройств

В приведенном ниже списке представлено поддерживаемое подмножество полного интерфейса программирования приложений (API, которые не поддерживаются на уровне компонентов Core 1.0, не перечислены).

Методы ID3D12Device

Методы ID3D12Device1

Методы ID3D12Device2

Методы ID3D12Device3

Методы ID3D12Device4

Методы ID3D12Device5

Методы ID3D12CommandQueue

Методы ID3D12CommandList

Методы ID3D12GraphicsCommandList

Методы ID3D12GraphicsCommandList1

Методы ID3D12GraphicsCommandList2

Методы ID3D12GraphicsCommandList4