Actualizaciones de IddCx versiones 1.5, 1.6 y posteriores
Las siguientes actualizaciones de las versiones 1.5 y 1.6 de IddCx se aplican a los controladores de pantalla indirecta (IDD) remota y de consola.
Versión actualizada de IddCxGetVersion
La versión iddCx devuelta por IddCxGetVersion se actualizó a 0x1500 para la versión 1.5 y a 0x1600 para la versión 1.6. Para obtener una lista completa de la información de versión relacionada con IddCx, consulte Versiones de IddCx.
Información de WPP en símbolos IddCx públicos
A partir de IddCx versión 1.5, los archivos de símbolos de IddCx públicos contienen toda la información del procesador de seguimiento de software (WPP) de Windows. Este cambio significa que el comando del depurador !wmitrace.logdump descodifica y muestra el mensaje WPP en el depurador de kernel.
Capacidad de acceder a los búferes asignados en la memoria del sistema
En determinados escenarios, los búferes de cadena de intercambio residen en la memoria del sistema; por ejemplo, cuando WARP (Plataforma de rasterización avanzada de Windows, el representador de software proporcionado por el sistema) es el adaptador de representación que se usa. IddCx 1.5 agrega las siguientes devoluciones de llamada del sistema operativo que permiten al controlador acceder a búferes en la memoria del sistema evitando así una copia de subrecursos:
IddCxSwapChainInSystemMemory permite a una IDD comprobar si los búferes de una cadena de intercambio residen en la memoria del sistema. El resultado de esta devolución de llamada permanece constante durante toda la vigencia de la cadena de intercambio. El controlador debe comprobar el valor de esta devolución de llamada en su devolución de llamada EvtIddCxMonitorAssignSwapChain y configurar el estado para liberar y adquirir búferes.
IddCxSwapChainReleaseAndAcquireSystemBuffer permite que una IDD libere y adquiera un búfer, así como obtener información para acceder al búfer (por ejemplo, un puntero a la memoria del sistema, un paso/stride del búfer y formato y dimensiones de superficie). El búfer devuelto es válido hasta la siguiente llamada correcta a esta función.
En el punto de asignación de una nueva cadena de intercambio, el controlador debe decidir qué variante de IddCxSwapChainReleaseAndAcquireBuffer/IddCxSwapChainReleaseAndAcquireSystemBuffer llamará para la cadena de intercambio determinada y debe seguir usando esa variante durante el resto de la duración de esa cadena de intercambio. Para decidirlo, el controlador debe tener en cuenta sus requisitos específicos y el resultado de la llamada a IddCxSwapChainInSystemMemory. Un controlador hace que el sistema operativo compruebe el proceso de UMDF si:
- Llama a la otra variante de IddCxSwapChainReleaseAndAcquireSystemBuffer/IddCxSwapChainReleaseAndAcquireBuffer.
- Llama a IddCxSwapChainReleaseAndAcquireSystemBuffer cuando IddCxSwapChainInSystemMemory devuelve false.
Los controladores se recomiendan, pero no son necesarios para usar estas funciones de devolución de llamada. El comportamiento anterior a IddCx 1.5 sigue siendo compatible.
Capacidad de acceder a los búferes en memoria físicamente contigua
Nota:
IddCxSwapChainGetPhysicallyContiguousAddress no se admite en ningún sistema de Windows 10 y es probable que esté en desuso en el futuro.
A partir de IddCx 1.6, se agregó la marca IDDCX_ADAPTER_FLAGS_PREFER_PHYSICALLY_CONTIGUOUS y la función de devolución de llamada del SO IddCxSwapChainGetPhysicallyContiguousAddress para que se pueda acceder a los búferes en memoria físicamente contigua.
Los controladores de pantalla pueden solicitar que las superficies principales se asignen en memoria del sistema físicamente contigua estableciendo la marca IDDCX_ADAPTER_FLAGS_PREFER_PHYSICALLY_CONTIGUOUS en IDDCX_ADAPTER_CAPS. Esta funcionalidad permite que un controlador examine directamente una superficie sin una copia intermedia.
No se garantiza que la solicitud del controlador durante la inicialización se realice correctamente. Si la solicitud no se realiza correctamente, no se producirá ningún error en la llamada a IddCxAdapterInitAsync. En su lugar, una vez que el controlador realiza un IddCxSwapChainReleaseAndAcquireBuffer (o IddCxSwapChainReleaseAndAcquireSystemBuffer), debe llamar a IddCxSwapChainGetPhysicallyContiguousAddress para recuperar la dirección física de la superficie. IddCxSwapChainGetPhysicallyContiguousAddress esperará primero a los comandos de representación pendientes y, a continuación, vaciará e invalidará las memorias caché de CPU asociadas al intervalo de direcciones donde se almacena la superficie. Sin embargo, si no se pudo asignar la solicitud inicial de las superficies en memoria físicamente contigua, IddCxSwapChainGetPhysicallyContiguousAddress devuelve E_NOINTERFACE.