Compartir a través de


Migración a Direct3D 11

En esta sección se proporciona información para migrar a Direct3D 11 desde una versión anterior de Direct3D.

Direct3D 9 a Direct3D 11

La API de Direct3D 11 se basa en las mejoras infraestructurales realizadas en Direct3D 10 y 10.1. La migración de Direct3D 9 a Direct3D 11 es similar a pasar de Direct3D 9 a Direct3D 10. A continuación se muestran los desafíos clave de este esfuerzo.

  • Eliminación de todo el uso fijo de canalización de funciones en favor de sombreadores programables creados exclusivamente en HLSL (compilado a través de D3DCompiler en lugar de D3DX9).
  • Administración de estados basada en objetos inmutables en lugar de alternancias de estado individuales.
  • Actualización para cumplir los requisitos estrictos de vinculación de diseños de entrada de búfer de vértices y firmas de sombreador.
  • Asociación de vistas de recursos del sombreador con todos los recursos de textura.
  • Asignar todo el contenido de la imagen a un DXGI_FORMAT, incluida la eliminación de todos los formatos de color de 16 bits (5/5/5/1, 5/6/5, 4/4/4/4), eliminación de todos los formatos de color de 24 bits (8/8/8) y ordenación de colores RGB estricta.
  • Dividir el uso del estado constante global en varios búferes de constantes pequeños y actualizados de forma más eficaz.

Para obtener más información sobre cómo pasar de Direct3D 9 a Direct3D 10, consulta Consideraciones de Direct3D 9 a Direct3D 10.

Direct3D 10 a Direct3D 11

La conversión de programas escritos para usar la API de Direct3D 10 o 10.1 es un proceso sencillo, ya que Direct3D 11 es una extensión de la API existente. Con solo una excepción menor (indicada a continuación: filtrado de texto monocromo), todos los métodos y funcionalidades de Direct3D 10/10.1 están disponibles en Direct3D 11. En el esquema siguiente se describen las diferencias entre las dos API para ayudar a actualizar el código existente. Las principales diferencias aquí incluyen:

  • Las operaciones de representación (Draw, state, etc.) ya no forman parte de la interfaz Device, sino que forman parte de la nueva interfaz DeviceContext junto con los métodos de consulta map/Unmap y device de recursos.
  • Direct3D 11 incluye todas las mejoras y cambios realizados entre Direct3D 10.0 y 10.1

Enumeraciones y defines

Direct3D 10 Direct3D 11
DXGI_FORMAT DXGI_FORMATSe definieron varios formatos DXGI nuevos.
D3D10_CREATE_DEVICE_SWITCH_TO_REF D3D11_CREATE_DEVICE_SWITCH_TO_REFDirect3D 11 no admite la funcionalidad switch-to-ref.
D3D10_DRIVER_TYPE D3D_DRIVER_TYPETenga en cuenta que los identificadores de enumeración de D3D_DRIVER_TYPE se redefinieron a partir de los identificadores de D3D10_DRIVER_TYPE. Por lo tanto, debe asegurarse de usar los identificadores de enumeración en lugar de números literales.
D3D_DRIVER_TYPE se define en D3Dcommon.h.
D3D10_RESOURCE_MISC_FLAG D3D11_RESOURCE_MISC_FLAGTenga en cuenta que muchas de estas marcas se han redefinido, así que asegúrese de usar identificadores de enumeración en lugar de números literales.
D3D10_FILTER D3D11_FILTERTen en cuenta que el filtrado de texto D3D10_FILTER_TEXT_1BIT se quitó de Direct3D 11. Consulte DirectWrite.
D3D10_COUNTER D3D11_COUNTERTen en cuenta que los contadores neutrales del proveedor se quitaron para Direct3D 11, ya que rara vez se admitían.
D3D10_x D3D11_x Muchas enumeraciones y define son las mismas, tienen límites mayores o tienen valores adicionales.

Estructuras

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRYAgrega Stream.
D3D10_BLEND_DESC D3D11_BLEND_DESCTenga en cuenta que esta estructura ha cambiado significativamente de 10 a 10,1 para proporcionar el estado de combinación de destino de representación.
D3D10_BUFFER_DESC D3D11_BUFFER_DESCAgrega un structureByteStride para su uso con recursos del sombreador de proceso
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESCTenga en cuenta que esta estructura tenía miembros de unión adicionales agregados para la versión 10.1
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESCTiene un nuevo miembro Flags.
D3D10_QUERY_DATA_PIPELINE_STATISTICS D3D11_QUERY_DATA_PIPELINE_STATISTICSAgrega varios contadores de fase de sombreador nuevos.
D3D10_x D3D11_x Muchas estructuras son idénticas entre las dos API.

Interfaces

Direct3D 10 Direct3D 11
ID3D10Dispositivo ID3D11Device e ID3D11DeviceContext
La interfaz del dispositivo se dividió en estas dos partes. Para la portabilidad rápida, puede usar ID3D11Device::GetImmediateContext.
Los métodos "ID3D10Device::GetTextFilterSize" y "SetTextFilerSize" ya no existen. Consulte DirectWrite.
Create*Shader toma un parámetro opcional adicional para ID3D11ClassLinkage.
*SetShader y *GetShader toman parámetros opcionales adicionales para ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput toma una matriz y cuenta para varios intervalos de flujo de salida.
El límite del parámetro NumEntries de CreateGeometryShaderWithStreamOutput ha aumentado a D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT en Direct3D 11.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef ID3D11SwitchToRefLa funcionalidad de cambio a referencia no se admite en Direct3D 11.
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3DLos métodos Map y Unmap se movieron a ID3D11DeviceContext y todos los métodos Map usan D3D11_MAPPED_SUBRESOURCE en lugar de void**.
ID3D10Asynchronous ID3D11AsynchronousBegin, End y GetData se movieron a ID3D11DeviceContext.
ID3D10x ID3D11x Muchas interfaces son idénticas entre las dos API.
Solución 10/10.1 11 Solución
HLSL Complier (D3D10Compile*, D3DX10Compile*) y LAS API de reflexión del sombreador D3DCompiler (vea D3DCompiler.h) Nota: Para las aplicaciones de la Tienda Windows, las API D3DCompiler solo se admiten para el desarrollo, no para la implementación.
Efectos 10 Los efectos 11 están disponibles como origen compartido en línea. Nota: Esta solución no es adecuada para las aplicaciones de la Tienda Windows porque requiere las API D3DCompiler en tiempo de ejecución (implementación).
Matemáticas D3DX9/D3DX10 DirectXMath
D3DX10 D3DX11 en las bibliotecas heredadas de DirectX SDK DirectXTex, DirectXTK y DirectXMesh ofrecen alternativas a muchas tecnologías de las bibliotecas heredadas D3DX10 y D3DX11.
Direct2D y DirectWrite ofrecen compatibilidad de alta calidad para representar líneas y fuentes con estilo.

Para obtener información sobre el SDK de DirectX heredado, consulte ¿Dónde está el SDK de DirectX?.

Direct3D 10.1 a Direct3D 11

Direct3D 10.1 es una extensión de la interfaz direct3D 10 y todas las características de Direct3D 10.1 están disponibles en Direct3D 11. La mayor parte de la portabilidad de 10.1 a 11 ya se aborda por encima de pasar de 10 a 11.

Enumeraciones y defines

Direct3D 10.1 Direct3D 11
D3D10_FEATURE_LEVEL1 D3D_FEATURE_LEVELIdéntico pero definido en D3DCommon.h más la adición de D3D_FEATURE_LEVEL_11_0 para 11 hardware de clase junto con D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2 y D3D_FEATURE_LEVEL_9_3 para 10level9
(D3D10_FEATURE_LEVEL_9_1, D3D10_FEATURE_LEVEL_9_2 y D3D10_FEATURE_LEVEL_9_3 también se agregaron para 10.1 a d3d10_1.h)

Estructuras

Direct3D 10.1 Direct3D 11
D3D10_BLEND_DESC1 D3D11_BLEND_DESCLa versión 11 es idéntica a la 10.1.
D3D10_SHADER_RESOURCE_VIEW_DESC1 D3D11_SHADER_RESOURCE_VIEW_DESCLa versión 11 es idéntica a la 10.1.

Interfaces

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11Device e ID3D11DeviceContext
La interfaz del dispositivo se dividió en estas dos partes. Para realizar la portabilidad rápida, puede usar ID3D11Device::GetImmediateContext.
Los métodos "ID3D10Device::GetTextFilterSize" y "SetTextFilerSize" ya no existen. Consulte DirectWrite.
Create*Shader toma un parámetro opcional adicional para ID3D11ClassLinkage.
*SetShader y *GetShader toman parámetros opcionales adicionales para ID3D11ClassInstance(s).
CreateGeometryShaderWithStreamOutput toma una matriz y cuenta para varios intervalos de flujo de salida.
El límite del parámetro NumEntries de CreateGeometryShaderWithStreamOutput ha aumentado a D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT en Direct3D 11.
ID3D10BlendState1 ID3D11BlendState
ID3D10ShaderResourceView1 ID3D11ShaderResourceView

Nuevas características para Direct3D 11

Una vez actualizado el código para usar la API de Direct3D 11, hay numerosas características nuevas que se deben tener en cuenta.

  • Representación multiproceso a través de listas de comandos y varios contextos
  • Implementación de algoritmos avanzados mediante el sombreador de proceso (con perfiles de sombreador 4.0, 4.1 o 5.0)
  • Nuevas características de hardware de clase 11:
    • Modelo de sombreador HLSL 5.0
    • Vinculación dinámica del sombreador
    • Teselación a través de casco y sombreadores de dominio
    • Nuevos formatos de compresión de bloques: BC6H para imágenes HDR, BC7 para imágenes estándar de mayor fidelidad
  • Uso de la tecnología 10level9 para la representación en muchos dispositivos Shader Model 2.0 y Shader Model 3.0 a través de la API DIrect3D 11 para la compatibilidad con hardware de vídeo de gama inferior en Windows Vista y Windows 7.
  • Aprovechamiento del dispositivo de representación de software WARP.

Nuevas características para DirectX 11.1

Windows 8 incluye mejoras de gráficos directX adicionales que se deben tener en cuenta al implementar el código de gráficos de DirectX, que incluyen Direct3D 11.1, DXGI 1.2, Windows Display Driver Model (WDDM) 1.2, hardware de nivel de característica 11.1, contextos de dispositivo Direct2D y otras mejoras.

La compatibilidad parcial con Direct3D 11.1 está disponible en Windows 7, así como a través de la actualización de plataforma para Windows 7, que está disponible a través de la actualización de plataforma para Windows 7.

Nuevas características para DirectX 11.2

El Windows 8.1 incluye Direct3D 11.2, DXGI 1.3 y otras mejoras.

Programming Guide for Direct3D 11 (Guía de programación para Direct3D 11)

Efectos (Direct3D 11)