From 4f9c93a7a074b6adac59c53b20e52185ab04b121 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 23 Apr 2019 12:02:06 +1000
Subject: [PATCH] include: Add missing D3DKMT typedefs

---
 include/ddk/d3dkmthk.h | 437 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 437 insertions(+)

diff --git a/include/ddk/d3dkmthk.h b/include/ddk/d3dkmthk.h
index c87321058ca..fae18baed9a 100644
--- a/include/ddk/d3dkmthk.h
+++ b/include/ddk/d3dkmthk.h
@@ -136,6 +136,8 @@ typedef struct _D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP
     D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
 } D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP;
 
+#define D3DKMT_QUERYSTATISTICS_SEGMENT_PREFERENCE_MAX 5
+
 typedef struct _D3DKMT_CLOSEADAPTER
 {
     D3DKMT_HANDLE hAdapter;
@@ -160,6 +162,441 @@ typedef struct _D3DKMT_DESTROYDCFROMMEMORY
     HANDLE hBitmap;
 } D3DKMT_DESTROYDCFROMMEMORY;
 
+typedef enum _D3DKMT_QUERYRESULT_PREEMPTION_ATTEMPT_RESULT
+{
+    D3DKMT_PreemptionAttempt                               = 0,
+    D3DKMT_PreemptionAttemptSuccess                        = 1,
+    D3DKMT_PreemptionAttemptMissNoCommand                  = 2,
+    D3DKMT_PreemptionAttemptMissNotEnabled                 = 3,
+    D3DKMT_PreemptionAttemptMissNextFence                  = 4,
+    D3DKMT_PreemptionAttemptMissPagingCommand              = 5,
+    D3DKMT_PreemptionAttemptMissSplittedCommand            = 6,
+    D3DKMT_PreemptionAttemptMissFenceCommand               = 7,
+    D3DKMT_PreemptionAttemptMissRenderPendingFlip          = 8,
+    D3DKMT_PreemptionAttemptMissNotMakingProgress          = 9,
+    D3DKMT_PreemptionAttemptMissLessPriority               = 10,
+    D3DKMT_PreemptionAttemptMissRemainingQuantum           = 11,
+    D3DKMT_PreemptionAttemptMissRemainingPreemptionQuantum = 12,
+    D3DKMT_PreemptionAttemptMissAlreadyPreempting          = 13,
+    D3DKMT_PreemptionAttemptMissGlobalBlock                = 14,
+    D3DKMT_PreemptionAttemptMissAlreadyRunning             = 15,
+    D3DKMT_PreemptionAttemptStatisticsMax
+} D3DKMT_QUERYRESULT_PREEMPTION_ATTEMPT_RESULT;
+
+typedef enum _D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS
+{
+    D3DKMT_AllocationPriorityClassMinimum,
+    D3DKMT_AllocationPriorityClassLow,
+    D3DKMT_AllocationPriorityClassNormal,
+    D3DKMT_AllocationPriorityClassHigh,
+    D3DKMT_AllocationPriorityClassMaximum,
+    D3DKMT_MaxAllocationPriorityClass
+} D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS;
+
+typedef enum _D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE
+{
+    D3DKMT_RenderCommandBuffer,
+    D3DKMT_DeferredCommandBuffer,
+    D3DKMT_SystemCommandBuffer,
+    D3DKMT_MmIoFlipCommandBuffer,
+    D3DKMT_WaitCommandBuffer,
+    D3DKMT_SignalCommandBuffer,
+    D3DKMT_DeviceCommandBuffer,
+    D3DKMT_SoftwareCommandBuffer,
+    D3DKMT_QueuePacketTypeMax
+} D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE;
+
+typedef enum _D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE
+{
+    D3DKMT_ClientRenderBuffer,
+    D3DKMT_ClientPagingBuffer,
+    D3DKMT_SystemPagingBuffer,
+    D3DKMT_SystemPreemptionBuffer,
+    D3DKMT_DmaPacketTypeMax
+} D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_PAGING_TRANSFER
+{
+    ULONGLONG BytesFilled;
+    ULONGLONG BytesDiscarded;
+    ULONGLONG BytesMappedIntoAperture;
+    ULONGLONG BytesUnmappedFromAperture;
+    ULONGLONG BytesTransferredFromMdlToMemory;
+    ULONGLONG BytesTransferredFromMemoryToMdl;
+    ULONGLONG BytesTransferredFromApertureToMemory;
+    ULONGLONG BytesTransferredFromMemoryToAperture;
+} D3DKMT_QUERYSTATSTICS_PAGING_TRANSFER;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_COMMITMENT_DATA
+{
+    ULONG64 TotalBytesEvictedFromProcess;
+    ULONG64 BytesBySegmentPreference[D3DKMT_QUERYSTATISTICS_SEGMENT_PREFERENCE_MAX];
+} D3DKMT_QUERYSTATISTICS_COMMITMENT_DATA;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_SWIZZLING_RANGE
+{
+    ULONG NbRangesAcquired;
+    ULONG NbRangesReleased;
+} D3DKMT_QUERYSTATSTICS_SWIZZLING_RANGE;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_COUNTER
+{
+    ULONG     Count;
+    ULONGLONG Bytes;
+} D3DKMT_QUERYSTATISTICS_COUNTER;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_DMA_BUFFER
+{
+    D3DKMT_QUERYSTATISTICS_COUNTER Size;
+    ULONG AllocationListBytes;
+    ULONG PatchLocationListBytes;
+} D3DKMT_QUERYSTATISTICS_DMA_BUFFER;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_LOCKS
+{
+    ULONG NbLocks;
+    ULONG NbLocksWaitFlag;
+    ULONG NbLocksDiscardFlag;
+    ULONG NbLocksNoOverwrite;
+    ULONG NbLocksNoReadSync;
+    ULONG NbLocksLinearization;
+    ULONG NbComplexLocks;
+} D3DKMT_QUERYSTATSTICS_LOCKS;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_ALLOCATIONS
+{
+    D3DKMT_QUERYSTATISTICS_COUNTER Created;
+    D3DKMT_QUERYSTATISTICS_COUNTER Destroyed;
+    D3DKMT_QUERYSTATISTICS_COUNTER Opened;
+    D3DKMT_QUERYSTATISTICS_COUNTER Closed;
+    D3DKMT_QUERYSTATISTICS_COUNTER MigratedSuccess;
+    D3DKMT_QUERYSTATISTICS_COUNTER MigratedFail;
+    D3DKMT_QUERYSTATISTICS_COUNTER MigratedAbandoned;
+} D3DKMT_QUERYSTATSTICS_ALLOCATIONS;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_TERMINATIONS
+{
+    D3DKMT_QUERYSTATISTICS_COUNTER TerminatedShared;
+    D3DKMT_QUERYSTATISTICS_COUNTER TerminatedNonShared;
+    D3DKMT_QUERYSTATISTICS_COUNTER DestroyedShared;
+    D3DKMT_QUERYSTATISTICS_COUNTER DestroyedNonShared;
+} D3DKMT_QUERYSTATSTICS_TERMINATIONS;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_NODE
+{
+    ULONG NodeId;
+} D3DKMT_QUERYSTATISTICS_QUERY_NODE;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT
+{
+    ULONG SegmentId;
+} D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PREEMPTION_INFORMATION
+{
+    ULONG PreemptionCounter[D3DKMT_PreemptionAttemptStatisticsMax];
+} D3DKMT_QUERYSTATISTICS_PREEMPTION_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE
+{
+    ULONG VidPnSourceId;
+} D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_INFORMATION
+{
+    ULONG PacketSubmited;
+    ULONG PacketCompleted;
+} D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_INFORMATION
+{
+    ULONG PacketSubmited;
+    ULONG PacketCompleted;
+    ULONG PacketPreempted;
+    ULONG PacketFaulted;
+} D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_SYSTEM_MEMORY
+{
+    ULONGLONG BytesAllocated;
+    ULONGLONG BytesReserved;
+    ULONG SmallAllocationBlocks;
+    ULONG LargeAllocationBlocks;
+    ULONGLONG WriteCombinedBytesAllocated;
+    ULONGLONG WriteCombinedBytesReserved;
+    ULONGLONG CachedBytesAllocated;
+    ULONGLONG CachedBytesReserved;
+    ULONGLONG SectionBytesAllocated;
+    ULONGLONG SectionBytesReserved;
+} D3DKMT_QUERYSTATISTICS_SYSTEM_MEMORY;
+
+typedef enum _D3DKMT_QUERYSTATISTICS_TYPE
+{
+    D3DKMT_QUERYSTATISTICS_ADAPTER,
+    D3DKMT_QUERYSTATISTICS_PROCESS,
+    D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER,
+    D3DKMT_QUERYSTATISTICS_SEGMENT,
+    D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT,
+    D3DKMT_QUERYSTATISTICS_NODE,
+    D3DKMT_QUERYSTATISTICS_PROCESS_NODE,
+    D3DKMT_QUERYSTATISTICS_VIDPNSOURCE,
+    D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE
+} D3DKMT_QUERYSTATISTICS_TYPE;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_PAGING_FAULT
+{
+    D3DKMT_QUERYSTATISTICS_COUNTER Faults;
+    D3DKMT_QUERYSTATISTICS_COUNTER FaultsFirstTimeAccess;
+    D3DKMT_QUERYSTATISTICS_COUNTER FaultsReclaimed;
+    D3DKMT_QUERYSTATISTICS_COUNTER FaultsMigration;
+    D3DKMT_QUERYSTATISTICS_COUNTER FaultsIncorrectResource;
+    D3DKMT_QUERYSTATISTICS_COUNTER FaultsLostContent;
+    D3DKMT_QUERYSTATISTICS_COUNTER FaultsEvicted;
+    D3DKMT_QUERYSTATISTICS_COUNTER AllocationsMEM_RESET;
+    D3DKMT_QUERYSTATISTICS_COUNTER AllocationsUnresetSuccess;
+    D3DKMT_QUERYSTATISTICS_COUNTER AllocationsUnresetFail;
+    ULONG AllocationsUnresetSuccessRead;
+    ULONG AllocationsUnresetFailRead;
+    D3DKMT_QUERYSTATISTICS_COUNTER Evictions;
+    D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToPreparation;
+    D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToLock;
+    D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToClose;
+    D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToPurge;
+    D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToSuspendCPUAccess;
+} D3DKMT_QUERYSTATSTICS_PAGING_FAULT;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_REFERENCE_DMA_BUFFER
+{
+    ULONG NbCall;
+    ULONG NbAllocationsReferenced;
+    ULONG MaxNbAllocationsReferenced;
+    ULONG NbNULLReference;
+    ULONG NbWriteReference;
+    ULONG NbRenamedAllocationsReferenced;
+    ULONG NbIterationSearchingRenamedAllocation;
+    ULONG NbLockedAllocationReferenced;
+    ULONG NbAllocationWithValidPrepatchingInfoReferenced;
+    ULONG NbAllocationWithInvalidPrepatchingInfoReferenced;
+    ULONG NbDMABufferSuccessfullyPrePatched;
+    ULONG NbPrimariesReferencesOverflow;
+    ULONG NbAllocationWithNonPreferredResources;
+    ULONG NbAllocationInsertedInMigrationTable;
+} D3DKMT_QUERYSTATSTICS_REFERENCE_DMA_BUFFER;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_RENAMING
+{
+    ULONG NbAllocationsRenamed;
+    ULONG NbAllocationsShrinked;
+    ULONG NbRenamedBuffer;
+    ULONG MaxRenamingListLength;
+    ULONG NbFailuresDueToRenamingLimit;
+    ULONG NbFailuresDueToCreateAllocation;
+    ULONG NbFailuresDueToOpenAllocation;
+    ULONG NbFailuresDueToLowResource;
+    ULONG NbFailuresDueToNonRetiredLimit;
+} D3DKMT_QUERYSTATSTICS_RENAMING;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_PREPRATION
+{
+    ULONG BroadcastStall;
+    ULONG NbDMAPrepared;
+    ULONG NbDMAPreparedLongPath;
+    ULONG ImmediateHighestPreparationPass;
+    D3DKMT_QUERYSTATISTICS_COUNTER AllocationsTrimmed;
+} D3DKMT_QUERYSTATSTICS_PREPRATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_MEMORY
+{
+    ULONGLONG TotalBytesEvicted;
+    ULONG     AllocsCommitted;
+    ULONG     AllocsResident;
+} D3DKMT_QUERYSTATISTICS_MEMORY;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION
+{
+    ULONG   Frame;
+    ULONG   CancelledFrame;
+    ULONG   QueuedPresent;
+    ULONG64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PACKET_INFORMATION
+{
+    D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_INFORMATION QueuePacket[D3DKMT_QueuePacketTypeMax];
+    D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_INFORMATION   DmaPacket[D3DKMT_DmaPacketTypeMax];
+} D3DKMT_QUERYSTATISTICS_PACKET_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION
+{
+    LARGE_INTEGER RunningTime;
+    ULONG         ContextSwitch;
+    D3DKMT_QUERYSTATISTICS_PREEMPTION_INFORMATION PreemptionStatistics;
+    D3DKMT_QUERYSTATISTICS_PACKET_INFORMATION     PacketStatistics;
+    ULONG64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_NODE_INFORMATION
+{
+    D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION GlobalInformation;
+    D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION SystemInformation;
+    ULONG64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_NODE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_VIDPNSOURCE_INFORMATION
+{
+    D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION GlobalInformation;
+    D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION SystemInformation;
+    ULONG64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_VIDPNSOURCE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION
+{
+    ULONG NbSegments;
+    ULONG NodeCount;
+    ULONG VidPnSourceCount;
+    ULONG VSyncEnabled;
+    ULONG TdrDetectedCount;
+    LONGLONG ZeroLengthDmaBuffers;
+    ULONGLONG RestartedPeriod;
+    D3DKMT_QUERYSTATSTICS_REFERENCE_DMA_BUFFER ReferenceDmaBuffer;
+    D3DKMT_QUERYSTATSTICS_RENAMING Renaming;
+    D3DKMT_QUERYSTATSTICS_PREPRATION Preparation;
+    D3DKMT_QUERYSTATSTICS_PAGING_FAULT PagingFault;
+    D3DKMT_QUERYSTATSTICS_PAGING_TRANSFER PagingTransfer;
+    D3DKMT_QUERYSTATSTICS_SWIZZLING_RANGE SwizzlingRange;
+    D3DKMT_QUERYSTATSTICS_LOCKS Locks;
+    D3DKMT_QUERYSTATSTICS_ALLOCATIONS Allocations;
+    D3DKMT_QUERYSTATSTICS_TERMINATIONS Terminations;
+    ULONG64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_POLICY
+{
+    ULONGLONG PreferApertureForRead[D3DKMT_MaxAllocationPriorityClass];
+    ULONGLONG PreferAperture[D3DKMT_MaxAllocationPriorityClass];
+    ULONGLONG MemResetOnPaging;
+    ULONGLONG RemovePagesFromWorkingSetOnPaging;
+    ULONGLONG MigrationEnabled;
+} D3DKMT_QUERYSTATISTICS_POLICY;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER_INFORMATION
+{
+    ULONG NbSegments;
+    ULONG NodeCount;
+    ULONG VidPnSourceCount;
+    ULONG VirtualMemoryUsage;
+    D3DKMT_QUERYSTATISTICS_DMA_BUFFER DmaBuffer;
+    D3DKMT_QUERYSTATISTICS_COMMITMENT_DATA CommitmentData;
+    D3DKMT_QUERYSTATISTICS_POLICY _Policy;
+    ULONG64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_VIDEO_MEMORY
+{
+    ULONG AllocsCommitted;
+    D3DKMT_QUERYSTATISTICS_COUNTER AllocsResidentInP[D3DKMT_QUERYSTATISTICS_SEGMENT_PREFERENCE_MAX];
+    D3DKMT_QUERYSTATISTICS_COUNTER AllocsResidentInNonPreferred;
+    ULONGLONG TotalBytesEvictedDueToPreparation;
+} D3DKMT_QUERYSTATISTICS_VIDEO_MEMORY;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_POLICY
+{
+    ULONGLONG UseMRU;
+} D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_POLICY;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_INFORMATION
+{
+    ULONGLONG BytesCommitted;
+    ULONGLONG MaximumWorkingSet;
+    ULONGLONG MinimumWorkingSet;
+
+    ULONG NbReferencedAllocationEvictedInPeriod;
+
+    D3DKMT_QUERYSTATISTICS_VIDEO_MEMORY VideoMemory;
+    D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_POLICY _Policy;
+
+    ULONG64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_INFORMATION
+{
+    ULONG NodeCount;
+    ULONG VidPnSourceCount;
+    D3DKMT_QUERYSTATISTICS_SYSTEM_MEMORY SystemMemory;
+    ULONG64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_PROCESS_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION
+{
+    ULONGLONG CommitLimit;
+    ULONGLONG BytesCommitted;
+    ULONGLONG BytesResident;
+    D3DKMT_QUERYSTATISTICS_MEMORY Memory;
+    ULONG Aperture;
+    ULONGLONG TotalBytesEvictedByPriority[D3DKMT_MaxAllocationPriorityClass];
+    ULONG64 SystemMemoryEndAddress;
+    struct
+    {
+        ULONG64 PreservedDuringStandby            :  1;
+        ULONG64 PreservedDuringHibernate          :  1;
+        ULONG64 PartiallyPreservedDuringHibernate :  1;
+        ULONG64 Reserved                          : 61;
+    } PowerFlags;
+    ULONG64 Reserved[6];
+} D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION_V1
+{
+    ULONG CommitLimit;
+    ULONG BytesCommitted;
+    ULONG BytesResident;
+    D3DKMT_QUERYSTATISTICS_MEMORY Memory;
+    ULONG Aperture;
+    ULONGLONG TotalBytesEvictedByPriority[D3DKMT_MaxAllocationPriorityClass];
+    ULONG64 SystemMemoryEndAddress;
+    struct
+    {
+       ULONG64 PreservedDuringStandby            :  1;
+       ULONG64 PreservedDuringHibernate          :  1;
+       ULONG64 PartiallyPreservedDuringHibernate :  1;
+       ULONG64 Reserved                          : 61;
+    } PowerFlags;
+
+    ULONG64 Reserved[7];
+} D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION_V1;
+
+typedef union _D3DKMT_QUERYSTATISTICS_RESULT
+{
+    D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION             AdapterInformation;
+    D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION_V1          SegmentInformationV1;
+    D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION             SegmentInformation;
+    D3DKMT_QUERYSTATISTICS_NODE_INFORMATION                NodeInformation;
+    D3DKMT_QUERYSTATISTICS_VIDPNSOURCE_INFORMATION         VidPnSourceInformation;
+    D3DKMT_QUERYSTATISTICS_PROCESS_INFORMATION             ProcessInformation;
+    D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER_INFORMATION     ProcessAdapterInformation;
+    D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_INFORMATION     ProcessSegmentInformation;
+    D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION        ProcessNodeInformation;
+    D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION ProcessVidPnSourceInformation;
+} D3DKMT_QUERYSTATISTICS_RESULT;
+
+typedef struct _D3DKMT_QUERYSTATISTICS
+{
+    D3DKMT_QUERYSTATISTICS_TYPE Type;
+    LUID AdapterLuid;
+    HANDLE hProcess;
+    D3DKMT_QUERYSTATISTICS_RESULT QueryResult;
+
+    union
+    {
+        D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT     QuerySegment;
+        D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT     QueryProcessSegment;
+        D3DKMT_QUERYSTATISTICS_QUERY_NODE        QueryNode;
+        D3DKMT_QUERYSTATISTICS_QUERY_NODE        QueryProcessNode;
+        D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE QueryVidPnSource;
+        D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE QueryProcessVidPnSource;
+    };
+} D3DKMT_QUERYSTATISTICS;
+
 #ifdef __cplusplus
 extern "C"
 {
-- 
2.20.1

