Compartilhar via


estrutura DXGKARG_PATCH (d3dkmddi.h)

A estrutura DXGKARG_PATCH descreve um buffer de DMA (acesso direto à memória) que requer aplicação de patch (ou seja, requer a atribuição de endereços físicos).

Sintaxe

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;

Membros

[in] hDevice

Se um driver não estiver ciente de vários mecanismos (ou seja, o driver não dá suporte à criação de contexto), um identificador para o dispositivo de exibição (contexto gráfico) do qual a solicitação de envio se originou. Um identificador de dispositivo é fornecido à função DxgkDdiPatch do driver na união que DXGKARG_PATCH contém.

Para algumas operações de paginação, hDevice é NULL (por exemplo, operações de paginação que removem o conteúdo de todo o buffer de quadros durante o gerenciamento de energia). As operações de paginação são indicadas pelo sinalizador de campo de bit paginação no membro Flags .

[in] hContext

Se o driver estiver ciente de vários mecanismos (ou seja, o driver dá suporte à criação de contexto), um identificador para o contexto do dispositivo do qual a solicitação de envio se originou. Um identificador de contexto é fornecido à função DxgkDdiPatch do driver na união que DXGKARG_PATCH contém.

Para algumas operações de paginação, hContext é NULL (por exemplo, operações de paginação que removem o conteúdo de todo o buffer de quadros durante o gerenciamento de energia). As operações de paginação são indicadas pelo sinalizador de campo de bit paginação no membro Flags .

[in] DmaBufferSegmentId

O identificador do segmento de memória no qual o buffer de DMA foi paginado.

O identificador poderá ser zero se o driver indicado não mapear o buffer de DMA para o segmento definindo o membro DmaBufferSegmentSet da estrutura DXGK_CONTEXTINFO como 0 em uma chamada para a função DxgkDdiCreateContext do driver. Se DmaBufferSegmentId for zero, o buffer DMA será alocado como um bloco contíguo de memória do sistema.

[in] DmaBufferPhysicalAddress

Um tipo de dados PHYSICAL_ADDRESS (que é definido como LARGE_INTEGER) que indica o endereço físico em que o buffer de DMA foi paginado.

Se DmaBufferSegmentId for zero, DmaBufferPhysicalAddress será o endereço físico na memória do sistema em que o buffer de DMA está localizado.

Se DmaBufferSegmentId for diferente de zero, DmaBufferPhysicalAddress será o endereço físico do segmento para o buffer DMA (ou seja, DXGK_SEGMENTDESCRIPTOR. BaseAddress + DmaBuffer.SegmentOffset).

Observe que DmaBufferPhysicalAddress sempre se refere ao início do buffer de DMA, embora o driver possa ser necessário para corrigir ou enviar uma seção do buffer DMA que não inclui o início do buffer DMA (ou seja, se o membro DmaBufferSubmissionStartOffset não for zero).

[in] pDmaBuffer

Um ponteiro para o início do buffer de DMA (ou seja, o endereço virtual do início do buffer de DMA).

[in] DmaBufferSize

O tamanho, em bytes, do buffer de DMA para o qual pDmaBuffer aponta.

Observe que DmaBufferSize representa todo o comprimento do buffer de DMA; no entanto, a solicitação para corrigir ou enviar pode se referir apenas a uma parte do buffer de DMA.

[in] DmaBufferSubmissionStartOffset

O deslocamento, em bytes, desde o início do buffer de DMA que pDmaBuffer especifica para o início da parte do buffer de DMA que requer aplicação de patch ou envio. O deslocamento recebido no momento do patch corresponde ao deslocamento recebido no momento do envio.

[in] DmaBufferSubmissionEndOffset

O deslocamento, em bytes, desde o início do buffer de DMA que pDmaBuffer especifica até o final da parte do buffer de DMA que requer aplicação de patch ou envio. O deslocamento recebido no momento do patch corresponde ao deslocamento recebido no momento do envio.

[in] pDmaBufferPrivateData

Um ponteiro para os dados privados residentes no driver associados ao buffer de DMA para o qual o pDmaBuffer aponta.

Para operações de paginação, um único buffer de paginação é usado para vários envios independentes. Nesse cenário, o driver pode indicar, retornando o ponteiro de dados de driver privado apropriado em uma chamada para sua função DxgkDdiBuildPagingBuffer , para ter um único intervalo de dados privados de driver para todos os envios ou um para cada envio.

[in] DmaBufferPrivateDataSize

O tamanho, em bytes, dos dados do driver privado em pDmaBufferPrivateData.

Observe que DmaBufferPrivateDataSize representa todo o comprimento do buffer de dados do driver privado; no entanto, a parte associada ao envio atual pode ser menor.

[in] DmaBufferPrivateDataSubmissionStartOffset

O deslocamento, em bytes, desde o início dos dados privados do buffer de DMA que pDmaBufferPrivateData especifica para o início da parte dos dados privados associados ao envio atual. DmaBufferPrivateDataSubmissionStartOffset é sempre zero para uma solicitação não paga.

[in] DmaBufferPrivateDataSubmissionEndOffset

O deslocamento, em bytes, desde o início do buffer de dados privados do DMA que pDmaBufferPrivateData especifica até o final da parte dos dados privados associados ao envio atual.

[in] pAllocationList

Um ponteiro para uma matriz de estruturas DXGK_ALLOCATIONLIST para a lista de alocações associadas ao buffer de DMA para o qual pDmaBuffer aponta.

Para operações de paginação, pAllocationList é NULL porque buffers de paginação não estão associados a listas de alocação.

[in] AllocationListSize

O número de elementos na matriz que pAllocationList especifica.

Observe que AllocationListSize representa o tamanho total da lista de alocação; no entanto, a parte da lista de alocação associada ao envio atual pode ser menor.

Observe que para operações de paginação AllocationListSize é zero porque os buffers de paginação não estão associados a listas de alocação.

[in] pPatchLocationList

Um ponteiro para uma matriz de estruturas D3DDDI_PATCHLOCATIONLIST para a lista de locais de patch associados ao buffer de DMA para o qual pDmaBuffer aponta.

Observe que a matriz pode começar com um elemento que está antes do intervalo usado para corrigir o buffer de DMA.

Para operações de paginação, pPatchLocationList é NULL porque os buffers de paginação não estão associados a listas de locais de patch.

[in] PatchLocationListSize

O número de elementos na matriz que pPatchLocationList especifica.

Observe que PatchLocationListSize representa o tamanho total da lista de locais de patch; no entanto, o intervalo que o driver deve processar normalmente é menor.

Para operações de paginação, PatchLocationListSize é zero porque os buffers de paginação não estão associados a listas de locais de patch.

[in] PatchLocationListSubmissionStart

O índice do primeiro elemento na lista de locais de patch que pPatchLocationList especifica que deve ser processado.

Para operações de paginação, PatchLocationListSubmissionStart é zero.

[in] PatchLocationListSubmissionLength

O número de elementos na lista de locais de patch que pPatchLocationList especifica que devem ser processados.

Para operações de paginação, PatchLocationListSubmissionLength é zero.

[in] SubmissionFenceId

Um identificador exclusivo que o driver pode gravar no comando fence no final do buffer de DMA. Para obter mais informações sobre esse tipo de identificador, consulte Fornecendo identificadores de cerca.

[in] Flags

Uma estrutura DXGK_PATCHFLAGS que identifica informações sobre o buffer de AMD que exige a aplicação de patch.

[in] EngineOrdinal

Reservado para uso futuro.

Comentários

O driver de miniporto de exibição retorna uma matriz no membro pAllocationList de uma estrutura DXGKARG_PRESENT ou DXGKARG_RENDER de sua função DxgkDdiPresent ou DxgkDdiRender depois de converter o buffer de comando em um buffer de DMA (acesso direto à memória). O gerenciador de memória de vídeo atribui endereços físicos aos membros PhysicalAddress das estruturasDXGK_ALLOCATIONLIST na matriz e passa essa matriz para a função DxgkDdiPatch do driver. Os patches DxgkDdiPatch são colocados no buffer DMA com esses endereços físicos.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Cabeçalho d3dkmddi.h (inclua D3dkmddi.h)

Confira também

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender