estructura DXGKARG_PATCH (d3dkmddi.h)
La estructura DXGKARG_PATCH describe un búfer de acceso directo a memoria (DMA) que requiere aplicación de revisiones (es decir, requiere la asignación de direcciones físicas).
Sintaxis
typedef struct _DXGKARG_PATCH {
union {
[in] HANDLE hDevice;
[in] HANDLE hContext;
};
[in] UINT DmaBufferSegmentId;
[in] PHYSICAL_ADDRESS DmaBufferPhysicalAddress;
[in] VOID *pDmaBuffer;
[in] UINT DmaBufferSize;
[in] UINT DmaBufferSubmissionStartOffset;
[in] UINT DmaBufferSubmissionEndOffset;
[in] VOID *pDmaBufferPrivateData;
[in] UINT DmaBufferPrivateDataSize;
[in] UINT DmaBufferPrivateDataSubmissionStartOffset;
[in] UINT DmaBufferPrivateDataSubmissionEndOffset;
[in] const DXGK_ALLOCATIONLIST *pAllocationList;
[in] UINT AllocationListSize;
[in] const D3DDDI_PATCHLOCATIONLIST *pPatchLocationList;
[in] UINT PatchLocationListSize;
[in] UINT PatchLocationListSubmissionStart;
[in] UINT PatchLocationListSubmissionLength;
[in] UINT SubmissionFenceId;
[in] DXGK_PATCHFLAGS Flags;
[in] UINT EngineOrdinal;
} DXGKARG_PATCH;
Miembros
[in] hDevice
Si un controlador no es compatible con varios motores (es decir, el controlador no admite la creación de contexto), un identificador para el dispositivo de visualización (contexto de gráficos) desde el que se originó la solicitud de envío. Se proporciona un identificador de dispositivo a la función DxgkDdiPatch del controlador en la unión que DXGKARG_PATCH contiene.
Para algunas operaciones de paginación, hDevice es NULL (por ejemplo, operaciones de paginación que expulsan el contenido de todo el búfer de fotogramas durante la administración de energía). Las operaciones de paginación se indican mediante la marca de campo de bits de paginación en el miembro Flags .
[in] hContext
Si el controlador es compatible con varios motores (es decir, el controlador admite la creación de contexto), un identificador para el contexto del dispositivo desde el que se originó la solicitud de envío. Se proporciona un identificador de contexto a la función DxgkDdiPatch del controlador en la unión que DXGKARG_PATCH contiene.
Para algunas operaciones de paginación, hContext es NULL (por ejemplo, operaciones de paginación que expulsan el contenido de todo el búfer de fotogramas durante la administración de energía). Las operaciones de paginación se indican mediante la marca de campo de bits de paginación en el miembro Flags .
[in] DmaBufferSegmentId
Identificador del segmento de memoria en el que se pagina el búfer DMA.
El identificador puede ser cero si el controlador indicó no asignar el búfer DMA al segmento estableciendo el miembro DmaBufferSegmentSet de la estructura DXGK_CONTEXTINFO en 0 en una llamada a la función DxgkDdiCreateContext del controlador. Si DmaBufferSegmentId es cero, el búfer DMA se asignó como un bloque contiguo de memoria del sistema.
[in] DmaBufferPhysicalAddress
Un tipo de datos PHYSICAL_ADDRESS (que se define como LARGE_INTEGER) que indica la dirección física en la que se paginaba el búfer DMA.
Si DmaBufferSegmentId es cero, DmaBufferPhysicalAddress es la dirección física en la memoria del sistema donde se encuentra el búfer DMA.
Si DmaBufferSegmentId es distinto de cero, DmaBufferPhysicalAddress es la dirección física del segmento del búfer DMA (es decir, DXGK_SEGMENTDESCRIPTOR. BaseAddress + DmaBuffer.SegmentOffset).
Tenga en cuenta que DmaBufferPhysicalAddress siempre hace referencia al principio del búfer DMA aunque el controlador pueda ser necesario para aplicar revisiones o enviar una sección del búfer DMA que no incluye el principio del búfer DMA (es decir, si el miembro DmaBufferSubmissionStartOffset es distinto de cero).
[in] pDmaBuffer
Puntero al inicio del búfer DMA (es decir, la dirección virtual del principio del búfer DMA).
[in] DmaBufferSize
Tamaño, en bytes, del búfer DMA al que apunta pDmaBuffer .
Tenga en cuenta que DmaBufferSize representa toda la longitud del búfer DMA; sin embargo, la solicitud para aplicar revisiones o enviar podría hacer referencia solo a una parte del búfer DMA.
[in] DmaBufferSubmissionStartOffset
Desplazamiento, en bytes, desde el principio del búfer DMA que pDmaBuffer especifica al inicio de la parte del búfer DMA que requiere aplicación de revisiones o envío. El desplazamiento que se recibe en el momento de la revisión coincide con el desplazamiento que se recibe en el momento del envío.
[in] DmaBufferSubmissionEndOffset
Desplazamiento, en bytes, desde el principio del búfer DMA que pDmaBuffer especifica al final de la parte del búfer DMA que requiere la aplicación de revisiones o el envío. El desplazamiento que se recibe en el momento de la revisión coincide con el desplazamiento que se recibe en el momento del envío.
[in] pDmaBufferPrivateData
Puntero a los datos privados residentes en el controlador que está asociado al búfer DMA al que apunta pDmaBuffer .
Para las operaciones de paginación, se usa un único búfer de paginación para varios envíos independientes. En ese escenario, el controlador puede indicar (devolviendo el puntero de datos del controlador privado adecuado en una llamada a su función DxgkDdiBuildPagingBuffer ) para tener un único intervalo de datos privado del controlador para todos los envíos o uno para cada envío.
[in] DmaBufferPrivateDataSize
Tamaño, en bytes, de los datos del controlador privado en pDmaBufferPrivateData.
Tenga en cuenta que DmaBufferPrivateDataSize representa toda la longitud del búfer de datos del controlador privado; sin embargo, la parte asociada al envío actual podría ser menor.
[in] DmaBufferPrivateDataSubmissionStartOffset
Desplazamiento, en bytes, desde el principio de los datos privados del búfer DMA que pDmaBufferPrivateData especifica para el inicio de la parte de los datos privados asociados al envío actual. DmaBufferPrivateDataSubmissionStartOffset siempre es cero para una solicitud que no sea de asignación.
[in] DmaBufferPrivateDataSubmissionEndOffset
Desplazamiento, en bytes, desde el principio de los datos privados del búfer DMA que pDmaBufferPrivateData especifica al final de la parte de los datos privados asociados al envío actual.
[in] pAllocationList
Puntero a una matriz de estructuras de DXGK_ALLOCATIONLIST para la lista de asignaciones asociadas al búfer DMA al que apunta pDmaBuffer .
Para las operaciones de paginación, pAllocationList es NULL porque los búferes de paginación no están asociados a listas de asignación.
[in] AllocationListSize
Número de elementos de la matriz que pAllocationList especifica.
Tenga en cuenta que AllocationListSize representa el tamaño total de la lista de asignación; sin embargo, la parte de la lista de asignación asociada al envío actual podría ser menor.
Tenga en cuenta que para las operaciones de paginación AllocationListSize es cero porque los búferes de paginación no están asociados a listas de asignación.
[in] pPatchLocationList
Puntero a una matriz de estructuras de D3DDDI_PATCHLOCATIONLIST para la lista de ubicaciones de revisión asociadas al búfer DMA al que apunta pDmaBuffer .
Tenga en cuenta que la matriz puede comenzar con un elemento que se encuentra antes del intervalo que se usa para aplicar revisiones al búfer DMA.
Para las operaciones de paginación, pPatchLocationList es NULL porque los búferes de paginación no están asociados a las listas de ubicación de revisión.
[in] PatchLocationListSize
Número de elementos de la matriz que pPatchLocationList especifica.
Tenga en cuenta que PatchLocationListSize representa el tamaño total de la lista de ubicación de revisión; sin embargo, el intervalo que el controlador debe procesar suele ser menor.
Para las operaciones de paginación, PatchLocationListSize es cero porque los búferes de paginación no están asociados a las listas de ubicación de revisión.
[in] PatchLocationListSubmissionStart
Índice del primer elemento de la lista patch-location que pPatchLocationList especifica que se debe procesar.
Para las operaciones de paginación, PatchLocationListSubmissionStart es cero.
[in] PatchLocationListSubmissionLength
El número de elementos de la lista de ubicación de revisión que pPatchLocationList especifica que se debe procesar.
Para las operaciones de paginación, PatchLocationListSubmissionLength es cero.
[in] SubmissionFenceId
Identificador único que el controlador puede escribir en el comando de barrera al final del búfer DMA. Para obtener más información sobre este tipo de identificador, vea Suministro de identificadores de barrera.
[in] Flags
Estructura DXGK_PATCHFLAGS que identifica información sobre el búfer DMA que requiere aplicación de revisiones.
[in] EngineOrdinal
Reservado para uso futuro.
Comentarios
El controlador de minipuerto de pantalla devuelve una matriz en el miembro pAllocationList de un DXGKARG_PRESENT o DXGKARG_RENDER estructura de su función DxgkDdiPresent o DxgkDdiRender después de traducir el búfer de comandos a un búfer de acceso directo a memoria (DMA). El administrador de memoria de vídeo asigna direcciones físicas a los miembros PhysicalAddress de las estructuras de DXGK_ALLOCATIONLIST de la matriz y pasa esta matriz a la función DxgkDdiPatch del controlador. Las revisiones dxgkDdiPatch se colocan en el búfer DMA con estas direcciones físicas.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Encabezado | d3dkmddi.h (incluya D3dkmddi.h) |