структура 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)

См. также раздел

D3DDDI_PATCHLOCATIONLIST

DXGKARG_PRESENT

DXGKARG_RENDER

DXGK_ALLOCATIONLIST

DXGK_CONTEXTINFO

DXGK_PATCHFLAGS

DxgkDdiBuildPagingBuffer

DxgkDdiCreateContext

DxgkDdiPatch

DxgkDdiPresent

DxgkDdiRender