Compartilhar via


Migrando para o Direct3D 11

Esta seção fornece informações para migrar para o Direct3D 11 de uma versão anterior do Direct3D.

Direct3D 9 para Direct3D 11

A API do Direct3D 11 baseia-se nos aprimoramentos de infraestrutura feitos no Direct3D 10 e 10.1. A portabilidade do Direct3D 9 para o Direct3D 11 é semelhante à mudança do Direct3D 9 para o Direct3D 10. A seguir estão os principais desafios desse esforço.

  • Remoção de todo o uso de pipeline de função fixa em favor de sombreadores programáveis criados exclusivamente em HLSL (compilados via D3DCompiler em vez de D3DX9).
  • Gerenciamento de estado baseado em objetos imutáveis em vez de alternâncias de estado individuais.
  • Atualização para cumprir os rigorosos requisitos de vinculação de layouts de entrada de buffer de vértice e assinaturas de sombreador.
  • Associando exibições de recursos de sombreador a todos os recursos de textura.
  • Mapeando todo o conteúdo da imagem para um DXGI_FORMAT, incluindo a remoção de todos os formatos de cores de 24 bits (8/8/8) e a ordenação estrita de cores RGB para a maioria dos cenários.
  • Dividir o uso de estado constante global em vários buffers constantes pequenos e atualizados com mais eficiência.

Para obter mais informações sobre como migrar do Direct3D 9 para o Direct3D 10, consulte Considerações sobre Direct3D 9 para Direct3D 10.

Direct3D 10 para Direct3D 11

A conversão de programas escritos para usar a API do Direct3D 10 ou 10.1 é um processo simples, pois o Direct3D 11 é uma extensão da API existente. Com apenas uma pequena exceção (observada abaixo - filtragem de texto monocromática), todos os métodos e funcionalidades no Direct3D 10/10.1 estão disponíveis no Direct3D 11. A estrutura de tópicos abaixo descreve as diferenças entre as duas APIs para ajudar na atualização do código existente. As principais diferenças aqui incluem:

  • As operações de renderização (Desenhar, estado, etc.) não fazem mais parte da interface do Dispositivo, mas fazem parte da nova interface do DeviceContext, juntamente com os métodos de Mapeamento/Desmapeamento de recursos e consulta de dispositivo.
  • O Direct3D 11 inclui todos os aprimoramentos e alterações feitas entre o Direct3D 10.0 e o 10.1

Enumerações e definições

Direct3D 10 Direct3D 11
DXGI_FORMAT DXGI_FORMAT Vários novos formatos DXGI foram definidos.
D3D10_CREATE_DEVICE_SWITCH_TO_REF D3D11_CREATE_DEVICE_SWITCH_TO_REF A funcionalidade switch-to-ref não é suportada pelo Direct3D 11.
D3D10_DRIVER_TYPE D3D_DRIVER_TYPE Observe que os identificadores de enumeração em D3D_DRIVER_TYPE foram redefinidos a partir dos identificadores em D3D10_DRIVER_TYPE. Portanto, você deve ter certeza de usar os identificadores de enumeração em vez de números literais.
D3D_DRIVER_TYPE é definido em D3Dcommon.h.
D3D10_RESOURCE_MISC_FLAG D3D11_RESOURCE_MISC_FLAG Observe que muitos desses sinalizadores foram redefinidos, portanto, certifique-se de usar identificadores de enumeração em vez de números literais.
D3D10_FILTER D3D11_FILTER Observe que a filtragem de texto D3D10_FILTER_TEXT_1BIT foi removida do Direct3D 11. Consulte DirectWrite.
D3D10_COUNTER D3D11_COUNTER Observe que os contadores neutros de fornecedor foram removidos para o Direct3D 11, pois raramente eram suportados.
D3D10_x D3D11_x Muitas enumerações e definições são iguais, têm limites maiores ou têm valores adicionais.

Estruturas

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRY Adiciona fluxo.
D3D10_BLEND_DESC D3D11_BLEND_DESC Observe que essa estrutura mudou significativamente de 10 para 10.1 para fornecer o estado de mistura de destino por renderização
D3D10_BUFFER_DESC D3D11_BUFFER_DESC Adiciona um StructureByteStride para uso com recursos de sombreador de computação
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESC Note-se que esta estrutura teve membros adicionais do sindicato adicionados para 10.1
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESC Tem um novo membro do Flags.
D3D10_QUERY_DATA_PIPELINE_STATISTICS D3D11_QUERY_DATA_PIPELINE_STATISTICS Adiciona vários novos contadores de palco de sombreador.
D3D10_x D3D11_x Muitas estruturas são idênticas entre as duas APIs.

Interfaces

Direct3D 10 Direct3D 11
ID3D10Dispositivo ID3D11Device e ID3D11DeviceContext
A interface do dispositivo foi dividida nessas duas partes. Para portabilidade rápida, você pode usar ID3D11Device::GetImmediateContext.
Os métodos "ID3D10Device::GetTextFilterSize" e "SetTextFilerSize" não existem mais. Consulte DirectWrite.
Create*Shader usa um parâmetro opcional adicional para ID3D11ClassLinkage.
*SetShader e *GetShader usam parâmetros opcionais adicionais para ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput usa uma matriz e conta para várias passadas de fluxo de saída.
O limite para o parâmetro NumEntries de CreateGeometryShaderWithStreamOutput aumentou para D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT no Direct3D 11.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef ID3D11SwitchToRefA funcionalidade Switch-to-ref não é suportada no Direct3D 11.
ID3D10Textura1D ID3D11Textura1D
ID3D10Textura2D ID3D11Textura2D
ID3D10Textura3D ID3D11Texture3D Os métodos Map e Unmap foram movidos para ID3D11DeviceContext, e todos os métodos Map usam D3D11_MAPPED_SUBRESOURCE em vez de um void**.
ID3D10Assíncrono ID3D11Asynchronous Begin, End e GetData foram movidos para ID3D11DeviceContext.
ID3D10x ID3D11x Muitas interfaces são idênticas entre as duas APIs.
Solução 10/10.1 11 Solução
Complier HLSL (D3D10Compile*, D3DX10Compile*) e APIs de reflexão de sombreador D3DCompiler (consulte D3DCompiler.h) Observação: para aplicativos da Windows Store, as APIs do D3DCompiler têm suporte apenas para desenvolvimento, não para implantação.
Efeitos 10 O Effects 11 está disponível como fonte compartilhada online. Observação: essa solução não é adequada para aplicativos da Windows Store porque requer as APIs do D3DCompiler em tempo de execução (implantação).
D3DX9/D3DX10 Matemática DirectXMath
D3DX10 D3DX11 no SDK do DirectX herdado DirectXTex, DirectXTK e DirectXMesh oferecem alternativas para muitas tecnologias nas bibliotecas D3DX10 e D3DX11 herdadas.
O Direct2D e o DirectWrite oferecem suporte de alta qualidade para renderização de linhas e fontes estilizadas.

Para obter informações sobre o SDK do DirectX herdado, consulte Onde está o SDK do DirectX?.

Direct3D 10.1 para Direct3D 11

O Direct3D 10.1 é uma extensão da interface do Direct3D 10 e todos os recursos do Direct3D 10.1 estão disponíveis no Direct3D 11. A maior parte da portabilidade de 10.1 para 11 já foi abordada acima, passando de 10 para 11.

Enumerações e definições

Direct3D 10.1 Direct3D 11
D3D10_FEATURE_LEVEL1 D3D_FEATURE_LEVEL Idêntico, mas definido em D3DCommon.h mais a adição de D3D_FEATURE_LEVEL_11_0 para hardware de 11 classes, juntamente com D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2 e D3D_FEATURE_LEVEL_9_3 para 10level9
(D3D10_FEATURE_LEVEL_9_1, D3D10_FEATURE_LEVEL_9_2 e D3D10_FEATURE_LEVEL_9_3 também foram adicionados para 10.1 a d3d10_1.h)

Estruturas

Direct3D 10.1 Direct3D 11
D3D10_BLEND_DESC1 D3D11_BLEND_DESC A versão 11 é idêntica à 10.1.
D3D10_SHADER_RESOURCE_VIEW_DESC1 D3D11_SHADER_RESOURCE_VIEW_DESC A versão 11 é idêntica à 10.1.

Interfaces

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11Device e ID3D11DeviceContext
A interface do dispositivo foi dividida nessas duas partes. Para portabilidade rápida, você pode usar ID3D11Device::GetImmediateContext.
Os métodos " ID3D10Device::GetTextFilterSize" e "SetTextFilerSize" não existem mais. Consulte DirectWrite.
Create*Shader usa um parâmetro opcional adicional para ID3D11ClassLinkage.
*SetShader e *GetShader usam parâmetros opcionais adicionais para ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput usa uma matriz e conta para várias passadas de fluxo de saída.
O limite para o parâmetro NumEntries de CreateGeometryShaderWithStreamOutput aumentou para D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT no Direct3D 11.
ID3D10BlendState1 ID3D11BlendState
ID3D10ShaderResourceView1 ID3D11ShaderResourceView

Novos recursos para Direct3D 11

Depois que seu código é atualizado para usar a API do Direct3D 11, há vários novos recursos a serem considerados.

  • Renderização multithreaded por meio de listas de comandos e vários contextos
  • Implementando algoritmos avançados usando Compute Shader (usando perfis de sombreador 4.0, 4.1 ou 5.0)
  • Novos recursos de hardware de 11 classes:
    • Sombreador HLSL Modelo 5.0
    • Ligação dinâmica do sombreador
    • Tessellation através de sombreadores de casco e domínio
    • Novos formatos de compressão de blocos: BC6H para imagens HDR, BC7 para imagens padrão de maior fidelidade
  • Utilizando a tecnologia 10level9 para renderização em muitos dispositivos Shader Model 2.0 e Shader Model 3.0 por meio da API DIrect3D 11 para suporte de hardware de vídeo de baixo custo no Windows Vista e Windows 7.
  • Aproveitando o dispositivo de renderização de software WARP.

Novos recursos para DirectX 11.1

O Windows 8 inclui outros aprimoramentos de elementos gráficos DirectX a serem considerados ao implementar seu código gráfico DirectX, que incluem Direct3D 11.1, DXGI 1.2, WDDM (Windows Display Driver Model) 1.2, hardware de nível de recurso 11.1, contextos de dispositivo Direct2D e outros aprimoramentos.

O suporte parcial para Direct3D 11.1 também está disponível no Windows 7 por meio da Atualização de plataforma para o Windows 7, que está disponível por meio da Atualização de plataforma para o Windows 7.

Novos recursos para DirectX 11.2

O Windows 8.1 inclui Direct3D 11.2, DXGI 1.3 e outras melhorias.

Guia de programação para Direct3D 11

Efeitos (Direct3D 11)