структура DXGKARG_BUILDPAGINGBUFFER (d3dkmddi.h)
Структура DXGKARG_BUILDPAGINGBUFFER описывает параметры обратного вызова DxgkDdiBuildPagingBuffer** , который создает буфер подкачки для использования в операции передачи памяти.
Синтаксис
typedef struct _DXGKARG_BUILDPAGINGBUFFER {
VOID *pDmaBuffer;
UINT DmaSize;
VOID *pDmaBufferPrivateData;
UINT DmaBufferPrivateDataSize;
DXGK_BUILDPAGINGBUFFER_OPERATION Operation;
UINT MultipassOffset;
union {
struct {
HANDLE hAllocation;
UINT TransferOffset;
SIZE_T TransferSize;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Source;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Destination;
DXGK_TRANSFERFLAGS Flags;
UINT MdlOffset;
} Transfer;
struct {
HANDLE hAllocation;
SIZE_T FillSize;
UINT FillPattern;
struct {
UINT SegmentId;
LARGE_INTEGER SegmentAddress;
} Destination;
} Fill;
struct {
HANDLE hAllocation;
DXGK_DISCARDCONTENTFLAGS Flags;
UINT SegmentId;
PHYSICAL_ADDRESS SegmentAddress;
} DiscardContent;
struct {
UINT SegmentId;
PHYSICAL_ADDRESS PhysicalAddress;
} ReadPhysical;
struct {
UINT SegmentId;
PHYSICAL_ADDRESS PhysicalAddress;
} WritePhysical;
struct {
HANDLE hDevice;
HANDLE hAllocation;
UINT SegmentId;
SIZE_T OffsetInPages;
SIZE_T NumberOfPages;
PMDL pMdl;
DXGK_MAPAPERTUREFLAGS Flags;
ULONG MdlOffset;
} MapApertureSegment;
struct {
HANDLE hDevice;
HANDLE hAllocation;
UINT SegmentId;
SIZE_T OffsetInPages;
SIZE_T NumberOfPages;
PHYSICAL_ADDRESS DummyPage;
} UnmapApertureSegment;
struct {
HANDLE hAllocation;
UINT TransferOffset;
SIZE_T TransferSize;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Source;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
} Destination;
DXGK_TRANSFERFLAGS Flags;
UINT SwizzlingRangeId;
UINT SwizzlingRangeData;
} SpecialLockTransfer;
struct {
HANDLE hAllocation;
struct {
UINT SegmentId;
union {
LARGE_INTEGER SegmentAddress;
MDL *pMdl;
};
PVOID VirtualAddress;
D3DGPU_VIRTUAL_ADDRESS GpuVirtualAddress;
} Destination;
} InitContextResource;
DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL TransferVirtual;
DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL FillVirtual;
DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE UpdatePageTable;
DXGK_BUILDPAGINGBUFFER_FLUSHTLB FlushTlb;
DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES CopyPageTableEntries;
DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION UpdateContextAllocation;
DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY NotifyResidency;
DXGK_BUILDPAGINGBUFFER_SIGNALMONITOREDFENCE SignalMonitoredFence;
struct {
HANDLE hDevice;
HANDLE hAllocation;
UINT SegmentId;
SIZE_T OffsetInPages;
SIZE_T NumberOfPages;
DXGK_ADL Adl;
DXGK_MAPAPERTUREFLAGS Flags;
ULONG AdlOffset;
PVOID CpuVisibleAddress;
} MapApertureSegment2;
DXGK_BUILDPAGINGBUFFER_NOTIFY_FENCE_RESIDENCY NotifyFenceResidency;
DXGK_BUILDPAGINGBUFFER_MAPMMU MmapMmu;
DXGK_BUILDPAGINGBUFFER_UNMAPMMU UnmapMmu;
DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY2 NotifyResidency2;
DXGK_BUILDPAGINGBUFFER_NOTIFYALLOC NotifyAllocation;
struct {
UINT Reserved[64];
} Reserved;
};
HANDLE hSystemContext;
D3DGPU_VIRTUAL_ADDRESS DmaBufferGpuVirtualAddress;
UINT DmaBufferWriteOffset;
} DXGKARG_BUILDPAGINGBUFFER;
Члены
pDmaBuffer
[вход/выход] Виртуальный адрес первого доступного байта в буфере подкачки. При первом вызове драйвера с новым буфером подкачки этот виртуальный адрес выравнивается по 4 КБ. Драйвер плотно упаковывает операции в буфере подкачки, пока буфер подкачки не будет заполнен, а затем использует новый буфер подкачки. Таким образом, если графическому процессору (GPU) требуется определенное выравнивание для отправки буфера подкачки, драйвер должен обеспечить это выравнивание путем заполнения операций, которые он записывает в буфер подкачки. Перед возвратом функции DxgkDdiBuildPagingBuffer драйвер должен обновить pDmaBuffer , указав последний байт, записанный в буфер подкачки.
DmaSize
[вход/выход] Размер (в байтах) буфера подкачки, который указывает pDmaBuffer .
pDmaBufferPrivateData
[вход/выход] Указатель на структуру частных данных, расположенную в драйвере, связанную с буфером прямого доступа к памяти (DMA) (т. е. буфером подкачки), который указывает pDmaBuffer .
DmaBufferPrivateDataSize
[вход/выход] Количество байтов, оставшихся в структуре частных данных, на которые указывает pDmaBufferPrivateData для текущей операции.
Operation
[in] DXGK_BUILDPAGINGBUFFER_OPERATION типизированное значение, указывающее тип выполняемой операции с памятью.
MultipassOffset
[вход/выход] Значение UINT, указывающее ход выполнения операции разбиения по страницам, если требуется несколько буферов разбиения по страницам. Драйвер задает это значение, чтобы указать разделение на несколько буферов разбиения по страницам для нескольких операций передачи. Например, драйвер может хранить номер страницы, который последний раз был передан для передачи на основе страниц.
Transfer
[in] Структура, описывающая операцию передачи.
Transfer.hAllocation
[in] Дескриптор выделения, возвращенного ранее функцией DxgkDdiCreateAllocation драйвера в элементе hAllocationструктуры DXGK_ALLOCATIONINFO, которая является частью элемента pAllocationInfoструктуры DXGKARG_CREATEALLOCATION. Дескриптор выделения указывает на буфер, содержащий частные данные драйвера для передачи.
Transfer.TransferOffset
[in] Смещение в байтах первой страницы в перемещенном выделении. Это смещение применяется только к расположению, которое описывает расположение сегмента. Это смещение не применяется к описанию MDL диапазона памяти. Если драйверу требуется несколько буферов подкачки для завершения передачи (т. е. драйвер возвращает STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER из своей функции DxgkDdiBuildPagingBuffer ), Функция TransferOffset одинакова для каждого вызова DxgkDdiBuildPagingBuffer для этой передачи.
Transfer.TransferSize
[in] Размер передаваемых сведений о памяти в байтах.
Transfer.Source
[in] Структура, описывающая выделение исходного кода. Эта структура содержит элемент SegmentId и объединение, которое содержит смещение в сегмент исходного выделения (SegmentAddress) или указатель на MDL для источника (pMdl).
Transfer.Source.SegmentId
[in] Идентификатор сегмента в исходном выделении или нуль, если исходное выделение описывается членом pMdl объединения, которое содержит источник .
Transfer.Source.SegmentAddress
[in] Адрес исходного сегмента, если элемент SegmentIdобъекта Source не равен нулю. Подсистема ядра графики DirectX вычисляет адрес сегмента как сумму смещения сегмента и базовый адрес сегмента: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
Transfer.Source.pMdl
[in] Указатель на буфер, содержащий структуру MDL , описывающую страницы системной памяти для источника, если элемент SegmentIdисточника равен нулю.
Transfer.Destination
[in] Структура, описывающая целевое выделение. Эта структура содержит элемент SegmentId и объединение, содержащее смещение в сегмент целевого выделения (SegmentAddress) или указатель на MDL для назначения (pMdl).
Transfer.Destination.SegmentId
[in] Идентификатор сегмента в целевом выделении или нуль, если целевое выделение описывается членом pMdl объединения, которое содержит Назначение .
Transfer.Destination.SegmentAddress
[in] Адрес сегмента назначения, если член SegmentIdобъекта Destination не является нулевым. Подсистема ядра графики DirectX вычисляет адрес сегмента как сумму смещения сегмента и базовый адрес сегмента: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
Transfer.Destination.pMdl
[in] Указатель на буфер, содержащий структуру MDL , описывающую страницы системной памяти для назначения, если элемент SegmentIdобъекта Destination равен нулю.
Transfer.Flags
[in] Структура DXGK_TRANSFERFLAGS , определяющая в флагах битовых полей тип выполняемой специальной операции блокировки и передачи.
Transfer.MdlOffset
[in] Смещение на страницах системной памяти в структуре MDL , на которую указывает элемент pMdl , на первую страницу системной памяти для текущей операции. Драйвер может получить физический адрес первой страницы системной памяти, вызвав функцию [MmGetMdlPfnArray](/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray, как показано ниже.
MmGetMdlPfnArray(pMdl)[MdlOffset];
Fill
[in] Структура, описывающая операцию заполнения.
Fill.hAllocation
[in] Дескриптор выделения, содержащего содержимое для заполнения.
Fill.FillSize
[in] Размер в байтах информации о памяти для заполнения.
Fill.FillPattern
[in] Шаблон для заполнения назначения. Диспетчер видеопаметь использует эти сведения для инициализации видеопамять по определенному шаблону при первом выделении без содержимого. В этом случае не существует источника для запроса заполнения— существует только назначение.
Fill.Destination
[in] Структура, описывающая целевое выделение для операции заполнения.
Fill.Destination.SegmentId
[in] Идентификатор сегмента в целевом выделении.
Fill.Destination.SegmentAddress
[in] Адрес целевого сегмента. Подсистема ядра графики DirectX вычисляет адрес сегмента как сумму смещения сегмента и базовый адрес сегмента: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
DiscardContent
[in] Структура, описывающая операцию удаления содержимого.
DiscardContent.hAllocation
[in] Дескриптор выделения, содержащий отбрасываемое содержимое.
DiscardContent.Flags
[in] Структура DXGK_DISCARDCONTENTFLAGS , определяющая в флагах битового поля тип выполняемой операции удаления содержимого.
DiscardContent.SegmentId
[in] Идентификатор сегмента в выделении для отмены содержимого.
DiscardContent.SegmentAddress
[in] Тип данных PHYSICAL_ADDRESS (который определяется как LARGE_INTEGER), указывающий адрес сегмента. Подсистема ядра графики DirectX вычисляет адрес сегмента как сумму смещения сегмента и базовый адрес сегмента: SegmentAddress = SegmentOffset + Segment.BaseAddr
. Это расположение, из которого удаляется содержимое.
ReadPhysical
[in] Структура, описывающая физическую операцию чтения.
ReadPhysical.SegmentId
[in] Идентификатор сегмента, из который считываются данные.
ReadPhysical.PhysicalAddress
[in] Тип данных PHYSICAL_ADDRESS (который определяется как LARGE_INTEGER), указывающий физический адрес в сегменте, заданном SegmentId , где считываются данные.
WritePhysical
[in] Структура, описывающая физическую операцию записи.
WritePhysical.SegmentId
[in] Идентификатор сегмента, в который записываются данные.
WritePhysical.PhysicalAddress
[in] Тип данных PHYSICAL_ADDRESS (который определяется как LARGE_INTEGER), указывающий физический адрес в сегменте, заданном SegmentId , где записываются данные.
MapApertureSegment
[in] Структура, описывающая операцию map-aperture-segment с использованием MDL.
MapApertureSegment.hDevice
[in] Дескриптор устройства, которому принадлежит выделение, указанное hAllocation , сопоставляется с сегментом диафрагмы, который указывает SegmentId .
Для общего выделения в hDevice устанавливается устройство, которое диспетчер видеопамяти определил как владельца выделения.
hDevice имеет значение NULL для основного выделения.
MapApertureSegment.hAllocation
[in] Дескриптор выделения, сопоставленный с сегментом диафрагмы, который указывает SegmentId .
hAllocation имеет значение NULL , если буфер DMA сопоставляется с сегментом диафрагмы, так как буферы DMA не создаются явным образом драйвером.
MapApertureSegment.SegmentId
[in] Идентификатор настраиваемого сегмента диафрагмы.
MapApertureSegment.OffsetInPages
[in] Смещение в страницах от начала сегмента до первых страниц для сопоставления.
MapApertureSegment.NumberOfPages
[in] Количество страниц для сопоставления.
MapApertureSegment.pMdl
[in] Указатель на буфер, содержащий структуру MDL , которая описывает страницы физической системной памяти для сопоставления с сегментом диафрагмы.
MapApertureSegment.Flags
[in] Структура DXGK_MAPAPERTUREFLAGS , определяющая в флагах битового поля тип выполняемой операции map-aperture-segment.
MapApertureSegment.MdlOffset
[in] Смещение на страницах системной памяти в структуре MDL , на которую указывает элемент pMdl , на первую страницу системной памяти для текущей операции. Драйвер может получить физический адрес первой страницы системной памяти, вызвав функцию [MmGetMdlPfnArray](/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray, как показано ниже.
MmGetMdlPfnArray(pMdl)[MdlOffset];
UnmapApertureSegment
[in] Структура, описывающая операцию unmap-aperture-segment.
UnmapApertureSegment.hDevice
[in] Дескриптор устройства, которому принадлежит выделение, указанное hAllocation , которое не сопоставлено с сегментом диафрагмы, заданного SegmentId .
Для общего выделения в hDevice устанавливается устройство, которое диспетчер видеопамяти определил как владельца выделения.
hDevice имеет значение NULL для основного выделения.
UnmapApertureSegment.hAllocation
[in] Дескриптор выделения, который не сопоставлен с сегментом диафрагмы, заданного SegmentId .
hAllocation имеет значение NULL , если буфер DMA не сопоставлен с сегментом диафрагмы, так как буферы DMA не создаются явным образом драйвером.
UnmapApertureSegment.SegmentId
[in] Идентификатор настраиваемого сегмента диафрагмы.
UnmapApertureSegment.OffsetInPages
[in] Смещение в страницах от начала сегмента до первых страниц для отмены сопоставления.
UnmapApertureSegment.NumberOfPages
[in] Количество страниц для отмены сопоставления.
UnmapApertureSegment.DummyPage
[in] Тип данных PHYSICAL_ADDRESS (который определяется как LARGE_INTEGER), указывающий физический адрес страницы заполнителя, где драйвер должен сопоставить несопоставленный диапазон.
SpecialLockTransfer
[in] Структура, описывающая операцию специальной блокировки и передачи.
SpecialLockTransfer.hAllocation
[in] Дескриптор выделения, возвращенного ранее функцией DxgkDdiCreateAllocation драйвера в элементе hAllocationструктуры DXGK_ALLOCATIONINFO, которая является частью элемента pAllocationInfoструктуры DXGKARG_CREATEALLOCATION. Дескриптор выделения указывает на буфер, содержащий частные данные драйвера для специальной блокировки передачи.
SpecialLockTransfer.TransferOffset
[in] Смещение в байтах первой страницы в перемещенном выделении. Это смещение применяется только к расположению, которое описывает расположение сегмента. Это смещение не применяется к описанию MDL диапазона памяти. Если драйверу требуется несколько буферов подкачки для завершения передачи (т. е. драйвер возвращает STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER из своей функции DxgkDdiBuildPagingBuffer ), Функция TransferOffset одинакова для каждого вызова DxgkDdiBuildPagingBuffer для этой передачи.
SpecialLockTransfer.TransferSize
[in] Размер передаваемых сведений о памяти в байтах.
SpecialLockTransfer.Source
[in] Структура, описывающая выделение исходного кода. Эта структура содержит элемент SegmentId и объединение, которое содержит смещение в сегмент исходного выделения (SegmentAddress) или указатель на MDL для источника (pMdl).
SpecialLockTransfer.Source.SegmentId
[in] Идентификатор сегмента в исходном выделении или нуль, если исходное выделение описывается членом pMdl объединения, которое содержит источник .
SpecialLockTransfer.Source. (неименованное объединение)
[in] Объединение, содержащее смещение в сегменте выделения источника (SegmentAddress) или указатель на MDL для источника (pMdl).
SpecialLockTransfer.Source.SegmentAddress
[in] Адрес исходного сегмента, если элемент SegmentIdобъекта Source не равен нулю. Подсистема ядра графики DirectX вычисляет адрес сегмента как сумму смещения сегмента и базовый адрес сегмента: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
SpecialLockTransfer.Source.pMdl
[in] Указатель на буфер, содержащий структуру MDL , описывающую страницы системной памяти для источника, если элемент SegmentIdисточника равен нулю.
SpecialLockTransfer.Destination
[in] Структура, описывающая целевое выделение. Эта структура содержит элемент SegmentId и объединение, содержащее смещение в сегмент целевого выделения (SegmentAddress) или указатель на MDL для назначения (pMdl).
SpecialLockTransfer.Destination.SegmentId
[in] Идентификатор сегмента в целевом выделении или нуль, если целевое выделение описывается членом pMdl объединения, которое содержит Назначение .
SpecialLockTransfer.Destination. (неименованное объединение)
[in] Объединение, содержащее смещение в сегмент целевого выделения (SegmentAddress) или указатель на MDL для назначения (pMdl).
SpecialLockTransfer.Destination.SegmentAddress
[in] Адрес сегмента назначения, если член SegmentIdобъекта Destination не является нулевым. Подсистема ядра графики DirectX вычисляет адрес сегмента как сумму смещения сегмента и базовый адрес сегмента: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
SpecialLockTransfer.Destination.pMdl
[in] Указатель на буфер, содержащий структуру MDL , описывающую страницы системной памяти для назначения, если элемент SegmentIdобъекта Destination равен нулю.
SpecialLockTransfer.Flags
[in] Структура DXGK_TRANSFERFLAGS , определяющая в флагах битовых полей тип выполняемой специальной операции блокировки и передачи.
SpecialLockTransfer.SwizzlingRangeId
[in] Значение UINT, идентифицирующее диапазон поворота.
SpecialLockTransfer.SwizzlingRangeData
[in] Значение UINT, указывающее вращающиеся данные диапазона.
InitContextResource
[in] Структура, описывающая операцию инициализации контекста. Поддерживается начиная с Windows 8.
InitContextResource.hAllocation
[in] Дескриптор выделения контекста, созданного при вызове драйвера DxgkCbCreateContextAllocation. Дескриптор этого выделения возвращается в элементе hAllocationструктуры DXGKARGCB_CREATECONTEXTALLOCATION . Драйвер передает указатель на эту структуру в параметре ContextAllocation при вызове DxgkCbCreateContextAllocation.
InitContextResource.Destination
[in] Структура, описывающая целевое выделение контекста. Эта структура содержит элемент SegmentId и объединение, которое содержит смещение в сегмент выделения контекста назначения (SegmentAddress) или указатель на MDL для назначения (pMdl).
InitContextResource.Destination.SegmentId
[in] Идентификатор сегмента в целевом контекстном выделении или нуль, если выделение контекста назначения описывается членом pMdl объединения, содержащегося в destination .
InitContextResource.Destination. (неименованное объединение)
[in] Объединение, содержащее смещение в сегмент целевого контекста (SegmentAddress) или указатель на MDL для назначения (pMdl).
InitContextResource.Destination.SegmentAddress
[in] Адрес сегмента назначения, если член SegmentIdобъекта Destination не является нулевым. Подсистема ядра графики DirectX вычисляет адрес сегмента как сумму смещения сегмента и базовый адрес сегмента: SegmentAddress = SegmentOffset + Segment.BaseAddr
.
InitContextResource.Destination.pMdl
[in] Указатель на буфер, содержащий структуру MDL , описывающую страницы системной памяти для назначения, если элемент SegmentIdобъекта Destination равен нулю.
InitContextResource.Destination.VirtualAddress
[in] Виртуальный адрес выделения контекста назначения. Этот адрес действителен в течение времени существования выделения контекста.
Чтобы убедиться, что виртуальный адрес является допустимым, выполните процедуры в разделе Виртуальные адреса для выделения контекста назначения" раздела DxgkCbCreateContextAllocation .
InitContextResource.Destination.GpuVirtualAddress
Виртуальный адрес GPU контекстного ресурса для инициализации.
TransferVirtual
Структура DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL , описывающая операцию, используемую для передачи содержимого выделения между расположениями в памяти.
FillVirtual
Структура DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL , описывающая операцию, используемую для заполнения выделения шаблоном.
UpdatePageTable
Структура DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE , описывающая операцию, используемую для обновления таблицы страниц.
FlushTlb
Структура DXGK_BUILDPAGINGBUFFER_FLUSHTLB , описывающая операцию, используемую для очистки буферов преобразования с заглядывая в сторону.
CopyPageTableEntries
Структура DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES , описывающая операцию копирования записей таблицы страниц из одного расположения в другое.
UpdateContextAllocation
Структура DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION , описывающая операцию, используемую для обновления содержимого контекста или выделения устройства.
NotifyResidency
Структура DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY , описывающая операцию изменения выделения места расположения.
SignalMonitoredFence
[in] Структура DXGK_BUILDPAGINGBUFFER_SIGNALMONITOREDFENCE , описывающая инструкцию GPU для передачи сигнала отслеживаемого объекта ограждения подкачки в буфер DMA. Доступно начиная с Windows 10 версии 1703 (WDDM 2.2).
MapApertureSegment2
MapApertureSegment2.hDevice
[in] Дескриптор устройства, которому принадлежит выделение, указанное hAllocation , сопоставляется с сегментом диафрагмы, который указывает SegmentId .
Для общего выделения в hDevice устанавливается устройство, которое диспетчер видеопамяти определил как владельца выделения.
hDevice имеет значение NULL для основного выделения.
MapApertureSegment2.hAllocation
[in] Дескриптор драйвера для выделения, сопоставленного с сегментом диафрагмы, который указывает SegmentId .
hAllocation имеет значение NULL , если буфер DMA сопоставляется с сегментом диафрагмы, так как буферы DMA не создаются явным образом драйвером.
MapApertureSegment2.SegmentId
[in] Идентификатор настраиваемого сегмента диафрагмы.
MapApertureSegment2.OffsetInPages
[in] Смещение в страницах от начала сегмента до первых страниц для сопоставления.
MapApertureSegment2.NumberOfPages
[in] Размер диапазона, сопоставленного в выделении, в страницах.
MapApertureSegment2.Adl
[in] Структура DXGK_ADL со списком дескрипторов адресов (ADL), который описывает сопоставления логических адресов (страниц) для выделенной памяти. Этот ADL может быть непрерывным или массивом страниц; драйвер должен иметь возможность обрабатывать оба варианта.
MapApertureSegment2.Flags
[in] Структура DXGK_MAPAPERTUREFLAGS , определяющая в флагах битового поля тип выполняемой операции map-aperture-segment.
MapApertureSegment2.AdlOffset
[in] Смещение в ADL до начала диапазона логических адресов, сопоставленных для текущей операции, указанного на страницах системной памяти. Если ADL является непрерывным ADL, то элемент BasePageNumber ADL является начальным адресом непрерывного диапазона памяти. В противном случае используйте элемент Страницы ADL для несмежной памяти.
MapApertureSegment2.CpuVisibleAddress
Если выделение драйвера было создано с установленным флагом MapApertureCpuVisible , CpuVisibleAddress является ненулевым указателем на сопоставленный системой виртуальный адрес в режиме ядра для DXGK_OPERATION_MAP_APERTURE_SEGMENT2 операций. Этот адрес действителен, если выделение сопоставлено с сегментом диафрагмы и будет освобождено сразу после вызова соответствующего DXGK_OPERATION_UNMAP_APERTURE_SEGMENT для того же выделения.
Если mapApertureCpuVisible не указан, cpuVisibleAddress имеет значение NULL для DXGK_OPERATION_MAP_APERTURE_SEGMENT2 операций.
NotifyFenceResidency
MmapMmu
UnmapMmu
NotifyResidency2
NotifyAllocation
Reserved
Этот элемент зарезервирован и не должен использоваться.
Reserved.Reserved[64]
Этот элемент зарезервирован и не должен использоваться.
hSystemContext
[in] Дескриптор системного контекста для операции разбиения по страницам.
DmaBufferGpuVirtualAddress
Тип данных D3DGPU_VIRTUAL_ADDRESS , указывающий виртуальный адрес, по которому был помещен буфер DMA. Если физический адрес равен нулю, буфер DMA неправильно разгружается.
DmaBufferWriteOffset
Смещение текущей операции в байтах от начала буфера DMA.
Комментарии
MDL определяется в документации по модели драйвера Windows (WDM).
Класс синхронизации WDDM:
- Класс планировщика GPU первого уровня для типа отправки BuildPagingBuffer .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается начиная с Windows Vista. |
Верхняя часть | d3dkmddi.h (включая D3dkmddi.h) |
См. также раздел
DXGKARGCB_CREATECONTEXTALLOCATION
DXGK_BUILDPAGINGBUFFER_COPYPAGETABLEENTRIES
DXGK_BUILDPAGINGBUFFER_FILLVIRTUAL
DXGK_BUILDPAGINGBUFFER_FLUSHTLB
DXGK_BUILDPAGINGBUFFER_NOTIFYRESIDENCY
DXGK_BUILDPAGINGBUFFER_TRANSFERVIRTUAL
DXGK_BUILDPAGINGBUFFER_UPDATECONTEXTALLOCATION
DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE
[MmGetMdlPfnArray] (/windows-hardware/drivers/kernel/mm-bad-pointer#mmgetmdlpfnarray