다음을 통해 공유


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

Direct3D 할당이 매핑되는 DirectX 그래픽 커널 하위 시스템(Dxgkrnl.sys) 할당에 대한 핸들입니다.

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