Compartir a través de


Requerir retroactivamente Free-Threaded DDIs de CalcPrivate

La versión 11 de Direct3D requiere retroactivamente funciones de controlador de pantalla en modo de usuario que comienzan con pfnCalcPrivate en funciones DDI de direct3D versión 10 que están subprocesadas sin subprocesos. Este requisito retroactivo coincide con el comportamiento de la DDI de direct3D versión 11 para requerir siempre las funciones pfnCalcPrivate* y pfnCalcDeferredContextHandleSize que están subprocesadas sin subprocesos aunque el controlador indique que no admite subprocesos DDI. Para obtener más información sobre cómo el controlador indica la compatibilidad con subprocesos, vea Compatibilidad con subprocesos, listas de comandos y canalización 3D. La razón de este requisito retroactivo es que estas funciones suelen ser muy sencillas, ya que devuelven un valor inmediato para el tamaño. Las funciones que son más complejas deciden qué valor inmediato se va a devolver en función de los parámetros que se pasan a la función. El requisito de las funciones que comienzan por pfnCalcPrivate para escribir realmente los datos en lugares distintos de la pila no existen. El requisito de que estas funciones lean datos distintos de los parámetros es una rareza. Cualquier requisito para leer datos no produce problemas de contención. Este hecho permite que la API de Direct3D versión 11 tome una optimización mucho necesaria y evite realizar una sincronización costosa dos veces por creación (por ejemplo, cualquier llamada para crear un objeto como una llamada a CreateResource(D3D10) o CreateGeometryShader), en lugar de solo una vez.

Una excepción notable a este requisito de subproceso libre retroactivo es la función CalcPrivateDeviceSize que se usa para satisfacer la creación de dispositivos de visualización. CalcPrivateDeviceSize se encuentra en la tabla de funciones del adaptador (D3D10_2DDI_ADAPTERFUNCS o D3D10DDI_ADAPTERFUNCS). CalcPrivateDeviceSize no se encuentra debajo del grupo de funciones que experimentaron la relajación en el modelo de subprocesos. No es necesario para liberar subprocesos la función CalcPrivateDeviceSize .