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 用户模式驱动程序,句柄将是 CreateResource(D3D10) 函数的 hResource 参数的值。 对于 Direct3D 9 用户模式驱动程序,句柄将是驱动程序在 CreateResource 函数中返回的 pResource 参数的值。

如果驱动程序在内部使用分配,驱动程序可以将此值设置为 NULL

hDxgAllocation

DirectX 图形内核子系统(Dxgkrnl.sys)分配的句柄,Direct3D 分配映射到该句柄。

Offset

Dxgkrnl 分配中 Direct3D 分配的起始地址(以字节为单位)。

Size

Dxgkrnl 分配中 Direct3D 分配的大小(以字节为单位)。

Usage

指示此映射原因的 UMDETW_ALLOCATION_USAGE 结构。

Semantic

如果用户模式驱动程序在内部使用分配,则这是一个 UMDETW_ALLOCATION_SEMANTIC 结构,指示分配的用途。

返回值

没有

言论

用户模式显示驱动程序必须完全考虑它分配的视频内存,因此每次分配更改时,它都必须调用此函数来记录事件。

何时调用此函数的示例包括:

  • 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