Partilhar via


O nível de recurso do Direct3D 12 Core 1.0

O Core 1.0 Feature Level é um subconjunto do conjunto completo de recursos do Direct3D 12. O Core 1.0 Feature Level pode ser exposto por uma categoria de dispositivos conhecidos como dispositivos somente de computação . O modelo de driver geral para dispositivos somente de computação é o Microsoft Compute Driver Model (MCDM). O MCDM é um peer reduzido do WDDM (Windows Device Driver Model), que tem um escopo maior.

Um dispositivo que suporta apenas os recursos dentro de um Nível de Recurso Principal é conhecido como um dispositivo Core.

Observação

dispositivo somente de computação, dispositivo MCDM, dispositivo Core Feature Levele dispositivo Core significam a mesma coisa. Vamos preferir o dispositivo Core para simplificar.

Criando um dispositivo Core

Em geral, para criar um dispositivo Direct3D 12, chame a funçãoD3D12CreateDevice e especifique um nível mínimo de recurso.

Se você especificar um nível de recurso de 9 a 12, o dispositivo retornado será um dispositivo rico em recursos, como uma GPU tradicional (que suporta um superconjunto da funcionalidade de um dispositivo Core). Um dispositivo Core nunca é retornado para esse intervalo de níveis de funcionalidade.

Por outro lado, se for especificado um nível de recurso Core (por exemplo, D3D_FEATURE_LEVEL::D3D_FEATURE_LEVEL_1_0_CORE), o dispositivo retornado poderá ser rico em funcionalidades ou poderá ser um dispositivo Core.

// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000

Se você especificar um nível de recurso _CORE, a camada de tempo de execução/depuração validará que os recursos que seu aplicativo usa são permitidos por esse nível de recurso _CORE. Esse conjunto de recursos é definido posteriormente neste tópico.

Modelo de sombreador para dispositivos Core

Um dispositivo Core suporta Shader Model 5.0+.

O ambiente de execução realiza a conversão de modelos de sombreador 5.x não DXIL para 6.0 DXIL. Assim, o driver só precisa suportar 6.x.

Modelo de gerenciamento de recursos para dispositivos principais

  • Dimensões de recursos suportadas: somente buffers brutos e estruturados (sem buffers digitados, texture1d/2D, etc.)
  • Sem suporte para recursos reservados (lado a lado)
  • Sem suporte para pilhas personalizadas
  • Não há suporte para nenhum desses sinalizadores de pilha:
    • D3D12_HEAP_FLAG_HARDWARE_PROTECTED
    • D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
    • D3D12_HEAP_FLAG_ALLOW_DISPLAY
    • D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS (observe que os atomics de sombreador são necessários, esse sinalizador é para outro recurso, o cross adapter atomics)

Modelo de vinculação de recursos para dispositivos principais

  • Suporte apenas para vinculação de recursos de nível 1
  • Exceções:
    • Sem suporte para amostradores de textura
    • Suporte para 64 UAVs como Feature Level 11.1+ (em vez de apenas 8)
    • As implementações não precisam implementar limites verificando os acessos de sombreador aos recursos por meio de descritores, os acessos fora dos limites produzem um comportamento indefinido.
      • Como um subproduto, o sinalizador de intervalo de descritor D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS em assinaturas raiz não é suportado.
  • Os descritores UAV/CBV só podem ser feitos em recursos de heaps padrão (portanto, não há heaps de upload/readback). Isso força seu aplicativo a fazer cópias para obter dados através da CPU<->GPU.
  • Apesar de ser a camada de capacidade de vinculação mais baixa, ainda há alguns recursos necessários, mesmo nessa camada que vale a pena destacar:
    • As pilhas de descritores podem ser atualizadas depois que as listas de comandos são registradas (consulte D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE na especificação de vinculação de recursos)
    • Os descritores de raiz são basicamente ponteiros GPUVA
      • Mesmo que não exista suporte para MMU/VA, as VAs dos buffers utilizadas em descritores raiz podem ser emuladas por implementações através de correções de endereçamento.

Restrições de buffer estruturado

Os buffers estruturados devem ter um endereço base alinhado a 4 bytes e o stride deve ser 2 ou um múltiplo de 4. O caso para um incremento de 2 é para aplicações com dados de 16 bits, especialmente porque não há suporte para buffers tipados em D3D_FEATURE_LEVEL_1_0_CORE.

O passo especificado nos descritores deve corresponder ao passo especificado em HLSL.

Suporte à fila de comandos para dispositivos Core

Filas apenas de computação e cópia (sem filas de 3D, vídeo, etc.).

Suporte de sombreador para dispositivos Core

Apenas sombreadores de computação, sem sombreadores gráficos (Vertex, Pixel Shaders, etc.) nem qualquer funcionalidade relacionada, como destinos de renderização, cadeias de permuta, montador de entrada.

Precisão aritmética

Os dispositivos principais não precisam suportar números desnormalizados para operações de ponto flutuante de 16 bits.

APIs suportadas para dispositivos Core

A lista abaixo representa o subconjunto suportado da interface de programação de aplicativo completa (APIs que não são suportadas no Core 1.0 Feature Level não estão listadas).

Métodos ID3D12Device

Métodos ID3D12Device1

Métodos ID3D12Device2

Métodos ID3D12Device3

Métodos ID3D12Device4

Métodos ID3D12Device5

Métodos ID3D12CommandQueue

Métodos ID3D12CommandList

Métodos ID3D12GraphicsCommandList

Métodos ID3D12GraphicsCommandList1

Métodos ID3D12GraphicsCommandList2

Métodos ID3D12GraphicsCommandList4