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 23 ULONG Filler[4]; 24 ULONGLONG Filler2[2]; // Assumed sizeof(LONGLONG) = sizeof(ULONGLONG) 25 struct { 26 ULONG Filler[14]; 27 } Filler_RDMAB; 28 struct { 29 ULONG Filler[9]; 30 } Filler_R; 31 struct { 32 ULONG Filler[4]; 33 D3DKMTQS_COUNTER Filler2; 34 } Filler_P; 35 struct { 36 D3DKMTQS_COUNTER Filler[16]; 37 ULONG Filler2[2]; 38 } Filler_PF; 39 struct { 40 ULONGLONG Filler[8]; 41 } Filler_PT; 42 struct { 43 ULONG Filler[2]; 44 } Filler_SR; 45 struct { 46 ULONG Filler[7]; 47 } Filler_L; 48 struct { 49 D3DKMTQS_COUNTER Filler[7]; 50 } Filler_A; 51 struct { 52 D3DKMTQS_COUNTER Filler[4]; 53 } Filler_T; 54 ULONG64 Reserved[8]; 55 } D3DKMTQS_ADAPTER_INFO; 56 57 typedef struct _D3DKMTQS_SEGMENT_INFO_WIN7 { 58 ULONG Filler[3]; 59 struct { 60 ULONGLONG Filler; 61 ULONG Filler2[2]; 62 } Filler_M; 63 64 ULONG Aperture; 65 66 ULONGLONG Filler3[5]; 67 ULONG64 Filler4[8]; 68 } D3DKMTQS_SEGMENT_INFO_WIN7; 69 70 typedef struct _D3DKMTQS_SEGMENT_INFO_WIN8 { 71 ULONGLONG Filler[3]; 72 struct { 73 ULONGLONG Filler; 74 ULONG Filler2[2]; 75 } Filler_M; 76 77 ULONG Aperture; 78 79 ULONGLONG Filler3[5]; 80 ULONG64 Filler4[8]; 81 } D3DKMTQS_SEGMENT_INFO_WIN8; 82 83 typedef struct _D3DKMTQS_SYSTEM_MEMORY { 84 ULONGLONG BytesAllocated; 85 ULONG Filler[2]; 86 ULONGLONG Filler2[7]; 87 } D3DKMTQS_SYSTEM_MEMORY; 88 89 typedef struct _D3DKMTQS_PROCESS_INFO { 90 ULONG Filler[2]; 91 struct { 92 ULONGLONG BytesAllocated; 93 94 ULONG Filler[2]; 95 ULONGLONG Filler2[7]; 96 } SystemMemory; 97 ULONG64 Reserved[8]; 98 } D3DKMTQS_PROCESS_INFO; 99 100 typedef struct _D3DKMTQS_PROCESS_SEGMENT_INFO { 101 union { 102 struct { 103 ULONGLONG BytesCommitted; 104 } Win8; 105 struct { 106 ULONG BytesCommitted; 107 ULONG UnknownRandomness; 108 } Win7; 109 }; 110 111 ULONGLONG Filler[2]; 112 ULONG Filler2; 113 struct { 114 ULONG Filler; 115 D3DKMTQS_COUNTER Filler2[6]; 116 ULONGLONG Filler3; 117 } Filler3; 118 struct { 119 ULONGLONG Filler; 120 } Filler4; 121 ULONG64 Reserved[8]; 122 } D3DKMTQS_PROCESS_SEGMENT_INFO; 123 124 typedef enum _D3DKMTQS_TYPE { 125 D3DKMTQS_ADAPTER = 0, 126 D3DKMTQS_PROCESS = 1, 127 D3DKMTQS_SEGMENT = 3, 128 D3DKMTQS_PROCESS_SEGMENT = 4, 129 } D3DKMTQS_TYPE; 130 131 typedef union _D3DKMTQS_RESULT { 132 D3DKMTQS_ADAPTER_INFO AdapterInfo; 133 D3DKMTQS_SEGMENT_INFO_WIN7 SegmentInfoWin7; 134 D3DKMTQS_SEGMENT_INFO_WIN8 SegmentInfoWin8; 135 D3DKMTQS_PROCESS_INFO ProcessInfo; 136 D3DKMTQS_PROCESS_SEGMENT_INFO ProcessSegmentInfo; 137 } D3DKMTQS_RESULT; 138 139 typedef struct _D3DKMTQS_QUERY_SEGMENT { 140 ULONG SegmentId; 141 } D3DKMTQS_QUERY_SEGMENT; 142 143 typedef struct _D3DKMTQS { 144 D3DKMTQS_TYPE Type; 145 LUID AdapterLuid; 146 HANDLE hProcess; 147 D3DKMTQS_RESULT QueryResult; 148 149 union { 150 D3DKMTQS_QUERY_SEGMENT QuerySegment; 151 D3DKMTQS_QUERY_SEGMENT QueryProcessSegment; 152 }; 153 } D3DKMTQS; 154 155 extern "C" { 156 typedef __checkReturn NTSTATUS(APIENTRY* PFND3DKMTQS)(const D3DKMTQS*); 157 } 158