Nivel de característica 12 Core 1.0 de Direct3D
El nivel de característica Core 1.0 es un subconjunto del conjunto completo de características de Direct3D 12. El nivel de característica Core 1.0 puede exponerse por una categoría de dispositivos conocidos como dispositivos de solo proceso. El modelo de controlador general para dispositivos de solo proceso es el modelo de controlador de proceso de Microsoft (MCDM). MCDM es un par de reducción vertical del modelo de controlador de dispositivos Windows (WDDM), que tiene un ámbito mayor.
Un dispositivo que solo admite las características dentro de un nivel de característica principal se conoce como dispositivo principal.
Nota:
El dispositivo de solo proceso, el dispositivo MCDM, el dispositivo de nivel de característica Core y el dispositivo Core significan lo mismo. Preferimos llamarlo dispositivo Core por motivos de simplicidad.
Creación de un dispositivo Core
En general, para crear un dispositivo Direct3D 12, llame a la función D3D12CreateDevice y especifique un nivel de característica mínimo.
Si especifica un nivel de característica de 9 a 12, el dispositivo que se devuelve es un dispositivo enriquecido con características, como una GPU tradicional (que admite un superconjunto de la funcionalidad de un dispositivo Core). Un dispositivo Core nunca se devuelve para ese intervalo de niveles de características.
Por otro lado, si especifica un nivel de característica Core (por ejemplo, D3D_FEATURE_LEVEL::D 3D_FEATURE_LEVEL_1_0_CORE), el dispositivo que se devuelve podría ser enriquecido con características o podría ser un dispositivo Core.
// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000
Si especifica un nivel de característica _CORE
, la capa en tiempo de ejecución o depuración valida que las características que usa la aplicación están permitidas por ese nivel de característica _CORE
. Ese conjunto de características se define más adelante en este tema.
Modelo de sombreador para dispositivos Core
Un dispositivo Core admite el modelo de sombreador 5.0 y versiones posteriores.
El tiempo de ejecución realiza la conversión de modelos de sombreador 5.x no DXIL a 6.0 DXIL. Por lo tanto, el controlador solo necesita compatibilidad con la versión 6.x.
Modelo de administración de recursos para dispositivos Core
- Dimensiones de recursos admitidas: solo búferes sin formato y estructurados (sin búferes con tipo, texture1d/2D, etc.).
- No se admiten recursos reservados (en mosaico)
- Sin compatibilidad para montones personalizados
- No se admite ninguna de estas marcas de montón:
- D3D12_HEAP_FLAG_HARDWARE_PROTECTED
- D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
- D3D12_HEAP_FLAG_ALLOW_DISPLAY
- D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS (se requieren atómicos de sombreador de notas, esta marca es para otra característica, atómicos de adaptador cruzado)
Modelo de enlace de recursos para dispositivos Core
- Compatibilidad solo con el nivel de enlace de recursos 1
- Excepciones:
- No se admiten muestras de textura
- Compatibilidad con 64 UAV como el nivel de característica 11.1+ (en lugar de solo 8)
- Las implementaciones no tienen que implementar la comprobación de límites en los accesos del sombreador a los recursos a través de descriptores, los accesos fuera de los límites producen un comportamiento indefinido.
- Como subproducto, no se admite la marca de intervalo de descriptores D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS en las firmas raíz.
- Los descriptores UAV/CBV solo se pueden realizar en recursos de montones predeterminados (por lo que no hay montones de carga o lectura diferida). Esto obliga a la aplicación a realizar copias para obtener datos a través de CPU<->GPU.
- A pesar de ser el nivel de funcionalidad de enlace más bajo, todavía hay algunas características necesarias incluso en este nivel que merece la pena llamar:
- Los montones de descriptores se pueden actualizar después de que se registren las listas de comandos (consulte D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE en la especificación de enlace de recursos).
- Los descriptores raíz son básicamente punteros de GPUVA
- Aunque no hay compatibilidad con MMU o VA, las máquinas virtuales de búfer que se usan en descriptores raíz se pueden emular mediante implementaciones mediante la aplicación de revisiones de direcciones.
Restricciones de búfer estructurado
Los búferes estructurados deben tener una dirección base alineada con 4 bytes y el paso debe ser 2 o un múltiplo de 4. El caso de un intervalo de 2 es para las aplicaciones con datos de 16 bits, especialmente dado que no hay compatibilidad con búferes con tipo en D3D_FEATURE_LEVEL_1_0_CORE.
El intervalo especificado en descriptores debe coincidir con el especificado en HLSL.
Compatibilidad con la cola de comandos para dispositivos Core
Colas solo de proceso y copia (sin colas 3D, vídeo, etc.).
Compatibilidad del sombreador con dispositivos Core
Solo sombreadores de proceso, sin sombreadores de gráficos (vértice, sombreadores de píxeles, etc. ni ninguna funcionalidad relacionada, como destinos de representación, cadenas de intercambio, ensamblador de entrada.
Precisión aritmética
Los dispositivos Core no tienen que admitir la desnormalización para operaciones de punto flotante de 16 bits.
API admitidas para dispositivos Core
La lista siguiente representa el subconjunto admitido de la interfaz de programación de aplicaciones completa (no se muestran las API que no se admiten en el nivel de características de Core 1.0).
Métodos 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
- ID3D12Device::CreateRootSignature
- 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
Métodos ID3D12Device1
- ID3D12Device1::CreatePipelineLibrary
- ID3D12Device1::SetEventOnMultipleFenceCompletion
- ID3D12Device1::SetResidencySetEventOnMultipleFenceCompletionPriority
Métodos ID3D12Device2
Métodos ID3D12Device3
- ID3D12Device3::OpenExistingHeapFromAddress
- ID3D12Device3::OpenExistingHeapFromFileMapping
- ID3D12Device3::EnqueueMakeResident
Métodos ID3D12Device4
Métodos ID3D12Device5
- ID3D12Device5::CreateMetaCommand
- ID3D12Device5::CreateStateObject
- ID3D12Device5::EnumerateMetaCommandParameters
- ID3D12Device5::EnumerateMetaCommands
- ID3D12Device5::RemoveDevice
Métodos ID3D12CommandQueue
- ID3D12CommandQueue::BeginEvent
- ID3D12CommandQueue::EndEvent
- ID3D12CommandQueue::ExecuteCommandLists
- ID3D12CommandQueue::GetClockCalibration
- ID3D12CommandQueue::GetDesc
- ID3D12CommandQueue::GetTimestampFrequency
- ID3D12CommandQueue::SetMarker
- ID3D12CommandQueue::Signal
- ID3D12CommandQueue::Wait
Métodos ID3D12CommandList
Métodos 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