/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* This file is based on a header file that was briefly seen in the * Windows 8 RC SDK. The work for this file itself was based on the one in * ProcessHacker at * http://processhacker.svn.sourceforge.net/viewvc/processhacker/2.x/trunk/plugins/ExtendedTools/d3dkmt.h?revision=4758&view=markup * For more details see Mozilla Bug 689870. * [Bug 917496 indicates that some of these structs may not match reality, and * therefore should not be trusted. See the reference to bug 917496 in * gfxWindowsPlatform.cpp.] */ typedef struct _D3DKMTQS_COUNTER { ULONG Count; ULONGLONG Bytes; } D3DKMTQS_COUNTER; typedef struct _D3DKMTQS_ADAPTER_INFO { ULONG NbSegments; ULONG NodeCount; ULONG Filler[3]; ULONGLONG Filler2[2]; // Assumed sizeof(LONGLONG) = sizeof(ULONGLONG) struct { ULONG Filler[14]; } Filler_RDMAB; struct { ULONG Filler[9]; } Filler_R; struct { ULONG Filler[4]; D3DKMTQS_COUNTER Filler2; } Filler_P; struct { D3DKMTQS_COUNTER Filler[16]; ULONG Filler2[2]; } Filler_PF; struct { ULONGLONG Filler[8]; } Filler_PT; struct { ULONG Filler[2]; } Filler_SR; struct { ULONG Filler[7]; } Filler_L; struct { D3DKMTQS_COUNTER Filler[7]; } Filler_A; struct { D3DKMTQS_COUNTER Filler[4]; } Filler_T; ULONG64 Reserved[8]; } D3DKMTQS_ADAPTER_INFO; typedef struct _D3DKMTQS_SEGMENT_INFO { ULONGLONG Filler[3]; struct { ULONGLONG Filler; ULONG Filler2[2]; } Filler_M; ULONG Aperture; ULONGLONG Filler3[5]; ULONG64 Filler4[8]; } D3DKMTQS_SEGMENT_INFO; typedef struct _D3DKMTQS_SYSTEM_MEMORY { ULONGLONG BytesAllocated; ULONG Filler[2]; ULONGLONG Filler2[7]; } D3DKMTQS_SYSTEM_MEMORY; typedef struct _D3DKMTQS_PROCESS_INFO { ULONG Filler[2]; struct { ULONGLONG BytesAllocated; ULONG Filler[2]; ULONGLONG Filler2[7]; } SystemMemory; ULONG64 Reserved[8]; } D3DKMTQS_PROCESS_INFO; typedef struct _D3DKMTQS_PROCESS_SEGMENT_INFO { ULONGLONG BytesCommitted; ULONGLONG Filler[2]; ULONG Filler2; struct { ULONG Filler; D3DKMTQS_COUNTER Filler2[6]; ULONGLONG Filler3; } Filler3; struct { ULONGLONG Filler; } Filler4; ULONG64 Reserved[8]; } D3DKMTQS_PROCESS_SEGMENT_INFO; typedef struct _D3DKMTQS_PROCESS_NODE_INFO { LARGE_INTEGER RunningTime; // 100ns ULONG ContextSwitch; ULONG PreemptionStatistics[16]; ULONG PacketStatistics[32]; ULONG64 Reserved[8]; } D3DKMTQS_PROCESS_NODE_INFO; typedef enum _D3DKMTQS_TYPE { D3DKMTQS_ADAPTER = 0, D3DKMTQS_PROCESS = 1, D3DKMTQS_SEGMENT = 3, D3DKMTQS_PROCESS_SEGMENT = 4, D3DKMTQS_PROCESS_NODE = 6, } D3DKMTQS_TYPE; typedef union _D3DKMTQS_RESULT { D3DKMTQS_ADAPTER_INFO AdapterInfo; D3DKMTQS_SEGMENT_INFO SegmentInfo; D3DKMTQS_PROCESS_INFO ProcessInfo; D3DKMTQS_PROCESS_SEGMENT_INFO ProcessSegmentInfo; D3DKMTQS_PROCESS_NODE_INFO ProcessNodeInformation; } D3DKMTQS_RESULT; typedef struct _D3DKMTQS_QUERY_SEGMENT { ULONG SegmentId; } D3DKMTQS_QUERY_SEGMENT; typedef struct _D3DKMTQS_QUERY_NODE { ULONG NodeId; } D3DKMTQS_QUERY_NODE; typedef struct _D3DKMTQS { D3DKMTQS_TYPE Type; LUID AdapterLuid; HANDLE hProcess; D3DKMTQS_RESULT QueryResult; union { D3DKMTQS_QUERY_SEGMENT QuerySegment; D3DKMTQS_QUERY_SEGMENT QueryProcessSegment; D3DKMTQS_QUERY_NODE QueryProcessNode; }; } D3DKMTQS; extern "C" { typedef __checkReturn NTSTATUS(APIENTRY* PFND3DKMTQS)(const D3DKMTQS*); }