Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Descreve o suporte no Direct3D 12 para sistemas que têm vários adaptadores instalados, abrangendo cenários em que seu aplicativo visa explicitamente vários adaptadores de GPU e cenários em que os drivers usam implicitamente vários adaptadores de GPU em nome de seu aplicativo.
Visão geral de vários adaptadores
Um adaptador GPU pode ser qualquer adaptador (gráfico ou de computação, discreto ou integrado), de qualquer fabricante, que suporte Direct3D 12.
Vários adaptadores são referenciados como nós. Vários elementos, como as filas, aplicam-se a cada nó, portanto, se houver dois nós, haverá duas filas 3D padrão. Outros elementos, como o estado do pipeline e assinaturas raiz e de comando, podem se referir a um ou mais ou todos os nós, conforme mostrado no diagrama.
Compartilhando pilhas entre adaptadores
Consulte o tópico Heaps Shared.
APIs de vários adaptadores e máscaras de nó
Semelhante às APIs Direct3D anteriores, cada conjunto de adaptadores vinculados é enumerado como um único objeto deIDXGIAdapter3. Todas as saídas conectadas a qualquer adaptador no link são enumeradas como anexadas ao único objeto de IDXGIAdapter3.
Seu aplicativo pode determinar o número de adaptadores físicos associados a um determinado dispositivo chamando ID3D12Device::GetNodeCount.
Muitas APIs no Direct3D 12 aceitam uma máscara de nó (uma máscara de bits), que indica o conjunto de nós ao qual a chamada de API se refere. Cada nó tem um índice baseado em zero. Mas na máscara de nó, zero se traduz em bit 1; 1 traduz para o bit 2; e assim por diante.
Nós únicos
Ao chamar as seguintes APIs (nó único), seu aplicativo especifica um único nó ao qual a chamada de API será associada. Na maioria das vezes, isso é especificado por uma máscara de nó. Cada bit na máscara corresponde a um único nó. Para todas as APIs descritas nesta seção, você deve definir exatamente um bit na máscara de nó.
- D3D12_COMMAND_QUEUE_DESC : tem um membro NodeMask.
- CreateCommandQueue : cria uma fila a partir de uma estrutura D3D12_COMMAND_QUEUE_DESC.
- CreateCommandList : usa um nodeMask parâmetro.
- D3D12_DESCRIPTOR_HEAP_DESC : tem um membro NodeMask.
- CreateDescriptorHeap : cria um heap descritor a partir de uma estrutura D3D12_DESCRIPTOR_HEAP_DESC.
- D3D12_QUERY_HEAP_DESC : tem um membro NodeMask.
- CreateQueryHeap : cria um heap de consulta a partir de uma estrutura D3D12_QUERY_HEAP_DESC.
Vários nós
Ao chamar as seguintes APIs (vários nós), seu aplicativo especifica um conjunto de nós aos quais a chamada de API será associada. Você especifica a afinidade de nó como uma máscara de nó, potencialmente com vários bits definidos. Se seu aplicativo passar 0 para essa máscara de bits, o driver Direct3D 12 converterá isso para a máscara de bits 1 (indicando que o objeto está associado ao nó 0).
- D3D12_CROSS_NODE_SHARING_TIER : Determina o suporte para compartilhamento entre nós.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : estrutura de referenciação D3D12_CROSS_NODE_SHARING_TIER.
- D3D12_FEATURE_DATA_ARCHITECTURE : contém um membro NodeIndex.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : tem um membro NodeMask.
- CreateGraphicsPipelineState : cria um objeto de estado de pipeline gráfico a partir de uma estrutura D3D12_GRAPHICS_PIPELINE_STATE_DESC.
- D3D12_COMPUTE_PIPELINE_STATE_DESC : tem um membro NodeMask.
- CreateComputePipelineState : cria um objeto de estado de pipeline de computação a partir de uma estrutura D3D12_COMPUTE_PIPELINE_STATE_DESC.
- CreateRootSignature: usa um nodeMask parâmetro.
- D3D12_COMMAND_SIGNATURE_DESC: tem um membro NodeMask.
- CreateCommandSignature : cria um objeto de assinatura de comando a partir de uma estrutura D3D12_COMMAND_SIGNATURE_DESC.
APIs de criação de recursos
As APIs a seguir fazem referência às máscaras de nó.
- D3D12_HEAP_PROPERTIES : tem CreationNodeMask e VisibleNodeMask membros.
- GetResourceAllocationInfo : tem um parâmetro visibleMask.
- GetCustomHeapProperties : tem um nodeMask parâmetro.
Ao criar um recurso reservado, nenhum índice de nó ou máscara é especificado. O recurso reservado pode ser mapeado em uma pilha em qualquer nó (seguindo as regras de compartilhamento entre nós).
O método MakeResident funciona internamente com filas de adaptadores, não há necessidade de seu aplicativo especificar nada para isso.
Ao chamar as APIs ID3D12Devicea seguir a seguir, seu aplicativo não precisa especificar um conjunto de nós aos quais a chamada de API será associada porque a chamada de API se aplica a todos os nós.
- CreateFence
- GetDescriptorHandleIncrementSize
- SetStablePowerState
- CheckFeatureSupport
- CreateSampler
- CopyDescriptors
- CopyDescriptorsSimple
- CreateSharedHandle
- OpenSharedHandleByName
- OpenSharedHandle : com uma cerca como parâmetro. Com um de recursos ou um heap como parâmetros, esse método não aceita nós como parâmetros porque as máscaras de nó são herdadas de objetos criados anteriormente.
- CreateCommandAllocator
- CreateConstantBufferView
- CreateRenderTargetView
- CreateUnorderedAccessView
- CreateDepthStencilView
- CreateShaderResourceView