Compartir a través de


Consulta de información desde la GPU

El tiempo de ejecución de Direct3D puede requerir información de la unidad de procesamiento de gráficos (GPU) que no sea un destino de representación de salida o un búfer de vértices de salida. Dado que la GPU se ejecuta en paralelo con la CPU, el controlador de pantalla en modo de usuario debe proporcionar funciones que exponen la naturaleza asincrónica de la comunicación con la GPU de forma eficaz.

El objeto de consulta es el recurso que el runtime y el controlador usan para la notificación asincrónica. Para crear un objeto de consulta, el tiempo de ejecución llama primero a la función CalcPrivateQuerySize del controlador para que el controlador pueda proporcionar el tamaño de la región de memoria que necesita el controlador para el objeto de consulta. A continuación, el tiempo de ejecución llama a la función CreateQuery(D3D10) del controlador para crear el objeto de consulta. En las llamadas a CalcPrivateQuerySize y CreateQuery(D3D10), el tiempo de ejecución proporciona un valor de tipo de consulta de la enumeración D3D10DDI_QUERY en el miembro Query de la estructura D3D10DDIARG_CREATEQUERY a la que apuntan los parámetros pCreateQuery .

Cada instancia de objeto de consulta existe en uno de estos tres estados: compilación, emisión y señalización. El tiempo de ejecución llama a la función QueryBegin del controlador para realizar la transición del objeto de consulta al estado de creación.

Nota Todos los tipos de consulta admiten QueryBegin excepto D3D10DDI_QUERY_EVENT y D3D10DDI_QUERY_TIMESTAMP. El concepto de construcción no existe para D3D10DDI_QUERY_EVENT y D3D10DDI_QUERY_TIMESTAMP.

El tiempo de ejecución llama a la función QueryEnd del controlador para realizar la transición del objeto de consulta al estado emitido. Las transiciones al estado señalado se producen de forma asincrónica algún tiempo más tarde. El tiempo de ejecución llama a la función QueryGetData del controlador para detectar si la consulta ha pasado al estado señalado. Si la consulta está en estado señalado, QueryGetData puede devolver datos que se aplican a la consulta en la región de memoria a la que apunta el parámetro pData .

Todos los objetos de consulta del mismo tipo son FIFO (es decir, primero en salir, primero en salir). Por ejemplo, todos los objetos de consulta de tipo D3D10DDI_QUERY_EVENT completar en orden FIFO en función de su orden emitido. Sin embargo, los objetos de consulta de diferentes tipos pueden completarse o indicarse en un orden superpuesto. Por ejemplo, una consulta de tipo D3D10DDI_QUERY_EVENT puede completarse antes de que se complete una consulta de tipo D3D10DDI_QUERY_OCCLUSION, incluso si el tiempo de ejecución emitió la consulta D3D10DDI_QUERY_EVENT después de que el tiempo de ejecución emitiera la consulta D3D10DDI_QUERY_OCCLUSION.

Cuando el tiempo de ejecución ya no requiere el objeto de consulta, el tiempo de ejecución libera la región de memoria que el tiempo de ejecución asignó previamente para el objeto y llama a la función DestroyQuery(D3D10) del controlador para notificar al controlador que el controlador ya no puede tener acceso a esta región de memoria.