Compartir a través de


Introducción a contextos diferidos

Esta sección solo se aplica a Windows 7 y versiones posteriores, y Windows Server 2008 R2 y versiones posteriores del sistema operativo Windows.

Una aplicación usa contextos diferidos para crear listas de comandos. Si un controlador de pantalla en modo de usuario indica que admite listas de comandos a través de la marca D3D11DDICAPS_COMMANDLISTS_BUILD_2 de la estructura de D3D11DDI_THREADING_CAPS , también debe admitir la capacidad de crear y manipular contextos diferidos. Para obtener más información sobre cómo el controlador indica las funcionalidades de subproceso, consulte Compatibilidad con subprocesos, listas de comandos y canalización 3D. Los contextos diferidos difieren del contexto inmediato en que los comandos que el registro de contextos diferidos no se pueden ejecutar hasta que la aplicación solicita explícitamente que ejecute los comandos mediante la ejecución de la lista de comandos generada. Para crear y usar un contexto diferido, Direct3D versión 11 proporciona las siguientes nuevas funciones DDI. Estas funciones son un subconjunto de información necesaria para crear la combinación de contexto inmediato o dispositivo.

La semántica de las funciones CalcPrivateDeferredContextSize y CreateDeferredContext son similares a otras funciones DDI similares.

El tiempo de ejecución de Direct3D pasa un nuevo identificador de controlador y identificador de capa principal para cada llamada a la función CreateDeferredContext del controlador para crear cada contexto diferido. El estado de canalización de cada contexto diferido debe ser equivalente al estado de canalización que el contexto inmediato tiene después de que se realice la operación de estado no cifrado. El controlador debe rellenar los miembros de la estructura D3D11DDI_DEVICEFUNCS a los que apunta el miembro p11ContextFuncs de D3D11DDIARG_CREATEDEFERREDCONTEXT estructura con un subconjunto de las funciones de su tabla de funciones; el tiempo de ejecución usa cada uno de los contextos diferidos correspondientes D3D10DDI_HDEVICE controlar los valores que el miembro hDrvContext de D3D11DDIARG_CREATEDEFERREDCONTEXT especifica con esta tabla de funciones.

El controlador debe seguir proporcionando funciones que empiecen por pfnCreate, pfnOpen y pfnDestroy para el contexto diferido. Estas funciones comparten la misma semántica de subprocesos que el resto del contexto diferido y se usan para abrir y cerrar identificadores DDI locales de contexto, tal como se describe en Uso de Context-Local identificadores DDI. Las funciones que comienzan con pfnCalcPrivate o pfnCheck no se aprovechan para contextos diferidos; por lo tanto, el controlador puede establecer los miembros de D3D11DDI_DEVICEFUNCS para estas funciones en NULL cuando se crea el contexto diferido. La mayoría de las funciones de dispositivo restantes se aprovechan para la compatibilidad con el contexto diferido. Sin embargo, el controlador no aprovecha su función QueryGetData . Sin embargo, el controlador aprovecha sus funciones ResourceMap y ResourceUnmap . El controlador solo admite la función ResourceIsStagingBusy y las nuevas funciones DDI para las abrazaderas de recursos de Direct3D versión 11 en el contexto inmediato mediante identificadores de contexto inmediato. Para obtener una lista completa de las funciones que no se aprovechan para contextos diferidos, consulte Exclusión de funciones DDI para contextos diferidos.

El controlador aprovecha las funciones de devolución de llamada de capa principal que se proporcionan en el bloque de memoria al que apunta el miembro p11UMCallbacks de D3D11DDIARG_CREATEDEFERREDCONTEXT . Estas funciones de devolución de llamada de capa principal proporcionan la DDI de estado de actualización para cada contexto diferido. Sin embargo, lo más importante es la adición de la función de devolución de llamada pfnPerformAmortizedProcessingCb que se describe en Cambios de Direct3D 10.

El controlador no debe esperar la función de devolución de llamada pfnDisableDeferredStagingResourceDestruction a la que el miembro pfnDisableDeferredStagingResourceDestruction de puntos de D3D11DDI_CORELAYER_DEVICECALLBACKS sea válido. El controlador debe haber llamado a pfnDisableDeferredStagingResourceDestruction dentro de la función CreateDevice(D3D10) para el contexto inmediato o del dispositivo; después, el controlador nunca debe llamar a pfnDisableDeferredStagingResourceDestruction con la nueva semántica de DDI de Direct3D versión 11.

La función RecycleCreateDeferredContext del controlador debe borrar el estado de canalización para el contexto diferido, de forma similar a cómo CreateDeferredContext del controlador borra el estado de canalización para el contexto diferido. Después de que el tiempo de ejecución llame al controlador AbandonCommandList, CreateCommandList o RecycleCreateCommandList, el tiempo de ejecución puede usar el identificador de contexto diferido con la función DestroyDevice(D3D10) del controlador o RecycleCreateDeferredContext . Para obtener más información sobre RecycleCreateDeferredContext, vea Optimización para listas de comandos pequeñas.