Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Уровень компонентов Core 1.0 — это подмножество полного набора функций Direct3D 12. Уровень возможностей Core 1.0 может предоставляться категорией устройств, известных как устройства только для вычислений. Общая модель драйвера для устройств, доступных только для вычислений, — это модель драйвера вычислений Майкрософт (MCDM). MCDM — это упрощённая версия модели драйвера устройств Windows (WDDM), которая имеет более широкий масштаб.
Устройство, которое поддерживает только функции на уровне основных компонентов, называется основным устройством.
Примечание.
Устройство для вычислений, устройство «MCDM», устройство базового уровня, и основное устройство имеют одно и то же значение. Мы предпочитаем основное устройство для простоты.
Создание основного устройства
Как правило, чтобы создать устройство Direct3D 12, вызовите функцию D3D12CreateDevice и укажите минимальный уровень компонентов.
Если указать уровень функций от 9 до 12, то возвращаемое устройство — это устройство с широкими возможностями, например традиционный GPU (который поддерживает супермножество функций основного устройства). Основное устройство никогда не возвращается для этого диапазона уровней функций.
С другой стороны, если указать уровень возможностей Core (например, D3D_FEATURE_LEVEL::D3D_FEATURE_LEVEL_1_0_CORE), устройство, которое возвращается, может быть насыщенным функциями или основным устройством Core.
// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000
Если указать _CORE
уровень функций, то уровень среды выполнения/отладки проверяет, разрешает ли этот _CORE
уровень функций использовать те функции, которые задействует ваше приложение. Этот набор функций определяется далее в этом разделе.
Модель шейдера для основных устройств
Основное устройство поддерживает модель шейдера 5.0+.
Среда выполнения выполняет преобразование моделей шейдера 5.x, несовместимых с DXIL, в DXIL 6.0. Поэтому драйверу нужна только поддержка версии 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 БПЛА, например, уровень функций 11.1+ (в отличие от только 8)
- Реализации не обязаны выполнять проверку выхода за границы при доступе шейдера к ресурсам через дескрипторы; выход за границы приводит к неопределённому поведению.
- Как побочный эффект, флаг диапазона дескриптора D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS в корневых сигнатурах не поддерживается.
- Дескрипторы UAV/CBV могут быть сделаны только на ресурсах из стандартных куч (поэтому кучи для загрузки и обратного чтения не допускаются). Это заставляет ваше приложение копировать данные между центральным процессором и графическим процессором.
- Несмотря на то, что это самый низкий уровень привязываемых возможностей, всё ещё существуют некоторые функции, необходимые даже на этом уровне, которые стоит выделить:
- Дескрипторные кучи можно обновлять после записи списков команд (см. 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
- ID3D12Device::CheckFeatureSupport (проверка поддержки функций)
- ID3D12Device::CopyDescriptors
- ID3D12Device::CopyDescriptorsSimple
- ID3D12Device::CreateCommandAllocator
- ID3D12Device::CreateCommandList
- ID3D12Device::CreateCommandQueue
- ID3D12Device::CreateCommandSignature
- ID3D12Device::CreateCommittedResource
- ID3D12Device::CreateComputePipelineState
- ID3D12Device::CreateConstantBufferView
- ID3D12Device::CreateDescriptorHeap
- ID3D12Device::CreateFence
- ID3D12Device::CreateHeap
- ID3D12Device::CreatePlacedResource
- ID3D12Device::CreateQueryHeap
- Устройство ID3D12: Создать корневую подпись
- ID3D12Device::CreateShaderResourceView
- ID3D12Device::CreateSharedHandle
- ID3D12Device::CreateUnorderedAccessView
- ID3D12Device::Evict
- ID3D12Device::GetAdapterLuid
- ID3D12Device::GetCopyableFootprints
- ID3D12Device::GetCustomHeapProperties
- ID3D12Device::GetDescriptorHandleIncrementSize
- ID3D12Device::GetDeviceRemovedReason
- ID3D12Device::GetNodeCount
- ID3D12Device::GetResourceAllocationInfo
- ID3D12Device::MakeResident
- ID3D12Device::OpenSharedHandle
- ID3D12Device::OpenSharedHandleByName
- ID3D12Device::SetStablePowerState
Методы ID3D12Device1
- ID3D12Device1::CreatePipelineLibrary
- ID3D12Device1::SetEventOnMultipleFenceCompletion
- ID3D12Device1::SetResidencySetEventOnMultipleFenceCompletionPriority
Методы ID3D12Device2
Методы ID3D12Device3
- ID3D12Device3::OpenExistingHeapFromAddress
- ID3D12Device3::OpenExistingHeapFromFileMapping
- ID3D12Device3::EnqueueMakeResident
Методы ID3D12Device4
Методы ID3D12Device5
- ID3D12Device5::CreateMetaCommand
- ID3D12Device5::CreateStateObject
- ID3D12Device5::EnumerateMetaCommandParameters
- ID3D12Device5::EnumerateMetaCommands
- ID3D12Device5::RemoveDevice
Методы ID3D12CommandQueue
- ID3D12CommandQueue::BeginEvent
- ID3D12CommandQueue::EndEvent
- ID3D12CommandQueue::ExecuteCommandLists
- ID3D12CommandQueue::GetClockCalibration
- ID3D12CommandQueue::GetDesc
- ID3D12CommandQueue::GetTimestampFrequency - возвращает частоту временных меток
- ID3D12CommandQueue::SetMarker
- ID3D12CommandQueue::Signal
- ID3D12CommandQueue::Wait
Методы ID3D12CommandList
Методы ID3D12GraphicsCommandList
- ID3D12GraphicsCommandList::BeginEvent
- ID3D12GraphicsCommandList::BeginQuery
- ID3D12GraphicsCommandList::ClearState
- ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat
- ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint
- ID3D12GraphicsCommandList::Close
- ID3D12GraphicsCommandList::CopyBufferRegion
- ID3D12GraphicsCommandList::CopyResource
- ID3D12GraphicsCommandList::CopyTextureRegion
- ID3D12GraphicsCommandList::Dispatch
- ID3D12GraphicsCommandList::EndEvent
- ID3D12GraphicsCommandList::EndQuery
- ID3D12GraphicsCommandList::Reset
- ID3D12GraphicsCommandList::ResolveQueryData
- ID3D12GraphicsCommandList::ResourceBarrier
- ID3D12GraphicsCommandList::SetComputeRoot32BitConstant
- ID3D12GraphicsCommandList::SetComputeRoot32BitConstants
- ID3D12GraphicsCommandList::SetComputeRootConstantBufferView
- ID3D12GraphicsCommandList::SetComputeRootDescriptorTable
- ID3D12GraphicsCommandList::SetComputeRootShaderResourceView
- ID3D12GraphicsCommandList::SetComputeRootSignature
- ID3D12GraphicsCommandList::SetComputeRootUnorderedAccessView
- ID3D12GraphicsCommandList::SetDescriptorHeaps
- ID3D12GraphicsCommandList::SetMarker
- ID3D12GraphicsCommandList::SetPipelineState
- ID3D12GraphicsCommandList::SetPredication