Поделиться через


Функция 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.
UMDEtwLogMapAllocation в Umdprovider.h определяется как:
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)

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

CreateResource

CreateResource(D3D10)

UMDETW_ALLOCATION_SEMANTIC

UMDETW_ALLOCATION_USAGE