d3dkmtQueryStatistics.h (3730B)
1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- 2 * This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 /* This file is based on a header file that was briefly seen in the 6 * Windows 8 RC SDK. The work for this file itself was based on the one in 7 * ProcessHacker at 8 * http://processhacker.svn.sourceforge.net/viewvc/processhacker/2.x/trunk/plugins/ExtendedTools/d3dkmt.h?revision=4758&view=markup 9 * For more details see Mozilla Bug 689870. 10 * [Bug 917496 indicates that some of these structs may not match reality, and 11 * therefore should not be trusted. See the reference to bug 917496 in 12 * gfxWindowsPlatform.cpp.] 13 */ 14 15 typedef struct _D3DKMTQS_COUNTER { 16 ULONG Count; 17 ULONGLONG Bytes; 18 } D3DKMTQS_COUNTER; 19 20 typedef struct _D3DKMTQS_ADAPTER_INFO { 21 ULONG NbSegments; 22 ULONG NodeCount; 23 24 ULONG Filler[3]; 25 ULONGLONG Filler2[2]; // Assumed sizeof(LONGLONG) = sizeof(ULONGLONG) 26 struct { 27 ULONG Filler[14]; 28 } Filler_RDMAB; 29 struct { 30 ULONG Filler[9]; 31 } Filler_R; 32 struct { 33 ULONG Filler[4]; 34 D3DKMTQS_COUNTER Filler2; 35 } Filler_P; 36 struct { 37 D3DKMTQS_COUNTER Filler[16]; 38 ULONG Filler2[2]; 39 } Filler_PF; 40 struct { 41 ULONGLONG Filler[8]; 42 } Filler_PT; 43 struct { 44 ULONG Filler[2]; 45 } Filler_SR; 46 struct { 47 ULONG Filler[7]; 48 } Filler_L; 49 struct { 50 D3DKMTQS_COUNTER Filler[7]; 51 } Filler_A; 52 struct { 53 D3DKMTQS_COUNTER Filler[4]; 54 } Filler_T; 55 ULONG64 Reserved[8]; 56 } D3DKMTQS_ADAPTER_INFO; 57 58 typedef struct _D3DKMTQS_SEGMENT_INFO { 59 ULONGLONG Filler[3]; 60 struct { 61 ULONGLONG Filler; 62 ULONG Filler2[2]; 63 } Filler_M; 64 65 ULONG Aperture; 66 67 ULONGLONG Filler3[5]; 68 ULONG64 Filler4[8]; 69 } D3DKMTQS_SEGMENT_INFO; 70 71 typedef struct _D3DKMTQS_SYSTEM_MEMORY { 72 ULONGLONG BytesAllocated; 73 ULONG Filler[2]; 74 ULONGLONG Filler2[7]; 75 } D3DKMTQS_SYSTEM_MEMORY; 76 77 typedef struct _D3DKMTQS_PROCESS_INFO { 78 ULONG Filler[2]; 79 struct { 80 ULONGLONG BytesAllocated; 81 82 ULONG Filler[2]; 83 ULONGLONG Filler2[7]; 84 } SystemMemory; 85 ULONG64 Reserved[8]; 86 } D3DKMTQS_PROCESS_INFO; 87 88 typedef struct _D3DKMTQS_PROCESS_SEGMENT_INFO { 89 ULONGLONG BytesCommitted; 90 ULONGLONG Filler[2]; 91 ULONG Filler2; 92 struct { 93 ULONG Filler; 94 D3DKMTQS_COUNTER Filler2[6]; 95 ULONGLONG Filler3; 96 } Filler3; 97 struct { 98 ULONGLONG Filler; 99 } Filler4; 100 ULONG64 Reserved[8]; 101 } D3DKMTQS_PROCESS_SEGMENT_INFO; 102 103 typedef struct _D3DKMTQS_PROCESS_NODE_INFO { 104 LARGE_INTEGER RunningTime; // 100ns 105 ULONG ContextSwitch; 106 ULONG PreemptionStatistics[16]; 107 ULONG PacketStatistics[32]; 108 ULONG64 Reserved[8]; 109 } D3DKMTQS_PROCESS_NODE_INFO; 110 111 typedef enum _D3DKMTQS_TYPE { 112 D3DKMTQS_ADAPTER = 0, 113 D3DKMTQS_PROCESS = 1, 114 D3DKMTQS_SEGMENT = 3, 115 D3DKMTQS_PROCESS_SEGMENT = 4, 116 D3DKMTQS_PROCESS_NODE = 6, 117 } D3DKMTQS_TYPE; 118 119 typedef union _D3DKMTQS_RESULT { 120 D3DKMTQS_ADAPTER_INFO AdapterInfo; 121 D3DKMTQS_SEGMENT_INFO SegmentInfo; 122 D3DKMTQS_PROCESS_INFO ProcessInfo; 123 D3DKMTQS_PROCESS_SEGMENT_INFO ProcessSegmentInfo; 124 D3DKMTQS_PROCESS_NODE_INFO ProcessNodeInformation; 125 } D3DKMTQS_RESULT; 126 127 typedef struct _D3DKMTQS_QUERY_SEGMENT { 128 ULONG SegmentId; 129 } D3DKMTQS_QUERY_SEGMENT; 130 131 typedef struct _D3DKMTQS_QUERY_NODE { 132 ULONG NodeId; 133 } D3DKMTQS_QUERY_NODE; 134 135 typedef struct _D3DKMTQS { 136 D3DKMTQS_TYPE Type; 137 LUID AdapterLuid; 138 HANDLE hProcess; 139 D3DKMTQS_RESULT QueryResult; 140 141 union { 142 D3DKMTQS_QUERY_SEGMENT QuerySegment; 143 D3DKMTQS_QUERY_SEGMENT QueryProcessSegment; 144 D3DKMTQS_QUERY_NODE QueryProcessNode; 145 }; 146 } D3DKMTQS; 147 148 extern "C" { 149 typedef __checkReturn NTSTATUS(APIENTRY* PFND3DKMTQS)(const D3DKMTQS*); 150 }