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) |