Compartir a través de


estructura DXGI_DDI_BASE_FUNCTIONS (dxgiddi.h)

La estructura DXGI_DDI_BASE_FUNCTIONS contiene funciones que el controlador de pantalla en modo de usuario puede implementar para realizar tareas de bajo nivel, como presentar fotogramas representados a una salida, controlar gamma y administrar una transición de pantalla completa.

Sintaxis

typedef struct DXGI_DDI_BASE_FUNCTIONS {
  HRESULT()(DXGI_DDI_ARG_PRESENT *) * pfnPresent;
  HRESULT()(DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *) * pfnGetGammaCaps;
  HRESULT()(DXGI_DDI_ARG_SETDISPLAYMODE *) * pfnSetDisplayMode;
  HRESULT()(DXGI_DDI_ARG_SETRESOURCEPRIORITY *) * pfnSetResourcePriority;
  HRESULT()(DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *) * pfnQueryResourceResidency;
  HRESULT()(DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *) * pfnRotateResourceIdentities;
  HRESULT()(DXGI_DDI_ARG_BLT *) * pfnBlt;
} DXGI_DDI_BASE_FUNCTIONS;

Miembros

pfnPresent

Puntero al PresentDXGI función que notifica al controlador de visualización en modo de usuario que una aplicación terminó de representar y solicita que el controlador se muestre en la superficie de destino.

El miembro hDevice de la estructura DXGI_DDI_ARG_PRESENT a la que apunta el parámetro pPresentData es el mismo identificador al que función CreateDevice(D3D10) del controlador que se ha pasado al tiempo de ejecución en el miembro hDrvDevice de la estructura D3D10DDIARG_CREATEDEVICE. Por lo tanto, los escritores de controladores deben definir cuidadosamente el tipo de este controlador. Además, los controladores pueden proporcionar diferentes implementaciones de función PresentDXGI en función de la implementación de DDI que controló la llamada a CreateDevice(D3D10). El tiempo de ejecución nunca combinará los identificadores del controlador en las implementaciones de DDI. Del mismo modo, los hSurfaceToPresent y hDstResource miembros de DXGI_DDI_ARG_PRESENT también son identificadores de recursos definidos por el controlador que el controlador devolvió al tiempo de ejecución en llamadas anteriores a la función createResource(D3D10)delcontrolador.

El miembro pDXGIContext de DXGI_DDI_ARG_PRESENT es un mecanismo de comunicación opaco. El tiempo de ejecución pasa este contexto DXGI al controlador. El controlador debe copiar este contexto DXGI sin cambios en el miembro pDXGIContext de la estructura DXGIDDICB_PRESENT cuando el controlador llama a la funciónpfnPresentCbDXGI.

El controlador debe enviar todos los datos de representación parcialmente compilados (búferes de comandos) mediante la funciónpfnRenderCb. Después, el controlador debe traducir los parámetros del controlador de recursos en identificadores de kernel y usar esos identificadores de kernel en una llamada a pfnPresentCbDXGI.

Nota

Cuando la presentDXGI del controlador función copia el contenido con formato sRGB de una superficie de origen a una superficie de destino que no sea sRGB, el controlador debe copiar el contenido sRGB sin cambios (es decir, el controlador no debe realizar la conversión sRGB a lineal).

pPresentData

[in] Puntero a una estructura de DXGI_DDI_ARG_PRESENT que describe cómo mostrar en la superficie de destino.

pfnGetGammaCaps

La función GetGammaCapsDXGI recupera las funcionalidades gamma.

pGammaData

[in] Puntero a una estructura DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS que contiene capacidades gamma.

pfnSetDisplayMode

Puntero a la función SetDisplayModeDXGI del controlador.

pfnSetResourcePriority

La función SetResourcePriorityDXGI establece la prioridad de expulsión de memoria para un recurso.

El entorno de ejecución de Microsoft Direct3D llama a setResourcePriorityDXGI para establecer el nivel de prioridad de un recurso. El controlador de visualización en modo de usuario debe traducir el identificador de recursos que se proporciona en el miembro hResource de la estructura de DXGI_DDI_ARG_SETRESOURCEPRIORITY a la que apunta pPriorityData a un identificador de asignación. Después de que el controlador realice esta traducción, el controlador debe pasar el controlador resultante en una llamada a la funciónpfnSetPriorityCb.

pPriorityData

[in] Puntero a una estructura de DXGI_DDI_ARG_SETRESOURCEPRIORITY que describe el nivel de prioridad en el que se va a establecer un recurso.

pfnQueryResourceResidency

Esta función determina la residencia de la lista de recursos especificada.

El tiempo de ejecución de Microsoft Direct3D llama a la función queryResourceResidencyDX GI del controlador de pantalla en modo de usuario para que las aplicaciones determinen si el sistema operativo incurrirá en un retraso significativo en el tiempo de dibujo si el sistema debe hacer que los recursos sean accesibles para GPU. La información que se devuelve de QueryResourceResidencyDXGI es una aproximación de la residencia de recursos porque los recursos se pueden degradar antes de que las aplicaciones usen los recursos.

QueryResourceResidencyDXGI debe llamar a la función pfnQueryResidencyCb. pfnQueryResidencyCb devuelve el estado de residencia de un recurso en los elementos de la matriz que especifica el miembro pResidencyStatus de la estructura D3DDDICB_QUERYRESIDENCY. Si pfnQueryResidencyCb devuelve D3DDDI_RESIDENCYSTATUS_NOTRESIDENT para cualquier consulta, QueryResourceResidencyDXGI debe devolver S_NOT_RESIDENT. Si pfnQueryResidencyCb devuelve D3DDDI_RESIDENCYSTATUS_RESIDENTINSHAREDMEMORY para cualquier consulta y no devuelve D3DDDI_RESIDENCYSTATUS_NOTRESIDENT para ninguna consulta, QueryResourceResidencyDXGI debe devolver S_RESIDENT_IN_SHARED_MEMORY. QueryResourceResidencyDXGI debe devolver S_OK solo si todas las llamadas a pfnQueryResidencyCb para todas las consultas devuelven D3DDDI_RESIDENCYSTATUS_RESIDENTINGPUMEMORY.

Para cada recurso que el tiempo de ejecución consulta a través de una llamada a QueryResourceResidencyDXGI, el controlador de visualización en modo de usuario debe determinar qué asignaciones pertenecen al recurso que se van a consultar a través de una llamada a pfnQueryResidencyCb. Para un recurso que posee una sola asignación, la determinación es sencilla: el controlador consultará esa asignación. Sin embargo, si un recurso posee varias asignaciones, la determinación es más difícil. El controlador debe determinar qué asignaciones probablemente usará una aplicación para la representación y el controlador debe consultar solo esas asignaciones. Por ejemplo, si un recurso posee una asignación que se usa para la representación y una asignación de cero que controla una operación de bloqueo, el controlador solo debe consultar la residencia de la primera asignación, ya que es probable que una aplicación no use la segunda asignación para la representación.

Nota

Dado que el tiempo de ejecución no admite la consulta de residencia de recursos de memoria del sistema, el tiempo de ejecución siempre producirá un error en las solicitudes de las aplicaciones para el estado de residencia de los recursos de memoria del sistema y nunca llamará a la función del controlador de visualización en modo de usuario QueryResourceResidencyDXGI función para estos recursos de memoria del sistema.

pResidencyData

[in] Puntero a una estructura de DXGI_DDI_ARG_QUERYRESOURCERESIDENCY que describe una lista de recursos en los que se comprueba la residencia.

pfnRotateResourceIdentities

Gira una lista de recursos.

La funciónRotateResourceIdentitiesDXGI debe intercambiar identidades de la matriz de recursos que se pasan en el miembro pResources de la estructura DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES a la que apunta el parámetro pRotateData. Por ejemplo, si la matriz de recursos hace referencia a los recursos X, Y y Z, en orden de índice de matriz creciente, RotateResourceIdentitiesDXGI debe girar esos identificadores para hacer referencia a Y, Z y X, en el orden de índice de matriz creciente. En concreto, el controlador de visualización en modo de usuario debe intercambiar los identificadores del kernel de los recursos correspondientes. Sin embargo, el controlador no debe intercambiar los identificadores de tiempo de ejecución (RT) correspondientes. El tiempo de ejecución llama a RotateResourceIdentitiesDXGI para rotar los búferes durante la presentación. Por lo tanto, una llamada a RotateResourceIdentitiesDXGI es poco frecuente. El tiempo de ejecución puede especificar la marca D3D10_DDI_BIND_PRESENT en la BindFlags miembro de la estructura de D3D10DDIARG_CREATERESOURCE cuando el tiempo de ejecución llama a la función CreateResource(D3D10)delcontrolador para indicar que el recurso puede participar en una operación de rotación.

El controlador de pantalla en modo de usuario también debe controlar otros aspectos del intercambio de identidades. Por ejemplo, en Direct3D versión 10, las vistas pueden hacer referencia a recursos; y estas vistas pueden tener direcciones de recursos incrustadas en ellas. Por lo tanto, el controlador debe volver a crear estas vistas. Además, es posible que sea necesario que el controlador vuelva a aplicar las vistas enlazadas actualmente.

A partir de Windows 8, el controlador debe admitir la rotación de búferes de retroceso estéreo.

pRotateData

[in] Puntero a una estructura de DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES que describe una lista de recursos que se van a rotar.

pfnBlt

Copia el contenido de una superficie de origen en una superficie de destino y puede girar el contenido.

El entorno de ejecución de Direct3D podría establecer el miembro Flags de la estructura de DXGI_DDI_ARG_BLT que el parámetro pBltData apunta a de tal manera que requiera la función BltDXGI para realizar una operación de transferencia de bloques de bits (bitblt) que resuelva recursos multi muestreado, realice la conversión de formato de color, y realiza un ajuste o se reduce a la vez. Sin embargo, el tiempo de ejecución de Direct3D nunca establecerá el Flags miembro de DXGI_DDI_ARG_BLT en cero (es decir, sin marcas establecidas) junto con el valor de DXGI_DDI_MODE_ROTATION_IDENTITY establecido en el miembro Rotate de DXGI_DDI_ARG_BLT (es decir, para indicar que no hay rotación) para realizar una operación de copia de memoria recta. En su lugar, a menos que ambos recursos sean de ejemplo múltiple, el entorno de ejecución de Direct3D llama a la resourceCopy del controlador o ResourceCopyRegion función para realizar una operación de copia de memoria recta.

La calidad del ajuste o reducción que realiza el controlador de pantalla en modo de usuario debe ser tan buena como el ajuste o reducción que realiza un filtro bilineal.

El tiempo de ejecución de Direct3D llamará a la funcióndeBltDXGI del controlador. Es decir, el tiempo de ejecución debe llamar a BltDXGI no más de una vez o dos veces por fotograma porque el tiempo de ejecución usa BltDXGI principalmente para admitir una presentación.

Cuando el tiempo de ejecución llama a BltDXGI para una presentación, el tiempo de ejecución establece la marca Presente campo de bits en el miembro Flags miembro de DXGI_DDI_ARG_BLT. El tiempo de ejecución establece el marca presente campo de bits para informar al controlador de que hay requisitos adicionales para el bitblt y que puede ser necesaria la sincronización adicional (por ejemplo, el tiempo de ejecución podría necesitar realizar una sincronización adicional en configuraciones de equipo que contienen dos adaptadores de gráficos que cada uno controla partes independientes de la pantalla). Cuando se establece la marca de campo de bits presente, el controlador debe realizar una operación de copia desde los búferes de reserva de una aplicación a la superficie compartida de DWM. Dado que la sincronización de este tipo de operación de copia es inexacta, los artefactos de desgarro deben ser el peor tipo de artefactos que experimenta un usuario. Para este tipo de operación de copia, el controlador no debe usar un enfoque de paso múltiple resolviendo primero en la superficie de destino y, a continuación, convirtiendo los resultados en contexto porque los posibles artefactos serían mucho peores.

Si el controlador admite la devolución de DXGI_DDI_ERR_UNSUPPORTED durante la creación de una superficie principal (es decir, devolver DXGI_DDI_ERR_UNSUPPORTED de una llamada a su función createResource(D3D10) con la marca D3D10_DDI_BIND_PRESENT establecida en el miembro BindFlags de D3D10DDIARG_CREATERESOURCE junto con el miembro pPrimaryDesc del conjunto de D3D10DDIARG_CREATERESOURCE a no NULL), el controlador también debe admitir la rotación durante una operación de copia. Si el controlador nunca devuelve DXGI_DDI_ERR_UNSUPPORTED de una llamada a su función createResource(D3D10 ), el tiempo de ejecución nunca pasará el valor de DXGI_DDI_MODE_ROTATION_ROTATE90, DXGI_DDI_MODE_ROTATION_ROTATE180o DXGI_DDI_MODE_ROTATION_ROTATE270 al miembro Rotate de DXGI_DDI_ARG_BLT. Por lo tanto, en esta situación, la función BltDXGI del controlador no es necesaria para admitir la rotación.

El tiempo de ejecución establece un valor en el miembro Rotate de DXGI_DDI_ARG_BLT para indicar el número de grados para girar en sentido contrario el contenido del origen antes de que el controlador copie el contenido en el destino. La rotación se especifica en incrementos de 90 grados.

Nota

Cuando el BltDXGI del controlador función copia el contenido con formato sRGB de una superficie de origen a una superficie de destino que no sea sRGB, el controlador debe copiar el contenido sRGB sin cambios (es decir, el controlador no debe realizar la conversión sRGB a lineal).

Restricciones de origen

La función BltDXGI siempre usa un subrecurso de origen completo (frente a algún área sub rectangular) para realizar la operación bitblt. Además, el origen es una representación D3D10DDIRESOURCE_TEXTURE2D (especificada en el ResourceDimension miembro de D3D10DDIARG_CREATERESOURCE cuando se crea el origen en una llamada a la función createResource(D3D10) del controlador de visualización en modo de usuario). Cuando el tiempo de ejecución establece el Resolver campo de bits en el flags miembro de DXGI_DDI_ARG_BLT, el origen es un recurso de ejemplo múltiple. El recurso de origen está restringido a un recurso en el que se estableció la marca de D3D10_DDI_BIND_PRESENT en el BindFlags miembro de D3D10DDIARG_CREATERESOURCE. El formato del origen (especificado en el Formato miembro de D3D10DDIARG_CREATERESOURCE) está restringido a formatos de modo de presentación, especificados por los valores siguientes de la enumeración DXGI_FORMAT:

  • DXGI_FORMAT_B5G6R5_UNORM
  • DXGI_FORMAT_B5G5R5A1_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM (vea la nota a continuación).
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

Nota

Si el controlador admite el formato de origen DXGI_FORMAT_B8G8R8A8_UNORM, se aplican las restricciones siguientes:

  • Cuando el controlador realiza una operación bitblt desde un formato de punto flotante a un formato entero como BGRA8888, debe codificar implícitamente gamma en los resultados.
  • Por el contrario, cuando el controlador realiza una operación bitblt de un formato entero a un formato de punto flotante, debe quitar implícitamente la codificación gamma de los resultados.

Restricciones de destino

El destino también es una representación D3D10DDIRESOURCE_TEXTURE2D. El formato del destino también está restringido a los formatos de modo de presentación. El recurso de destino está restringido a un recurso enlazado como destino de representación (D3D10_DDI_BIND_RENDER_TARGET establecido en el BindFlags miembro de D3D10DDIARG_CREATERESOURCE o D3D11DDIARG_CREATERESOURCE).

Creación de un búfer de retroceso estéreo

A partir de Windows 8, si el controlador debe crear un búfer de retroceso estéreo, debe establecer miembros de la estructura D3D10DDIARG_CREATERESOURCE o D3D11DDIARG_CREATERESOURCE, respectivamente, apuntada por el parámetro pCreateResource del CreateResource(D3D10) o las funciones createResource(D3D11), como sigue:

  1. Establezca el miembro ArraySize en un valor de 2.
  2. Establezca el valor de marca D3D10_DDI_BIND_PRESENT en el miembro BindFlags de.

Además, para admitir la presentación estéreo, la funciónBltDXGI dedebe permitir cualquier valor para el DstSubresource y SrcSubresource miembros de la estructura DXGI_DDI_ARG_BLT que se encuentran dentro del intervalo de los recursos de origen y destino.

pBltData

[in] Puntero a una estructura de DXGI_DDI_ARG_BLT que describe los parámetros de una transferencia de bloques de bits (bitblt).

Requisitos

Requisito Valor
cliente mínimo admitido Windows Vista
encabezado de dxgiddi.h (incluya D3d10umddi.h)

Consulte también

BltDXGI de

CreateDevice(D3D10)

D3D10DDIARG_CREATEDEVICE

DXGI_DDI_BASE_ARGS

GetGammaCapsDXGI

PresentDXGI

QueryResourceResidencyDXGI

RotateResourceIdentitiesDXGI

SetDisplayModeDXGI

SetResourcePriorityDXGI