Multihead (Direct3D 9)
Las tarjetas multihead son aquellas que tienen un búfer y un acelerador de fotogramas comunes, convertidores digitales a analógicos independientes (DAC) y salidas de monitor. Estos dispositivos pueden ofrecer compatibilidad con varios monitores mucho más utilizables que un número similar de adaptadores de pantalla heterogéneos.
Las tarjetas de varios encabezados se exponen en la API como un único dispositivo de nivel de API que puede conducir varias cadenas de intercambio de pantalla completa. Por lo tanto, todos los recursos se comparten con todos los encabezados y cada cabeza tiene exactamente las mismas funcionalidades. Cada cabezal se puede establecer en modos de visualización independientes. Puede usar llamadas independientes para IDirect3DSwapChain9::P resent para actualizar cada encabezado. También puede usar una llamada a IDirect3DDevice9::P resent para actualizar cada encabezado secuencialmente.
Nota
La actualización de cada encabezado no se produce simultáneamente con una sola llamada a IDirect3DDevice9::P resent. Las estadísticas presentes en Direct3D 9Ex pueden usar la estructura de D3DPRESENTSTATS para mantener las actualizaciones en cada cabeza cercana entre sí para limitar los efectos de desgarro en varios cabezales de adaptadores. Para obtener información sobre la sincronización de fotogramas de aplicaciones de modelos flip de Direct3D 9Ex, consulte Direct3D 9Ex Improvements.
Cada cadena de intercambio para un dispositivo multihead debe ser de pantalla completa. Cuando un dispositivo ha entrado en modo de varias puntas, debe permanecer en pantalla completa. La transición al modo de ventana requiere la destrucción del dispositivo (excepto la operación NORMAL ALT+TAB-to-minimice).
El antiguo método de dividir la memoria de vídeo entre los encabezados y tratar cada cabeza como un acelerador totalmente independiente seguirá siendo un escenario de uso común. Esta propuesta no reemplaza ese mecanismo a menos que la aplicación se haya codificado específicamente para que funcione en el modo multihead de Direct3D 9.
A los controladores se les da un conocimiento adecuado para cambiar entre los dos modos de funcionamiento.
Una cabeza se llamará la cabeza maestra, y todas las demás cabezas de la misma tarjeta se llamarán cabezas subordinadas. Si hay más de un adaptador de varios encabezados en un sistema, el maestro y sus subordinados de un adaptador multihead se denominan grupo. Los grupos se indican mediante el ordinal del adaptador de su cabeza maestra.
La estructura D3DCAPS9 se ha actualizado para exponer los siguientes límites de hardware nuevos.
UINT NumberOfAdaptersInGroup;
UINT MasterAdapterOrdinal;
UINT AdapterOrdinalInGroup;
- NumberOfAdaptersInGroup es 1 para adaptadores convencionales y mayor que 1 para el adaptador maestro de una tarjeta de varios cabezales. El valor será 0 para un adaptador subordinado de una tarjeta multihead. Cada tarjeta puede tener como máximo un maestro, pero puede tener muchos subordinados.
- MasterAdapterOrdinal indica qué dispositivo es el maestro de este subordinado.
- AdapterOrdinalInGroup indica el orden en el que la API hace referencia a los encabezados. El adaptador maestro siempre tiene AdapterOrdinalInGroup 0. Estos valores no corresponden a los ordinales del adaptador pasados a los métodos IDirect3D9, sino que solo se aplican a los encabezados de un grupo.
Esta definición permite que las tarjetas de varios cabezales sigan presentando varios adaptadores como si fueran tarjetas independientes, igual que en DirectX 8.
Para crear un dispositivo de varios encabezados, especifique la marca de comportamiento D3DCREATE_ADAPTERGROUP_DEVICE en IDirect3D9::CreateDevice. Los parámetros de presentación (una matriz de D3DPRESENT_PARAMETERS) deben contener elementos NumberOfAdaptersInGroup. El tiempo de ejecución asignará cada elemento a cada encabezado en el orden numérico AdapterOrdinalInGroup. Cuando se establece D3DCREATE_ADAPTERGROUP_DEVICE, cada parámetro de presentación debe tener:
- El miembro Windowed establecido en FALSE (es decir, ser pantalla completa).
- El mismo valor para el miembro EnableAutoDepthStencil de D3DPRESENT_PARAMETERS.
Además, si EnableAutoDepthStencil es TRUE, cada uno de los campos siguientes debe tener el mismo valor para cada D3DPRESENT_PARAMETERS:
- AutoDepthStencilFormat
- BackBufferWidth
- BackBufferHeight
- BackBufferFormat
Si se establece DAC, las llamadas adicionales a IDirect3DDevice9::CreateAdditionalSwapChain son ilegales.
Si el dispositivo se creó con la DAC, IDirect3DDevice9::Reset esperará una matriz de D3DPRESENT_PARAMETERS.
Cada estructura de D3DPRESENT_PARAMETERS pasada a IDirect3DDevice9::Reset debe estar en pantalla completa. Para volver al modo de ventana, la aplicación debe destruir el dispositivo y volver a crear un dispositivo que no sea multihead en modo de ventana.
Este es un escenario de uso básico:
1. Create multihead device
2. For each swap chain of device:
3. Call GetBackBuffer for the i-th swapchain
4. Call SetRenderTarget
5. Call DrawPrimitive
6. Optionally call swapchain::Present (or wait until
all swap chains are drawn and present outside of loop)
7. End the for loop
8. Optionally present all swap chains with device::Present
Para obtener más información, vea IDirect3D9::CreateDevice y IDirect3DDevice9::GetNumberOfSwapChains.
Temas relacionados