Compartir a través de


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)

Consulte también

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender