структура DXGKARG_PATCH (d3dkmddi.h)
Структура DXGKARG_PATCH описывает буфер прямого доступа к памяти (DMA), который требует установки исправлений (т. е. требует назначения физических адресов).
Синтаксис
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;
Члены
[in] hDevice
Если драйвер не поддерживает несколько обработчиков (то есть драйвер не поддерживает создание контекста), дескриптор устройства отображения (графического контекста), от которого поступил запрос на отправку. Дескриптор устройства предоставляется функции DxgkDdiPatch драйвера в объединении, которое содержит DXGKARG_PATCH.
Для некоторых операций разбиения по страницам hDevice имеет значение NULL (например, операции разбиения по страницам, которые вытесляют содержимое всего буфера кадров во время управления питанием). Операции разбиения по страницам указываются флагом битового поля разбиения по страницам в элементе Flags .
[in] hContext
Если драйвер поддерживает несколько подсистем (то есть драйвер поддерживает создание контекста), дескриптор контекста устройства, из которого был получен запрос на отправку. Дескриптор контекста предоставляется функции DxgkDdiPatch драйвера в объединении, которое содержит DXGKARG_PATCH.
Для некоторых операций разбиения по страницам hContext имеет значение NULL (например, операции разбиения по страницам, которые вытесляют содержимое всего буфера кадров во время управления питанием). Операции разбиения по страницам указываются флагом битового поля разбиения по страницам в элементе Flags .
[in] DmaBufferSegmentId
Идентификатор сегмента памяти, в который был помещен буфер DMA.
Идентификатор может быть равен нулю, если драйвер указал, что буфер DMA не сопоставляется с сегментом, задав членУ DmaBufferSegmentSet структуры DXGK_CONTEXTINFO значение 0 в вызове функции DxgkDdiCreateContext драйвера. Если значение DmaBufferSegmentId равно нулю, буфер DMA был выделен как непрерывный блок системной памяти.
[in] DmaBufferPhysicalAddress
Тип данных PHYSICAL_ADDRESS (который определяется как LARGE_INTEGER), указывающий физический адрес, на который был помещен буфер DMA.
Если значение DmaBufferSegmentId равно нулю, DmaBufferPhysicalAddress — это физический адрес в системной памяти, где находится буфер DMA.
Если значение DmaBufferSegmentId не равно нулю, DmaBufferPhysicalAddress — физический адрес сегмента для буфера DMA (то есть DXGK_SEGMENTDESCRIPTOR. BaseAddress + DmaBuffer.SegmentOffset).
Обратите внимание, что DmaBufferPhysicalAddress всегда ссылается на начало буфера DMA, хотя драйвер может потребовать исправления или отправки раздела буфера DMA, не включающего начало буфера DMA (то есть, если элемент DmaBufferSubmissionStartOffset не равен нулю).
[in] pDmaBuffer
Указатель на начало буфера DMA (то есть виртуальный адрес начала буфера DMA).
[in] DmaBufferSize
Размер (в байтах) буфера DMA, на который указывает pDmaBuffer .
Обратите внимание, что DmaBufferSize представляет всю длину буфера DMA. Однако запрос на исправление или отправку может ссылаться только на часть буфера DMA.
[in] DmaBufferSubmissionStartOffset
Смещение (в байтах) от начала буфера DMA, указанного pDmaBuffer , до начала части буфера DMA, требующей исправления или отправки. Смещение, полученное во время исправления, соответствует смещению, полученному во время отправки.
[in] DmaBufferSubmissionEndOffset
Смещение (в байтах) от начала буфера DMA, указанного pDmaBuffer , до конца части буфера DMA, требующей исправления или отправки. Смещение, полученное во время исправления, соответствует смещению, полученному во время отправки.
[in] pDmaBufferPrivateData
Указатель на частные данные, находящиеся в драйвере, связанные с буфером DMA, на который указывает pDmaBuffer .
Для операций разбиения по страницам для нескольких независимых отправок используется один буфер разбиения по страницам. В этом сценарии драйвер может указать , возвращая соответствующий указатель на данные частного драйвера в вызове функции DxgkDdiBuildPagingBuffer , на наличие одного диапазона частных данных драйвера для всех отправок или одного для каждой отправки.
[in] DmaBufferPrivateDataSize
Размер данных частного драйвера в байтах в pDmaBufferPrivateData.
Обратите внимание, что DmaBufferPrivateDataSize представляет всю длину буфера данных частного драйвера. однако часть, связанная с текущей отправкой, может быть меньше.
[in] DmaBufferPrivateDataSubmissionStartOffset
Смещение в байтах от начала частных данных буфера DMA, указанного pDmaBufferPrivateData , до начала части частных данных, связанной с текущей отправкой. DmaBufferPrivateDataSubmissionStartOffset всегда равен нулю для неразборчивого запроса.
[in] DmaBufferPrivateDataSubmissionEndOffset
Смещение (в байтах) от начала частных данных буфера DMA, указанного pDmaBufferPrivateData , до конца части частных данных, связанной с текущей отправкой.
[in] pAllocationList
Указатель на массив DXGK_ALLOCATIONLIST структур для списка выделений, связанных с буфером DMA, на который указывает pDmaBuffer .
Для операций разбиения на страницы pAllocationList имеет значение NULL , так как буферы подкачки не связаны со списками выделения.
[in] AllocationListSize
Количество элементов в массиве, которое указывает pAllocationList .
Обратите внимание, что AllocationListSize представляет общий размер списка выделения. однако часть списка распределения, связанная с текущей отправкой, может быть меньше.
Обратите внимание, что для операций разбиения на страницы AllocationListSize равно нулю, так как буферы подкачки не связаны со списками выделения.
[in] pPatchLocationList
Указатель на массив D3DDDI_PATCHLOCATIONLIST структур для списка расположений исправлений, связанных с буфером DMA, на который указывает pDmaBuffer .
Обратите внимание, что массив может начинаться с элемента, который находится перед диапазоном, используемым для исправления буфера DMA.
Для операций разбиения по страницам pPatchLocationList имеет значение NULL , так как буферы подкачки не связаны со списками расположений исправлений.
[in] PatchLocationListSize
Количество элементов в массиве, которое указывает pPatchLocationList .
Обратите внимание, что PatchLocationListSize представляет общий размер списка расположений исправлений. Однако диапазон, который должен обработать драйвер, обычно меньше.
Для операций подкачки PatchLocationListSize равен нулю, так как буферы подкачки не связаны со списками расположений исправлений.
[in] PatchLocationListSubmissionStart
Индекс первого элемента в списке patch-location, который указывает pPatchLocationList , который необходимо обработать.
Для операций разбиения по страницам параметр PatchLocationListSubmissionStart равен нулю.
[in] PatchLocationListSubmissionLength
Количество элементов в списке расположений исправлений, которое указывает pPatchLocationList , которые должны быть обработаны.
Для операций разбиения по страницам patchLocationListSubmissionLength равно нулю.
[in] SubmissionFenceId
Уникальный идентификатор, который драйвер может записать в команду fence в конце буфера DMA. Дополнительные сведения об этом типе идентификаторов см. в разделе Предоставление идентификаторов ограждения.
[in] Flags
Структура DXGK_PATCHFLAGS , которая определяет сведения о буфере DMA, требующего исправления.
[in] EngineOrdinal
Зарезервировано для последующего использования.
Комментарии
Драйвер мини-порта отображения возвращает массив в элементе pAllocationListструктуры DXGKARG_PRESENT или DXGKARG_RENDER из функции DxgkDdiPresent или DxgkDdiRender после преобразования буфера команд в буфер прямого доступа к памяти (DMA). Диспетчер видеопаметь назначает физические адреса членам PhysicalAddressDXGK_ALLOCATIONLIST структур в массиве и передает этот массив в функцию DxgkDdiPatch драйвера. DxgkDdiPatch устанавливает исправления в буфере DMA с этими физическими адресами.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista |
Верхняя часть | d3dkmddi.h (включая D3dkmddi.h) |