Функция UMDEtwLogMapAllocation (umdprovider.h)
Описывает, как используется подсистема ядра графического ядра Microsoft DirectX (Dxgkrnl.sys) или часть выделения памяти.
Синтаксис
void UMDEtwLogMapAllocation(
ULONGLONG hD3DAllocation,
ULONGLONG hDxgAllocation,
ULONGLONG Offset,
ULONGLONG Size,
UMDETW_ALLOCATION_USAGE Usage,
UMDETW_ALLOCATION_SEMANTIC Semantic
);
Параметры
hD3DAllocation
Дескриптор выделения Direct3D.
Для драйверов пользовательского режима Direct3D 10 дескриптор будет значением параметра hResource функции CreateResource(D3D10). Для драйверов пользовательского режима Direct3D 9 дескриптор будет значением параметра pResource , возвращаемого драйвером в функции CreateResource .
Драйвер может присвоить этому значению значение NULL , если он использует выделения внутри системы.
hDxgAllocation
Дескриптор выделения подсистемы графического ядра DirectX (Dxgkrnl.sys), с которым сопоставляется выделение Direct3D.
Offset
Начальный адрес (в байтах) выделения Direct3D в пределах выделения Dxgkrnl.
Size
Размер выделения Direct3D в байтах в пределах выделения Dxgkrnl.
Usage
Структура UMDETW_ALLOCATION_USAGE , указывающая причину такого сопоставления.
Semantic
Если выделение используется внутренним драйвером пользовательского режима, это UMDETW_ALLOCATION_SEMANTIC структура, которая указывает, для чего используется выделение.
Возвращаемое значение
None
Remarks
Драйвер отображения пользовательского режима должен полностью учитывать выделенную видеопамять, поэтому он должен вызывать эту функцию для регистрации события при каждом изменении выделения.
Ниже приведены примеры того, когда следует вызывать эту функцию.
- Выделение Direct3D упаковывается в подсистему графического ядра DirectX (Dxgkrnl.sys).
- Выделение Dxgkrnl создается в виде поверхности с нуля. В этом случае задайте для параметра hD3DAllocationзначение NULL.
FORCEINLINE void LogMapAllocation(BOOLEAN Enter,
ULONGLONG hD3DAllocation,
ULONGLONG hDxgAllocation,
ULONGLONG Offset,
ULONGLONG Size,
UMDETW_ALLOCATION_USAGE Usage,
UMDETW_ALLOCATION_SEMANTIC Semantic)
{
if (Enabled)
{
EVENT_DATA_DESCRIPTOR Descriptors[6];
// Create a description of the event
EventDataDescCreate(&Descriptors[0], &hD3DAllocation, 8);
EventDataDescCreate(&Descriptors[1], &hDxgAllocation, 8);
EventDataDescCreate(&Descriptors[2], &Offset, 8);
EventDataDescCreate(&Descriptors[3], &Size, 8);
EventDataDescCreate(&Descriptors[4], &Usage, 4);
EventDataDescCreate(&Descriptors[5], &Semantic, 4);
// Log the event
EventWrite(
RegHandle,
Enter ? (InRundown ? &RundownAllocationEvent : &MapAllocationEvent) : &UnmapAllocationEvent,
sizeof(Descriptors) / sizeof(Descriptors[0]),
Descriptors
);
}
}
FORCEINLINE void UMDEtwLogMapAllocation(ULONGLONG hD3DAllocation,
ULONGLONG hDxgAllocation,
ULONGLONG Offset,
ULONGLONG Size,
UMDETW_ALLOCATION_USAGE Usage,
UMDETW_ALLOCATION_SEMANTIC Semantic)
{
LogMapAllocation(TRUE,
hD3DAllocation,
hDxgAllocation,
Offset,
Size,
Usage,
Semantic);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 |
Минимальная версия сервера | Windows Server 2012 |
Целевая платформа | Персональный компьютер |
Верхняя часть | umdprovider.h (включая Umdprovider.h) |