Capas de API (Direct3D 10)
El entorno de ejecución de Direct3D 10 se construye con capas, empezando por la funcionalidad básica en el núcleo y creando funcionalidades opcionales y de asistencia para desarrolladores en capas externas.
Capa de núcleo
La capa de núcleo existe de forma predeterminada; proporcionar una asignación muy fina entre la API y el controlador del dispositivo, lo que minimiza la sobrecarga de las llamadas de alta frecuencia. Dado que la capa principal es esencial para el rendimiento, solo realiza una validación crítica.
Las capas restantes son opcionales. Como regla general, las capas agregan funcionalidad, pero no modifican el comportamiento existente. Por ejemplo, las funciones principales tendrán los mismos valores devueltos independientemente de la capa de depuración que se cree una instancia, aunque se puede proporcionar una salida de depuración adicional si se crea una instancia de la capa de depuración.
Cree capas cuando se cree un dispositivo llamando a D3D10CreateDevice y proporcionando uno o varios valores D3D10_CREATE_DEVICE_FLAG .
Capa de depuración
La capa de depuración proporciona una amplia validación de parámetros y coherencia adicionales (como validar la vinculación del sombreador y el enlace de recursos, validar la coherencia de los parámetros y notificar descripciones de errores). La salida generada por la capa de depuración consta de una cola de cadenas a las que se puede acceder mediante la interfaz ID3D10InfoQueue (vea Personalizar la salida de depuración con ID3D10InfoQueue (Direct3D 10)). Los errores generados por la capa principal se resaltan con advertencias por la capa de depuración.
Para crear un dispositivo que admita la capa de depuración, debe instalar el SDK de DirectX (para obtener D3D10SDKLayers.DLL) y, a continuación, especificar la marca de D3D10_CREATE_DEVICE_DEBUG al llamar a D3D10CreateDevice. Por supuesto, la ejecución de una aplicación con la capa de depuración será considerablemente más lenta. Para habilitar o deshabilitar mensajes de depuración para las API D3DX10, llame a D3DX10DebugMute.
Cuando la capa de depuración muestra pérdidas de memoria, genera una lista de punteros de interfaz de objeto junto con sus nombres descriptivos. El nombre descriptivo predeterminado es "<sin nombre>". Puede establecer el nombre descriptivo mediante el método ID3D10DeviceChild::SetPrivateData y el GUID de WKPDID_D3DDebugObjectName que se encuentra en D3Dcommon.h. Por ejemplo, para asignar un nombre pTexture con un nombre SDKLayer de mytexture.jpg, use el código siguiente:
const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );
Normalmente, debe compilar estas llamadas fuera de la versión de producción.
Capa de cambio a referencia
Esta capa permite a una aplicación realizar la transición entre un dispositivo de hardware (HAL) y un dispositivo de referencia o software (REF). Para cambiar un dispositivo, primero debe crear un dispositivo que admita la capa switch-to-reference (consulte D3D10CreateDevice) y, a continuación, llame a ID3D10SwitchToRef::SetUseRef.
Todos los estados del dispositivo, los recursos y los objetos se mantienen a través de esta transición del dispositivo. Sin embargo, a veces no es posible hacer coincidir exactamente los datos de recursos. Esto se debe al hecho de que hay información disponible para un dispositivo de hardware que no está disponible para un dispositivo de referencia.
Prácticamente todas las aplicaciones en tiempo real usan la implementación HAL de la canalización. Cuando la canalización se cambia de un dispositivo de hardware a un dispositivo de referencia, las operaciones de representación se realizan simultáneamente en hardware y software. Como el dispositivo de software está representando, requerirá que los recursos se descarguen en la memoria del sistema. Esto puede requerir que otros recursos almacenados en caché en la memoria del sistema se expulsen para hacer espacio.
Nota
Esta característica de capa de cambio a referencia solo se admite en Direct3D 10 y Direct3D 10.1, y ya no se admite en Direct3D 11 y versiones posteriores.
capa de Thread-Safe
Esta capa está diseñada para permitir que las aplicaciones multiproceso accedan al dispositivo desde varios subprocesos.
Una aplicación direct3D 10 puede controlar una sincronización de dispositivos mediante funciones de dispositivo. Esto permite a una aplicación habilitar o deshabilitar secciones críticas (habilitar o deshabilitar temporalmente la protección multithreading) y tomar o liberar un bloqueo de sección crítica en varios puntos de entrada de la API de Direct3D 10. La capa segura para subprocesos está habilitada de forma predeterminada. En el caso de las aplicaciones de un solo subproceso, la capa segura para subprocesos no tiene ningún impacto en el rendimiento.
Diferencias entre Direct3D 9 y Direct3D 10:
- A diferencia de Direct3D 9, la API de Direct3D 10 es totalmente segura para subprocesos.
Temas relacionados