https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e09679f2d13b00f136ef6…
commit e09679f2d13b00f136ef65be4b049f772dd92a4e
Author: Justin Miller <Justin.miller(a)reactos.org>
AuthorDate: Thu Oct 17 00:26:01 2024 -0700
Commit: Justin Miller <justinmiller100(a)gmail.com>
CommitDate: Sat Oct 19 13:45:59 2024 -0700
[SDK] Import WDDM Headers from MIT varient in libdxg
---
media/doc/3rd Party Files.txt | 8 +
sdk/include/ddk/d3dkmthk.h | 6063 ++++++++++++++++++++++++++++++++++++++++-
sdk/include/psdk/d3dkmdt.h | 2476 +++++++++++++++++
sdk/include/psdk/d3dukmdt.h | 2067 +++++++++++++-
4 files changed, 10445 insertions(+), 169 deletions(-)
diff --git a/media/doc/3rd Party Files.txt b/media/doc/3rd Party Files.txt
index bd86c57550f..1139bc05a07 100644
--- a/media/doc/3rd Party Files.txt
+++ b/media/doc/3rd Party Files.txt
@@ -295,3 +295,11 @@ Path: modules/rosapps/lib/vfdlib
Used Version: 2.1.2008.206
License: GPL-2.0 (
https://spdx.org/licenses/GPL-2.0.html)
URL:
https://vfd.sourceforge.net/
+
+Title: libdxg - WDDM Headers
+Path: sdk/include/psdk/d3dukmdt.h
+Path: sdk/include/psdk/d3dkmdt.h
+Path: sdk/include/ddk/d3dkmthk.h
+Used Version: git commit 045831e
+License: MIT (
https://spdx.org/licenses/MIT.html)
+URL:
https://github.com/microsoft/libdxg
diff --git a/sdk/include/ddk/d3dkmthk.h b/sdk/include/ddk/d3dkmthk.h
index 86ba3a1871b..bc382312995 100644
--- a/sdk/include/ddk/d3dkmthk.h
+++ b/sdk/include/ddk/d3dkmthk.h
@@ -1,55 +1,6036 @@
-/*
- * Copyright 2016 Henri Verbeet for CodeWeavers
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#ifndef __WINE_D3DKMTHK_H
-#define __WINE_D3DKMTHK_H
-
-#include <d3dukmdt.h>
+/******************************Module*Header**********************************\
+*
+* Module Name: d3dkmthk.h
+*
+* Content: Windows Display Driver Model (WDDM) kernel mode thunk interfaces
+*
+* Copyright (c) Microsoft Corporation.
+* Licensed under the MIT License.
+*
+\*****************************************************************************/
+#ifndef _D3DKMTHK_H_
+#define _D3DKMTHK_H_
+
+#include <d3dkmdt.h>
+
+#pragma region Desktop Family
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+
+#pragma warning(push)
+#pragma warning(disable:4201) // anonymous unions warning
+#pragma warning(disable:4200) // zero-sized array in struct/union
+#pragma warning(disable:4214) // nonstandard extension used: bit field types other than
int
+
+
+typedef struct _OBJECT_ATTRIBUTES OBJECT_ATTRIBUTES;
+typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;
+
+//
+// Available only for Vista (LONGHORN) and later and for
+// multiplatform tools such as debugger extensions
+//
+#if (NTDDI_VERSION >= NTDDI_LONGHORN) || defined(D3DKMDT_SPECIAL_MULTIPLATFORM_TOOL)
+
+typedef struct _D3DKMT_CREATEDEVICEFLAGS
+{
+ UINT LegacyMode : 1; // 0x00000001
+ UINT RequestVSync : 1; // 0x00000002
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ UINT DisableGpuTimeout : 1; // 0x00000004
+ UINT Reserved : 29; // 0xFFFFFFF8
+#else
+ UINT Reserved : 30; // 0xFFFFFFFC
+#endif
+} D3DKMT_CREATEDEVICEFLAGS;
+
+typedef struct _D3DKMT_CREATEDEVICE
+{
+ union
+ {
+ D3DKMT_HANDLE hAdapter; // in: identifies the adapter for
user-mode creation
+ VOID* pAdapter; // in: identifies the adapter for
kernel-mode creation
+ D3DKMT_PTR_HELPER(pAdapter_Align)
+ };
+
+ D3DKMT_CREATEDEVICEFLAGS Flags;
+
+ D3DKMT_HANDLE hDevice; // out: Identifies the device
+ D3DKMT_PTR(VOID*, pCommandBuffer); // out: D3D10 compatibility.
+ UINT CommandBufferSize; // out: D3D10 compatibility.
+ D3DKMT_PTR(D3DDDI_ALLOCATIONLIST*, pAllocationList); // out: D3D10 compatibility.
+ UINT AllocationListSize; // out: D3D10 compatibility.
+ D3DKMT_PTR(D3DDDI_PATCHLOCATIONLIST*, pPatchLocationList); // out: D3D10
compatibility.
+ UINT PatchLocationListSize; // out: D3D10 compatibility.
+} D3DKMT_CREATEDEVICE;
+
+typedef struct _D3DKMT_DESTROYDEVICE
+{
+ D3DKMT_HANDLE hDevice; // in: Indentifies the device
+}D3DKMT_DESTROYDEVICE;
+
+typedef enum _D3DKMT_CLIENTHINT
+{
+ D3DKMT_CLIENTHINT_UNKNOWN = 0,
+ D3DKMT_CLIENTHINT_OPENGL = 1,
+ D3DKMT_CLIENTHINT_CDD = 2, // Internal
+ D3DKMT_CLIENTHINT_OPENCL = 3,
+ D3DKMT_CLIENTHINT_VULKAN = 4,
+ D3DKMT_CLIENTHINT_CUDA = 5,
+ D3DKMT_CLIENTHINT_RESERVED = 6,
+ D3DKMT_CLIENTHINT_DX7 = 7,
+ D3DKMT_CLIENTHINT_DX8 = 8,
+ D3DKMT_CLIENTHINT_DX9 = 9,
+ D3DKMT_CLIENTHINT_DX10 = 10,
+ D3DKMT_CLIENTHINT_DX11 = 11,
+ D3DKMT_CLIENTHINT_DX12 = 12,
+ D3DKMT_CLIENTHINT_9ON12 = 13,
+ D3DKMT_CLIENTHINT_11ON12 = 14,
+ D3DKMT_CLIENTHINT_MFT_ENCODE = 15,
+ D3DKMT_CLIENTHINT_GLON12 = 16,
+ D3DKMT_CLIENTHINT_CLON12 = 17,
+ D3DKMT_CLIENTHINT_DML_TENSORFLOW = 18,
+ D3DKMT_CLIENTHINT_ONEAPI_LEVEL0 = 19,
+ D3DKMT_CLIENTHINT_MAX
+} D3DKMT_CLIENTHINT;
+
+typedef struct _D3DKMT_CREATECONTEXT
+{
+ D3DKMT_HANDLE hDevice; // in: Handle to the device
owning this context.
+ UINT NodeOrdinal; // in: Identifier for the
node targetted by this context.
+ UINT EngineAffinity; // in: Engine affinity
within the specified node.
+ D3DDDI_CREATECONTEXTFLAGS Flags; // in: Context creation
flags.
+ D3DKMT_PTR(VOID*, pPrivateDriverData); // in: Private driver data
+ UINT PrivateDriverDataSize; // in: Size of private
driver data
+ D3DKMT_CLIENTHINT ClientHint; // in: Hints which client is
creating this
+ D3DKMT_HANDLE hContext; // out: Handle of the created
context.
+ D3DKMT_PTR(VOID*, pCommandBuffer); // out: Pointer to the first
command buffer.
+ UINT CommandBufferSize; // out: Command buffer size
(bytes).
+ D3DKMT_PTR(D3DDDI_ALLOCATIONLIST*, pAllocationList); // out: Pointer to the first
allocation list.
+ UINT AllocationListSize; // out: Allocation list size
(elements).
+ D3DKMT_PTR(D3DDDI_PATCHLOCATIONLIST*, pPatchLocationList); // out: Pointer to the
first patch location list.
+ UINT PatchLocationListSize; // out: Patch location list
size (elements).
+ D3DGPU_VIRTUAL_ADDRESS CommandBuffer; // out: GPU virtual address
of the command buffer. _ADVSCH_
+} D3DKMT_CREATECONTEXT;
+
+typedef struct _D3DKMT_DESTROYCONTEXT
+{
+ D3DKMT_HANDLE hContext; // in: Identifies the
context being destroyed.
+} D3DKMT_DESTROYCONTEXT;
+
+typedef struct _D3DKMT_CREATESYNCHRONIZATIONOBJECT
+{
+ D3DKMT_HANDLE hDevice; // in: Handle to the
device.
+ D3DDDI_SYNCHRONIZATIONOBJECTINFO Info; // in: Attributes of the
synchronization object.
+ D3DKMT_HANDLE hSyncObject; // out: Handle to the
synchronization object created.
+} D3DKMT_CREATESYNCHRONIZATIONOBJECT;
+
+typedef struct _D3DKMT_CREATESYNCHRONIZATIONOBJECT2
+{
+ D3DKMT_HANDLE hDevice; // in: Handle to the
device.
+ D3DDDI_SYNCHRONIZATIONOBJECTINFO2 Info; // in/out: Attributes of the
synchronization object.
+ D3DKMT_HANDLE hSyncObject; // out: Handle to the
synchronization object created.
+} D3DKMT_CREATESYNCHRONIZATIONOBJECT2;
+
+typedef struct _D3DKMT_DESTROYSYNCHRONIZATIONOBJECT
+{
+ D3DKMT_HANDLE hSyncObject; // in: Identifies the
synchronization objects being destroyed.
+} D3DKMT_DESTROYSYNCHRONIZATIONOBJECT;
+
+typedef struct _D3DKMT_OPENSYNCHRONIZATIONOBJECT
+{
+ D3DKMT_HANDLE hSharedHandle; // in: shared handle to
synchronization object to be opened.
+ D3DKMT_HANDLE hSyncObject; // out: Handle to sync object
in this process.
+
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+} D3DKMT_OPENSYNCHRONIZATIONOBJECT;
+
+typedef struct _D3DKMT_WAITFORSYNCHRONIZATIONOBJECT
+{
+ D3DKMT_HANDLE hContext; // in: Identifies the context
that needs to wait.
+ UINT ObjectCount; // in: Specifies the number of
object to wait on.
+ D3DKMT_HANDLE ObjectHandleArray[D3DDDI_MAX_OBJECT_WAITED_ON]; // in:
Specifies the object to wait on.
+} D3DKMT_WAITFORSYNCHRONIZATIONOBJECT;
+
+typedef struct _D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2
+{
+ D3DKMT_HANDLE hContext; // in: Identifies the context
that needs to wait.
+ UINT ObjectCount; // in: Specifies the number of
object to wait on.
+ D3DKMT_HANDLE ObjectHandleArray[D3DDDI_MAX_OBJECT_WAITED_ON]; // in:
Specifies the object to wait on.
+ union
+ {
+ struct {
+ D3DKMT_ALIGN64 UINT64 FenceValue; // in: fence value to be
waited.
+ } Fence;
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+ };
+} D3DKMT_WAITFORSYNCHRONIZATIONOBJECT2;
+
+typedef struct _D3DKMT_SIGNALSYNCHRONIZATIONOBJECT
+{
+ D3DKMT_HANDLE hContext; // in: Identifies the context that
needs to signal.
+ UINT ObjectCount; // in: Specifies the number of object
to signal.
+ D3DKMT_HANDLE ObjectHandleArray[D3DDDI_MAX_OBJECT_SIGNALED]; // in:
Specifies the object to be signaled.
+ D3DDDICB_SIGNALFLAGS Flags; // in:
Specifies signal behavior.
+} D3DKMT_SIGNALSYNCHRONIZATIONOBJECT;
+
+typedef struct _D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2
+{
+ D3DKMT_HANDLE hContext; // in: Identifies the context that
needs to signal.
+ UINT ObjectCount; // in: Specifies the number of object
to signal.
+ D3DKMT_HANDLE ObjectHandleArray[D3DDDI_MAX_OBJECT_SIGNALED]; // in:
Specifies the object to be signaled.
+ D3DDDICB_SIGNALFLAGS Flags; // in: Specifies signal behavior.
+ ULONG BroadcastContextCount; // in: Specifies the number of
context
+ // to broadcast this command
buffer to.
+ D3DKMT_HANDLE BroadcastContext[D3DDDI_MAX_BROADCAST_CONTEXT]; // in:
Specifies the handle of the context to
+ //
broadcast to.
+ union
+ {
+ struct {
+ D3DKMT_ALIGN64 UINT64 FenceValue; // in: fence value to be
signaled;
+ } Fence;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ HANDLE CpuEventHandle; // in: handle of a CPU event to be
signaled
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+ };
+} D3DKMT_SIGNALSYNCHRONIZATIONOBJECT2;
+
+typedef struct _D3DKMT_LOCK
+{
+ D3DKMT_HANDLE hDevice; // in: identifies the device
+ D3DKMT_HANDLE hAllocation; // in: allocation to lock
+ // out: New handle representing the
allocation after the lock.
+ UINT PrivateDriverData; // in: Used by UMD for AcquireAperture
+ UINT NumPages;
+ D3DKMT_PTR(CONST UINT*, pPages);
+ D3DKMT_PTR(VOID*, pData); // out: pointer to memory
+ D3DDDICB_LOCKFLAGS Flags; // in: Bit field defined by D3DDDI_LOCKFLAGS
+ D3DGPU_VIRTUAL_ADDRESS GpuVirtualAddress; // out: GPU's Virtual Address of locked
allocation. _ADVSCH_
+} D3DKMT_LOCK;
+
+typedef struct _D3DKMT_UNLOCK
+{
+ D3DKMT_HANDLE hDevice; // in: Identifies the device
+ UINT NumAllocations; // in: Number of allocations in the array
+ D3DKMT_PTR(CONST D3DKMT_HANDLE*, phAllocations); // in: array of allocations to
unlock
+} D3DKMT_UNLOCK;
+
+typedef enum _D3DKMDT_MODE_PRUNING_REASON
+{
+ D3DKMDT_MPR_UNINITIALIZED = 0, // mode was pruned or is
supported because of:
+ D3DKMDT_MPR_ALLCAPS = 1, // all of the monitor
caps (only used to imply lack of support - for support, specific reason is always
indicated)
+ D3DKMDT_MPR_DESCRIPTOR_MONITOR_SOURCE_MODE = 2, // monitor source mode
in the monitor descriptor
+ D3DKMDT_MPR_DESCRIPTOR_MONITOR_FREQUENCY_RANGE = 3, // monitor frequency
range in the monitor descriptor
+ D3DKMDT_MPR_DESCRIPTOR_OVERRIDE_MONITOR_SOURCE_MODE = 4, // monitor source mode
in the monitor descriptor override
+ D3DKMDT_MPR_DESCRIPTOR_OVERRIDE_MONITOR_FREQUENCY_RANGE = 5, // monitor frequency
range in the monitor descriptor override
+ D3DKMDT_MPR_DEFAULT_PROFILE_MONITOR_SOURCE_MODE = 6, // monitor source mode
in the default monitor profile
+ D3DKMDT_MPR_DRIVER_RECOMMENDED_MONITOR_SOURCE_MODE = 7, // monitor source mode
recommended by the driver
+ D3DKMDT_MPR_MONITOR_FREQUENCY_RANGE_OVERRIDE = 8, // monitor frequency
range override
+ D3DKMDT_MPR_CLONE_PATH_PRUNED = 9, // Mode is pruned
because other path(s) in clone cluster has(have) no mode supported by monitor
+ D3DKMDT_MPR_MAXVALID = 10
+}
+D3DKMDT_MODE_PRUNING_REASON;
+
+// This structure takes 8 bytes.
+// The unnamed UINT of size 0 forces alignment of the structure to
+// make it exactly occupy 8 bytes, see MSDN docs on C++ bitfields
+// for more details
+typedef struct _D3DKMDT_DISPLAYMODE_FLAGS
+{
+#if (DXGKDDI_INTERFACE_VERSION < DXGKDDI_INTERFACE_VERSION_WIN8)
+ BOOLEAN ValidatedAgainstMonitorCaps : 1;
+ BOOLEAN RoundedFakeMode : 1;
+ D3DKMDT_MODE_PRUNING_REASON ModePruningReason : 4;
+ UINT Reserved : 28;
+#else
+ UINT ValidatedAgainstMonitorCaps : 1;
+ UINT RoundedFakeMode : 1;
+ UINT : 0;
+ D3DKMDT_MODE_PRUNING_REASON ModePruningReason : 4;
+ UINT Stereo : 1;
+ UINT AdvancedScanCapable : 1;
+#if (DXGKDDI_INTERFACE_VERSION < DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+ UINT Reserved : 26;
+#else
+ UINT PreferredTiming : 1;
+ UINT PhysicalModeSupported : 1;
+#if (DXGKDDI_INTERFACE_VERSION < DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+ UINT Reserved : 24;
+#else
+ UINT VirtualRefreshRate : 1;
+ UINT Reserved : 23;
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_9
+#endif
+#endif
+}
+D3DKMDT_DISPLAYMODE_FLAGS;
+
+typedef struct _D3DKMT_DISPLAYMODE
+{
+ UINT Width;
+ UINT Height;
+ D3DDDIFORMAT Format;
+ UINT IntegerRefreshRate;
+ D3DDDI_RATIONAL RefreshRate;
+ D3DDDI_VIDEO_SIGNAL_SCANLINE_ORDERING ScanLineOrdering;
+ D3DDDI_ROTATION DisplayOrientation;
+ UINT DisplayFixedOutput;
+ D3DKMDT_DISPLAYMODE_FLAGS Flags;
+} D3DKMT_DISPLAYMODE;
+
+typedef struct _D3DKMT_GETDISPLAYMODELIST
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN source ID
+ D3DKMT_PTR(D3DKMT_DISPLAYMODE*, pModeList); // out:
+ UINT ModeCount; // in/out:
+} D3DKMT_GETDISPLAYMODELIST;
+
+typedef struct _D3DKMT_DISPLAYMODELIST
+{
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ UINT ModeCount;
+ D3DKMT_DISPLAYMODE pModeList[0];
+} D3DKMT_DISPLAYMODELIST;
+
+typedef struct _D3DKMT_SETDISPLAYMODE_FLAGS
+{
+ BOOLEAN PreserveVidPn : 1;
+ UINT Reserved : 31;
+}
+D3DKMT_SETDISPLAYMODE_FLAGS;
+
+typedef struct _D3DKMT_SETDISPLAYMODE
+{
+ D3DKMT_HANDLE hDevice; // in:
Identifies the device
+ D3DKMT_HANDLE hPrimaryAllocation; // in:
+ D3DDDI_VIDEO_SIGNAL_SCANLINE_ORDERING ScanLineOrdering; // in:
+ D3DDDI_ROTATION DisplayOrientation; // in:
+ UINT PrivateDriverFormatAttribute; // out:
Private Format Attribute of the current primary surface if DxgkSetDisplayMode failed with
STATUS_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT
+ D3DKMT_SETDISPLAYMODE_FLAGS Flags; // in:
+} D3DKMT_SETDISPLAYMODE;
+
+
+typedef struct _D3DKMT_MULTISAMPLEMETHOD
+{
+ UINT NumSamples;
+ UINT NumQualityLevels;
+ UINT Reserved; //workaround for NTRAID#Longhorn-1124385-2005/03/14-kanqiu
+} D3DKMT_MULTISAMPLEMETHOD;
+
+typedef struct _D3DKMT_GETMULTISAMPLEMETHODLIST
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN source ID
+ UINT Width; // in:
+ UINT Height; // in:
+ D3DDDIFORMAT Format; // in:
+ D3DKMT_PTR(D3DKMT_MULTISAMPLEMETHOD*, pMethodList); // out:
+ UINT MethodCount; // in/out:
+} D3DKMT_GETMULTISAMPLEMETHODLIST;
+
+typedef struct _D3DKMT_PRESENTFLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT Blt : 1; // 0x00000001
+ UINT ColorFill : 1; // 0x00000002
+ UINT Flip : 1; // 0x00000004
+ UINT FlipDoNotFlip : 1; // 0x00000008
+ UINT FlipDoNotWait : 1; // 0x00000010
+ UINT FlipRestart : 1; // 0x00000020
+ UINT DstRectValid : 1; // 0x00000040
+ UINT SrcRectValid : 1; // 0x00000080
+ UINT RestrictVidPnSource : 1; // 0x00000100
+ UINT SrcColorKey : 1; // 0x00000200
+ UINT DstColorKey : 1; // 0x00000400
+ UINT LinearToSrgb : 1; // 0x00000800
+ UINT PresentCountValid : 1; // 0x00001000
+ UINT Rotate : 1; // 0x00002000
+ UINT PresentToBitmap : 1; // 0x00004000
+ UINT RedirectedFlip : 1; // 0x00008000
+ UINT RedirectedBlt : 1; // 0x00010000
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ UINT FlipStereo : 1; // 0x00020000 // This is a
flip from a stereo alloc. Used in addition to Flip.
+ UINT FlipStereoTemporaryMono : 1; // 0x00040000 // This is a
flip from a stereo alloc. The left image should used to produce both images. Used in
addition to Flip.
+ UINT FlipStereoPreferRight : 1; // 0x00080000 // This is a
flip from a stereo alloc. Use the right image when cloning to a mono monitor. Used in
addition to Flip.
+ UINT BltStereoUseRight : 1; // 0x00100000 // This is a
Blt from a stereo alloc to a mono alloc. The right image should be used.
+ UINT PresentHistoryTokenOnly : 1; // 0x00200000 // Submit
Present History Token only.
+ UINT PresentRegionsValid : 1; // 0x00400000 // Ptr to
present regions is valid
+ UINT PresentDDA : 1; // 0x00800000 // Present
from a DDA swapchain
+ UINT ProtectedContentBlankedOut : 1; // 0x01000000
+ UINT RemoteSession : 1; // 0x02000000
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ UINT CrossAdapter : 1; // 0x04000000
+ UINT DurationValid : 1; // 0x08000000
+ UINT PresentIndirect : 1; // 0x10000000 // Present to
an indirect-display adapter
+ UINT PresentHMD : 1; // 0x20000000 // Present
from an HMD swapchain.
+ UINT Reserved : 2; // 0xC0000000
+#else
+ UINT Reserved : 6; // 0xFC000000
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+#else
+ UINT Reserved : 15; // 0xFFFE0000
+#endif
+ };
+ UINT Value;
+ };
+} D3DKMT_PRESENTFLAGS;
+
+typedef enum _D3DKMT_PRESENT_MODEL
+{
+ D3DKMT_PM_UNINITIALIZED = 0,
+ D3DKMT_PM_REDIRECTED_GDI = 1,
+ D3DKMT_PM_REDIRECTED_FLIP = 2,
+ D3DKMT_PM_REDIRECTED_BLT = 3,
+ D3DKMT_PM_REDIRECTED_VISTABLT = 4,
+ D3DKMT_PM_SCREENCAPTUREFENCE = 5,
+ D3DKMT_PM_REDIRECTED_GDI_SYSMEM = 6,
+ D3DKMT_PM_REDIRECTED_COMPOSITION = 7,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+ D3DKMT_PM_SURFACECOMPLETE = 8,
+#endif
+ D3DKMT_PM_FLIPMANAGER = 9,
+} D3DKMT_PRESENT_MODEL;
+
+typedef enum _D3DKMT_FLIPMODEL_INDEPENDENT_FLIP_STAGE
+{
+ D3DKMT_FLIPMODEL_INDEPENDENT_FLIP_STAGE_FLIP_SUBMITTED = 0,
+ D3DKMT_FLIPMODEL_INDEPENDENT_FLIP_STAGE_FLIP_COMPLETE = 1
+} D3DKMT_FLIPMODEL_INDEPENDENT_FLIP_STAGE;
+
+typedef struct _D3DKMT_FLIPMODEL_PRESENTHISTORYTOKENFLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT Video : 1; // 0x00000001
+ UINT RestrictedContent : 1; // 0x00000002
+ UINT ClipToView : 1; // 0x00000004
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ UINT StereoPreferRight : 1; // 0x00000008
+ UINT TemporaryMono : 1; // 0x00000010
+ UINT FlipRestart : 1; // 0x00000020
+ UINT HDRMetaDataChanged : 1; // 0x00000040
+ UINT AlphaMode : 2; // 0x00000180
+ UINT SignalLimitOnTokenCompletion : 1; // 0x00000200
+ UINT YCbCrFlags : 3; // 0x00001C00
+ UINT IndependentFlip : 1; // 0x00002000
+ D3DKMT_FLIPMODEL_INDEPENDENT_FLIP_STAGE IndependentFlipStage : 2; //
0x0000C000
+ UINT IndependentFlipReleaseCount : 2; // 0x00030000
+ UINT IndependentFlipForceNotifyDwm : 1; // 0x00040000
+ UINT UseCustomDuration : 1; // 0x00080000
+ UINT IndependentFlipRequestDwmConfirm:1; // 0x00100000
+ UINT IndependentFlipCandidate : 1; // 0x00200000
+ UINT IndependentFlipCheckNeeded : 1; // 0x00400000
+ UINT IndependentFlipTrueImmediate : 1; // 0x00800000
+ UINT IndependentFlipRequestDwmExit : 1; // 0x01000000
+ UINT CompSurfaceNotifiedEarly : 1; // 0x02000000
+ UINT IndependentFlipDoNotFlip : 1; // 0x04000000
+ UINT RequirePairedToken : 1; // 0x08000000
+ UINT VariableRefreshOverrideEligible :1; // 0x10000000
+ UINT Reserved : 3; // 0xE0000000
+#else
+ UINT Reserved : 29; // 0xFFFFFFF8
+#endif
+ };
+
+ UINT Value;
+ };
+} D3DKMT_FLIPMODEL_PRESENTHISTORYTOKENFLAGS;
+
+#define D3DKMT_MAX_PRESENT_HISTORY_RECTS 16
+
+typedef struct _D3DKMT_DIRTYREGIONS
+{
+ UINT NumRects;
+ RECT Rects[D3DKMT_MAX_PRESENT_HISTORY_RECTS];
+} D3DKMT_DIRTYREGIONS;
+
+typedef struct _D3DKMT_COMPOSITION_PRESENTHISTORYTOKEN
+{
+ D3DKMT_ALIGN64 ULONG64 hPrivateData;
+} D3DKMT_COMPOSITION_PRESENTHISTORYTOKEN;
+
+typedef struct _D3DKMT_FLIPMANAGER_PRESENTHISTORYTOKEN
+{
+ D3DKMT_ALIGN64 ULONG64 hPrivateData;
+ D3DKMT_ALIGN64 ULONGLONG PresentAtQpc;
+ union
+ {
+ struct
+ {
+ UINT Discard : 1;
+ UINT PresentAt : 1;
+ UINT hPrivateDataIsPointer : 1;
+ UINT Reserved : 29;
+ };
+ UINT Value;
+ }Flags;
+} D3DKMT_FLIPMANAGER_PRESENTHISTORYTOKEN;
+
+typedef enum _D3DKMT_AUXILIARYPRESENTINFO_TYPE
+{
+ D3DKMT_AUXILIARYPRESENTINFO_TYPE_FLIPMANAGER = 0
+} D3DKMT_AUXILIARYPRESENTINFO_TYPE;
+
+typedef struct _D3DKMT_AUXILIARYPRESENTINFO
+{
+ UINT size;
+ D3DKMT_AUXILIARYPRESENTINFO_TYPE type;
+} D3DKMT_AUXILIARYPRESENTINFO;
+
+typedef struct _D3DKMT_FLIPMANAGER_AUXILIARYPRESENTINFO
+{
+ // in: Base information
+ D3DKMT_AUXILIARYPRESENTINFO auxiliaryPresentInfo;
+
+ // in: Tracing ID of owner flip manager
+ UINT flipManagerTracingId;
+
+ // in: Whether or not the application requested a different custom duration
+ // than the previous present
+ BOOL customDurationChanged;
+
+ // out: The adapter LUID/VidPn source of the flip output
+ LUID FlipAdapterLuid;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+
+ // out: Independent flip stage
+ D3DKMT_FLIPMODEL_INDEPENDENT_FLIP_STAGE independentFlipStage;
+
+ // out: The DPC frame time of the frame on which the flip was completed
+ D3DKMT_ALIGN64 ULONGLONG FlipCompletedQpc;
+
+ // out: The approved frame duration
+ UINT HwPresentDurationQpc;
+
+ // out: Whether or not the present was canceled in the scheduler
+ BOOL WasCanceled;
+} D3DKMT_FLIPMANAGER_AUXILIARYPRESENTINFO;
+
+typedef struct _D3DKMT_GDIMODEL_PRESENTHISTORYTOKEN
+{
+ D3DKMT_ALIGN64 ULONG64 hLogicalSurface;
+ D3DKMT_ALIGN64 ULONG64 hPhysicalSurface;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ RECT ScrollRect;
+ POINT ScrollOffset;
+#endif
+ D3DKMT_DIRTYREGIONS DirtyRegions;
+} D3DKMT_GDIMODEL_PRESENTHISTORYTOKEN;
+
+typedef struct _D3DKMT_GDIMODEL_SYSMEM_PRESENTHISTORYTOKEN
+{
+ D3DKMT_ALIGN64 ULONG64 hlsurf;
+ DWORD dwDirtyFlags;
+ D3DKMT_ALIGN64 UINT64 uiCookie;
+} D3DKMT_GDIMODEL_SYSMEM_PRESENTHISTORYTOKEN;
+
+typedef ULONGLONG D3DKMT_VISTABLTMODEL_PRESENTHISTORYTOKEN;
+
+typedef struct _D3DKMT_FENCE_PRESENTHISTORYTOKEN
+{
+ D3DKMT_ALIGN64 UINT64 Key;
+} D3DKMT_FENCE_PRESENTHISTORYTOKEN;
+
+typedef struct _D3DKMT_BLTMODEL_PRESENTHISTORYTOKEN
+{
+ D3DKMT_ALIGN64 ULONG64 hLogicalSurface;
+ D3DKMT_ALIGN64 ULONG64 hPhysicalSurface;
+ D3DKMT_ALIGN64 ULONG64 EventId;
+ D3DKMT_DIRTYREGIONS DirtyRegions;
+} D3DKMT_BLTMODEL_PRESENTHISTORYTOKEN;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+#define D3DKMT_MAX_PRESENT_HISTORY_SCATTERBLTS 12
+
+typedef struct _D3DKMT_SCATTERBLT
+{
+ D3DKMT_ALIGN64 ULONG64 hLogicalSurfaceDestination;
+ D3DKMT_ALIGN64 LONG64 hDestinationCompSurfDWM;
+ D3DKMT_ALIGN64 UINT64 DestinationCompositionBindingId;
+ RECT SourceRect;
+ POINT DestinationOffset;
+} D3DKMT_SCATTERBLT;
+
+typedef struct _D3DKMT_SCATTERBLTS
+{
+ UINT NumBlts;
+ D3DKMT_SCATTERBLT Blts[D3DKMT_MAX_PRESENT_HISTORY_SCATTERBLTS];
+} D3DKMT_SCATTERBLTS;
+#endif
+
+typedef struct _D3DKMT_FLIPMODEL_PRESENTHISTORYTOKEN
+{
+ D3DKMT_ALIGN64 UINT64 FenceValue;
+ D3DKMT_ALIGN64 ULONG64 hLogicalSurface;
+ D3DKMT_ALIGN64 D3DKMT_UINT_PTR dxgContext;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ UINT SwapChainIndex;
+ D3DKMT_ALIGN64 UINT64 PresentLimitSemaphoreId;
+ D3DDDI_FLIPINTERVAL_TYPE FlipInterval;
+ D3DKMT_FLIPMODEL_PRESENTHISTORYTOKENFLAGS Flags;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ D3DKMT_ALIGN64 LONG64 hCompSurf;
+ LUID compSurfLuid;
+ D3DKMT_ALIGN64 UINT64 confirmationCookie;
+ D3DKMT_ALIGN64 UINT64 CompositionSyncKey;
+ UINT RemainingTokens;
+ RECT ScrollRect;
+ POINT ScrollOffset;
+ UINT PresentCount;
+ FLOAT RevealColor[4]; // index 0 == R, ... , 3
== A
+ D3DDDI_ROTATION Rotation;
+ union
+ {
+ D3DKMT_SCATTERBLTS ScatterBlts; // Unused
+ struct
+ {
+ HANDLE hSyncObject; // NT handle to FlipEx
fence.
+ D3DDDI_HDR_METADATA_TYPE HDRMetaDataType;
+ union
+ {
+ D3DDDI_HDR_METADATA_HDR10 HDRMetaDataHDR10;
+ D3DDDI_HDR_METADATA_HDR10PLUS HDRMetaDataHDR10Plus;
+ };
+ };
+ };
+ UINT InkCookie;
+ RECT SourceRect;
+ UINT DestWidth;
+ UINT DestHeight;
+ RECT TargetRect;
+ // DXGI_MATRIX_3X2_F: _11 _12 _21 _22 _31 _32
+ FLOAT Transform[6];
+ UINT CustomDuration;
+ D3DDDI_FLIPINTERVAL_TYPE CustomDurationFlipInterval;
+ UINT PlaneIndex;
+#endif
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+ D3DDDI_COLOR_SPACE_TYPE ColorSpace;
+#endif
+ D3DKMT_DIRTYREGIONS DirtyRegions;
+} D3DKMT_FLIPMODEL_PRESENTHISTORYTOKEN;
+
+// User mode timeout is in milliseconds, kernel mode timeout is in 100 nanoseconds
+#define FLIPEX_TIMEOUT_USER (2000)
+#define FLIPEX_TIMEOUT_KERNEL (FLIPEX_TIMEOUT_USER*10000)
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+typedef struct _D3DKMT_SURFACECOMPLETE_PRESENTHISTORYTOKEN
+{
+ D3DKMT_ALIGN64 ULONG64 hLogicalSurface;
+} D3DKMT_SURFACECOMPLETE_PRESENTHISTORYTOKEN;
+#endif
+
+typedef struct _D3DKMT_PRESENTHISTORYTOKEN
+{
+ D3DKMT_PRESENT_MODEL Model;
+ // The size of the present history token in bytes including Model.
+ // Should be set to zero by when submitting a token.
+ // It will be initialized when reading present history and can be used to
+ // go to the next token in the present history buffer.
+ UINT TokenSize;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ // The binding id as specified by the Composition Surface
+ UINT64 CompositionBindingId;
+#endif
+
+ union
+ {
+ D3DKMT_FLIPMODEL_PRESENTHISTORYTOKEN Flip;
+ D3DKMT_BLTMODEL_PRESENTHISTORYTOKEN Blt;
+ D3DKMT_VISTABLTMODEL_PRESENTHISTORYTOKEN VistaBlt;
+ D3DKMT_GDIMODEL_PRESENTHISTORYTOKEN Gdi;
+ D3DKMT_FENCE_PRESENTHISTORYTOKEN Fence;
+ D3DKMT_GDIMODEL_SYSMEM_PRESENTHISTORYTOKEN GdiSysMem;
+ D3DKMT_COMPOSITION_PRESENTHISTORYTOKEN Composition;
+ D3DKMT_FLIPMANAGER_PRESENTHISTORYTOKEN FlipManager;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+ D3DKMT_SURFACECOMPLETE_PRESENTHISTORYTOKEN SurfaceComplete;
+#endif
+ }
+ Token;
+} D3DKMT_PRESENTHISTORYTOKEN;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+typedef struct _D3DKMT_PRESENT_RGNS
+{
+ UINT DirtyRectCount;
+ D3DKMT_PTR(_Field_size_( DirtyRectCount ) const RECT*, pDirtyRects);
+ UINT MoveRectCount;
+ D3DKMT_PTR(_Field_size_( MoveRectCount ) const D3DKMT_MOVE_RECT*, pMoveRects);
+}D3DKMT_PRESENT_RGNS;
+#endif
+
+typedef struct _D3DKMT_PRESENT
+{
+ union
+ {
+ D3DKMT_HANDLE hDevice; // in: D3D10 compatibility.
+ D3DKMT_HANDLE hContext; // in: Indentifies the context
+ };
+ D3DKMT_PTR(HWND, hWindow); // in: window to present to
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: VidPn source ID if
RestrictVidPnSource is flagged
+ D3DKMT_HANDLE hSource; // in: Source allocation to
present from
+ D3DKMT_HANDLE hDestination; // in: Destination allocation
whenever non-zero
+ UINT Color; // in: color value in ARGB 32 bit
format
+ RECT DstRect; // in: unclipped dest rect
+ RECT SrcRect; // in: unclipped src rect
+ UINT SubRectCnt; // in: count of sub rects
+ D3DKMT_PTR(CONST RECT*, pSrcSubRects); // in: sub rects in source space
+ UINT PresentCount; // in: present counter
+ D3DDDI_FLIPINTERVAL_TYPE FlipInterval; // in: flip interval
+ D3DKMT_PRESENTFLAGS Flags; // in:
+ ULONG BroadcastContextCount; //
in: Specifies the number of context
+ //
to broadcast this command buffer to.
+ D3DKMT_HANDLE BroadcastContext[D3DDDI_MAX_BROADCAST_CONTEXT]; //
in: Specifies the handle of the context to
+ //
broadcast to.
+ HANDLE PresentLimitSemaphore;
+ D3DKMT_PRESENTHISTORYTOKEN PresentHistoryToken;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ D3DKMT_PRESENT_RGNS* pPresentRegions;
+#endif
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ union
+ {
+ D3DKMT_HANDLE hAdapter; // in: iGpu adapter for PHT
redirection. Valid only when the CrossAdapter flag is set.
+ D3DKMT_HANDLE hIndirectContext; // in: indirect adapter context
for redirecting through the DoD present path. Only
+ // valid if PresentIndirect
flag is set.
+ };
+ UINT Duration; // in: Per-present duration.
Valid only when the DurationValid flag is set.
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+ D3DKMT_PTR(_Field_size_(BroadcastContextCount)
+ D3DKMT_HANDLE*, BroadcastSrcAllocation); // in:
LDA
+ D3DKMT_PTR(_Field_size_opt_(BroadcastContextCount)
+ D3DKMT_HANDLE*, BroadcastDstAllocation); // in:
LDA
+ UINT PrivateDriverDataSize; // in:
+ D3DKMT_PTR(_Field_size_bytes_(PrivateDriverDataSize)
+ PVOID, pPrivateDriverData); // in:
Private driver data to pass to DdiPresent and DdiSetVidPnSourceAddress
+ BOOLEAN bOptimizeForComposition; // out:
DWM is involved in composition
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+} D3DKMT_PRESENT;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+typedef struct _D3DKMT_PRESENT_REDIRECTEDS_FLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT Reserved : 32; // 0xFFFFFFFF
+ };
+ UINT Value;
+ };
+}D3DKMT_PRESENT_REDIRECTED_FLAGS;
+
+typedef struct _D3DKMT_PRESENT_REDIRECTED
+{
+ D3DKMT_HANDLE hSyncObj; // in: Sync object PHT waits
on
+ D3DKMT_HANDLE hDevice; // in: Device associated with
the present
+ D3DKMT_ALIGN64 ULONGLONG WaitedFenceValue; // in: Fence value of hSyncObj
that PHT waits on
+ D3DKMT_PRESENTHISTORYTOKEN PresentHistoryToken;
+ D3DKMT_PRESENT_REDIRECTED_FLAGS Flags;
+ D3DKMT_HANDLE hSource; // in: Source allocation to
present from
+ UINT PrivateDriverDataSize; // in:
+ D3DKMT_PTR(_Field_size_bytes_(PrivateDriverDataSize)
+ PVOID, pPrivateDriverData); // in: Private driver data to
pass to DdiPresent and DdiSetVidPnSourceAddress
+}D3DKMT_PRESENT_REDIRECTED;
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
+typedef struct _D3DKMT_CANCEL_PRESENTS_FLAGS
+{
+ union
+ {
+ // D3DKMT_CANCEL_PRESENTS_OPERATION_REPROGRAM_INTERRUPT flags
+ struct
+ {
+ UINT NewVSyncInterruptState : 1;
+ UINT Reserved : 31;
+ } ReprogramInterrupt;
+
+ UINT Value;
+ };
+}D3DKMT_CANCEL_PRESENTS_FLAGS;
+
+
+typedef enum D3DKMT_CANCEL_PRESENTS_OPERATION
+{
+ D3DKMT_CANCEL_PRESENTS_OPERATION_CANCEL_FROM = 0,
+ D3DKMT_CANCEL_PRESENTS_OPERATION_REPROGRAM_INTERRUPT = 1
+} D3DKMT_CANCEL_PRESENTS_OPERATION;
+
+typedef struct _D3DKMT_CANCEL_PRESENTS
+{
+ UINT cbSize;
+ D3DKMT_HANDLE hDevice;
+ D3DKMT_CANCEL_PRESENTS_FLAGS Flags;
+ D3DKMT_CANCEL_PRESENTS_OPERATION Operation;
+ D3DKMT_ALIGN64 UINT64 CancelFromPresentId;
+ LUID CompSurfaceLuid;
+ D3DKMT_ALIGN64 UINT64 BindId;
+}D3DKMT_CANCEL_PRESENTS;
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+
+typedef struct _D3DKMT_SUBMITPRESENTBLTTOHWQUEUE
+{
+ D3DKMT_HANDLE hHwQueue;
+ D3DKMT_ALIGN64 UINT64 HwQueueProgressFenceId;
+ D3DKMT_PRESENT PrivatePresentData;
+} D3DKMT_SUBMITPRESENTBLTTOHWQUEUE;
+
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_5)
+
+typedef struct _D3DKMT_SUBMITPRESENTTOHWQUEUE
+{
+ D3DKMT_PTR(_Field_size_(PrivatePresentData.BroadcastContextCount + 1)
+ D3DKMT_HANDLE*, hHwQueues);
+ D3DKMT_PRESENT PrivatePresentData;
+} D3DKMT_SUBMITPRESENTTOHWQUEUE;
+
+#endif
+
+#define D3DKMT_MAX_MULTIPLANE_OVERLAY_PLANES 8
+#define D3DKMT_MAX_MULTIPLANE_OVERLAY_ALLOCATIONS_PER_PLANE 256
+
+typedef enum D3DKMT_MULTIPLANE_OVERLAY_FLAGS
+{
+ D3DKMT_MULTIPLANE_OVERLAY_FLAG_VERTICAL_FLIP = 0x1,
+ D3DKMT_MULTIPLANE_OVERLAY_FLAG_HORIZONTAL_FLIP = 0x2,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
+ D3DKMT_MULTIPLANE_OVERLAY_FLAG_STATIC_CHECK = 0x4,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM3_0
+} D3DKMT_MULTIPLANE_OVERLAY_FLAGS;
+
+typedef enum D3DKMT_MULTIPLANE_OVERLAY_BLEND
+{
+ D3DKMT_MULTIPLANE_OVERLAY_BLEND_OPAQUE = 0x0,
+ D3DKMT_MULTIPLANE_OVERLAY_BLEND_ALPHABLEND = 0x1,
+} D3DKMT_MULTIPLANE_OVERLAY_BLEND;
+
+typedef enum D3DKMT_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT
+{
+ D3DKMT_MULIIPLANE_OVERLAY_VIDEO_FRAME_FORMAT_PROGRESSIVE = 0,
+ D3DKMT_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST = 1,
+ D3DKMT_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2
+} D3DKMT_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT;
+
+typedef enum D3DKMT_MULTIPLANE_OVERLAY_YCbCr_FLAGS
+{
+ D3DKMT_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE = 0x1, // 16 - 235 vs. 0 - 255
+ D3DKMT_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 = 0x2, // BT.709 vs. BT.601
+ D3DKMT_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC = 0x4, // xvYCC vs. conventional
YCbCr
+} D3DKMT_MULTIPLANE_OVERLAY_YCbCr_FLAGS;
+
+typedef enum D3DKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT
+{
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT_MONO = 0,
+ D3DKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT_HORIZONTAL = 1,
+ D3DKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT_VERTICAL = 2,
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT_SEPARATE = 3,
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT_MONO_OFFSET = 4,
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT_ROW_INTERLEAVED = 5,
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT_COLUMN_INTERLEAVED = 6,
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT_CHECKERBOARD = 7
+} D3DKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT;
+
+typedef enum _DXGKMT_MULTIPLANE_OVERLAY_STEREO_FLIP_MODE
+{
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FLIP_NONE = 0,
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FLIP_FRAME0 = 1,
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FLIP_FRAME1 = 2,
+} DXGKMT_MULTIPLANE_OVERLAY_STEREO_FLIP_MODE;
+
+typedef enum _DXGKMT_MULTIPLANE_OVERLAY_STRETCH_QUALITY
+{
+ DXGKMT_MULTIPLANE_OVERLAY_STRETCH_QUALITY_BILINEAR = 0x1, // Bilinear
+ DXGKMT_MULTIPLANE_OVERLAY_STRETCH_QUALITY_HIGH = 0x2, // Maximum
+} DXGKMT_MULTIPLANE_OVERLAY_STRETCH_QUALITY;
+
+typedef struct D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES
+{
+ UINT Flags; //
D3DKMT_MULTIPLANE_OVERLAY_FLAGS
+ RECT SrcRect;
+ RECT DstRect;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ RECT ClipRect;
+#endif
+ D3DDDI_ROTATION Rotation;
+ D3DKMT_MULTIPLANE_OVERLAY_BLEND Blend;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ UINT DirtyRectCount;
+ D3DKMT_PTR(RECT*, pDirtyRects);
+#else
+ UINT NumFilters;
+ D3DKMT_PTR(void*, pFilters);
+#endif
+ D3DKMT_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT VideoFrameFormat;
+ UINT YCbCrFlags; //
D3DKMT_MULTIPLANE_OVERLAY_YCbCr_FLAGS
+ D3DKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT StereoFormat;
+ BOOL StereoLeftViewFrame0;
+ BOOL StereoBaseViewFrame0;
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FLIP_MODE StereoFlipMode;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ DXGKMT_MULTIPLANE_OVERLAY_STRETCH_QUALITY StretchQuality;
+#endif
+} D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM_1_3)
+typedef struct D3DKMT_CHECK_MULTIPLANE_OVERLAY_PLANE
+{
+ D3DKMT_HANDLE hResource;
+ LUID CompSurfaceLuid;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES PlaneAttributes;
+} D3DKMT_CHECK_MULTIPLANE_OVERLAY_PLANE;
+
+typedef struct D3DKMT_CHECK_MULTIPLANE_OVERLAY_SUPPORT_RETURN_INFO
+{
+ union
+ {
+ struct
+ {
+ UINT FailingPlane : 4; // The 0 based index of the first plane
that could not be supported
+ UINT TryAgain : 1; // The configuration is not supported due
to a transition condition, which should shortly go away
+ UINT Reserved : 27;
+ };
+ UINT Value;
+ };
+} D3DKMT_CHECK_MULTIPLANE_OVERLAY_SUPPORT_RETURN_INFO;
+
+typedef struct _D3DKMT_CHECKMULTIPLANEOVERLAYSUPPORT
+{
+ D3DKMT_HANDLE hDevice; // in :
Indentifies the device
+ UINT PlaneCount; // in :
Number of resources to pin
+ D3DKMT_PTR(D3DKMT_CHECK_MULTIPLANE_OVERLAY_PLANE*, pOverlayPlanes); // in : Array
of resource handles to pin
+ BOOL Supported;
+ D3DKMT_CHECK_MULTIPLANE_OVERLAY_SUPPORT_RETURN_INFO ReturnInfo;
+} D3DKMT_CHECKMULTIPLANEOVERLAYSUPPORT;
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM_2_0)
+typedef struct _D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES2
+{
+ UINT Flags; //
D3DKMT_MULTIPLANE_OVERLAY_FLAGS
+ RECT SrcRect; // Specifies the source
rectangle, of type RECT, relative to the source resource.
+ RECT DstRect; // Specifies the destination
rectangle, of type RECT, relative to the monitor resolution.
+ RECT ClipRect; // Specifies any additional
clipping, of type RECT, relative to the DstRect rectangle,
+ // after the data has been
stretched according to the values of SrcRect and DstRect.
+
+ // The driver and hardware
can use the ClipRect member to apply a common stretch factor
+ // as the clipping changes
when an app occludes part of the DstRect destination rectangle.
+ D3DDDI_ROTATION Rotation; // Specifies the clockwise
rotation of the overlay plane, given as a value from the D3DDDI_ROTATION enumeration.
+ D3DKMT_MULTIPLANE_OVERLAY_BLEND Blend; // Specifies the blend mode
that applies to this overlay plane and the plane beneath it, given as a value from the
DXGK_MULTIPLANE_OVERLAY_BLEND enumeration.
+ UINT DirtyRectCount;
+ D3DKMT_PTR(RECT*, pDirtyRects);
+ D3DKMT_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT VideoFrameFormat; //
DXGK_MULTIPLANE_OVERLAY_VIDEO_FRAME_FORMAT
+ D3DDDI_COLOR_SPACE_TYPE ColorSpace;
+ D3DKMT_MULTIPLANE_OVERLAY_STEREO_FORMAT StereoFormat; //
DXGK_MULTIPLANE_OVERLAY_STEREO_FORMAT
+ BOOL StereoLeftViewFrame0; // Reserved for
system use. Must always be FALSE.
+ BOOL StereoBaseViewFrame0; // Reserved for
system use. Must always be FALSE.
+ DXGKMT_MULTIPLANE_OVERLAY_STEREO_FLIP_MODE StereoFlipMode; //
DXGK_MULTIPLANE_OVERLAY_STEREO_FLIP_MODE
+ DXGKMT_MULTIPLANE_OVERLAY_STRETCH_QUALITY StretchQuality; //
DXGK_MULTIPLANE_OVERLAY_STRETCH_QUALITY
+ UINT Reserved1;
+} D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES2;
+
+typedef struct _D3DKMT_CHECK_MULTIPLANE_OVERLAY_PLANE2
+{
+ UINT LayerIndex;
+ D3DKMT_HANDLE hResource;
+ LUID CompSurfaceLuid;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES2 PlaneAttributes;
+} D3DKMT_CHECK_MULTIPLANE_OVERLAY_PLANE2;
+
+typedef struct _D3DKMT_CHECKMULTIPLANEOVERLAYSUPPORT2
+{
+ D3DKMT_HANDLE hAdapter; // in:
adapter handle
+ D3DKMT_HANDLE hDevice; // in :
Indentifies the device
+ UINT PlaneCount; // in :
Number of resources to pin
+ D3DKMT_PTR(D3DKMT_CHECK_MULTIPLANE_OVERLAY_PLANE2*, pOverlayPlanes); // in : Array
of resource handles to pin
+ BOOL Supported;
+ D3DKMT_CHECK_MULTIPLANE_OVERLAY_SUPPORT_RETURN_INFO ReturnInfo;
+} D3DKMT_CHECKMULTIPLANEOVERLAYSUPPORT2;
+
+typedef struct _D3DKMT_MULTIPLANE_OVERLAY2
+{
+ UINT LayerIndex;
+ BOOL Enabled;
+ D3DKMT_HANDLE hAllocation;
+ D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES2 PlaneAttributes;
+} D3DKMT_MULTIPLANE_OVERLAY2;
+
+typedef struct _D3DKMT_PRESENT_MULTIPLANE_OVERLAY2
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ union
+ {
+ D3DKMT_HANDLE hDevice; // in: D3D10 compatibility.
+ D3DKMT_HANDLE hContext; // in: Indentifies the context
+ };
+ ULONG BroadcastContextCount; //
in: Specifies the number of context
+ //
to broadcast this command buffer to.
+ D3DKMT_HANDLE BroadcastContext[D3DDDI_MAX_BROADCAST_CONTEXT]; //
in: Specifies the handle of the context to
+ //
broadcast to.
+
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: VidPn source ID if
RestrictVidPnSource is flagged
+ UINT PresentCount; // in: present counter
+ D3DDDI_FLIPINTERVAL_TYPE FlipInterval; // in: flip interval
+ D3DKMT_PRESENTFLAGS Flags; // in:
+
+ UINT PresentPlaneCount;
+ D3DKMT_PTR(D3DKMT_MULTIPLANE_OVERLAY2*, pPresentPlanes);
+ UINT Duration;
+} D3DKMT_PRESENT_MULTIPLANE_OVERLAY2;
+#endif // DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+typedef struct _D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES3
+{
+ UINT Flags; //
D3DKMT_MULTIPLANE_OVERLAY_FLAGS
+ RECT SrcRect; // Specifies the source
rectangle, of type RECT, relative to the source resource.
+ RECT DstRect; // Specifies the destination
rectangle, of type RECT, relative to the monitor resolution.
+ RECT ClipRect; // Specifies any additional
clipping, of type RECT, relative to the DstRect rectangle,
+ // after the data has been
stretched according to the values of SrcRect and DstRect.
+
+ // The driver and hardware
can use the ClipRect member to apply a common stretch factor
+ // as the clipping changes
when an app occludes part of the DstRect destination rectangle.
+ D3DDDI_ROTATION Rotation; // Specifies the clockwise
rotation of the overlay plane, given as a value from the D3DDDI_ROTATION enumeration.
+ D3DKMT_MULTIPLANE_OVERLAY_BLEND Blend; // Specifies the blend mode
that applies to this overlay plane and the plane beneath it, given as a value from the
DXGK_MULTIPLANE_OVERLAY_BLEND enumeration.
+ UINT DirtyRectCount;
+ D3DKMT_PTR(_Field_size_(DirtyRectCount) RECT*, pDirtyRects);
+ D3DDDI_COLOR_SPACE_TYPE ColorSpace;
+ DXGKMT_MULTIPLANE_OVERLAY_STRETCH_QUALITY StretchQuality; //
DXGK_MULTIPLANE_OVERLAY_STRETCH_QUALITY
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+ UINT SDRWhiteLevel;
+#endif
+} D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES3;
+
+typedef struct _D3DKMT_CHECK_MULTIPLANE_OVERLAY_PLANE3
+{
+ UINT LayerIndex;
+ D3DKMT_HANDLE hResource;
+ LUID CompSurfaceLuid;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ D3DKMT_PTR(D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES3*, pPlaneAttributes);
+} D3DKMT_CHECK_MULTIPLANE_OVERLAY_PLANE3;
+
+typedef struct _D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION_FLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT VerticalFlip : 1; // 0x00000001
+ UINT HorizontalFlip : 1; // 0x00000002
+ UINT Reserved :30; // 0xFFFFFFFC
+ };
+ UINT Value;
+ };
+} D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION_FLAGS;
+
+typedef struct _D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION
+{
+ D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION_FLAGS Flags;
+ RECT SrcRect;
+ RECT DstRect;
+ D3DDDI_ROTATION Rotation;
+} D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION;
+
+typedef struct _D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION_WITH_SOURCE
+{
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION PostComposition;
+} D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION_WITH_SOURCE;
+
+typedef struct _D3DKMT_CHECKMULTIPLANEOVERLAYSUPPORT3
+{
+ D3DKMT_HANDLE hAdapter; // in:
adapter handle
+ D3DKMT_HANDLE hDevice; // in :
Indentifies the device
+ UINT PlaneCount; // in :
Number of resources to pin
+ // Note: Array-of-pointers don't work in 32bit WSL
+ _Field_size_(PlaneCount)
+ D3DKMT_CHECK_MULTIPLANE_OVERLAY_PLANE3** ppOverlayPlanes; // in :
Array of pointers to overlay planes
+ UINT PostCompositionCount; // in
: Number of resources to pin
+ _Field_size_(PostCompositionCount)
+ D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION_WITH_SOURCE** ppPostComposition; // in
: Array of pointers to overlay planes
+ BOOL Supported;
+ D3DKMT_CHECK_MULTIPLANE_OVERLAY_SUPPORT_RETURN_INFO ReturnInfo;
+} D3DKMT_CHECKMULTIPLANEOVERLAYSUPPORT3;
+
+typedef struct _D3DKMT_PLANE_SPECIFIC_INPUT_FLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT Enabled : 1; // 0x00000001
+ UINT Reserved :31; // 0xFFFFFFFE
+ };
+ UINT Value;
+ };
+} D3DKMT_PLANE_SPECIFIC_INPUT_FLAGS;
+
+typedef struct _D3DKMT_PLANE_SPECIFIC_OUTPUT_FLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT FlipConvertedToImmediate : 1; // 0x00000001
+ UINT Reserved :31; // 0xFFFFFFFE
+ };
+ UINT Value;
+ };
+} D3DKMT_PLANE_SPECIFIC_OUTPUT_FLAGS;
+
+typedef struct _D3DKMT_MULTIPLANE_OVERLAY3
+{
+ UINT LayerIndex;
+ D3DKMT_PLANE_SPECIFIC_INPUT_FLAGS InputFlags;
+ D3DDDI_FLIPINTERVAL_TYPE FlipInterval;
+ UINT MaxImmediateFlipLine;
+ UINT AllocationCount;
+ D3DKMT_PTR(_Field_size_(AllocationCount)
+ D3DKMT_HANDLE*, pAllocationList);
+ UINT DriverPrivateDataSize;
+ D3DKMT_PTR(_Field_size_bytes_(DriverPrivateDataSize)
+ VOID*, pDriverPrivateData);
+ D3DKMT_PTR(const D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES3*, pPlaneAttributes);
+ D3DKMT_HANDLE hFlipToFence;
+ D3DKMT_HANDLE hFlipAwayFence;
+ D3DKMT_ALIGN64 UINT64 FlipToFenceValue;
+ D3DKMT_ALIGN64 UINT64 FlipAwayFenceValue;
+} D3DKMT_MULTIPLANE_OVERLAY3;
+
+typedef struct _D3DKMT_PRESENT_MULTIPLANE_OVERLAY_FLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT FlipStereo : 1; // 0x00000001 This is a flip from a
stereo alloc. Used in addition to FlipImmediate or FlipOnNextVSync.
+ UINT FlipStereoTemporaryMono : 1; // 0x00000002 This is a flip from a
stereo alloc. The left image should used. Used in addition to FlipImmediate or
FlipOnNextVSync.
+ UINT FlipStereoPreferRight : 1; // 0x00000004 This is a flip from a
stereo alloc. The right image should used when cloning to a mono monitor. Used in addition
to FlipImmediate or FlipOnNextVSync.
+ UINT FlipDoNotWait : 1; // 0x00000008
+ UINT FlipDoNotFlip : 1; // 0x00000010
+ UINT FlipRestart : 1; // 0x00000020
+ UINT DurationValid : 1; // 0x00000040
+ UINT HDRMetaDataValid : 1; // 0x00000080
+ UINT HMD : 1; // 0x00000100
+ UINT TrueImmediate : 1; // 0x00000200 If a present interval
is 0, allow tearing rather than override a previously queued flip
+ UINT Reserved :22; // 0xFFFFFE00
+ };
+ UINT Value;
+ };
+} D3DKMT_PRESENT_MULTIPLANE_OVERLAY_FLAGS;
+
+typedef struct _D3DKMT_PRESENT_MULTIPLANE_OVERLAY3
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter
handle
+ UINT ContextCount;
+ D3DKMT_PTR(_Field_size_(ContextCount)
+ D3DKMT_HANDLE*, pContextList);
+
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: VidPn source
ID if RestrictVidPnSource is flagged
+ UINT PresentCount; // in: present
counter
+ D3DKMT_PRESENT_MULTIPLANE_OVERLAY_FLAGS Flags; // in:
+
+ UINT PresentPlaneCount;
+ // Note: Array-of-pointers don't work in 32bit WSL
+ _Field_size_(PresentPlaneCount)
+ D3DKMT_MULTIPLANE_OVERLAY3** ppPresentPlanes;
+ D3DKMT_PTR(D3DKMT_MULTIPLANE_OVERLAY_POST_COMPOSITION*, pPostComposition);
+ UINT Duration;
+ D3DDDI_HDR_METADATA_TYPE HDRMetaDataType;
+ UINT HDRMetaDataSize;
+ D3DKMT_PTR(_Field_size_bytes_(HDRMetaDataSize)
+ const VOID*, pHDRMetaData);
+ UINT BoostRefreshRateMultiplier;
+} D3DKMT_PRESENT_MULTIPLANE_OVERLAY3;
+#endif // DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
+typedef struct _D3DKMT_MULTIPLANE_OVERLAY_CAPS
+{
+ union
+ {
+ struct
+ {
+ UINT Rotation : 1; // Full rotation
+ UINT RotationWithoutIndependentFlip : 1; // Rotation, but without
simultaneous IndependentFlip support
+ UINT VerticalFlip : 1; // Can flip the data vertically
+ UINT HorizontalFlip : 1; // Can flip the data
horizontally
+ UINT StretchRGB : 1; // Supports stretching RGB
formats
+ UINT StretchYUV : 1; // Supports stretching YUV
formats
+ UINT BilinearFilter : 1; // Blinear filtering
+ UINT HighFilter : 1; // Better than bilinear
filtering
+ UINT Shared : 1; // MPO resources are shared
across VidPnSources
+ UINT Immediate : 1; // Immediate flip support
+ UINT Plane0ForVirtualModeOnly : 1; // Stretching plane 0 will also
stretch the HW cursor and should only be used for virtual mode support
+ UINT Version3DDISupport : 1; // Driver supports the 2.2 MPO
DDIs
+ UINT Reserved : 20;
+ };
+ UINT Value;
+ };
+} D3DKMT_MULTIPLANE_OVERLAY_CAPS;
+
+typedef struct _D3DKMT_GET_MULTIPLANE_OVERLAY_CAPS
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in
+ UINT MaxPlanes; // out: Total number of
planes currently supported
+ UINT MaxRGBPlanes; // out: Number of RGB
planes currently supported
+ UINT MaxYUVPlanes; // out: Number of YUV
planes currently supported
+ D3DKMT_MULTIPLANE_OVERLAY_CAPS OverlayCaps; // out: Overlay
capabilities
+ float MaxStretchFactor; // out
+ float MaxShrinkFactor; // out
+} D3DKMT_GET_MULTIPLANE_OVERLAY_CAPS;
+
+typedef struct _D3DKMT_GET_POST_COMPOSITION_CAPS
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in
+ float MaxStretchFactor; // out
+ float MaxShrinkFactor; // out
+} D3DKMT_GET_POST_COMPOSITION_CAPS;
+
+typedef struct _D3DKMT_MULTIPLANEOVERLAY_STRETCH_SUPPORT
+{
+ UINT VidPnSourceId;
+ BOOL Update;
+ BOOL Supported;
+} D3DKMT_MULTIPLANEOVERLAY_STRETCH_SUPPORT;
+#endif // DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2
+
+typedef struct D3DKMT_MULTIPLANE_OVERLAY
+{
+ UINT LayerIndex;
+ BOOL Enabled;
+ D3DKMT_HANDLE hAllocation;
+ D3DKMT_MULTIPLANE_OVERLAY_ATTRIBUTES PlaneAttributes;
+} D3DKMT_MULTIPLANE_OVERLAY;
+
+typedef struct D3DKMT_PRESENT_MULTIPLANE_OVERLAY
+{
+ union
+ {
+ D3DKMT_HANDLE hDevice; // in: D3D10 compatibility.
+ D3DKMT_HANDLE hContext; // in: Indentifies the context
+ };
+ ULONG BroadcastContextCount; //
in: Specifies the number of context
+ //
to broadcast this command buffer to.
+ D3DKMT_HANDLE BroadcastContext[D3DDDI_MAX_BROADCAST_CONTEXT]; //
in: Specifies the handle of the context to
+ //
broadcast to.
+
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: VidPn source ID if
RestrictVidPnSource is flagged
+ UINT PresentCount; // in: present counter
+ D3DDDI_FLIPINTERVAL_TYPE FlipInterval; // in: flip interval
+ D3DKMT_PRESENTFLAGS Flags; // in:
+
+ UINT PresentPlaneCount;
+ D3DKMT_MULTIPLANE_OVERLAY* pPresentPlanes;
+ UINT Duration;
+} D3DKMT_PRESENT_MULTIPLANE_OVERLAY;
+
+typedef struct _D3DKMT_RENDERFLAGS
+{
+ UINT ResizeCommandBuffer : 1; // 0x00000001
+ UINT ResizeAllocationList : 1; // 0x00000002
+ UINT ResizePatchLocationList : 1; // 0x00000004
+ UINT NullRendering : 1; // 0x00000008
+ UINT PresentRedirected : 1; // 0x00000010
+ UINT RenderKm : 1; // 0x00000020 Cannot be used with
DxgkRender
+ UINT RenderKmReadback : 1; // 0x00000040 Cannot be used with
DxgkRender
+ UINT Reserved : 25; // 0xFFFFFF80
+} D3DKMT_RENDERFLAGS;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+typedef struct _D3DKMT_OUTPUTDUPLPRESENTFLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT ProtectedContentBlankedOut : 1;
+ UINT RemoteSession : 1;
+ UINT FullScreenPresent : 1;
+ UINT PresentIndirect : 1;
+ UINT Reserved : 28;
+ };
+ UINT Value;
+ };
+}D3DKMT_OUTPUTDUPLPRESENTFLAGS;
+
+typedef struct _D3DKMT_OUTPUTDUPLPRESENT
+{
+ D3DKMT_HANDLE hContext; // in: Indentifies the context
+ D3DKMT_HANDLE hSource; // in: Source allocation to
present from
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ ULONG BroadcastContextCount; //
in: Specifies the number of context
+ D3DKMT_HANDLE BroadcastContext[D3DDDI_MAX_BROADCAST_CONTEXT]; //
in: Specifies the handle of the context to
+ D3DKMT_PRESENT_RGNS PresentRegions; // in: Dirty and move regions
+ D3DKMT_OUTPUTDUPLPRESENTFLAGS Flags;
+ D3DKMT_HANDLE hIndirectContext;
+} D3DKMT_OUTPUTDUPLPRESENT;
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+
+typedef struct _D3DKMT_OUTPUTDUPLPRESENTTOHWQUEUE
+{
+ D3DKMT_HANDLE hSource; // in: Source allocation to
present from
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ ULONG BroadcastHwQueueCount;
+ D3DKMT_PTR(_Field_size_(BroadcastHwQueueCount)
+ D3DKMT_HANDLE*, hHwQueues);
+ D3DKMT_PRESENT_RGNS PresentRegions; // in: Dirty and move regions
+ D3DKMT_OUTPUTDUPLPRESENTFLAGS Flags;
+ D3DKMT_HANDLE hIndirectHwQueue;
+} D3DKMT_OUTPUTDUPLPRESENTTOHWQUEUE;
+
+#endif
+
+typedef struct _D3DKMT_RENDER
+{
+ union
+ {
+ D3DKMT_HANDLE hDevice; // in: D3D10
compatibility.
+ D3DKMT_HANDLE hContext; // in: Indentifies the
context
+ };
+ UINT CommandOffset; // in: offset in bytes
from start
+ UINT CommandLength; // in: number of bytes
+ UINT AllocationCount; // in: Number of
allocations in allocation list.
+ UINT PatchLocationCount; // in: Number of patch
locations in patch allocation list.
+ D3DKMT_PTR(VOID*, pNewCommandBuffer); // out: Pointer to the
next command buffer to use.
+ // in: When RenderKm flag
is set, it points to a command buffer.
+ UINT NewCommandBufferSize; // in: Size requested for
the next command buffer.
+ // out: Size of the next
command buffer to use.
+ D3DKMT_PTR(D3DDDI_ALLOCATIONLIST*, pNewAllocationList); // out: Pointer to the
next allocation list to use.
+ // in: When RenderKm flag
is set, it points to an allocation list.
+ UINT NewAllocationListSize; // in: Size requested for
the next allocation list.
+ // out: Size of the new
allocation list.
+ D3DKMT_PTR(D3DDDI_PATCHLOCATIONLIST*, pNewPatchLocationList); // out: Pointer to the
next patch location list.
+ UINT NewPatchLocationListSize; // in: Size requested for
the next patch location list.
+ // out: Size of the new
patch location list.
+ D3DKMT_RENDERFLAGS Flags; // in:
+ D3DKMT_ALIGN64 ULONGLONG PresentHistoryToken; // in: Present history
token for redirected present calls
+ ULONG BroadcastContextCount; //
in: Specifies the number of context
+ //
to broadcast this command buffer to.
+ D3DKMT_HANDLE BroadcastContext[D3DDDI_MAX_BROADCAST_CONTEXT]; //
in: Specifies the handle of the context to
+ //
broadcast to.
+ ULONG QueuedBufferCount; // out: Number of DMA
buffer queued to this context after this submission.
+ D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS NewCommandBuffer; // out: GPU virtual
address of next command buffer to use. _ADVSCH_
+ D3DKMT_PTR(VOID*, pPrivateDriverData); // in: pointer to private
driver data. _ADVSCH_
+ UINT PrivateDriverDataSize; // in: size of private
driver data. _ADVSCH_
+} D3DKMT_RENDER;
+
+
+typedef enum _D3DKMT_STANDARDALLOCATIONTYPE
+{
+ D3DKMT_STANDARDALLOCATIONTYPE_EXISTINGHEAP = 1,
+ D3DKMT_STANDARDALLOCATIONTYPE_INTERNALBACKINGSTORE = 2,
+ D3DKMT_STANDARDALLOCATIONTYPE_MAX,
+} D3DKMT_STANDARDALLOCATIONTYPE;
+
+typedef struct _D3DKMT_STANDARDALLOCATION_EXISTINGHEAP
+{
+ D3DKMT_ALIGN64 D3DKMT_SIZE_T Size; // in: Size in bytes of existing heap
+} D3DKMT_STANDARDALLOCATION_EXISTINGHEAP;
+
+typedef struct _D3DKMT_CREATESTANDARDALLOCATIONFLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT Reserved : 32; // 0xFFFFFFFF
+ };
+ UINT Value;
+ };
+} D3DKMT_CREATESTANDARDALLOCATIONFLAGS;
+
+typedef struct _D3DKMT_CREATESTANDARDALLOCATION
+{
+ //
+ // update onecoreuap/windows/core/ntuser/inc/whwin32.tpl when adding new memeber
+ // to this struct
+ //
+ D3DKMT_STANDARDALLOCATIONTYPE Type;
+ union
+ {
+ D3DKMT_STANDARDALLOCATION_EXISTINGHEAP ExistingHeapData;
+ };
+ D3DKMT_CREATESTANDARDALLOCATIONFLAGS Flags;
+} D3DKMT_CREATESTANDARDALLOCATION;
+
+typedef struct _D3DKMT_CREATEALLOCATIONFLAGS
+{
+ UINT CreateResource : 1; // 0x00000001
+ UINT CreateShared : 1; // 0x00000002
+ UINT NonSecure : 1; // 0x00000004
+ UINT CreateProtected : 1; // 0x00000008 Cannot be used when
allocation is created from the user mode.
+ UINT RestrictSharedAccess : 1; // 0x00000010
+ UINT ExistingSysMem : 1; // 0x00000020 Cannot be used when
allocation is created from the user mode.
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ UINT NtSecuritySharing : 1; // 0x00000040
+ UINT ReadOnly : 1; // 0x00000080
+ UINT CreateWriteCombined : 1; // 0x00000100 Cannot be used when
allocation is created from the user mode.
+ UINT CreateCached : 1; // 0x00000200 Cannot be used when
allocation is created from the user mode.
+ UINT SwapChainBackBuffer : 1; // 0x00000400 Specifies whether an
allocation corresponds to a swap chain back buffer.
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ UINT CrossAdapter : 1; // 0x00000800
+ UINT OpenCrossAdapter : 1; // 0x00001000 Cannot be used when
allocation is created from the user mode.
+ UINT PartialSharedCreation : 1; // 0x00002000
+ UINT Zeroed : 1; // 0x00004000 // out: set when
allocation fulfilled by zero pages
+ UINT WriteWatch : 1; // 0x00008000 // in: request Mm to
track writes to pages of this allocation
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+ UINT StandardAllocation : 1; // 0x00010000 // in: use
pStandardAllocation instead of pPrivateDriverData
+ UINT ExistingSection : 1; // 0x00020000 // in: Use Section Handle
instead of SysMem in D3DDI_ALLOCATIONINFO2
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+ UINT AllowNotZeroed : 1; // 0x00040000 // in: indicate zeroed
pages are not required
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+ UINT PhysicallyContiguous : 1; // 0x00080000 // in: indicate
allocation must be physically contguous
+ UINT NoKmdAccess : 1; // 0x00100000 // in: KMD is not
notified about the allocation
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
+ UINT SharedDisplayable : 1; // 0x00200000
+ UINT Reserved : 10; // 0xFFC00000
+#else
+ UINT Reserved : 11; // 0xFFE00000
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
+#else
+ UINT Reserved : 13; // 0xFFF80000
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+#else
+ UINT Reserved : 14; // 0xFFFC0000
+#endif //(DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+#else
+ UINT Reserved : 16; // 0xFFFF0000
+#endif //(DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+#else
+ UINT Reserved : 21; // 0xFFFFF800
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+#else
+ UINT Reserved : 26; // 0xFFFFFFC0
+#endif
+} D3DKMT_CREATEALLOCATIONFLAGS;
+
+typedef struct _D3DKMT_CREATEALLOCATION
+{
+ D3DKMT_HANDLE hDevice;
+ D3DKMT_HANDLE hResource; //in/out:valid only within device
+ D3DKMT_HANDLE hGlobalShare; //out:Shared handle if CreateShared
and not NtSecuritySharing
+ D3DKMT_PTR(_Field_size_bytes_(PrivateRuntimeDataSize)
+ CONST VOID*, pPrivateRuntimeData);
+ UINT PrivateRuntimeDataSize;
+ union
+ {
+ //
+ // update onecoreuap/windows/core/ntuser/inc/whwin32.tpl when adding new memeber
+ // to this union
+ //
+ D3DKMT_CREATESTANDARDALLOCATION* pStandardAllocation;
+ _Field_size_bytes_(PrivateDriverDataSize)
+ CONST VOID* pPrivateDriverData;
+ D3DKMT_PTR_HELPER( AlignUnionTo64_1)
+ };
+ UINT PrivateDriverDataSize;
+ UINT NumAllocations;
+ union
+ {
+ _Field_size_(NumAllocations) D3DDDI_ALLOCATIONINFO* pAllocationInfo;
+#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN7) || \
+ (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WIN7))
+ _Field_size_(NumAllocations) D3DDDI_ALLOCATIONINFO2* pAllocationInfo2; //
_ADVSCH_
+#endif
+ D3DKMT_PTR_HELPER( AlignUnionTo64_2)
+ };
+ D3DKMT_CREATEALLOCATIONFLAGS Flags;
+ D3DKMT_PTR(HANDLE, hPrivateRuntimeResourceHandle); // opaque handle used
for event tracing
+} D3DKMT_CREATEALLOCATION;
+
+typedef struct _D3DKMT_OPENRESOURCE
+{
+ D3DKMT_HANDLE
hDevice; // in : Indentifies the device
+ D3DKMT_HANDLE
hGlobalShare; // in : Shared resource handle
+ UINT
NumAllocations; // in : Number of allocations associated with the
resource
+ union {
+ _Field_size_(NumAllocations) D3DDDI_OPENALLOCATIONINFO*
pOpenAllocationInfo; // in : Array of open allocation structs
+#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN7) || \
+ (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WIN7))
+ _Field_size_(NumAllocations) D3DDDI_OPENALLOCATIONINFO2*
pOpenAllocationInfo2; // in : Array of open allocation structs // _ADVSCH_
+#endif
+ D3DKMT_PTR_HELPER(AlignUnionTo64)
+ };
+ D3DKMT_PTR(_Field_size_bytes_(PrivateRuntimeDataSize) VOID*,
pPrivateRuntimeData); // in : Caller supplied buffer where the runtime
private data associated with this resource will be copied
+ UINT
PrivateRuntimeDataSize; // in : Size in bytes of the pPrivateRuntimeData
buffer
+ D3DKMT_PTR(_Field_size_bytes_(ResourcePrivateDriverDataSize) VOID*,
pResourcePrivateDriverData); // in : Caller supplied buffer where the driver
private data associated with the resource will be copied
+ UINT
ResourcePrivateDriverDataSize; // in : Size in bytes of the
pResourcePrivateDriverData buffer
+ D3DKMT_PTR(_Field_size_bytes_(TotalPrivateDriverDataBufferSize) VOID*,
pTotalPrivateDriverDataBuffer); // in : Caller supplied buffer where the Driver
private data will be stored
+ UINT
TotalPrivateDriverDataBufferSize; // in/out : Size in bytes of
pTotalPrivateDriverDataBuffer / Size in bytes of data written to
pTotalPrivateDriverDataBuffer
+ D3DKMT_HANDLE
hResource; // out : Handle for this resource in this process
+}D3DKMT_OPENRESOURCE;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+typedef struct _D3DKMT_OPENRESOURCEFROMNTHANDLE
+{
+ D3DKMT_HANDLE
hDevice; // in : Indentifies the device
+ D3DKMT_PTR( HANDLE,
hNtHandle); // in : Process's NT handle
+ UINT
NumAllocations; // in : Number of allocations associated with the
resource
+ D3DKMT_PTR(_Field_size_(NumAllocations) D3DDDI_OPENALLOCATIONINFO2*,
pOpenAllocationInfo2); // in : Array of open allocation structs // _ADVSCH_
+ UINT
PrivateRuntimeDataSize; // in : Size in bytes of the pPrivateRuntimeData
buffer
+ D3DKMT_PTR(_Field_size_bytes_(PrivateRuntimeDataSize) VOID*,
pPrivateRuntimeData); // in : Caller supplied buffer where the runtime
private data associated with this resource will be copied
+ UINT
ResourcePrivateDriverDataSize; // in : Size in bytes of the
pResourcePrivateDriverData buffer
+ D3DKMT_PTR(_Field_size_bytes_(ResourcePrivateDriverDataSize) VOID*,
pResourcePrivateDriverData); // in : Caller supplied buffer where the driver
private data associated with the resource will be copied
+ UINT
TotalPrivateDriverDataBufferSize; // in/out : Size in bytes of
pTotalPrivateDriverDataBuffer / Size in bytes of data written to
pTotalPrivateDriverDataBuffer
+ D3DKMT_PTR(_Field_size_bytes_(TotalPrivateDriverDataBufferSize) VOID*,
pTotalPrivateDriverDataBuffer); // in : Caller supplied buffer where the Driver
private data will be stored
+ D3DKMT_HANDLE
hResource; // out : Handle for this resource in this process
+
+ D3DKMT_HANDLE
hKeyedMutex; // out: Handle to the keyed mutex in this process
+ D3DKMT_PTR(_In_reads_bytes_opt_(PrivateRuntimeDataSize) VOID*,
pKeyedMutexPrivateRuntimeData); // in: Buffer containing initial private data.
+
// If NULL then PrivateRuntimeDataSize must be 0.
+
// It will only be copied if the keyed mutex does not
already have private data.
+ UINT
KeyedMutexPrivateRuntimeDataSize; // in: Size in bytes of pPrivateRuntimeData.
+ D3DKMT_HANDLE
hSyncObject; // out: Handle to sync object in this process.
+} D3DKMT_OPENRESOURCEFROMNTHANDLE;
+
+typedef struct _D3DKMT_OPENSYNCOBJECTFROMNTHANDLE
+{
+ D3DKMT_PTR(HANDLE, hNtHandle); // in : NT handle for the sync
object.
+ D3DKMT_HANDLE hSyncObject; // out: Handle to sync object in
this process.
+} D3DKMT_OPENSYNCOBJECTFROMNTHANDLE;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+typedef struct _D3DKMT_OPENSYNCOBJECTFROMNTHANDLE2
+{
+ D3DKMT_PTR(HANDLE, hNtHandle); // in : NT handle for the sync
object.
+ D3DKMT_HANDLE hDevice; // in : Device handle to use this
sync object on.
+ D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS Flags; // in : specifies sync object
behavior for this device.
+ D3DKMT_HANDLE hSyncObject; // out: Handle to sync object in
this process.
+
+ union
+ {
+
+ struct
+ {
+ D3DKMT_PTR(VOID*, FenceValueCPUVirtualAddress); // out:
Read-only mapping of the fence value for the CPU
+ D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress; // out:
Read/write mapping of the fence value for the GPU
+ UINT EngineAffinity; // in:
Defines physical adapters where the GPU VA should be mapped
+ } MonitoredFence;
+
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+ };
+
+} D3DKMT_OPENSYNCOBJECTFROMNTHANDLE2;
+
+typedef struct _D3DKMT_OPENSYNCOBJECTNTHANDLEFROMNAME
+{
+ DWORD dwDesiredAccess;
+ D3DKMT_PTR(OBJECT_ATTRIBUTES*, pObjAttrib);
+ D3DKMT_PTR(HANDLE, hNtHandle);
+} D3DKMT_OPENSYNCOBJECTNTHANDLEFROMNAME;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_0
+
+typedef struct _D3DKMT_OPENNTHANDLEFROMNAME
+{
+ DWORD dwDesiredAccess;
+ D3DKMT_PTR(OBJECT_ATTRIBUTES*, pObjAttrib);
+ D3DKMT_PTR(HANDLE, hNtHandle);
+} D3DKMT_OPENNTHANDLEFROMNAME;
+
+#define SHARED_ALLOCATION_WRITE 0x1
+#define SHARED_ALLOCATION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |
SHARED_ALLOCATION_WRITE)
+
+typedef struct _D3DKMT_QUERYRESOURCEINFOFROMNTHANDLE
+{
+ D3DKMT_HANDLE hDevice; // in : Indentifies the device
+ D3DKMT_PTR(HANDLE, hNtHandle); // in : Global resource handle to
open
+ D3DKMT_PTR(VOID*, pPrivateRuntimeData); // in : Ptr to buffer that will
receive runtime private data for the resource
+ UINT PrivateRuntimeDataSize; // in/out : Size in bytes of
buffer passed in for runtime private data / If pPrivateRuntimeData was NULL then size in
bytes of buffer required for the runtime private data otherwise size in bytes of runtime
private data copied into the buffer
+ UINT TotalPrivateDriverDataSize; // out : Size in bytes of buffer
required to hold all the DriverPrivate data for all of the allocations associated withe
the resource
+ UINT ResourcePrivateDriverDataSize; // out : Size in bytes of the
driver's resource private data
+ UINT NumAllocations; // out : Number of allocations
associated with this resource
+}D3DKMT_QUERYRESOURCEINFOFROMNTHANDLE;
+
+#endif
+
+typedef struct _D3DKMT_QUERYRESOURCEINFO
+{
+ D3DKMT_HANDLE hDevice; // in : Indentifies the device
+ D3DKMT_HANDLE hGlobalShare; // in : Global resource handle to
open
+ D3DKMT_PTR(VOID*, pPrivateRuntimeData); // in : Ptr to buffer that will
receive runtime private data for the resource
+ UINT PrivateRuntimeDataSize; // in/out : Size in bytes of buffer
passed in for runtime private data / If pPrivateRuntimeData was NULL then size in bytes of
buffer required for the runtime private data otherwise size in bytes of runtime private
data copied into the buffer
+ UINT TotalPrivateDriverDataSize; // out : Size in bytes of buffer
required to hold all the DriverPrivate data for all of the allocations associated withe
the resource
+ UINT ResourcePrivateDriverDataSize; // out : Size in bytes of the
driver's resource private data
+ UINT NumAllocations; // out : Number of allocations
associated with this resource
+}D3DKMT_QUERYRESOURCEINFO;
+
+typedef struct _D3DKMT_DESTROYALLOCATION
+{
+ D3DKMT_HANDLE hDevice; // in: Indentifies the device
+ D3DKMT_HANDLE hResource;
+ D3DKMT_PTR(CONST D3DKMT_HANDLE*, phAllocationList); // in: pointer to an array
allocation handles to destroy
+ UINT AllocationCount; // in: Number of allocations in
phAllocationList
+} D3DKMT_DESTROYALLOCATION;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+typedef struct _D3DKMT_DESTROYALLOCATION2
+{
+ D3DKMT_HANDLE hDevice; // in: Indentifies the
device
+ D3DKMT_HANDLE hResource;
+ D3DKMT_PTR(CONST D3DKMT_HANDLE*, phAllocationList); // in: pointer to an array
allocation handles to destroy
+ UINT AllocationCount; // in: Number of allocations
in phAllocationList
+ D3DDDICB_DESTROYALLOCATION2FLAGS Flags; // in: Bit field defined by
D3DDDICB_DESTROYALLOCATION2FLAGS
+} D3DKMT_DESTROYALLOCATION2;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_0
+
+typedef struct _D3DKMT_SETALLOCATIONPRIORITY
+{
+ D3DKMT_HANDLE hDevice; // in: Indentifies the device
+ D3DKMT_HANDLE hResource; // in: Specify the resource to set
priority to.
+ D3DKMT_PTR(CONST D3DKMT_HANDLE*, phAllocationList); // in: pointer to an array
allocation handles to destroy
+ UINT AllocationCount; // in: Number of allocations in
phAllocationList
+ D3DKMT_PTR(CONST UINT*, pPriorities); // in: New priority for each of the
allocation in the array.
+} D3DKMT_SETALLOCATIONPRIORITY;
+
+typedef enum _D3DKMT_ALLOCATIONRESIDENCYSTATUS
+{
+ D3DKMT_ALLOCATIONRESIDENCYSTATUS_RESIDENTINGPUMEMORY=1,
+ D3DKMT_ALLOCATIONRESIDENCYSTATUS_RESIDENTINSHAREDMEMORY=2,
+ D3DKMT_ALLOCATIONRESIDENCYSTATUS_NOTRESIDENT=3,
+} D3DKMT_ALLOCATIONRESIDENCYSTATUS;
+
+typedef struct _D3DKMT_QUERYALLOCATIONRESIDENCY
+{
+ D3DKMT_HANDLE hDevice; // in: Indentifies the
device
+ D3DKMT_HANDLE hResource; // in: pointer to resource
owning the list of allocation.
+ D3DKMT_PTR(CONST D3DKMT_HANDLE*, phAllocationList); // in: pointer to an array
allocation to get residency status.
+ UINT AllocationCount; // in: Number of allocations
in phAllocationList
+ D3DKMT_PTR(D3DKMT_ALLOCATIONRESIDENCYSTATUS*, pResidencyStatus); // out: Residency
status of each allocation in the array.
+} D3DKMT_QUERYALLOCATIONRESIDENCY;
+
+typedef struct _D3DKMT_GETRUNTIMEDATA
+{
+ D3DKMT_HANDLE hAdapter;
+ D3DKMT_HANDLE hGlobalShare; // in: shared handle
+ D3DKMT_PTR(VOID*, pRuntimeData); // out: in: for a version?
+ UINT RuntimeDataSize; // in:
+} D3DKMT_GETRUNTIMEDATA;
+
+typedef enum _KMTUMDVERSION
+{
+ KMTUMDVERSION_DX9 = 0,
+ KMTUMDVERSION_DX10,
+ KMTUMDVERSION_DX11,
+ KMTUMDVERSION_DX12,
+ NUM_KMTUMDVERSIONS
+} KMTUMDVERSION;
+
+typedef struct _D3DKMT_UMDFILENAMEINFO
+{
+ KMTUMDVERSION Version; // In: UMD version
+ WCHAR UmdFileName[MAX_PATH]; // Out: UMD file name
+} D3DKMT_UMDFILENAMEINFO;
+
+#define D3DKMT_COMPONENTIZED_INDICATOR L'#'
+#define D3DKMT_SUBKEY_DX9 L"DX9"
+#define D3DKMT_SUBKEY_OPENGL L"OpenGL"
+
+typedef struct _D3DKMT_OPENGLINFO
+{
+ WCHAR UmdOpenGlIcdFileName[MAX_PATH];
+ ULONG Version;
+ ULONG Flags;
+} D3DKMT_OPENGLINFO;
+
+typedef struct _D3DKMT_SEGMENTSIZEINFO
+{
+ D3DKMT_ALIGN64 ULONGLONG DedicatedVideoMemorySize;
+ D3DKMT_ALIGN64 ULONGLONG DedicatedSystemMemorySize;
+ D3DKMT_ALIGN64 ULONGLONG SharedSystemMemorySize;
+} D3DKMT_SEGMENTSIZEINFO;
+
+typedef struct _D3DKMT_SEGMENTGROUPSIZEINFO
+{
+ UINT32 PhysicalAdapterIndex;
+ D3DKMT_SEGMENTSIZEINFO LegacyInfo;
+ D3DKMT_ALIGN64 ULONGLONG LocalMemory;
+ D3DKMT_ALIGN64 ULONGLONG NonLocalMemory;
+ D3DKMT_ALIGN64 ULONGLONG NonBudgetMemory;
+} D3DKMT_SEGMENTGROUPSIZEINFO;
+
+typedef struct _D3DKMT_WORKINGSETFLAGS
+{
+ UINT UseDefault : 1; // 0x00000001
+ UINT Reserved : 31; // 0xFFFFFFFE
+} D3DKMT_WORKINGSETFLAGS;
+
+typedef struct _D3DKMT_WORKINGSETINFO
+{
+ D3DKMT_WORKINGSETFLAGS Flags;
+ ULONG MinimumWorkingSetPercentile;
+ ULONG MaximumWorkingSetPercentile;
+} D3DKMT_WORKINGSETINFO;
+
+typedef struct _D3DKMT_FLIPINFOFLAGS
+{
+ UINT FlipInterval : 1; // 0x00000001 // Set when kmd driver support
FlipInterval natively
+ UINT Reserved : 31; // 0xFFFFFFFE
+} D3DKMT_FLIPINFOFLAGS;
+
+typedef struct _D3DKMT_FLIPQUEUEINFO
+{
+ UINT MaxHardwareFlipQueueLength; // Max flip can be queued for
hardware flip queue.
+ UINT MaxSoftwareFlipQueueLength; // Max flip can be queued for
software flip queue for non-legacy device.
+ D3DKMT_FLIPINFOFLAGS FlipFlags;
+} D3DKMT_FLIPQUEUEINFO;
+
+typedef struct _D3DKMT_ADAPTERADDRESS
+{
+ UINT BusNumber; // Bus number on which the physical device is
located.
+ UINT DeviceNumber; // Index of the physical device on the bus.
+ UINT FunctionNumber; // Function number of the adapter on the physical
device.
+} D3DKMT_ADAPTERADDRESS;
+
+typedef struct _D3DKMT_ADAPTERREGISTRYINFO
+{
+ WCHAR AdapterString[MAX_PATH];
+ WCHAR BiosString[MAX_PATH];
+ WCHAR DacType[MAX_PATH];
+ WCHAR ChipType[MAX_PATH];
+} D3DKMT_ADAPTERREGISTRYINFO;
+
+typedef struct _D3DKMT_CURRENTDISPLAYMODE
+{
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ D3DKMT_DISPLAYMODE DisplayMode;
+} D3DKMT_CURRENTDISPLAYMODE;
+
+typedef struct _D3DKMT_VIRTUALADDRESSFLAGS // _ADVSCH_
+{
+ UINT VirtualAddressSupported : 1;
+ UINT Reserved : 31;
+} D3DKMT_VIRTUALADDRESSFLAGS;
+
+typedef struct _D3DKMT_VIRTUALADDRESSINFO // _ADVSCH_
+{
+ D3DKMT_VIRTUALADDRESSFLAGS VirtualAddressFlags;
+} D3DKMT_VIRTUALADDRESSINFO;
+
+typedef enum _QAI_DRIVERVERSION
+{
+ KMT_DRIVERVERSION_WDDM_1_0 = 1000,
+ KMT_DRIVERVERSION_WDDM_1_1_PRERELEASE = 1102,
+ KMT_DRIVERVERSION_WDDM_1_1 = 1105,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ KMT_DRIVERVERSION_WDDM_1_2 = 1200,
+#endif
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ KMT_DRIVERVERSION_WDDM_1_3 = 1300,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM1_3
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+ KMT_DRIVERVERSION_WDDM_2_0 = 2000,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_0
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+ KMT_DRIVERVERSION_WDDM_2_1 = 2100,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_1
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
+ KMT_DRIVERVERSION_WDDM_2_2 = 2200,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_2
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+ KMT_DRIVERVERSION_WDDM_2_3 = 2300,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_3
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+ KMT_DRIVERVERSION_WDDM_2_4 = 2400,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_4
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_5)
+ KMT_DRIVERVERSION_WDDM_2_5 = 2500,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_5
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+ KMT_DRIVERVERSION_WDDM_2_6 = 2600,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_6
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+ KMT_DRIVERVERSION_WDDM_2_7 = 2700,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_7
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_8)
+ KMT_DRIVERVERSION_WDDM_2_8 = 2800,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_8
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+ KMT_DRIVERVERSION_WDDM_2_9 = 2900,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_9
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
+ KMT_DRIVERVERSION_WDDM_3_0 = 3000
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM3_0
+} D3DKMT_DRIVERVERSION;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+typedef struct _D3DKMT_ADAPTERTYPE
+{
+ union
+ {
+ struct
+ {
+ UINT RenderSupported : 1;
+ UINT DisplaySupported : 1;
+ UINT SoftwareDevice : 1;
+ UINT PostDevice : 1;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ UINT HybridDiscrete : 1;
+ UINT HybridIntegrated : 1;
+ UINT IndirectDisplayDevice : 1;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+ UINT Paravirtualized : 1;
+ UINT ACGSupported : 1;
+ UINT SupportSetTimingsFromVidPn : 1;
+ UINT Detachable : 1;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+ UINT ComputeOnly : 1;
+ UINT Prototype : 1;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+ UINT RuntimePowerManagement : 1;
+ UINT Reserved : 18;
+#else
+ UINT Reserved : 19;
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+#else
+ UINT Reserved : 21;
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+#else
+ UINT Reserved : 25;
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+#else
+ UINT Reserved : 28;
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ };
+ UINT Value;
+ };
+} D3DKMT_ADAPTERTYPE;
+
+typedef struct _D3DKMT_OUTPUTDUPLCONTEXTSCOUNT
+{
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ UINT OutputDuplicationCount;
+} D3DKMT_OUTPUTDUPLCONTEXTSCOUNT;
+
+typedef struct _D3DKMT_UMD_DRIVER_VERSION
+{
+ D3DKMT_ALIGN64 LARGE_INTEGER DriverVersion;
+} D3DKMT_UMD_DRIVER_VERSION;
+
+typedef struct _D3DKMT_KMD_DRIVER_VERSION
+{
+ D3DKMT_ALIGN64 LARGE_INTEGER DriverVersion;
+} D3DKMT_KMD_DRIVER_VERSION;
+
+typedef struct _D3DKMT_DIRECTFLIP_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_DIRECTFLIP_SUPPORT;
+
+typedef struct _D3DKMT_MULTIPLANEOVERLAY_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_MULTIPLANEOVERLAY_SUPPORT;
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >=
DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION)
+typedef struct _D3DKMT_MULTIPLANEOVERLAY_HUD_SUPPORT
+{
+ UINT VidPnSourceId; // Not yet used.
+ BOOL Update;
+ BOOL KernelSupported;
+ BOOL HudSupported;
+} D3DKMT_MULTIPLANEOVERLAY_HUD_SUPPORT;
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+
+typedef struct _D3DKMT_DLIST_DRIVER_NAME
+{
+ WCHAR DListFileName[MAX_PATH]; // Out: DList driver file name
+} D3DKMT_DLIST_DRIVER_NAME;
+
+typedef struct _D3DKMT_CPDRIVERNAME
+{
+ WCHAR ContentProtectionFileName[MAX_PATH];
+} D3DKMT_CPDRIVERNAME;
+
+typedef struct _D3DKMT_MIRACASTCOMPANIONDRIVERNAME
+{
+ WCHAR MiracastCompanionDriverName[MAX_PATH];
+} D3DKMT_MIRACASTCOMPANIONDRIVERNAME;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM1_3
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+typedef struct _D3DKMT_XBOX
+{
+ BOOL IsXBOX;
+} D3DKMT_XBOX;
+
+typedef struct _D3DKMT_INDEPENDENTFLIP_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_INDEPENDENTFLIP_SUPPORT;
+
+typedef struct _D3DKMT_MULTIPLANEOVERLAY_DECODE_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_MULTIPLANEOVERLAY_DECODE_SUPPORT;
+
+typedef struct _D3DKMT_ISBADDRIVERFORHWPROTECTIONDISABLED
+{
+ BOOL Disabled;
+} D3DKMT_ISBADDRIVERFORHWPROTECTIONDISABLED;
+
+typedef struct _D3DKMT_MULTIPLANEOVERLAY_SECONDARY_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_MULTIPLANEOVERLAY_SECONDARY_SUPPORT;
+
+typedef struct _D3DKMT_INDEPENDENTFLIP_SECONDARY_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_INDEPENDENTFLIP_SECONDARY_SUPPORT;
+
+typedef struct _D3DKMT_PANELFITTER_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_PANELFITTER_SUPPORT;
+
+typedef struct _D3DKMT_PHYSICAL_ADAPTER_COUNT
+{
+ UINT Count;
+} D3DKMT_PHYSICAL_ADAPTER_COUNT;
+
+typedef struct _D3DKMT_DEVICE_IDS
+{
+ UINT VendorID;
+ UINT DeviceID;
+ UINT SubVendorID;
+ UINT SubSystemID;
+ UINT RevisionID;
+ UINT BusType;
+} D3DKMT_DEVICE_IDS;
+
+typedef struct _D3DKMT_QUERY_DEVICE_IDS
+{
+ UINT PhysicalAdapterIndex; // in:
+ D3DKMT_DEVICE_IDS DeviceIds; // out:
+} D3DKMT_QUERY_DEVICE_IDS;
+
+typedef enum _D3DKMT_PNP_KEY_TYPE
+{
+ D3DKMT_PNP_KEY_HARDWARE = 1,
+ D3DKMT_PNP_KEY_SOFTWARE = 2
+} D3DKMT_PNP_KEY_TYPE;
+
+typedef struct _D3DKMT_QUERY_PHYSICAL_ADAPTER_PNP_KEY
+{
+ UINT PhysicalAdapterIndex;
+ D3DKMT_PNP_KEY_TYPE PnPKeyType;
+ D3DKMT_PTR(_Field_size_opt_(*pCchDest) WCHAR*, pDest);
+ D3DKMT_PTR(UINT*, pCchDest);
+} D3DKMT_QUERY_PHYSICAL_ADAPTER_PNP_KEY;
+
+typedef enum _D3DKMT_MIRACAST_DRIVER_TYPE
+{
+ D3DKMT_MIRACAST_DRIVER_NOT_SUPPORTED = 0,
+ D3DKMT_MIRACAST_DRIVER_IHV = 1,
+ D3DKMT_MIRACAST_DRIVER_MS = 2,
+} D3DKMT_MIRACAST_DRIVER_TYPE;
+
+typedef struct _D3DKMT_QUERY_MIRACAST_DRIVER_TYPE
+{
+ D3DKMT_MIRACAST_DRIVER_TYPE MiracastDriverType;
+} D3DKMT_QUERY_MIRACAST_DRIVER_TYPE;
+
+typedef struct _D3DKMT_GPUMMU_CAPS
+{
+ union
+ {
+ struct
+ {
+ UINT ReadOnlyMemorySupported : 1;
+ UINT NoExecuteMemorySupported : 1;
+ UINT CacheCoherentMemorySupported : 1;
+ UINT Reserved : 29;
+ };
+ UINT Value;
+ } Flags;
+ UINT VirtualAddressBitCount;
+} D3DKMT_GPUMMU_CAPS;
+
+typedef struct _D3DKMT_QUERY_GPUMMU_CAPS
+{
+ UINT PhysicalAdapterIndex; // in:
+ D3DKMT_GPUMMU_CAPS Caps; // out:
+} D3DKMT_QUERY_GPUMMU_CAPS;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_0
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
+
+typedef struct _D3DKMT_MPO3DDI_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_MPO3DDI_SUPPORT;
+
+typedef struct _D3DKMT_HWDRM_SUPPORT
+{
+ BOOLEAN Supported;
+} D3DKMT_HWDRM_SUPPORT;
+
+typedef struct _D3DKMT_MPOKERNELCAPS_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_MPOKERNELCAPS_SUPPORT;
+
+typedef struct _D3DKMT_GET_DEVICE_VIDPN_OWNERSHIP_INFO
+{
+ D3DKMT_HANDLE hDevice; // in : Indentifies the device
+ BOOLEAN bFailedDwmAcquireVidPn; // out : True if Dwm Acquire VidPn
failed due to another Dwm device having ownership
+} D3DKMT_GET_DEVICE_VIDPN_OWNERSHIP_INFO;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_2
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+
+typedef struct _D3DKMT_BLOCKLIST_INFO
+{
+ UINT Size;
+ WCHAR BlockList[1];
+} D3DKMT_BLOCKLIST_INFO;
+
+typedef struct _D3DKMT_QUERY_ADAPTER_UNIQUE_GUID
+{
+ WCHAR AdapterUniqueGUID[40];
+} D3DKMT_QUERY_ADAPTER_UNIQUE_GUID;
+
+typedef struct _D3DKMT_NODE_PERFDATA
+{
+ UINT32 NodeOrdinal; // in: Node ordinal of the requested engine.
+ UINT32 PhysicalAdapterIndex; // in: The physical adapter index, in an LDA
chain
+ D3DKMT_ALIGN64 ULONGLONG Frequency; // out: Clock frequency of the engine in
hertz
+ D3DKMT_ALIGN64 ULONGLONG MaxFrequency; // out: Max engine clock frequency
+ D3DKMT_ALIGN64 ULONGLONG MaxFrequencyOC;// out: Max engine over clock frequency
+ ULONG Voltage; // out: Voltage of the engine in milli volts
mV
+ ULONG VoltageMax; // out: Max voltage levels in milli volts.
+ ULONG VoltageMaxOC; // out: Max voltage level while overclocked
in milli volts.
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_5)
+ D3DKMT_ALIGN64 ULONGLONG MaxTransitionLatency; // out: Max transition latency to
change the frequency in 100 nanoseconds
+#else
+ D3DKMT_ALIGN64 ULONGLONG Reserved;
+#endif
+} D3DKMT_NODE_PERFDATA;
+
+typedef struct _D3DKMT_ADAPTER_PERFDATA
+{
+ UINT32 PhysicalAdapterIndex; // in: The physical adapter index, in an LDA
chain
+ D3DKMT_ALIGN64 ULONGLONG MemoryFrequency; // out: Clock frequency of the
memory in hertz
+ D3DKMT_ALIGN64 ULONGLONG MaxMemoryFrequency; // out: Max memory clock frequency
+ D3DKMT_ALIGN64 ULONGLONG MaxMemoryFrequencyOC; // out: Clock frequency of the
memory while overclocked in hertz.
+ D3DKMT_ALIGN64 ULONGLONG MemoryBandwidth; // out: Amount of memory transferred
in bytes
+ D3DKMT_ALIGN64 ULONGLONG PCIEBandwidth; // out: Amount of memory transferred
over PCI-E in bytes
+ ULONG FanRPM; // out: Fan rpm
+ ULONG Power; // out: Power draw of the adapter in tenths
of a percentage
+ ULONG Temperature; // out: Temperature in deci-Celsius 1 = 0.1C
+ UCHAR PowerStateOverride; // out: Overrides dxgkrnls power view of
linked adapters.
+} D3DKMT_ADAPTER_PERFDATA;
+
+typedef struct _D3DKMT_ADAPTER_PERFDATACAPS
+{
+ UINT32 PhysicalAdapterIndex; // in: The physical adapter index, in an LDA
chain
+ D3DKMT_ALIGN64 ULONGLONG MaxMemoryBandwidth; // out: Max memory bandwidth in
bytes for 1 second
+ D3DKMT_ALIGN64 ULONGLONG MaxPCIEBandwidth; // out: Max pcie bandwidth in bytes
for 1 second
+ ULONG MaxFanRPM; // out: Max fan rpm
+ ULONG TemperatureMax; // out: Max temperature before damage levels
+ ULONG TemperatureWarning; // out: The temperature level where throttling
begins.
+} D3DKMT_ADAPTER_PERFDATACAPS;
+
+#define DXGK_MAX_GPUVERSION_NAME_LENGTH 32
+typedef struct _D3DKMT_GPUVERSION
+{
+ UINT32 PhysicalAdapterIndex; // in: The physical
adapter index, in an LDA chain
+ WCHAR BiosVersion[DXGK_MAX_GPUVERSION_NAME_LENGTH]; //out: The gpu bios
version
+ WCHAR GpuArchitecture[DXGK_MAX_GPUVERSION_NAME_LENGTH]; //out: The gpu
architectures name.
+} D3DKMT_GPUVERSION;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_4
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+
+typedef struct _D3DKMT_DRIVER_DESCRIPTION
+{
+ WCHAR DriverDescription[4096]; //out: The driver description
+} D3DKMT_DRIVER_DESCRIPTION;
+
+typedef struct _D3DKMT_QUERY_SCANOUT_CAPS
+{
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ UINT Caps;
+} D3DKMT_QUERY_SCANOUT_CAPS;
+
+typedef enum _KMT_DISPLAY_UMD_VERSION
+{
+ KMT_DISPLAY_UMDVERSION_1 = 0,
+ NUM_KMT_DISPLAY_UMDVERSIONS
+} KMT_DISPLAY_UMD_VERSION;
+
+typedef struct _D3DKMT_DISPLAY_UMD_FILENAMEINFO
+{
+ KMT_DISPLAY_UMD_VERSION Version; // In: UMD version
+ WCHAR UmdFileName[MAX_PATH]; // Out: UMD file name
+} D3DKMT_DISPLAY_UMD_FILENAMEINFO;
+
+typedef struct _D3DKMT_PARAVIRTUALIZATION
+{
+ // This adapter property originates from the VM/ Container, and is currently
replicated on adapters.
+ // It precludes extended device functions (i.e. Escapes) for paravirtualized devices
which not known at all,
+ // and therefore assumed not to be secure enough for demanding server scenarios.
+ BOOLEAN SecureContainer;
+} D3DKMT_PARAVIRTUALIZATION;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_6
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_8)
+
+typedef struct _D3DKMT_HYBRID_DLIST_DLL_SUPPORT
+{
+ BOOL Supported;
+} D3DKMT_HYBRID_DLIST_DLL_SUPPORT;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_8
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+
+
+typedef enum _D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER
+{
+ D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER_NONE = 0,
+ D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER_COPY = 1,
+ D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER_TEXTURE = 2,
+ D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER_SCANOUT = 3,
+} D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER;
+
+typedef struct _D3DKMT_CROSSADAPTERRESOURCE_SUPPORT
+{
+ D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER SupportTier;
+} D3DKMT_CROSSADAPTERRESOURCE_SUPPORT;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_9
+
+typedef enum _KMTQUERYADAPTERINFOTYPE
+{
+ KMTQAITYPE_UMDRIVERPRIVATE = 0,
+ KMTQAITYPE_UMDRIVERNAME = 1,
+ KMTQAITYPE_UMOPENGLINFO = 2,
+ KMTQAITYPE_GETSEGMENTSIZE = 3,
+ KMTQAITYPE_ADAPTERGUID = 4,
+ KMTQAITYPE_FLIPQUEUEINFO = 5,
+ KMTQAITYPE_ADAPTERADDRESS = 6,
+ KMTQAITYPE_SETWORKINGSETINFO = 7,
+ KMTQAITYPE_ADAPTERREGISTRYINFO = 8,
+ KMTQAITYPE_CURRENTDISPLAYMODE = 9,
+ KMTQAITYPE_MODELIST = 10,
+ KMTQAITYPE_CHECKDRIVERUPDATESTATUS = 11,
+ KMTQAITYPE_VIRTUALADDRESSINFO = 12, // _ADVSCH_
+ KMTQAITYPE_DRIVERVERSION = 13,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ KMTQAITYPE_ADAPTERTYPE = 15,
+ KMTQAITYPE_OUTPUTDUPLCONTEXTSCOUNT = 16,
+ KMTQAITYPE_WDDM_1_2_CAPS = 17,
+ KMTQAITYPE_UMD_DRIVER_VERSION = 18,
+ KMTQAITYPE_DIRECTFLIP_SUPPORT = 19,
+#endif
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ KMTQAITYPE_MULTIPLANEOVERLAY_SUPPORT = 20,
+ KMTQAITYPE_DLIST_DRIVER_NAME = 21,
+ KMTQAITYPE_WDDM_1_3_CAPS = 22,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM1_3
+#if (DXGKDDI_INTERFACE_VERSION >=
DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION)
+ KMTQAITYPE_MULTIPLANEOVERLAY_HUD_SUPPORT = 23,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+ KMTQAITYPE_WDDM_2_0_CAPS = 24,
+ KMTQAITYPE_NODEMETADATA = 25,
+ KMTQAITYPE_CPDRIVERNAME = 26,
+ KMTQAITYPE_XBOX = 27,
+ KMTQAITYPE_INDEPENDENTFLIP_SUPPORT = 28,
+ KMTQAITYPE_MIRACASTCOMPANIONDRIVERNAME = 29,
+ KMTQAITYPE_PHYSICALADAPTERCOUNT = 30,
+ KMTQAITYPE_PHYSICALADAPTERDEVICEIDS = 31,
+ KMTQAITYPE_DRIVERCAPS_EXT = 32,
+ KMTQAITYPE_QUERY_MIRACAST_DRIVER_TYPE = 33,
+ KMTQAITYPE_QUERY_GPUMMU_CAPS = 34,
+ KMTQAITYPE_QUERY_MULTIPLANEOVERLAY_DECODE_SUPPORT = 35,
+ KMTQAITYPE_QUERY_HW_PROTECTION_TEARDOWN_COUNT = 36,
+ KMTQAITYPE_QUERY_ISBADDRIVERFORHWPROTECTIONDISABLED = 37,
+ KMTQAITYPE_MULTIPLANEOVERLAY_SECONDARY_SUPPORT = 38,
+ KMTQAITYPE_INDEPENDENTFLIP_SECONDARY_SUPPORT = 39,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_0
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+ KMTQAITYPE_PANELFITTER_SUPPORT = 40,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_1
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
+ KMTQAITYPE_PHYSICALADAPTERPNPKEY = 41,
+ KMTQAITYPE_GETSEGMENTGROUPSIZE = 42,
+ KMTQAITYPE_MPO3DDI_SUPPORT = 43,
+ KMTQAITYPE_HWDRM_SUPPORT = 44,
+ KMTQAITYPE_MPOKERNELCAPS_SUPPORT = 45,
+ KMTQAITYPE_MULTIPLANEOVERLAY_STRETCH_SUPPORT = 46,
+ KMTQAITYPE_GET_DEVICE_VIDPN_OWNERSHIP_INFO = 47,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_2
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+ KMTQAITYPE_QUERYREGISTRY = 48,
+ KMTQAITYPE_KMD_DRIVER_VERSION = 49,
+ KMTQAITYPE_BLOCKLIST_KERNEL = 50,
+ KMTQAITYPE_BLOCKLIST_RUNTIME = 51,
+ KMTQAITYPE_ADAPTERGUID_RENDER = 52,
+ KMTQAITYPE_ADAPTERADDRESS_RENDER = 53,
+ KMTQAITYPE_ADAPTERREGISTRYINFO_RENDER = 54,
+ KMTQAITYPE_CHECKDRIVERUPDATESTATUS_RENDER = 55,
+ KMTQAITYPE_DRIVERVERSION_RENDER = 56,
+ KMTQAITYPE_ADAPTERTYPE_RENDER = 57,
+ KMTQAITYPE_WDDM_1_2_CAPS_RENDER = 58,
+ KMTQAITYPE_WDDM_1_3_CAPS_RENDER = 59,
+ KMTQAITYPE_QUERY_ADAPTER_UNIQUE_GUID = 60,
+ KMTQAITYPE_NODEPERFDATA = 61,
+ KMTQAITYPE_ADAPTERPERFDATA = 62,
+ KMTQAITYPE_ADAPTERPERFDATA_CAPS = 63,
+ KMTQUITYPE_GPUVERSION = 64,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_4
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+ KMTQAITYPE_DRIVER_DESCRIPTION = 65,
+ KMTQAITYPE_DRIVER_DESCRIPTION_RENDER = 66,
+ KMTQAITYPE_SCANOUT_CAPS = 67,
+ KMTQAITYPE_DISPLAY_UMDRIVERNAME = 71, // Added in 19H2
+ KMTQAITYPE_PARAVIRTUALIZATION_RENDER = 68,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_6
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+ KMTQAITYPE_SERVICENAME = 69,
+ KMTQAITYPE_WDDM_2_7_CAPS = 70,
+ KMTQAITYPE_TRACKEDWORKLOAD_SUPPORT = 72,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_7
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_8)
+ KMTQAITYPE_HYBRID_DLIST_DLL_SUPPORT = 73,
+ KMTQAITYPE_DISPLAY_CAPS = 74,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_8
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+ KMTQAITYPE_WDDM_2_9_CAPS = 75,
+ KMTQAITYPE_CROSSADAPTERRESOURCE_SUPPORT = 76,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_9
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
+ KMTQAITYPE_WDDM_3_0_CAPS = 77,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM3_0
+// If a new enum will be used by DXGI or D3D11 software driver code, update the test
content in the area.
+// Search for KMTQAITYPE_PARAVIRTUALIZATION_RENDER in directx\dxg\dxgi\unittests for
references.
+} KMTQUERYADAPTERINFOTYPE;
+
+typedef struct _D3DKMT_QUERYADAPTERINFO
+{
+ D3DKMT_HANDLE hAdapter;
+ KMTQUERYADAPTERINFOTYPE Type;
+ D3DKMT_PTR(VOID*, pPrivateDriverData);
+ UINT PrivateDriverDataSize;
+} D3DKMT_QUERYADAPTERINFO;
+
+typedef struct _D3DKMT_OPENADAPTERFROMHDC
+{
+ D3DKMT_PTR(HDC, hDc); // in: DC that maps to a single
display
+ D3DKMT_HANDLE hAdapter; // out: adapter handle
+ LUID AdapterLuid; // out: adapter LUID
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // out: VidPN source ID for that
particular display
+} D3DKMT_OPENADAPTERFROMHDC;
+
+typedef struct _D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME
+{
+ WCHAR DeviceName[32]; // in: Name of GDI device from which
to open an adapter instance
+ D3DKMT_HANDLE hAdapter; // out: adapter handle
+ LUID AdapterLuid; // out: adapter LUID
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // out: VidPN source ID for that
particular display
+} D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME;
+
+typedef struct _D3DKMT_OPENADAPTERFROMDEVICENAME
+{
+ D3DKMT_PTR(PCWSTR, pDeviceName); // in: NULL terminated string
containing the device name to open
+ D3DKMT_HANDLE hAdapter; // out: adapter handle
+ LUID AdapterLuid; // out: adapter LUID
+} D3DKMT_OPENADAPTERFROMDEVICENAME;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+
+#define MAX_ENUM_ADAPTERS 16
+
+typedef struct _D3DKMT_ADAPTERINFO
+{
+ D3DKMT_HANDLE hAdapter;
+ LUID AdapterLuid;
+ ULONG NumOfSources;
+ BOOL bPrecisePresentRegionsPreferred;
+} D3DKMT_ADAPTERINFO;
+
+typedef struct _D3DKMT_ENUMADAPTERS
+{
+ _In_range_(0, MAX_ENUM_ADAPTERS) ULONG NumAdapters;
+ D3DKMT_ADAPTERINFO Adapters[MAX_ENUM_ADAPTERS];
+} D3DKMT_ENUMADAPTERS;
+
+typedef struct _D3DKMT_ENUMADAPTERS2
+{
+ ULONG NumAdapters; // in/out: On input, the count of the
pAdapters array buffer. On output, the number of adapters enumerated.
+ D3DKMT_PTR(D3DKMT_ADAPTERINFO*, pAdapters); // out: Array of enumerated adapters
containing NumAdapters elements
+} D3DKMT_ENUMADAPTERS2;
+
+typedef struct _D3DKMT_OPENADAPTERFROMLUID
+{
+ LUID AdapterLuid;
+ D3DKMT_HANDLE hAdapter;
+} D3DKMT_OPENADAPTERFROMLUID;
+
+typedef struct _D3DKMT_QUERYREMOTEVIDPNSOURCEFROMGDIDISPLAYNAME
+{
+ WCHAR DeviceName[32]; // in: Name of GDI device from which
to open an adapter instance
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // out: VidPN source ID for that
particular display
+} D3DKMT_QUERYREMOTEVIDPNSOURCEFROMGDIDISPLAYNAME;
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+typedef union _D3DKMT_ENUMADAPTERS_FILTER
+{
+ // Setting none of these flags will still enumerate adapters,
+ // but there are fewer adapters than EnumAdapters2 enumerates.
+ // ComputeOnly adapters are left out of the default enumeration, to avoid breaking
applications.
+ // DisplayOnly adapters are also left out of the default enumeration.
+ struct
+ {
+ ULONGLONG IncludeComputeOnly : 1;
+ ULONGLONG IncludeDisplayOnly : 1;
+ ULONGLONG Reserved : 62;
+ };
+ D3DKMT_ALIGN64 ULONGLONG Value;
+} D3DKMT_ENUMADAPTERS_FILTER;
+
+typedef struct _D3DKMT_ENUMADAPTERS3
+{
+ D3DKMT_ENUMADAPTERS_FILTER Filter; // in: Defines the filter
+ ULONG NumAdapters; // in/out: On input, the count of the
pAdapters array buffer. On output, the number of adapters enumerated.
+ D3DKMT_PTR(D3DKMT_ADAPTERINFO*, pAdapters); // out: Array of enumerated adapters
containing NumAdapters elements
+} D3DKMT_ENUMADAPTERS3;
+#endif
+
+typedef struct _D3DKMT_CLOSEADAPTER
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+} D3DKMT_CLOSEADAPTER;
+
+typedef struct _D3DKMT_GETSHAREDPRIMARYHANDLE
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN source ID
+ D3DKMT_HANDLE hSharedPrimary; // out: global shared primary handle
(if one exists currently)
+} D3DKMT_GETSHAREDPRIMARYHANDLE;
+
+typedef struct _D3DKMT_SHAREDPRIMARYLOCKNOTIFICATION
+{
+ LUID AdapterLuid;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ RECTL LockRect; // in: If zero rect then we
are locking the whole primary else the lock sub-rect
+} D3DKMT_SHAREDPRIMARYLOCKNOTIFICATION;
+
+typedef struct _D3DKMT_SHAREDPRIMARYUNLOCKNOTIFICATION
+{
+ LUID AdapterLuid;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+} D3DKMT_SHAREDPRIMARYUNLOCKNOTIFICATION;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+typedef struct _D3DKMT_PINDIRECTFLIPRESOURCES
+{
+ D3DKMT_HANDLE hDevice; // in : Indentifies
the device
+ UINT ResourceCount; // in : Number of
resources to pin
+ D3DKMT_PTR(_Field_size_(ResourceCount) D3DKMT_HANDLE*, pResourceList); // in :
Array of resource handles to pin
+} D3DKMT_PINDIRECTFLIPRESOURCES;
+
+typedef struct _D3DKMT_UNPINDIRECTFLIPRESOURCES
+{
+ D3DKMT_HANDLE hDevice; // in : Indentifies
the device
+ UINT ResourceCount; // in : Number of
resources to unpin
+ D3DKMT_PTR(_Field_size_(ResourceCount) D3DKMT_HANDLE*, pResourceList); // in :
Array of resource handles to unpin
+} D3DKMT_UNPINDIRECTFLIPRESOURCES;
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+typedef union _D3DKMT_PINRESOURCEFLAGS
+{
+ struct
+ {
+ UINT DirectFlipResources : 1; // Used by DWM to indicate the resources are
DirectFlip resources
+ // and should be pinned in-place.
+ UINT Reserved : 31;
+ };
+ UINT Value;
+} D3DKMT_PINRESOURCEFLAGS;
+
+typedef struct _D3DKMT_PINRESOURCES
+{
+ D3DKMT_HANDLE hDevice; // in : Indentifies
the device
+ UINT ResourceCount; // in : Number of
resources to pin
+ D3DKMT_PTR(_Field_size_(ResourceCount) D3DKMT_HANDLE*, pResourceList); // in :
Array of resource handles to pin
+ D3DKMT_PINRESOURCEFLAGS Flags; // in : Flags
+ D3DKMT_HANDLE hPagingQueue; // in opt : Handle to
a paging queue used to synchronize the operation
+ D3DKMT_ALIGN64 UINT64 PagingFence; // out : Fence value
returned if hPagingQueue is not NULL
+} D3DKMT_PINRESOURCES;
+
+typedef struct _D3DKMT_UNPINRESOURCES
+{
+ D3DKMT_HANDLE hDevice; // in : Indentifies
the device
+ UINT ResourceCount; // in : Number of
resources to unpin
+ D3DKMT_PTR(_Field_size_(ResourceCount) D3DKMT_HANDLE*, pResourceList); // in :
Array of resource handles to unpin
+ UINT Reserved;
+} D3DKMT_UNPINRESOURCES;
+#endif
+
+typedef enum _D3DKMT_ESCAPETYPE
+{
+ D3DKMT_ESCAPE_DRIVERPRIVATE = 0,
+ D3DKMT_ESCAPE_VIDMM = 1,
+ D3DKMT_ESCAPE_TDRDBGCTRL = 2,
+ D3DKMT_ESCAPE_VIDSCH = 3,
+ D3DKMT_ESCAPE_DEVICE = 4,
+ D3DKMT_ESCAPE_DMM = 5,
+ D3DKMT_ESCAPE_DEBUG_SNAPSHOT = 6,
+ // unused (7 was previously used to set driver update in-progress status,
D3DKMT_ESCAPE_SETDRIVERUPDATESTATUS)
+ D3DKMT_ESCAPE_DRT_TEST = 8,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ D3DKMT_ESCAPE_DIAGNOSTICS = 9,
+ D3DKMT_ESCAPE_OUTPUTDUPL_SNAPSHOT = 10,
+ D3DKMT_ESCAPE_OUTPUTDUPL_DIAGNOSTICS = 11,
+ D3DKMT_ESCAPE_BDD_PNP = 12,
+ D3DKMT_ESCAPE_BDD_FALLBACK = 13,
+ D3DKMT_ESCAPE_ACTIVATE_SPECIFIC_DIAG = 14,
+ D3DKMT_ESCAPE_MODES_PRUNED_OUT = 15,
+ D3DKMT_ESCAPE_WHQL_INFO = 16,
+ D3DKMT_ESCAPE_BRIGHTNESS = 17,
+ D3DKMT_ESCAPE_EDID_CACHE = 18,
+ // unused (19 was previously D3DKMT_ESCAPE_GENERIC_ADAPTER_DIAG_INFO)
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ D3DKMT_ESCAPE_MIRACAST_DISPLAY_REQUEST = 20,
+ D3DKMT_ESCAPE_HISTORY_BUFFER_STATUS = 21,
+ // 22 can be reused for future needs as it was never exposed for external purposes
+ D3DKMT_ESCAPE_MIRACAST_ADAPTER_DIAG_INFO = 23,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+ D3DKMT_ESCAPE_FORCE_BDDFALLBACK_HEADLESS = 24,
+ D3DKMT_ESCAPE_REQUEST_MACHINE_CRASH = 25,
+ // unused (26 was previously D3DKMT_ESCAPE_HMD_GET_EDID_BASE_BLOCK)
+ D3DKMT_ESCAPE_SOFTGPU_ENABLE_DISABLE_HMD = 27,
+ D3DKMT_ESCAPE_PROCESS_VERIFIER_OPTION = 28,
+ D3DKMT_ESCAPE_ADAPTER_VERIFIER_OPTION = 29,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+ D3DKMT_ESCAPE_IDD_REQUEST = 30,
+ D3DKMT_ESCAPE_DOD_SET_DIRTYRECT_MODE = 31,
+ D3DKMT_ESCAPE_LOG_CODEPOINT_PACKET = 32,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
+ D3DKMT_ESCAPE_LOG_USERMODE_DAIG_PACKET = 33,
+ D3DKMT_ESCAPE_GET_EXTERNAL_DIAGNOSTICS = 34,
+ // unused (35 previously was D3DKMT_ESCAPE_GET_PREFERRED_MODE)
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+ D3DKMT_ESCAPE_GET_DISPLAY_CONFIGURATIONS = 36,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+ D3DKMT_ESCAPE_QUERY_IOMMU_STATUS = 37,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+ D3DKMT_ESCAPE_CCD_DATABASE = 38,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
+ D3DKMT_ESCAPE_QUERY_DMA_REMAPPING_STATUS = 39,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM3_0
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_6
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_4
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_3
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_2
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_1
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_0
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM1_3
+
+ D3DKMT_ESCAPE_WIN32K_START = 1024,
+ D3DKMT_ESCAPE_WIN32K_HIP_DEVICE_INFO = 1024,
+ D3DKMT_ESCAPE_WIN32K_QUERY_CD_ROTATION_BLOCK = 1025,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+ D3DKMT_ESCAPE_WIN32K_DPI_INFO = 1026, // Use hContext for the desired
hdev
+ D3DKMT_ESCAPE_WIN32K_PRESENTER_VIEW_INFO = 1027,
+ D3DKMT_ESCAPE_WIN32K_SYSTEM_DPI = 1028,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+ D3DKMT_ESCAPE_WIN32K_BDD_FALLBACK = 1029,
+ D3DKMT_ESCAPE_WIN32K_DDA_TEST_CTL = 1030,
+ D3DKMT_ESCAPE_WIN32K_USER_DETECTED_BLACK_SCREEN = 1031,
+ // unused (1032 was previously D3DKMT_ESCAPE_WIN32K_HMD_ENUM)
+ // unused (1033 was previously D3DKMT_ESCAPE_WIN32K_HMD_CONTROL)
+ // unused (1034 was previously D3DKMT_ESCAPE_WIN32K_LPMDISPLAY_CONTROL)
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_5)
+ D3DKMT_ESCAPE_WIN32K_DISPBROKER_TEST = 1035,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+ D3DKMT_ESCAPE_WIN32K_COLOR_PROFILE_INFO = 1036,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+ D3DKMT_ESCAPE_WIN32K_SET_DIMMED_STATE = 1037,
+ D3DKMT_ESCAPE_WIN32K_SPECIALIZED_DISPLAY_TEST = 1038,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_7
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_6
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_5
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_0
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM1_3
+#endif // DXGKDDI_INTERFACE_VERSION_WIN8
+} D3DKMT_ESCAPETYPE;
+
+typedef struct _D3DKMT_DOD_SET_DIRTYRECT_MODE
+{
+ BOOL bForceFullScreenDirty; // in: indicates if this adapter should always give
full screen dirty for every Dod present
+}D3DKMT_DOD_SET_DIRTYRECT_MODE;
+
+typedef enum _D3DKMT_TDRDBGCTRLTYPE
+{
+ D3DKMT_TDRDBGCTRLTYPE_FORCETDR = 0, //Simulate a TDR
+ D3DKMT_TDRDBGCTRLTYPE_DISABLEBREAK = 1, //Disable DebugBreak on timeout
+ D3DKMT_TDRDBGCTRLTYPE_ENABLEBREAK = 2, //Enable DebugBreak on timeout
+ D3DKMT_TDRDBGCTRLTYPE_UNCONDITIONAL = 3, //Disables all safety conditions (e.g.
check for consecutive recoveries)
+ D3DKMT_TDRDBGCTRLTYPE_VSYNCTDR = 4, //Simulate a Vsync TDR
+ D3DKMT_TDRDBGCTRLTYPE_GPUTDR = 5, //Simulate a GPU TDR
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ D3DKMT_TDRDBGCTRLTYPE_FORCEDODTDR = 6, //Simulate a Display Only Present TDR
+ D3DKMT_TDRDBGCTRLTYPE_FORCEDODVSYNCTDR = 7, //Simulate a Display Only Vsync TDR
+ D3DKMT_TDRDBGCTRLTYPE_ENGINETDR = 8, //Simulate an engine TDR
+#endif
+} D3DKMT_TDRDBGCTRLTYPE;
+
+typedef enum _D3DKMT_VIDMMESCAPETYPE
+{
+ D3DKMT_VIDMMESCAPETYPE_SETFAULT = 0,
+ D3DKMT_VIDMMESCAPETYPE_RUN_COHERENCY_TEST = 1,
+ D3DKMT_VIDMMESCAPETYPE_RUN_UNMAP_TO_DUMMY_PAGE_TEST = 2,
+ D3DKMT_VIDMMESCAPETYPE_APERTURE_CORRUPTION_CHECK = 3,
+ D3DKMT_VIDMMESCAPETYPE_SUSPEND_CPU_ACCESS_TEST = 4,
+ D3DKMT_VIDMMESCAPETYPE_EVICT = 5,
+ D3DKMT_VIDMMESCAPETYPE_EVICT_BY_NT_HANDLE = 6,
+ D3DKMT_VIDMMESCAPETYPE_GET_VAD_INFO = 7,
+ D3DKMT_VIDMMESCAPETYPE_SET_BUDGET = 8,
+ D3DKMT_VIDMMESCAPETYPE_SUSPEND_PROCESS = 9,
+ D3DKMT_VIDMMESCAPETYPE_RESUME_PROCESS = 10,
+ D3DKMT_VIDMMESCAPETYPE_GET_BUDGET = 11,
+ D3DKMT_VIDMMESCAPETYPE_SET_TRIM_INTERVALS = 12,
+ D3DKMT_VIDMMESCAPETYPE_EVICT_BY_CRITERIA = 13,
+ D3DKMT_VIDMMESCAPETYPE_WAKE = 14,
+ D3DKMT_VIDMMESCAPETYPE_DEFRAG = 15,
+ D3DKMT_VIDMMESCAPETYPE_DELAYEXECUTION = 16,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+ D3DKMT_VIDMMESCAPETYPE_VALIDATE_INTEGRITY = 17,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+ D3DKMT_VIDMMESCAPETYPE_SET_EVICTION_CONFIG = 18,
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_9
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_7
+} D3DKMT_VIDMMESCAPETYPE;
+
+typedef enum _D3DKMT_VIDSCHESCAPETYPE
+{
+ D3DKMT_VIDSCHESCAPETYPE_PREEMPTIONCONTROL = 0, //Enable/Disable preemption
+ D3DKMT_VIDSCHESCAPETYPE_SUSPENDSCHEDULER = 1, //Suspend/Resume scheduler
(obsolate)
+ D3DKMT_VIDSCHESCAPETYPE_TDRCONTROL = 2, //Tdr control
+ D3DKMT_VIDSCHESCAPETYPE_SUSPENDRESUME = 3, //Suspend/Resume scheduler
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ D3DKMT_VIDSCHESCAPETYPE_ENABLECONTEXTDELAY = 4, //Enable/Disable context delay
+#endif
+ D3DKMT_VIDSCHESCAPETYPE_CONFIGURE_TDR_LIMIT = 5, // Configure TdrLimitCount and
TdrLimitTime
+ D3DKMT_VIDSCHESCAPETYPE_VGPU_RESET = 6, // Trigger VGPU reset
+ D3DKMT_VIDSCHESCAPETYPE_PFN_CONTROL = 7, // Periodic frame notification
control
+ D3DKMT_VIDSCHESCAPETYPE_VIRTUAL_REFRESH_RATE = 8,
+} D3DKMT_VIDSCHESCAPETYPE;
+
+typedef enum _D3DKMT_DMMESCAPETYPE
+{
+ D3DKMT_DMMESCAPETYPE_UNINITIALIZED = 0,
+ D3DKMT_DMMESCAPETYPE_GET_SUMMARY_INFO = 1,
+ D3DKMT_DMMESCAPETYPE_GET_VIDEO_PRESENT_SOURCES_INFO = 2,
+ D3DKMT_DMMESCAPETYPE_GET_VIDEO_PRESENT_TARGETS_INFO = 3,
+ D3DKMT_DMMESCAPETYPE_GET_ACTIVEVIDPN_INFO = 4,
+ D3DKMT_DMMESCAPETYPE_GET_MONITORS_INFO = 5,
+ D3DKMT_DMMESCAPETYPE_RECENTLY_COMMITTED_VIDPNS_INFO = 6,
+ D3DKMT_DMMESCAPETYPE_RECENT_MODECHANGE_REQUESTS_INFO = 7,
+ D3DKMT_DMMESCAPETYPE_RECENTLY_RECOMMENDED_VIDPNS_INFO = 8,
+ D3DKMT_DMMESCAPETYPE_RECENT_MONITOR_PRESENCE_EVENTS_INFO = 9,
+ D3DKMT_DMMESCAPETYPE_ACTIVEVIDPN_SOURCEMODESET_INFO = 10,
+ D3DKMT_DMMESCAPETYPE_ACTIVEVIDPN_COFUNCPATHMODALITY_INFO = 11,
+ D3DKMT_DMMESCAPETYPE_GET_LASTCLIENTCOMMITTEDVIDPN_INFO = 12,
+ D3DKMT_DMMESCAPETYPE_GET_VERSION_INFO = 13,
+ D3DKMT_DMMESCAPETYPE_VIDPN_MGR_DIAGNOSTICS = 14
+} D3DKMT_DMMESCAPETYPE;
+
+typedef struct _D3DKMT_HISTORY_BUFFER_STATUS
+{
+ BOOLEAN Enabled;
+ UINT Reserved;
+} D3DKMT_HISTORY_BUFFER_STATUS;
+
+typedef enum _D3DKMT_VAD_ESCAPE_COMMAND
+{
+ D3DKMT_VAD_ESCAPE_GETNUMVADS,
+ D3DKMT_VAD_ESCAPE_GETVAD,
+ D3DKMT_VAD_ESCAPE_GETVADRANGE,
+ D3DKMT_VAD_ESCAPE_GET_PTE,
+ D3DKMT_VAD_ESCAPE_GET_GPUMMU_CAPS,
+ D3DKMT_VAD_ESCAPE_GET_SEGMENT_CAPS,
+} D3DKMT_VAD_ESCAPE_COMMAND;
+
+typedef struct _D3DKMT_VAD_DESC
+{
+ UINT VadIndex; // in: 0xFFFFFFFF to use the VAD address
+ D3DKMT_ALIGN64 UINT64 VadAddress; // in
+ UINT NumMappedRanges; // out
+ UINT VadType; // out: 0 - reserved, 1 - Mapped
+ D3DKMT_ALIGN64 UINT64 StartAddress; // out
+ D3DKMT_ALIGN64 UINT64 EndAddress; // out
+} D3DKMT_VAD_DESC;
+
+typedef struct _D3DKMT_VA_RANGE_DESC
+{
+ D3DKMT_ALIGN64 UINT64 VadAddress; // in
+ UINT VaRangeIndex; // in
+ UINT PhysicalAdapterIndex; // in
+ D3DKMT_ALIGN64 UINT64 StartAddress; // out
+ D3DKMT_ALIGN64 UINT64 EndAddress; // out
+ D3DKMT_ALIGN64 UINT64 DriverProtection; // out
+ UINT OwnerType; // out: VIDMM_VAD_OWNER_TYPE
+ D3DKMT_ALIGN64 UINT64 pOwner; // out
+ D3DKMT_ALIGN64 UINT64 OwnerOffset; // out
+ UINT Protection; // out:
D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE
+} D3DKMT_VA_RANGE_DESC;
+
+typedef struct _D3DKMT_EVICTION_CRITERIA
+{
+ D3DKMT_ALIGN64 UINT64 MinimumSize;
+ D3DKMT_ALIGN64 UINT64 MaximumSize;
+ struct
+ {
+ union
+ {
+ struct
+ {
+ UINT Primary : 1; // 0x00000001
+ UINT Reserved : 31; // 0xFFFFFFFE
+ } Flags;
+ UINT Value;
+ };
+ };
+} D3DKMT_EVICTION_CRITERIA;
+
+typedef enum _D3DKMT_DEFRAG_ESCAPE_OPERATION
+{
+ D3DKMT_DEFRAG_ESCAPE_GET_FRAGMENTATION_STATS = 0,
+ D3DKMT_DEFRAG_ESCAPE_DEFRAG_UPWARD = 1,
+ D3DKMT_DEFRAG_ESCAPE_DEFRAG_DOWNWARD = 2,
+ D3DKMT_DEFRAG_ESCAPE_DEFRAG_PASS = 3,
+ D3DKMT_DEFRAG_ESCAPE_VERIFY_TRANSFER = 4,
+} D3DKMT_DEFRAG_ESCAPE_OPERATION;
+
+typedef struct _D3DKMT_PAGE_TABLE_LEVEL_DESC
+{
+ UINT IndexBitCount;
+ D3DKMT_ALIGN64 UINT64 IndexMask;
+ D3DKMT_ALIGN64 UINT64 IndexShift;
+ D3DKMT_ALIGN64 UINT64 LowerLevelsMask;
+ D3DKMT_ALIGN64 UINT64 EntryCoverageInPages;
+} D3DKMT_PAGE_TABLE_LEVEL_DESC;
+
+typedef struct _DXGK_ESCAPE_GPUMMUCAPS
+{
+ BOOLEAN ReadOnlyMemorySupported;
+ BOOLEAN NoExecuteMemorySupported;
+ BOOLEAN ZeroInPteSupported;
+ BOOLEAN CacheCoherentMemorySupported;
+ BOOLEAN LargePageSupported;
+ BOOLEAN DualPteSupported;
+ BOOLEAN AllowNonAlignedLargePageAddress;
+ UINT VirtualAddressBitCount;
+ UINT PageTableLevelCount;
+ D3DKMT_PAGE_TABLE_LEVEL_DESC PageTableLevelDesk[DXGK_MAX_PAGE_TABLE_LEVEL_COUNT];
+} DXGK_ESCAPE_GPUMMUCAPS;
+
+typedef struct _D3DKMT_GET_GPUMMU_CAPS
+{
+ UINT PhysicalAdapterIndex; // In
+ DXGK_ESCAPE_GPUMMUCAPS GpuMmuCaps; // Out
+} D3DKMT_GET_GPUMMU_CAPS;
+
+#define D3DKMT_GET_PTE_MAX 64
+
+typedef struct _D3DKMT_GET_PTE
+{
+ UINT PhysicalAdapterIndex; // In
+ UINT PageTableLevel; // In
+ UINT PageTableIndex[DXGK_MAX_PAGE_TABLE_LEVEL_COUNT]; // In
+ BOOLEAN b64KBPte; // In - Valid only
when dual PTEs are supported. Out - PT is 64KB.
+ UINT NumPtes; // In - Number of
PTEs to fill. Out - number of filled PTEs
+ DXGK_PTE Pte[D3DKMT_GET_PTE_MAX]; // Out
+ UINT NumValidEntries; // Out
+} D3DKMT_GET_PTE;
+
+#define D3DKMT_MAX_SEGMENT_COUNT 32
+
+typedef enum _D3DKMT_MEMORY_SEGMENT_GROUP
+{
+ D3DKMT_MEMORY_SEGMENT_GROUP_LOCAL = 0,
+ D3DKMT_MEMORY_SEGMENT_GROUP_NON_LOCAL = 1
+} D3DKMT_MEMORY_SEGMENT_GROUP;
+
+typedef struct _D3DKMT_SEGMENT_CAPS
+{
+ D3DKMT_ALIGN64 UINT64 Size;
+ UINT PageSize;
+ ULONG SegmentId;
+ BOOLEAN bAperture;
+ BOOLEAN bReservedSysMem;
+ D3DKMT_MEMORY_SEGMENT_GROUP BudgetGroup;
+} D3DKMT_SEGMENT_CAPS;
+
+typedef struct _D3DKMT_GET_SEGMENT_CAPS
+{
+ UINT PhysicalAdapterIndex; // In
+ UINT NumSegments; // Out
+ D3DKMT_SEGMENT_CAPS SegmentCaps[D3DKMT_MAX_SEGMENT_COUNT]; // Out
+} D3DKMT_GET_SEGMENT_CAPS;
+
+typedef enum _D3DKMT_ESCAPE_PFN_CONTROL_COMMAND
+{
+ D3DKMT_ESCAPE_PFN_CONTROL_DEFAULT,
+ D3DKMT_ESCAPE_PFN_CONTROL_FORCE_CPU,
+ D3DKMT_ESCAPE_PFN_CONTROL_FORCE_GPU
+} D3DKMT_ESCAPE_PFN_CONTROL_COMMAND;
+
+// params for D3DKMT_VIDSCHESCAPETYPE_VIRTUAL_REFRESH_RATE
+typedef enum _D3DKMT_ESCAPE_VIRTUAL_REFRESH_RATE_TYPE
+{
+ D3DKMT_ESCAPE_VIRTUAL_REFRESH_RATE_TYPE_SET_BASE_DESKTOP_DURATION = 0,
+ D3DKMT_ESCAPE_VIRTUAL_REFRESH_RATE_TYPE_SET_VSYNC_MULTIPLIER = 1,
+ D3DKMT_ESCAPE_VIRTUAL_REFRESH_RATE_TYPE_SET_PROCESS_BOOST_ELIGIBLE = 2,
+} D3DKMT_ESCAPE_VIRTUAL_REFRESH_RATE_TYPE;
+
+typedef struct _D3DKMT_ESCAPE_VIRTUAL_REFRESH_RATE
+{
+ D3DKMT_ESCAPE_VIRTUAL_REFRESH_RATE_TYPE Type;
+ UINT VidPnSourceId;
+ BOOLEAN ProcessBoostEligible;
+ UINT VSyncMultiplier;
+ UINT BaseDesktopDuration;
+ UCHAR Reserved[16];
+} D3DKMT_ESCAPE_VIRTUAL_REFRESH_RATE;
+
+typedef struct _D3DKMT_VIDMM_ESCAPE
+{
+ D3DKMT_VIDMMESCAPETYPE Type;
+ union
+ {
+ struct
+ {
+ union
+ {
+ struct
+ {
+ ULONG ProbeAndLock : 1;
+ ULONG SplitPoint : 1;
+ ULONG NoDemotion : 1;
+ ULONG SwizzlingAperture : 1;
+ ULONG PagingPathLockSubRange : 1;
+ ULONG PagingPathLockMinRange : 1;
+ ULONG ComplexLock : 1;
+ ULONG FailVARotation : 1;
+ ULONG NoWriteCombined : 1;
+ ULONG NoPrePatching : 1;
+ ULONG AlwaysRepatch : 1;
+ ULONG ExpectPreparationFailure : 1;
+ ULONG FailUserModeVAMapping : 1;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ ULONG NeverDiscardOfferedAllocation : 1;
+ ULONG AlwaysDiscardOfferedAllocation : 1;
+ ULONG Reserved : 17;
+#else
+ ULONG Reserved : 19;
+#endif
+ };
+ ULONG Value;
+ };
+ } SetFault;
+ struct
+ {
+ D3DKMT_HANDLE ResourceHandle;
+ D3DKMT_HANDLE AllocationHandle;
+ D3DKMT_PTR(HANDLE, hProcess); // 0 to evict memory for the current
process, otherwise it is a process handle from OpenProcess(PROCESS_ALL_ACCESS, FALSE,
ProcessId).
+ } Evict;
+ struct
+ {
+ D3DKMT_ALIGN64 UINT64 NtHandle; // Used by
D3DKMT_VIDMMESCAPETYPE_EVICT_BY_NT_HANDLE
+ } EvictByNtHandle;
+ struct
+ {
+ union
+ {
+ struct
+ {
+ UINT NumVads;
+ } GetNumVads;
+ D3DKMT_VAD_DESC GetVad;
+ D3DKMT_VA_RANGE_DESC GetVadRange;
+ D3DKMT_GET_GPUMMU_CAPS GetGpuMmuCaps;
+ D3DKMT_GET_PTE GetPte;
+ D3DKMT_GET_SEGMENT_CAPS GetSegmentCaps;
+ };
+ D3DKMT_VAD_ESCAPE_COMMAND Command; // in
+ NTSTATUS Status; // out
+ } GetVads;
+ struct
+ {
+ D3DKMT_ALIGN64 ULONGLONG LocalMemoryBudget;
+ D3DKMT_ALIGN64 ULONGLONG SystemMemoryBudget;
+ } SetBudget;
+ struct
+ {
+ D3DKMT_PTR(HANDLE, hProcess);
+ BOOL bAllowWakeOnSubmission;
+ } SuspendProcess;
+ struct
+ {
+ D3DKMT_PTR(HANDLE, hProcess);
+ } ResumeProcess;
+ struct
+ {
+ D3DKMT_ALIGN64 UINT64 NumBytesToTrim;
+ } GetBudget;
+ struct
+ {
+ ULONG MinTrimInterval; // In 100ns units
+ ULONG MaxTrimInterval; // In 100ns units
+ ULONG IdleTrimInterval; // In 100ns units
+ } SetTrimIntervals;
+ D3DKMT_EVICTION_CRITERIA EvictByCriteria;
+ struct
+ {
+ BOOL bFlush;
+ } Wake;
+ struct
+ {
+ D3DKMT_DEFRAG_ESCAPE_OPERATION Operation;
+
+ UINT SegmentId;
+
+ D3DKMT_ALIGN64 ULONGLONG TotalCommitted;
+ D3DKMT_ALIGN64 ULONGLONG TotalFree;
+ D3DKMT_ALIGN64 ULONGLONG LargestGapBefore;
+ D3DKMT_ALIGN64 ULONGLONG LargestGapAfter;
+ } Defrag;
+ struct
+ {
+ D3DKMT_HANDLE hPagingQueue;
+ UINT PhysicalAdapterIndex;
+ ULONG Milliseconds;
+ D3DKMT_ALIGN64 ULONGLONG PagingFenceValue;
+ } DelayExecution;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+ struct
+ {
+ UINT SegmentId;
+ } VerifyIntegrity;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+ struct
+ {
+ D3DKMT_ALIGN64 LONGLONG TimerValue;
+ } DelayedEvictionConfig;
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_9
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_7
+ };
+} D3DKMT_VIDMM_ESCAPE;
+
+typedef struct _D3DKMT_VIDSCH_ESCAPE
+{
+ D3DKMT_VIDSCHESCAPETYPE Type;
+ union
+ {
+ BOOL PreemptionControl; // enable/disable preemption
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ BOOL EnableContextDelay; // enable/disable context delay
+ struct
+ {
+ ULONG TdrControl; // control tdr
+ union
+ {
+ ULONG NodeOrdinal; // valid if TdrControl is set to
D3DKMT_TDRDBGCTRLTYPE_ENGINETDR
+ };
+ } TdrControl2;
+#endif
+ BOOL SuspendScheduler; // suspend/resume scheduler (obsolate)
+ ULONG TdrControl; // control tdr
+ ULONG SuspendTime; // time period to suspend.
+ struct
+ {
+ UINT Count;
+ UINT Time; // In seconds
+ } TdrLimit;
+
+ D3DKMT_ESCAPE_PFN_CONTROL_COMMAND PfnControl; // periodic frame notification
control
+ };
+ D3DKMT_ESCAPE_VIRTUAL_REFRESH_RATE VirtualRefreshRateControl;
+} D3DKMT_VIDSCH_ESCAPE;
+
+typedef struct _D3DKMT_TDRDBGCTRL_ESCAPE
+{
+ D3DKMT_TDRDBGCTRLTYPE TdrControl; // control tdr
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ union
+ {
+ ULONG NodeOrdinal; // valid if TdrControl is set to
D3DKMT_TDRDBGCTRLTYPE_ENGINETDR
+ };
+#endif
+} D3DKMT_TDRDBGCTRL_ESCAPE;
+
+// Upper boundary on the DMM escape data size (in bytes).
+enum
+{
+ D3DKMT_MAX_DMM_ESCAPE_DATASIZE = 100*1024
+};
+
+// NOTE: If (ProvidedBufferSize >= MinRequiredBufferSize), then MinRequiredBufferSize
= size of the actual complete data set in the Data[] array.
+typedef struct _D3DKMT_DMM_ESCAPE
+{
+ _In_ D3DKMT_DMMESCAPETYPE Type;
+ _In_ D3DKMT_ALIGN64 D3DKMT_SIZE_T ProvidedBufferSize; // actual size of Data[]
array, in bytes.
+ _Out_ D3DKMT_ALIGN64 D3DKMT_SIZE_T MinRequiredBufferSize; // minimum required size
of Data[] array to contain requested data.
+ _Out_writes_bytes_(ProvidedBufferSize) UCHAR Data[1];
+} D3DKMT_DMM_ESCAPE;
+
+typedef enum _D3DKMT_BRIGHTNESS_INFO_TYPE
+{
+ D3DKMT_BRIGHTNESS_INFO_GET_POSSIBLE_LEVELS = 1,
+ D3DKMT_BRIGHTNESS_INFO_GET = 2,
+ D3DKMT_BRIGHTNESS_INFO_SET = 3,
+ D3DKMT_BRIGHTNESS_INFO_GET_CAPS = 4,
+ D3DKMT_BRIGHTNESS_INFO_SET_STATE = 5,
+ D3DKMT_BRIGHTNESS_INFO_SET_OPTIMIZATION = 6,
+ D3DKMT_BRIGHTNESS_INFO_GET_REDUCTION = 7,
+ D3DKMT_BRIGHTNESS_INFO_BEGIN_MANUAL_MODE = 8,
+ D3DKMT_BRIGHTNESS_INFO_END_MANUAL_MODE = 9,
+ D3DKMT_BRIGHTNESS_INFO_TOGGLE_LOGGING = 10,
+ D3DKMT_BRIGHTNESS_INFO_GET_NIT_RANGES = 11,
+} D3DKMT_BRIGHTNESS_INFO_TYPE;
+
+typedef struct _D3DKMT_BRIGHTNESS_POSSIBLE_LEVELS
+{
+ UCHAR LevelCount;
+ UCHAR BrightnessLevels[256];
+} D3DKMT_BRIGHTNESS_POSSIBLE_LEVELS;
+
+typedef struct _D3DKMT_BRIGHTNESS_INFO
+{
+ D3DKMT_BRIGHTNESS_INFO_TYPE Type;
+ ULONG ChildUid;
+ union
+ {
+ D3DKMT_BRIGHTNESS_POSSIBLE_LEVELS PossibleLevels;
+ UCHAR Brightness;
+ DXGK_BRIGHTNESS_CAPS BrightnessCaps;
+ DXGK_BRIGHTNESS_STATE BrightnessState;
+ DXGK_BACKLIGHT_OPTIMIZATION_LEVEL OptimizationLevel;
+ DXGK_BACKLIGHT_INFO ReductionInfo;
+ BOOLEAN VerboseLogging;
+ DXGK_BRIGHTNESS_GET_NIT_RANGES_OUT NitRanges;
+ DXGK_BRIGHTNESS_GET_OUT GetBrightnessMillinits;
+ DXGK_BRIGHTNESS_SET_IN SetBrightnessMillinits;
+ };
+} D3DKMT_BRIGHTNESS_INFO;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+typedef struct _D3DKMT_BDDFALLBACK_CTL
+{
+ BOOLEAN ForceBddHeadlessNextFallback;
+} D3DKMT_BDDFALLBACK_CTL;
+
+typedef struct _D3DKMT_REQUEST_MACHINE_CRASH_ESCAPE
+{
+ D3DKMT_ALIGN64 D3DKMT_ULONG_PTR Param1;
+ D3DKMT_ALIGN64 D3DKMT_ULONG_PTR Param2;
+ D3DKMT_ALIGN64 D3DKMT_ULONG_PTR Param3;
+} D3DKMT_REQUEST_MACHINE_CRASH_ESCAPE;
+
+//
+// VERIFIER OPTIONS
+//
+typedef enum _D3DKMT_VERIFIER_OPTION_MODE
+{
+ D3DKMT_VERIFIER_OPTION_QUERY,
+ D3DKMT_VERIFIER_OPTION_SET
+} D3DKMT_VERIFIER_OPTION_MODE;
+
+typedef enum _D3DKMT_PROCESS_VERIFIER_OPTION_TYPE
+{
+ //
+ // Dxgkrnl (0xxx)
+ //
+
+ //
+ // VidMm (1xxx)
+ //
+ D3DKMT_PROCESS_VERIFIER_OPTION_VIDMM_FLAGS = 1000,
+ D3DKMT_PROCESS_VERIFIER_OPTION_VIDMM_RESTRICT_BUDGET = 1001,
+
+ //
+ // VidSch (2xxx)
+ //
+
+} D3DKMT_PROCESS_VERIFIER_OPTION_TYPE;
+
+typedef union _D3DKMT_PROCESS_VERIFIER_VIDMM_FLAGS
+{
+ struct
+ {
+ UINT ForceSynchronousEvict : 1;
+ UINT NeverDeferEvictions : 1;
+ UINT AlwaysFailCommitOnReclaim : 1;
+ UINT AlwaysPlaceInDemotedLocation : 1;
+ UINT Reserved : 28;
+ };
+ UINT32 Value;
+} D3DKMT_PROCESS_VERIFIER_VIDMM_FLAGS;
+
+typedef struct _D3DKMT_PROCESS_VERIFIER_VIDMM_RESTRICT_BUDGET
+{
+ D3DKMT_ALIGN64 UINT64 LocalBudget;
+ D3DKMT_ALIGN64 UINT64 NonLocalBudget;
+} D3DKMT_PROCESS_VERIFIER_VIDMM_RESTRICT_BUDGET;
+
+typedef union _D3DKMT_PROCESS_VERIFIER_OPTION_DATA
+{
+ D3DKMT_PROCESS_VERIFIER_VIDMM_FLAGS VidMmFlags;
+ D3DKMT_PROCESS_VERIFIER_VIDMM_RESTRICT_BUDGET VidMmRestrictBudget;
+} D3DKMT_PROCESS_VERIFIER_OPTION_DATA;
+
+typedef struct _D3DKMT_PROCESS_VERIFIER_OPTION
+{
+ D3DKMT_PTR(HANDLE, hProcess);
+ D3DKMT_PROCESS_VERIFIER_OPTION_TYPE Type;
+ D3DKMT_VERIFIER_OPTION_MODE Mode;
+ D3DKMT_PROCESS_VERIFIER_OPTION_DATA Data;
+} D3DKMT_PROCESS_VERIFIER_OPTION;
+
+typedef enum _D3DKMT_ADAPTER_VERIFIER_OPTION_TYPE
+{
+ //
+ // Dxgkrnl (0xxx)
+ //
+
+ //
+ // VidMm (1xxx)
+ //
+ D3DKMT_ADAPTER_VERIFIER_OPTION_VIDMM_FLAGS = 1000,
+ D3DKMT_ADAPTER_VERIFIER_OPTION_VIDMM_TRIM_INTERVAL = 1001,
+
+ //
+ // VidSch (2xxx)
+ //
+} D3DKMT_ADAPTER_VERIFIER_OPTION_TYPE;
+
+typedef union _D3DKMT_ADAPTER_VERIFIER_VIDMM_FLAGS
+{
+ struct
+ {
+ UINT AlwaysRepatch : 1;
+ UINT FailSharedPrimary : 1;
+ UINT FailProbeAndLock : 1;
+ UINT AlwaysDiscardOffer : 1;
+ UINT NeverDiscardOffer : 1;
+ UINT ForceComplexLock : 1;
+ UINT NeverPrepatch : 1;
+ UINT ExpectPreparationFailure : 1;
+ UINT TakeSplitPoint : 1;
+ UINT FailAcquireSwizzlingRange : 1;
+ UINT PagingPathLockSubrange : 1;
+ UINT PagingPathLockMinrange : 1;
+ UINT FailVaRotation : 1;
+ UINT NoDemotion : 1;
+ UINT FailDefragPass : 1;
+ UINT AlwaysProcessOfferList : 1;
+ UINT AlwaysDecommitOffer : 1;
+ UINT NeverMoveDefrag : 1;
+ UINT AlwaysRelocateDisplayableResources : 1;
+ UINT AlwaysFailGrowVPRMoves : 1;
+ UINT Reserved : 12;
+ };
+ UINT32 Value;
+} D3DKMT_ADAPTER_VERIFIER_VIDMM_FLAGS;
+
+typedef struct _D3DKMT_ADAPTER_VERIFIER_VIDMM_TRIM_INTERVAL
+{
+ D3DKMT_ALIGN64 UINT64 MinimumTrimInterval;
+ D3DKMT_ALIGN64 UINT64 MaximumTrimInterval;
+ D3DKMT_ALIGN64 UINT64 IdleTrimInterval;
+} D3DKMT_ADAPTER_VERIFIER_VIDMM_TRIM_INTERVAL;
+
+typedef union _D3DKMT_ADAPTER_VERIFIER_OPTION_DATA
+{
+ D3DKMT_ADAPTER_VERIFIER_VIDMM_FLAGS VidMmFlags;
+ D3DKMT_ADAPTER_VERIFIER_VIDMM_TRIM_INTERVAL VidMmTrimInterval;
+} D3DKMT_ADAPTER_VERIFIER_OPTION_DATA;
+
+typedef struct _D3DKMT_ADAPTER_VERIFIER_OPTION
+{
+ D3DKMT_ADAPTER_VERIFIER_OPTION_TYPE Type;
+ D3DKMT_VERIFIER_OPTION_MODE Mode;
+ D3DKMT_ADAPTER_VERIFIER_OPTION_DATA Data;
+} D3DKMT_ADAPTER_VERIFIER_OPTION;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_0
+
+typedef enum _D3DKMT_DEVICEESCAPE_TYPE
+{
+ D3DKMT_DEVICEESCAPE_VIDPNFROMALLOCATION = 0,
+ D3DKMT_DEVICEESCAPE_RESTOREGAMMA = 1,
+} D3DKMT_DEVICEESCAPE_TYPE;
+
+typedef struct _D3DKMT_DEVICE_ESCAPE
+{
+ D3DKMT_DEVICEESCAPE_TYPE Type;
+ union
+ {
+ struct
+ {
+ D3DKMT_HANDLE hPrimaryAllocation; // in: Primary allocation
handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // out: VidPnSoureId of
primary allocation
+ } VidPnFromAllocation;
+ };
+} D3DKMT_DEVICE_ESCAPE;
+
+typedef struct _D3DKMT_DEBUG_SNAPSHOT_ESCAPE
+{
+ ULONG Length; // out: Actual length of the snapshot written in Buffer
+ BYTE Buffer[1]; // out: Buffer to place snapshot
+} D3DKMT_DEBUG_SNAPSHOT_ESCAPE;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+#ifndef DXGK_DIAG_PROCESS_NAME_LENGTH
+#define DXGK_DIAG_PROCESS_NAME_LENGTH 16
+#endif
+
+typedef enum _OUTPUTDUPL_CONTEXT_DEBUG_STATUS
+{
+ OUTPUTDUPL_CONTEXT_DEBUG_STATUS_INACTIVE = 0,
+ OUTPUTDUPL_CONTEXT_DEBUG_STATUS_ACTIVE = 1,
+ OUTPUTDUPL_CONTEXT_DEBUG_STATUS_PENDING_DESTROY = 2,
+ OUTPUTDUPL_CONTEXT_DEBUG_STATUS_FORCE_UINT32 = 0xffffffff
+}OUTPUTDUPL_CONTEXT_DEBUG_STATUS;
+
+typedef struct _OUTPUTDUPL_CONTEXT_DEBUG_INFO
+{
+ OUTPUTDUPL_CONTEXT_DEBUG_STATUS Status;
+ D3DKMT_PTR(HANDLE, ProcessID);
+ UINT32 AccumulatedPresents;
+ D3DKMT_ALIGN64 LARGE_INTEGER LastPresentTime;
+ D3DKMT_ALIGN64 LARGE_INTEGER LastMouseTime;
+ CHAR ProcessName[DXGK_DIAG_PROCESS_NAME_LENGTH];
+} OUTPUTDUPL_CONTEXT_DEBUG_INFO;
+
+#define GET_OUTPUT_DUPL_DEBUG_INFO_FROM_SNAPSHOT(pSnapshot, VidPnSource,
OutputDuplContextIndex) \
+ (pSnapshot->OutputDuplDebugInfos[(VidPnSource *
pSnapshot->NumOutputDuplContexts) + OutputDuplContextIndex])
+
+typedef struct _D3DKMT_OUTPUTDUPL_SNAPSHOT
+{
+ UINT Size; // _In_/out: Size of entire structure
+
+ UINT SessionProcessCount; // _Out_: Number of processes currently
duplicating output in this session (max possible will be equal to NumOutputDuplContexts)
+ UINT SessionActiveConnectionsCount; // _Out_: Total number of active contexts in this
session, may be more than number active in 2D array because that is per adapter
+
+ UINT NumVidPnSources; // _Out_: Max of first array index
+ UINT NumOutputDuplContexts; // _Out_: Max of second array index
+
+ UINT Padding;
+
+ // This field is in reality a two dimensional array, use
GET_OUTPUT_DUPL_DEBUG_INFO_FROM_SNAPSHOT macro to get a specific one
+ _Field_size_bytes_(Size - sizeof(_D3DKMT_OUTPUTDUPL_SNAPSHOT))
OUTPUTDUPL_CONTEXT_DEBUG_INFO OutputDuplDebugInfos[0];
+} D3DKMT_OUTPUTDUPL_SNAPSHOT;
+#endif
+
+typedef enum _D3DKMT_ACTIVATE_SPECIFIC_DIAG_TYPE
+{
+ D3DKMT_ACTIVATE_SPECIFIC_DIAG_TYPE_EXTRA_CCD_DATABASE_INFO = 0,
+ D3DKMT_ACTIVATE_SPECIFIC_DIAG_TYPE_MODES_PRUNED = 15,
+}D3DKMT_ACTIVATE_SPECIFIC_DIAG_TYPE;
+
+typedef struct _D3DKMT_ACTIVATE_SPECIFIC_DIAG_ESCAPE
+{
+ D3DKMT_ACTIVATE_SPECIFIC_DIAG_TYPE Type; // The escape type that needs to be
(de)activated
+ BOOL Activate; // FALSE means deactivate
+} D3DKMT_ACTIVATE_SPECIFIC_DIAG_ESCAPE;
+
+typedef struct _D3DKMT_ESCAPE
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DKMT_HANDLE hDevice; // in: device handle [Optional]
+ D3DKMT_ESCAPETYPE Type; // in: escape type.
+ D3DDDI_ESCAPEFLAGS Flags; // in: flags
+ D3DKMT_PTR(VOID*, pPrivateDriverData); // in/out: escape data
+ UINT PrivateDriverDataSize; // in: size of escape data
+ D3DKMT_HANDLE hContext; // in: context handle [Optional]
+} D3DKMT_ESCAPE;
+
+//
+// begin D3DKMT_QUERYSTATISTICS
+//
+
+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 = 16,
+} D3DKMT_QUERYRESULT_PREEMPTION_ATTEMPT_RESULT;
+
+//
+// WOW will not allow enum member as array length, so define it as a constant
+//
+#define D3DKMT_QUERYRESULT_PREEMPTION_ATTEMPT_RESULT_MAX 16
+C_ASSERT(D3DKMT_QUERYRESULT_PREEMPTION_ATTEMPT_RESULT_MAX ==
D3DKMT_PreemptionAttemptStatisticsMax);
+
+//
+// Command packet type
+//
+typedef enum _D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE {
+ D3DKMT_ClientRenderBuffer = 0, // (Dma packet) should be 0 base.
+ D3DKMT_ClientPagingBuffer = 1, // (Dma packet)
+ D3DKMT_SystemPagingBuffer = 2, // (Dma packet)
+ D3DKMT_SystemPreemptionBuffer = 3, // (Dma packet)
+ D3DKMT_DmaPacketTypeMax = 4
+} D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE;
+
+//
+// WOW will not allow enum member as array length, so define it as a constant
+//
+#define D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_MAX 4
+C_ASSERT(D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_MAX == D3DKMT_DmaPacketTypeMax);
+
+typedef enum _D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE {
+ D3DKMT_RenderCommandBuffer = 0, // (Queue Packet) should be 0 base.
+ D3DKMT_DeferredCommandBuffer = 1, // (Queue Packet)
+ D3DKMT_SystemCommandBuffer = 2, // (Queue Packet)
+ D3DKMT_MmIoFlipCommandBuffer = 3, // (Queue Packet)
+ D3DKMT_WaitCommandBuffer = 4, // (Queue Packet)
+ D3DKMT_SignalCommandBuffer = 5, // (Queue Packet)
+ D3DKMT_DeviceCommandBuffer = 6, // (Queue Packet)
+ D3DKMT_SoftwareCommandBuffer = 7, // (Queue Packet)
+ D3DKMT_QueuePacketTypeMax = 8
+} D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE;
+
+//
+// WOW will not allow enum member as array length, so define it as a constant
+//
+#define D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_MAX 8
+C_ASSERT(D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_MAX == D3DKMT_QueuePacketTypeMax);
+
+typedef enum _D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS
+{
+ D3DKMT_AllocationPriorityClassMinimum = 0,
+ D3DKMT_AllocationPriorityClassLow = 1,
+ D3DKMT_AllocationPriorityClassNormal = 2,
+ D3DKMT_AllocationPriorityClassHigh = 3,
+ D3DKMT_AllocationPriorityClassMaximum = 4,
+ D3DKMT_MaxAllocationPriorityClass = 5
+} D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS;
+
+//
+// WOW will not allow enum member as array length, so define it as a constant
+//
+
+#define D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS_MAX 5
+C_ASSERT(D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS_MAX ==
D3DKMT_MaxAllocationPriorityClass);
+
+//
+// Allocation segment preference set can contain 5 preferences
+//
+#define D3DKMT_QUERYSTATISTICS_SEGMENT_PREFERENCE_MAX 5
+
+typedef struct _D3DKMT_QUERYSTATISTICS_COUNTER
+{
+ ULONG Count;
+ ULONGLONG Bytes;
+} D3DKMT_QUERYSTATISTICS_COUNTER;
+
+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_QUEUE_PACKET_TYPE_INFORMATION {
+ ULONG PacketSubmited;
+ ULONG PacketCompleted;
+} D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PACKET_INFORMATION {
+ D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_INFORMATION
QueuePacket[D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_MAX]; //Size =
D3DKMT_QueuePacketTypeMax
+ D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_INFORMATION
DmaPacket[D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_MAX]; //Size =
D3DKMT_DmaPacketTypeMax
+} D3DKMT_QUERYSTATISTICS_PACKET_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PREEMPTION_INFORMATION {
+ ULONG PreemptionCounter[D3DKMT_QUERYRESULT_PREEMPTION_ATTEMPT_RESULT_MAX];
+} D3DKMT_QUERYSTATISTICS_PREEMPTION_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION {
+ D3DKMT_ALIGN64 LARGE_INTEGER RunningTime; // Running time
in micro-second.
+ ULONG ContextSwitch;
+ D3DKMT_QUERYSTATISTICS_PREEMPTION_INFORMATION PreemptionStatistics;
+ D3DKMT_QUERYSTATISTICS_PACKET_INFORMATION PacketStatistics;
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_NODE_INFORMATION {
+ D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION GlobalInformation; //Global
statistics
+ D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION SystemInformation; //Statistics for
system thread
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+ D3DKMT_NODE_PERFDATA NodePerfData;
+ UINT32 Reserved[3];
+#else
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+#endif
+} D3DKMT_QUERYSTATISTICS_NODE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION {
+ ULONG Frame; // both by Blt and Flip.
+ ULONG CancelledFrame; // by restart (flip only).
+ ULONG QueuedPresent; // queued present.
+ UINT Padding;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_7)
+ D3DKMT_ALIGN64 UINT64 IsVSyncEnabled;
+ D3DKMT_ALIGN64 UINT64 VSyncOnTotalTimeMs;
+ D3DKMT_ALIGN64 UINT64 VSyncOffKeepPhaseTotalTimeMs;
+ D3DKMT_ALIGN64 UINT64 VSyncOffNoPhaseTotalTimeMs;
+ D3DKMT_ALIGN64 UINT64 Reserved[4];
+#else
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+#endif
+
+} D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_VIDPNSOURCE_INFORMATION {
+ D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION GlobalInformation; //Global
statistics
+ D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION SystemInformation;
//Statistics for system thread
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_VIDPNSOURCE_INFORMATION;
+
+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_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_PAGING_TRANSFER
+{
+ D3DKMT_ALIGN64 ULONGLONG BytesFilled;
+ D3DKMT_ALIGN64 ULONGLONG BytesDiscarded;
+ D3DKMT_ALIGN64 ULONGLONG BytesMappedIntoAperture;
+ D3DKMT_ALIGN64 ULONGLONG BytesUnmappedFromAperture;
+ D3DKMT_ALIGN64 ULONGLONG BytesTransferredFromMdlToMemory;
+ D3DKMT_ALIGN64 ULONGLONG BytesTransferredFromMemoryToMdl;
+ D3DKMT_ALIGN64 ULONGLONG BytesTransferredFromApertureToMemory;
+ D3DKMT_ALIGN64 ULONGLONG BytesTransferredFromMemoryToAperture;
+} D3DKMT_QUERYSTATSTICS_PAGING_TRANSFER;
+
+typedef struct _D3DKMT_QUERYSTATSTICS_SWIZZLING_RANGE
+{
+ ULONG NbRangesAcquired;
+ ULONG NbRangesReleased;
+} D3DKMT_QUERYSTATSTICS_SWIZZLING_RANGE;
+
+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
+{
+ //
+ // We separate shared / nonshared because for nonshared we know that every alloc
+ // terminated will lead cause a global alloc destroyed, but not for nonshared.
+ //
+ D3DKMT_QUERYSTATISTICS_COUNTER TerminatedShared;
+ D3DKMT_QUERYSTATISTICS_COUNTER TerminatedNonShared;
+ D3DKMT_QUERYSTATISTICS_COUNTER DestroyedShared;
+ D3DKMT_QUERYSTATISTICS_COUNTER DestroyedNonShared;
+} D3DKMT_QUERYSTATSTICS_TERMINATIONS;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+typedef struct _D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION_FLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT64 NumberOfMemoryGroups : 2;
+ UINT64 SupportsDemotion : 1;
+ UINT64 Reserved :61;
+ };
+ D3DKMT_ALIGN64 UINT64 Value;
+ };
+} D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION_FLAGS;
+#endif
+
+typedef struct _D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION
+{
+ ULONG NbSegments;
+ ULONG NodeCount;
+ ULONG VidPnSourceCount;
+
+ ULONG VSyncEnabled;
+ ULONG TdrDetectedCount;
+
+ D3DKMT_ALIGN64 LONGLONG ZeroLengthDmaBuffers;
+ D3DKMT_ALIGN64 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;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
+ D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION_FLAGS Flags;
+ D3DKMT_ALIGN64 UINT64 Reserved[7];
+#else
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+#endif
+} D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+typedef struct _D3DKMT_QUERYSTATISTICS_PHYSICAL_ADAPTER_INFORMATION
+{
+ D3DKMT_ADAPTER_PERFDATA AdapterPerfData;
+ D3DKMT_ADAPTER_PERFDATACAPS AdapterPerfDataCaps;
+ D3DKMT_GPUVERSION GpuVersion;
+} D3DKMT_QUERYSTATISTICS_PHYSICAL_ADAPTER_INFORMATION;
+#endif
+
+typedef struct _D3DKMT_QUERYSTATISTICS_SYSTEM_MEMORY
+{
+ D3DKMT_ALIGN64 ULONGLONG BytesAllocated;
+ D3DKMT_ALIGN64 ULONGLONG BytesReserved;
+ ULONG SmallAllocationBlocks;
+ ULONG LargeAllocationBlocks;
+ D3DKMT_ALIGN64 ULONGLONG WriteCombinedBytesAllocated;
+ D3DKMT_ALIGN64 ULONGLONG WriteCombinedBytesReserved;
+ D3DKMT_ALIGN64 ULONGLONG CachedBytesAllocated;
+ D3DKMT_ALIGN64 ULONGLONG CachedBytesReserved;
+ D3DKMT_ALIGN64 ULONGLONG SectionBytesAllocated;
+ D3DKMT_ALIGN64 ULONGLONG SectionBytesReserved;
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+ D3DKMT_ALIGN64 ULONGLONG BytesZeroed;
+#else
+ D3DKMT_ALIGN64 ULONGLONG Reserved;
+#endif
+} D3DKMT_QUERYSTATISTICS_SYSTEM_MEMORY;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_INFORMATION
+{
+ ULONG NodeCount;
+ ULONG VidPnSourceCount;
+
+ D3DKMT_QUERYSTATISTICS_SYSTEM_MEMORY SystemMemory;
+
+ D3DKMT_ALIGN64 UINT64 Reserved[7];
+} D3DKMT_QUERYSTATISTICS_PROCESS_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_DMA_BUFFER
+{
+ D3DKMT_QUERYSTATISTICS_COUNTER Size;
+ ULONG AllocationListBytes;
+ ULONG PatchLocationListBytes;
+} D3DKMT_QUERYSTATISTICS_DMA_BUFFER;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_COMMITMENT_DATA
+{
+ D3DKMT_ALIGN64 UINT64 TotalBytesEvictedFromProcess;
+ D3DKMT_ALIGN64 UINT64
BytesBySegmentPreference[D3DKMT_QUERYSTATISTICS_SEGMENT_PREFERENCE_MAX];
+} D3DKMT_QUERYSTATISTICS_COMMITMENT_DATA;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_POLICY
+{
+ D3DKMT_ALIGN64 ULONGLONG
PreferApertureForRead[D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS_MAX];
+ D3DKMT_ALIGN64 ULONGLONG
PreferAperture[D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS_MAX];
+ D3DKMT_ALIGN64 ULONGLONG MemResetOnPaging;
+ D3DKMT_ALIGN64 ULONGLONG RemovePagesFromWorkingSetOnPaging;
+ D3DKMT_ALIGN64 ULONGLONG MigrationEnabled;
+} D3DKMT_QUERYSTATISTICS_POLICY;
+
+// Process interference counters indicate how much this process GPU workload interferes
with packets
+// attempting to preempt it. 9 buckets will be exposed based on how long preemption
took:
+// [0] 100 microseconds <= preemption time < 250 microseconds
+// [1] 250 microseconds <= preemption time < 500 microseconds
+// [2] 500 microseconds <= preemption time < 1 milliseconds
+// [3] 1 milliseconds <= preemption time < 2.5 milliseconds
+// [4] 2.5 milliseconds <= preemption time < 5 milliseconds
+// [5] 5 milliseconds <= preemption time < 10 milliseconds
+// [6] 10 milliseconds <= preemption time < 25 milliseconds
+// [7] 25 milliseconds <= preemption time < 50 milliseconds
+// [8] 50 milliseconds <= preemption time
+//
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+#define D3DKMT_QUERYSTATISTICS_PROCESS_INTERFERENCE_BUCKET_COUNT 9
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_INTERFERENCE_COUNTERS
+{
+ D3DKMT_ALIGN64 UINT64
InterferenceCount[D3DKMT_QUERYSTATISTICS_PROCESS_INTERFERENCE_BUCKET_COUNT];
+} D3DKMT_QUERYSTATISTICS_PROCESS_INTERFERENCE_COUNTERS;
+#endif
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER_INFORMATION
+{
+ ULONG NbSegments;
+ ULONG NodeCount;
+ ULONG VidPnSourceCount;
+
+ //
+ // Virtual address space used by vidmm for this process
+ //
+ ULONG VirtualMemoryUsage;
+
+ D3DKMT_QUERYSTATISTICS_DMA_BUFFER DmaBuffer;
+ D3DKMT_QUERYSTATISTICS_COMMITMENT_DATA CommitmentData;
+ D3DKMT_QUERYSTATISTICS_POLICY _Policy;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+ D3DKMT_QUERYSTATISTICS_PROCESS_INTERFERENCE_COUNTERS ProcessInterferenceCounters;
+#else
+ D3DKMT_ALIGN64 UINT64 Reserved[9];
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+ D3DKMT_CLIENTHINT ClientHint;
+#else
+ UINT Reserve;
+#endif
+} D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER_INFORMATION;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_MEMORY
+{
+ D3DKMT_ALIGN64 ULONGLONG TotalBytesEvicted;
+ ULONG AllocsCommitted;
+ ULONG AllocsResident;
+} D3DKMT_QUERYSTATISTICS_MEMORY;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION
+{
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ D3DKMT_ALIGN64 ULONGLONG CommitLimit;
+ D3DKMT_ALIGN64 ULONGLONG BytesCommitted;
+ D3DKMT_ALIGN64 ULONGLONG BytesResident;
+#else
+ ULONG CommitLimit;
+ ULONG BytesCommitted;
+ ULONG BytesResident;
+#endif
+
+ D3DKMT_QUERYSTATISTICS_MEMORY Memory;
+
+ //
+ // Boolean, whether this is an aperture segment
+ //
+ ULONG Aperture;
+
+ //
+ // Breakdown of bytes evicted by priority class
+ //
+ D3DKMT_ALIGN64 ULONGLONG
TotalBytesEvictedByPriority[D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS_MAX];
//Size = D3DKMT_MaxAllocationPriorityClass
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ D3DKMT_ALIGN64 UINT64 SystemMemoryEndAddress;
+ struct D3DKMT_ALIGN64
+ {
+ UINT64 PreservedDuringStandby : 1;
+ UINT64 PreservedDuringHibernate : 1;
+ UINT64 PartiallyPreservedDuringHibernate : 1;
+ UINT64 Reserved : 61;
+ } PowerFlags;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+ struct D3DKMT_ALIGN64
+ {
+ UINT64 SystemMemory : 1;
+ UINT64 PopulatedByReservedDDRByFirmware : 1;
+ UINT64 Reserved : 62;
+ } SegmentProperties;
+ D3DKMT_ALIGN64 UINT64 Reserved[5];
+#else
+ D3DKMT_ALIGN64 UINT64 Reserved[6];
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_9)
+#else
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+} D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION;
+
+//
+// Video memory statistics.
+//
+typedef struct _D3DKMT_QUERYSTATISTICS_VIDEO_MEMORY
+{
+ ULONG AllocsCommitted;
+ D3DKMT_QUERYSTATISTICS_COUNTER
AllocsResidentInP[D3DKMT_QUERYSTATISTICS_SEGMENT_PREFERENCE_MAX];
+ D3DKMT_QUERYSTATISTICS_COUNTER AllocsResidentInNonPreferred;
+ D3DKMT_ALIGN64 ULONGLONG TotalBytesEvictedDueToPreparation;
+} D3DKMT_QUERYSTATISTICS_VIDEO_MEMORY;
+
+//
+// VidMM Policies
+//
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_POLICY
+{
+ D3DKMT_ALIGN64 ULONGLONG UseMRU;
+} D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_POLICY;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_INFORMATION
+{
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+ D3DKMT_ALIGN64 ULONGLONG BytesCommitted;
+ D3DKMT_ALIGN64 ULONGLONG MaximumWorkingSet;
+ D3DKMT_ALIGN64 ULONGLONG MinimumWorkingSet;
+
+ ULONG NbReferencedAllocationEvictedInPeriod;
+ UINT Padding;
+#else
+ ULONG BytesCommitted;
+ ULONG NbReferencedAllocationEvictedInPeriod;
+ ULONG MaximumWorkingSet;
+ ULONG MinimumWorkingSet;
+#endif
+
+ D3DKMT_QUERYSTATISTICS_VIDEO_MEMORY VideoMemory;
+ D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_POLICY _Policy;
+
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+} D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_INFORMATION;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_GROUP_INFORMATION
+{
+ D3DKMT_ALIGN64 UINT64 Budget;
+ D3DKMT_ALIGN64 UINT64 Requested;
+ D3DKMT_ALIGN64 UINT64 Usage;
+ D3DKMT_ALIGN64 UINT64 Demoted[D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS_MAX];
+} D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_GROUP_INFORMATION;
+#endif
+
+typedef enum _D3DKMT_QUERYSTATISTICS_TYPE
+{
+ D3DKMT_QUERYSTATISTICS_ADAPTER = 0,
+ D3DKMT_QUERYSTATISTICS_PROCESS = 1,
+ D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER = 2,
+ D3DKMT_QUERYSTATISTICS_SEGMENT = 3,
+ D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT = 4,
+ D3DKMT_QUERYSTATISTICS_NODE = 5,
+ D3DKMT_QUERYSTATISTICS_PROCESS_NODE = 6,
+ D3DKMT_QUERYSTATISTICS_VIDPNSOURCE = 7,
+ D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE = 8,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+ D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_GROUP = 9,
+#endif
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+ D3DKMT_QUERYSTATISTICS_PHYSICAL_ADAPTER = 10,
+#endif
+} D3DKMT_QUERYSTATISTICS_TYPE;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT
+{
+ ULONG SegmentId; // in: id of node to get statistics for
+} D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_NODE
+{
+ ULONG NodeId;
+} D3DKMT_QUERYSTATISTICS_QUERY_NODE;
+
+typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE
+{
+ ULONG VidPnSourceId; // in: id of segment to get statistics for
+} D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_PHYSICAL_ADAPTER
+{
+ ULONG PhysicalAdapterIndex;
+} D3DKMT_QUERYSTATISTICS_QUERY_PHYSICAL_ADAPTER;
+#endif
+
+typedef union _D3DKMT_QUERYSTATISTICS_RESULT
+{
+ D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION AdapterInformation;
// out: result of D3DKMT_QUERYSTATISTICS_ADAPTER query
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+ D3DKMT_QUERYSTATISTICS_PHYSICAL_ADAPTER_INFORMATION PhysAdapterInformation;
// out: result of D3DKMT_QUERYSTATISTICS_PHYSICAL_ADAPTER query
+#endif
+ D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION SegmentInformation;
// out: result of D3DKMT_QUERYSTATISTICS_SEGMENT query
+ D3DKMT_QUERYSTATISTICS_NODE_INFORMATION NodeInformation;
// out: result of D3DKMT_QUERYSTATISTICS_NODE query
+ D3DKMT_QUERYSTATISTICS_VIDPNSOURCE_INFORMATION VidPnSourceInformation;
// out: result of D3DKMT_QUERYSTATISTICS_VIDPNSOURCE query
+ D3DKMT_QUERYSTATISTICS_PROCESS_INFORMATION ProcessInformation;
// out: result of D3DKMT_QUERYSTATISTICS_PROCESS query
+ D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER_INFORMATION ProcessAdapterInformation;
// out: result of D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER query
+ D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_INFORMATION ProcessSegmentInformation;
// out: result of D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT query
+ D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION ProcessNodeInformation;
// out: result of D3DKMT_QUERYSTATISTICS_PROCESS_NODE query
+ D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION ProcessVidPnSourceInformation;
// out: result of D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE query
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+ D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_GROUP_INFORMATION
ProcessSegmentGroupInformation;// out: result of
D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_GROUP query
+#endif
+} D3DKMT_QUERYSTATISTICS_RESULT;
+
+typedef struct _D3DKMT_QUERYSTATISTICS
+{
+ D3DKMT_QUERYSTATISTICS_TYPE Type; // in: type of data requested
+ LUID AdapterLuid; // in: adapter to get export / statistics
from
+ D3DKMT_PTR(HANDLE, hProcess); // in: process to get statistics for, if
required for this query type
+ D3DKMT_QUERYSTATISTICS_RESULT QueryResult; // out: requested data
+
+ union
+ {
+ D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT QuerySegment; // in: id of
segment to get statistics for
+ D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT QueryProcessSegment; // in: id of
segment to get statistics for
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+ D3DKMT_MEMORY_SEGMENT_GROUP QueryProcessSegmentGroup; // in: id of
segment group to get statistics for
+#endif
+ D3DKMT_QUERYSTATISTICS_QUERY_NODE QueryNode; // in: id of
node to get statistics for
+ D3DKMT_QUERYSTATISTICS_QUERY_NODE QueryProcessNode; // in: id of
node to get statistics for
+ D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE QueryVidPnSource; // in: id of
vidpnsource to get statistics for
+ D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE QueryProcessVidPnSource; // in: id of
vidpnsource to get statistics for
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
+ D3DKMT_QUERYSTATISTICS_QUERY_PHYSICAL_ADAPTER QueryPhysAdapter; // in: id of
physical adapter to get statistics for
+#endif
+ };
+} D3DKMT_QUERYSTATISTICS;
+#if defined(_AMD64_)
+C_ASSERT(sizeof(D3DKMT_QUERYSTATISTICS) == 0x328);
+#endif
+
+//
+// end D3DKMT_QUERYSTATISTICS
+//
+
+
+typedef struct _D3DKMT_PRESENT_STATS_DWM2
+{
+ ULONG cbSize; // in: size of struct for versioning
+ UINT PresentCount;
+ UINT PresentRefreshCount;
+ D3DKMT_ALIGN64 LARGE_INTEGER PresentQPCTime;
+ UINT SyncRefreshCount;
+ D3DKMT_ALIGN64 LARGE_INTEGER SyncQPCTime;
+ UINT CustomPresentDuration;
+ UINT VirtualSyncRefreshCount;
+ D3DKMT_ALIGN64 LARGE_INTEGER VirtualSyncQPCTime;
+} D3DKMT_PRESENT_STATS_DWM2;
+
+
+typedef enum _D3DKMT_VIDPNSOURCEOWNER_TYPE
+{
+ D3DKMT_VIDPNSOURCEOWNER_UNOWNED = 0, //Has no owner or GDI is the owner
+ D3DKMT_VIDPNSOURCEOWNER_SHARED = 1, //Has shared owner, that is owner can
yield to any exclusive owner, not available to legacy devices
+ D3DKMT_VIDPNSOURCEOWNER_EXCLUSIVE = 2, //Has exclusive owner without shared
gdi primary,
+ D3DKMT_VIDPNSOURCEOWNER_EXCLUSIVEGDI = 3, //Has exclusive owner with shared gdi
primary and must be exclusive owner of all VidPn sources, only available to legacy
devices
+ D3DKMT_VIDPNSOURCEOWNER_EMULATED = 4, //Does not have real primary
ownership, but allows the device to set gamma on its owned sources
+} D3DKMT_VIDPNSOURCEOWNER_TYPE;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+typedef struct _D3DKMT_VIDPNSOURCEOWNER_FLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT AllowOutputDuplication : 1;
+ UINT DisableDWMVirtualMode : 1;
+ UINT UseNtHandles : 1;
+ UINT Reserved : 29;
+ };
+ UINT Value;
+ };
+} D3DKMT_VIDPNSOURCEOWNER_FLAGS;
+#endif
+
+typedef struct _D3DKMT_SETVIDPNSOURCEOWNER
+{
+ D3DKMT_HANDLE hDevice; // in: Device handle
+ D3DKMT_PTR(CONST D3DKMT_VIDPNSOURCEOWNER_TYPE*, pType); // in: OwnerType array
+ D3DKMT_PTR(CONST D3DDDI_VIDEO_PRESENT_SOURCE_ID*, pVidPnSourceId); // in: VidPn
source ID array
+ UINT VidPnSourceCount; // in: Number of valid
entries in above array
+} D3DKMT_SETVIDPNSOURCEOWNER;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+typedef struct _D3DKMT_SETVIDPNSOURCEOWNER1
+{
+ D3DKMT_SETVIDPNSOURCEOWNER Version0;
+ D3DKMT_VIDPNSOURCEOWNER_FLAGS Flags;
+} D3DKMT_SETVIDPNSOURCEOWNER1;
+#endif
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+typedef struct _D3DKMT_SETVIDPNSOURCEOWNER2
+{
+ D3DKMT_SETVIDPNSOURCEOWNER1 Version1;
+ D3DKMT_PTR(CONST D3DKMT_PTR_TYPE*, pVidPnSourceNtHandles); // in: VidPn source
owner DispMgr NT handles
+} D3DKMT_SETVIDPNSOURCEOWNER2;
+#endif
+
+typedef struct _D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP
+{
+ D3DKMT_HANDLE hAdapter; // in: Adapter handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: VidPn source ID
array
+} D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP;
+
+#define D3DKMT_GETPRESENTHISTORY_MAXTOKENS 2048
+
+typedef struct _D3DKMT_GETPRESENTHISTORY
+{
+ D3DKMT_HANDLE hAdapter; // in: Handle
to adapter
+ UINT ProvidedSize; // in: Size
of provided buffer
+ UINT WrittenSize; // out:
Copied token size or required size for first token
+ D3DKMT_PTR(_Field_size_bytes_(ProvidedSize) D3DKMT_PRESENTHISTORYTOKEN*, pTokens); //
in: Pointer to buffer.
+ UINT NumTokens; // out:
Number of copied token
+} D3DKMT_GETPRESENTHISTORY;
+
+typedef struct _D3DKMT_CREATEOVERLAY
+{
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in
+ D3DKMT_HANDLE hDevice; // in: Indentifies the device
+ D3DDDI_KERNELOVERLAYINFO OverlayInfo; // in
+ D3DKMT_HANDLE hOverlay; // out: Kernel overlay handle
+} D3DKMT_CREATEOVERLAY;
+
+typedef struct _D3DKMT_UPDATEOVERLAY
+{
+ D3DKMT_HANDLE hDevice; // in: Indentifies the device
+ D3DKMT_HANDLE hOverlay; // in: Kernel overlay handle
+ D3DDDI_KERNELOVERLAYINFO OverlayInfo; // in
+} D3DKMT_UPDATEOVERLAY;
+
+typedef struct _D3DKMT_FLIPOVERLAY
+{
+ D3DKMT_HANDLE hDevice; // in: Indentifies the device
+ D3DKMT_HANDLE hOverlay; // in: Kernel overlay handle
+ D3DKMT_HANDLE hSource; // in: Allocation currently displayed
+ D3DKMT_PTR(VOID*, pPrivateDriverData); // in: Private driver data
+ UINT PrivateDriverDataSize; // in: Size of private driver data
+} D3DKMT_FLIPOVERLAY;
+
+typedef struct _D3DKMT_GETOVERLAYSTATE
+{
+ D3DKMT_HANDLE hDevice; // in: Indentifies the device
+ D3DKMT_HANDLE hOverlay; // in: Kernel overlay handle
+ BOOLEAN OverlayEnabled;
+} D3DKMT_GETOVERLAYSTATE;
+
+typedef struct _D3DKMT_DESTROYOVERLAY
+{
+ D3DKMT_HANDLE hDevice; // in: Indentifies the device
+ D3DKMT_HANDLE hOverlay; // in: Kernel overlay handle
+} D3DKMT_DESTROYOVERLAY;
+
+typedef struct _D3DKMT_WAITFORVERTICALBLANKEVENT
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DKMT_HANDLE hDevice; // in: device handle [Optional]
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN Source ID
+} D3DKMT_WAITFORVERTICALBLANKEVENT;
+
+#define D3DKMT_MAX_WAITFORVERTICALBLANK_OBJECTS 8
+
+typedef struct _D3DKMT_WAITFORVERTICALBLANKEVENT2
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DKMT_HANDLE hDevice; // in: device handle [Optional]
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN Source ID
+ UINT NumObjects;
+ D3DKMT_PTR_TYPE
ObjectHandleArray[D3DKMT_MAX_WAITFORVERTICALBLANK_OBJECTS]; // in: Specifies the objects
to wait on.
+} D3DKMT_WAITFORVERTICALBLANKEVENT2;
+
+typedef struct _D3DKMT_GETVERTICALBLANKEVENT
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DKMT_HANDLE hDevice; // in: device handle [Optional]
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN Source ID
+ D3DKMT_PTR(D3DKMT_PTR_TYPE*, phEvent);
+} D3DKMT_GETVERTICALBLANKEVENT;
+
+typedef struct _D3DKMT_SETSYNCREFRESHCOUNTWAITTARGET
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DKMT_HANDLE hDevice; // in: device handle [Optional]
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN Source ID
+ UINT TargetSyncRefreshCount;
+} D3DKMT_SETSYNCREFRESHCOUNTWAITTARGET;
+
+typedef struct _D3DKMT_SETGAMMARAMP
+{
+ D3DKMT_HANDLE hDevice; // in: device handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN Source ID
+ D3DDDI_GAMMARAMP_TYPE Type; // in: Gamma ramp type
+
+ union
+ {
+ D3DDDI_GAMMA_RAMP_RGB256x3x16* pGammaRampRgb256x3x16;
+ D3DDDI_GAMMA_RAMP_DXGI_1* pGammaRampDXGI1;
+ D3DKMT_PTR_HELPER( AlignUnionTo64)
+ };
+ UINT Size;
+} D3DKMT_SETGAMMARAMP;
+
+typedef struct _D3DKMT_ADJUSTFULLSCREENGAMMA
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN Source ID
+ D3DDDI_DXGI_RGB Scale;
+ D3DDDI_DXGI_RGB Offset;
+} D3DKMT_ADJUSTFULLSCREENGAMMA;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
+
+typedef struct _D3DKMT_SET_COLORSPACE_TRANSFORM
+{
+ _In_ LUID AdapterLuid;
+ _In_ D3DDDI_VIDEO_PRESENT_TARGET_ID VidPnTargetId;
+ _In_ D3DDDI_GAMMARAMP_TYPE Type;
+ _In_ UINT Size;
+ union
+ {
+ _In_reads_bytes_opt_(Size) D3DKMDT_3x4_COLORSPACE_TRANSFORM*
pColorSpaceTransform;
+ D3DKMT_PTR_HELPER( AlignUnionTo64)
+ };
+} D3DKMT_SET_COLORSPACE_TRANSFORM;
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_3
+
+typedef struct _D3DKMT_SETVIDPNSOURCEHWPROTECTION
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's VidPN Source ID
+ BOOL HwProtected; // in: HW protection status
+} D3DKMT_SETVIDPNSOURCEHWPROTECTION;
+
+typedef struct _D3DKMT_SETHWPROTECTIONTEARDOWNRECOVERY
+{
+ D3DKMT_HANDLE hAdapter; // in: adapter handle
+ BOOL Recovered; // in: HW protection teardown
recovery
+} D3DKMT_SETHWPROTECTIONTEARDOWNRECOVERY;
+
+typedef enum _D3DKMT_DEVICEEXECUTION_STATE
+{
+ D3DKMT_DEVICEEXECUTION_ACTIVE = 1,
+ D3DKMT_DEVICEEXECUTION_RESET = 2,
+ D3DKMT_DEVICEEXECUTION_HUNG = 3,
+ D3DKMT_DEVICEEXECUTION_STOPPED = 4,
+ D3DKMT_DEVICEEXECUTION_ERROR_OUTOFMEMORY = 5,
+ D3DKMT_DEVICEEXECUTION_ERROR_DMAFAULT = 6,
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+ D3DKMT_DEVICEEXECUTION_ERROR_DMAPAGEFAULT = 7,
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+} D3DKMT_DEVICEEXECUTION_STATE;
+
+typedef struct _D3DKMT_DEVICERESET_STATE
+{
+ union
+ {
+ struct
+ {
+ UINT DesktopSwitched : 1; // 0x00000001
+ UINT Reserved :31; // 0xFFFFFFFE
+ };
+ UINT Value;
+ };
+} D3DKMT_DEVICERESET_STATE;
+
+typedef struct _D3DKMT_PRESENT_STATS
+{
+ UINT PresentCount;
+ UINT PresentRefreshCount;
+ UINT SyncRefreshCount;
+ D3DKMT_ALIGN64 LARGE_INTEGER SyncQPCTime;
+ D3DKMT_ALIGN64 LARGE_INTEGER SyncGPUTime;
+} D3DKMT_PRESENT_STATS;
+
+typedef struct _D3DKMT_DEVICEPRESENT_STATE
+{
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: present source id
+ D3DKMT_PRESENT_STATS PresentStats; // out: present stats
+} D3DKMT_DEVICEPRESENT_STATE;
+
+typedef struct _D3DKMT_PRESENT_STATS_DWM
+{
+ UINT PresentCount;
+ UINT PresentRefreshCount;
+ D3DKMT_ALIGN64 LARGE_INTEGER PresentQPCTime;
+ UINT SyncRefreshCount;
+ D3DKMT_ALIGN64 LARGE_INTEGER SyncQPCTime;
+ UINT CustomPresentDuration;
+} D3DKMT_PRESENT_STATS_DWM;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+typedef struct _D3DKMT_DEVICEPAGEFAULT_STATE
+{
+ D3DKMT_ALIGN64 UINT64 FaultedPrimitiveAPISequenceNumber; // when per draw fence
write is enabled, identifies the draw that caused the page fault, or
DXGK_PRIMITIVE_API_SEQUENCE_NUMBER_UNKNOWN if such information is not available.
+ DXGK_RENDER_PIPELINE_STAGE FaultedPipelineStage; // render pipeline stage during
which the fault was generated, or DXGK_RENDER_PIPELINE_STAGE_UNKNOWN if such information
is not available.
+ UINT FaultedBindTableEntry; // a bind table index of a
resource being accessed at the time of the fault, or DXGK_BIND_TABLE_ENTRY_UNKNOWN if such
information is not available.
+ DXGK_PAGE_FAULT_FLAGS PageFaultFlags; // flags specifying the nature of
the fault
+ DXGK_FAULT_ERROR_CODE FaultErrorCode; // Structure that contains error
code describing the fault.
+ D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS FaultedVirtualAddress; // virtual address of
faulting resource, or D3DGPU_NULL if such information is not available.
+} D3DKMT_DEVICEPAGEFAULT_STATE;
+
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+typedef struct _D3DKMT_DEVICEPRESENT_STATE_DWM
+{
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: present source id
+ D3DKMT_PRESENT_STATS_DWM PresentStatsDWM; // out: present stats rev 2
+} D3DKMT_DEVICEPRESENT_STATE_DWM;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+
+typedef struct _D3DKMT_DEVICEPRESENT_QUEUE_STATE
+{
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: present source id
+ BOOLEAN bQueuedPresentLimitReached; // out: whether the queued present
limit has been reached
+} D3DKMT_DEVICEPRESENT_QUEUE_STATE;
+
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+
+typedef enum _D3DKMT_DEVICESTATE_TYPE
+{
+ D3DKMT_DEVICESTATE_EXECUTION = 1,
+ D3DKMT_DEVICESTATE_PRESENT = 2,
+ D3DKMT_DEVICESTATE_RESET = 3,
+ D3DKMT_DEVICESTATE_PRESENT_DWM = 4,
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+ D3DKMT_DEVICESTATE_PAGE_FAULT = 5,
+
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+
+ D3DKMT_DEVICESTATE_PRESENT_QUEUE = 6,
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_1
+} D3DKMT_DEVICESTATE_TYPE;
+
+typedef struct _D3DKMT_GETDEVICESTATE
+{
+ D3DKMT_HANDLE hDevice; // in: device handle
+ D3DKMT_DEVICESTATE_TYPE StateType; // in: device state type
+ union
+ {
+ D3DKMT_DEVICEEXECUTION_STATE ExecutionState; // out: device state
+ D3DKMT_DEVICEPRESENT_STATE PresentState; // in/out: present state
+ D3DKMT_DEVICERESET_STATE ResetState; // out: reset state
+ D3DKMT_DEVICEPRESENT_STATE_DWM PresentStateDWM; // in/out: present state
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+ D3DKMT_DEVICEPAGEFAULT_STATE PageFaultState; // out: page fault state
+
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
+
+ D3DKMT_DEVICEPRESENT_QUEUE_STATE PresentQueueState; // in/out: present queue
state
+
+#endif // DXGKDDI_INTERFACE_VERSION_WDDM2_1
+ };
+} D3DKMT_GETDEVICESTATE;
typedef struct _D3DKMT_CREATEDCFROMMEMORY
{
- void *pMemory;
- D3DDDIFORMAT Format;
- UINT Width;
- UINT Height;
- UINT Pitch;
- HDC hDeviceDc;
- PALETTEENTRY *pColorTable;
- HDC hDc;
- HANDLE hBitmap;
-} D3DKMT_CREATEDCFROMMEMORY;
+ D3DKMT_PTR(VOID*, pMemory); // in: memory for DC
+ D3DDDIFORMAT Format; // in: Memory pixel format
+ UINT Width; // in: Memory Width
+ UINT Height; // in: Memory Height
+ UINT Pitch; // in: Memory pitch
+ D3DKMT_PTR(HDC, hDeviceDc); // in: DC describing the device
+ D3DKMT_PTR(PALETTEENTRY*, pColorTable); // in: Palette
+ D3DKMT_PTR(HDC, hDc); // out: HDC
+ D3DKMT_PTR(HANDLE, hBitmap); // out: Handle to bitmap
+} D3DKMT_CREATEDCFROMMEMORY;
+
+typedef struct _D3DKMT_DESTROYDCFROMMEMORY
+{
+ D3DKMT_PTR(HDC, hDc); // in:
+ D3DKMT_PTR(HANDLE, hBitmap); // in:
+} D3DKMT_DESTROYDCFROMMEMORY;
+
+#define D3DKMT_SETCONTEXTSCHEDULINGPRIORITY_ABSOLUTE 0x40000000
+
+typedef struct _D3DKMT_SETCONTEXTSCHEDULINGPRIORITY
+{
+ D3DKMT_HANDLE hContext; // in: context handle
+ INT Priority; // in: context priority
+} D3DKMT_SETCONTEXTSCHEDULINGPRIORITY;
+
+typedef struct _D3DKMT_SETCONTEXTINPROCESSSCHEDULINGPRIORITY
+{
+ D3DKMT_HANDLE hContext; // in: context handle
+ INT Priority; // in: context priority
+} D3DKMT_SETCONTEXTINPROCESSSCHEDULINGPRIORITY;
+
+typedef struct _D3DKMT_CHANGESURFACEPOINTER
+{
+ D3DKMT_PTR(HDC, hDC); // in: dc handle
+ D3DKMT_PTR(HANDLE, hBitmap); // in: bitmap handle
+ D3DKMT_PTR(LPVOID, pSurfacePointer);// in: new surface pointer
+ UINT Width; // in: Memory Width
+ UINT Height; // in: Memory Height
+ UINT Pitch; // in: Memory pitch
+} D3DKMT_CHANGESURFACEPOINTER;
+
+typedef struct _D3DKMT_GETCONTEXTSCHEDULINGPRIORITY
+{
+ D3DKMT_HANDLE hContext; // in: context handle
+ INT Priority; // out: context priority
+} D3DKMT_GETCONTEXTSCHEDULINGPRIORITY;
+
+typedef struct _D3DKMT_GETCONTEXTINPROCESSSCHEDULINGPRIORITY
+{
+ D3DKMT_HANDLE hContext; // in: context handle
+ INT Priority; // out: context priority
+} D3DKMT_GETCONTEXTINPROCESSSCHEDULINGPRIORITY;
+
+typedef enum _D3DKMT_SCHEDULINGPRIORITYCLASS
+{
+ D3DKMT_SCHEDULINGPRIORITYCLASS_IDLE = 0,
+ D3DKMT_SCHEDULINGPRIORITYCLASS_BELOW_NORMAL = 1,
+ D3DKMT_SCHEDULINGPRIORITYCLASS_NORMAL = 2,
+ D3DKMT_SCHEDULINGPRIORITYCLASS_ABOVE_NORMAL = 3,
+ D3DKMT_SCHEDULINGPRIORITYCLASS_HIGH = 4,
+ D3DKMT_SCHEDULINGPRIORITYCLASS_REALTIME = 5,
+} D3DKMT_SCHEDULINGPRIORITYCLASS;
+
+typedef struct _D3DKMT_GETSCANLINE
+{
+ D3DKMT_HANDLE hAdapter; // in: Adapter handle
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: Adapter's VidPN Source
ID
+ BOOLEAN InVerticalBlank; // out: Within vertical blank
+ UINT ScanLine; // out: Current scan line
+} D3DKMT_GETSCANLINE;
+
+typedef enum _D3DKMT_QUEUEDLIMIT_TYPE
+{
+ D3DKMT_SET_QUEUEDLIMIT_PRESENT = 1,
+ D3DKMT_GET_QUEUEDLIMIT_PRESENT = 2,
+} D3DKMT_QUEUEDLIMIT_TYPE;
+
+typedef struct _D3DKMT_SETQUEUEDLIMIT
+{
+ D3DKMT_HANDLE hDevice; // in: device handle
+ D3DKMT_QUEUEDLIMIT_TYPE Type; // in: limit type
+ union
+ {
+ UINT QueuedPresentLimit; // in (or out): queued present
limit
+ struct
+ {
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: adapter's
VidPN source ID
+ UINT QueuedPendingFlipLimit; // in (or out): flip
pending limit
+ };
+ };
+} D3DKMT_SETQUEUEDLIMIT;
+
+typedef struct _D3DKMT_POLLDISPLAYCHILDREN
+{
+ D3DKMT_HANDLE hAdapter; // in: Adapter handle
+ UINT NonDestructiveOnly : 1; // in: 0x00000001
Destructive or not
+ UINT SynchronousPolling : 1; // in: 0x00000002
Synchronous polling or not
+ UINT DisableModeReset : 1; // in: 0x00000004 Disable
DMM mode reset on monitor event
+ UINT PollAllAdapters : 1; // in: 0x00000008 Poll all
adapters
+ UINT PollInterruptible : 1; // in: 0x00000010 Poll
interruptible targets as well.
+ UINT Reserved : 27; // in: 0xffffffc0
+} D3DKMT_POLLDISPLAYCHILDREN;
+
+typedef struct _D3DKMT_INVALIDATEACTIVEVIDPN
+{
+ D3DKMT_HANDLE hAdapter; // in: Adapter handle
+ D3DKMT_PTR(VOID*, pPrivateDriverData); // in: Private driver data
+ UINT PrivateDriverDataSize; // in: Size of private driver
data
+} D3DKMT_INVALIDATEACTIVEVIDPN;
+
+typedef struct _D3DKMT_CHECKOCCLUSION
+{
+ D3DKMT_PTR(HWND, hWindow); // in: Destination window handle
+} D3DKMT_CHECKOCCLUSION;
+
+typedef struct _D3DKMT_WAITFORIDLE
+{
+ D3DKMT_HANDLE hDevice; // in: Device to wait for idle
+} D3DKMT_WAITFORIDLE;
+
+typedef struct _D3DKMT_CHECKMONITORPOWERSTATE
+{
+ D3DKMT_HANDLE hAdapter; // in: Adapter to check on
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: Adapter's VidPN Source
ID
+} D3DKMT_CHECKMONITORPOWERSTATE;
+
+typedef struct _D3DKMT_SETDISPLAYPRIVATEDRIVERFORMAT
+{
+ D3DKMT_HANDLE hDevice; // in: Identifies
the device
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: Identifies
which VidPn we are changing the private driver format attribute for
+ UINT PrivateDriverFormatAttribute; // In: Requested
private format attribute for VidPn specified
+} D3DKMT_SETDISPLAYPRIVATEDRIVERFORMAT;
+
+typedef struct _D3DKMT_CREATEKEYEDMUTEX
+{
+ D3DKMT_ALIGN64 UINT64 InitialValue; // in: Initial
value to release to
+ D3DKMT_HANDLE hSharedHandle; // out: Global
handle to keyed mutex
+ D3DKMT_HANDLE hKeyedMutex; // out: Handle to
the keyed mutex in this process
+} D3DKMT_CREATEKEYEDMUTEX;
+
+typedef struct _D3DKMT_OPENKEYEDMUTEX
+{
+ D3DKMT_HANDLE hSharedHandle; // in: Global
handle to keyed mutex
+ D3DKMT_HANDLE hKeyedMutex; // out: Handle to
the keyed mutex in this process
+} D3DKMT_OPENKEYEDMUTEX;
+
+typedef struct _D3DKMT_DESTROYKEYEDMUTEX
+{
+ D3DKMT_HANDLE hKeyedMutex; // in:
Identifies the keyed mutex being destroyed.
+} D3DKMT_DESTROYKEYEDMUTEX;
+
+typedef struct _D3DKMT_ACQUIREKEYEDMUTEX
+{
+ D3DKMT_HANDLE hKeyedMutex; // in: Handle to
the keyed mutex
+ D3DKMT_ALIGN64 UINT64 Key; // in: Key value
to Acquire
+ D3DKMT_PTR(PLARGE_INTEGER, pTimeout); // in: NT-style
timeout value
+ D3DKMT_ALIGN64 UINT64 FenceValue; // out: Current
fence value of the GPU sync object
+} D3DKMT_ACQUIREKEYEDMUTEX;
+
+typedef struct _D3DKMT_RELEASEKEYEDMUTEX
+{
+ D3DKMT_HANDLE hKeyedMutex; // in: Handle to
the keyed mutex
+ D3DKMT_ALIGN64 UINT64 Key; // in: Key value
to Release to
+ D3DKMT_ALIGN64 UINT64 FenceValue; // in: New fence
value to use for GPU sync object
+} D3DKMT_RELEASEKEYEDMUTEX;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+
+typedef struct _D3DKMT_CREATEKEYEDMUTEX2_FLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT NtSecuritySharing : 1; // If set, the keyed mutex will be shared
using DxgkShareObjects instead of D3DKMT_CREATEKEYEDMUTEX2::hSharedHandle
+ UINT Reserved : 31;
+ };
+ UINT Value;
+ };
+} D3DKMT_CREATEKEYEDMUTEX2_FLAGS;
+
+typedef struct _D3DKMT_CREATEKEYEDMUTEX2
+{
+ D3DKMT_ALIGN64 UINT64 InitialValue; // in: Initial
value to release to
+ D3DKMT_HANDLE hSharedHandle; // out: Global
handle to keyed mutex, NULL if NtSecuritySharing is set.
+ D3DKMT_HANDLE hKeyedMutex; // out: Handle
to the keyed mutex in this process
+ D3DKMT_PTR(_In_reads_bytes_opt_(PrivateRuntimeDataSize)
+ VOID*, pPrivateRuntimeData); // in: Buffer
containing initial private data.
+ // If NULL
then PrivateRuntimeDataSize must be 0.
+ UINT PrivateRuntimeDataSize; // in: Size in
bytes of pPrivateRuntimeData.
+ D3DKMT_CREATEKEYEDMUTEX2_FLAGS Flags; // in:
Creation flags.
+} D3DKMT_CREATEKEYEDMUTEX2;
+
+typedef struct _D3DKMT_OPENKEYEDMUTEX2
+{
+ D3DKMT_HANDLE hSharedHandle; // in: Global
handle to keyed mutex
+ D3DKMT_HANDLE hKeyedMutex; // out: Handle
to the keyed mutex in this process
+ D3DKMT_PTR(_In_reads_bytes_opt_(PrivateRuntimeDataSize)
+ VOID*, pPrivateRuntimeData); // in: Buffer
containing initial private data.
+ // If NULL
then PrivateRuntimeDataSize must be 0.
+ // It will
only be copied if the keyed mutex does not already have private data.
+ UINT PrivateRuntimeDataSize; // in: Size in
bytes of pPrivateRuntimeData.
+} D3DKMT_OPENKEYEDMUTEX2;
+
+typedef struct _D3DKMT_OPENKEYEDMUTEXFROMNTHANDLE
+{
+ D3DKMT_PTR(HANDLE, hNtHandle); // in: NT
handle to keyed mutex
+ D3DKMT_HANDLE hKeyedMutex; // out: Handle
to the keyed mutex in this process
+ D3DKMT_PTR(_In_reads_bytes_opt_(PrivateRuntimeDataSize)
+ VOID*, pPrivateRuntimeData); // in: Buffer
containing initial private data.
+ // If NULL
then PrivateRuntimeDataSize must be 0.
+ // It will
only be copied if the keyed mutex does not already have private data.
+ UINT PrivateRuntimeDataSize; // in: Size in
bytes of pPrivateRuntimeData.
+} D3DKMT_OPENKEYEDMUTEXFROMNTHANDLE;
+
+typedef struct _D3DKMT_ACQUIREKEYEDMUTEX2
+{
+ D3DKMT_HANDLE hKeyedMutex; // in:
Handle to the keyed mutex
+ D3DKMT_ALIGN64 UINT64 Key; // in:
Key value to Acquire
+ D3DKMT_PTR(PLARGE_INTEGER, pTimeout); // in:
NT-style timeout value
+ D3DKMT_ALIGN64 UINT64 FenceValue; // out:
Current fence value of the GPU sync object
+ D3DKMT_PTR(_Out_writes_bytes_all_opt_(PrivateRuntimeDataSize)
+ VOID*, pPrivateRuntimeData); // out:
Buffer to copy private data to.
+ //
If NULL then PrivateRuntimeDataSize must be 0.
+ UINT PrivateRuntimeDataSize; // in:
Size in bytes of pPrivateRuntimeData.
+} D3DKMT_ACQUIREKEYEDMUTEX2;
+
+typedef struct _D3DKMT_RELEASEKEYEDMUTEX2
+{
+ D3DKMT_HANDLE hKeyedMutex; // in: Handle
to the keyed mutex
+ D3DKMT_ALIGN64 UINT64 Key; // in: Key
value to Release to
+ D3DKMT_ALIGN64 UINT64 FenceValue; // in: New
fence value to use for GPU sync object
+ D3DKMT_PTR(_In_reads_bytes_opt_(PrivateRuntimeDataSize)
+ VOID*, pPrivateRuntimeData); // in: Buffer
containing new private data.
+ // If NULL
then PrivateRuntimeDataSize must be 0.
+ UINT PrivateRuntimeDataSize; // in: Size in
bytes of pPrivateRuntimeData.
+} D3DKMT_RELEASEKEYEDMUTEX2;
+#endif
+
+
+typedef struct _D3DKMT_CONFIGURESHAREDRESOURCE
+{
+ D3DKMT_HANDLE hDevice; // in: Device that created the resource
+ D3DKMT_HANDLE hResource; // in: Handle for shared resource
+ BOOLEAN IsDwm; // in: TRUE when the process is DWM
+ D3DKMT_PTR(HANDLE, hProcess); // in: Process handle for the non-DWM case
+ BOOLEAN AllowAccess; // in: Indicates whereh the process is allowed
access
+} D3DKMT_CONFIGURESHAREDRESOURCE;
+
+typedef struct _D3DKMT_CHECKSHAREDRESOURCEACCESS
+{
+ D3DKMT_HANDLE hResource; // in: Handle for the resource
+ UINT ClientPid; // in: Client process PID
+} D3DKMT_CHECKSHAREDRESOURCEACCESS;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
+typedef enum _D3DKMT_OFFER_PRIORITY
+{
+ D3DKMT_OFFER_PRIORITY_LOW=1, // Content is not useful
+ D3DKMT_OFFER_PRIORITY_NORMAL, // Content is useful but easy to regenerate
+ D3DKMT_OFFER_PRIORITY_HIGH, // Content is useful and difficult to regenerate
+ D3DKMT_OFFER_PRIORITY_AUTO, // Let VidMm decide offer priority based on eviction
priority
+} D3DKMT_OFFER_PRIORITY;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+typedef struct _D3DKMT_OFFER_FLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT OfferImmediately : 1; // 0x00000001
+ UINT AllowDecommit : 1; // 0x00000002
+ UINT Reserved : 30; // 0xFFFFFFFC
+ };
+ UINT Value;
+ };
+} D3DKMT_OFFER_FLAGS;
+#endif // DXGKDDI_INTERFACE_VERSION
+
+typedef struct _D3DKMT_OFFERALLOCATIONS
+{
+ D3DKMT_HANDLE hDevice; // in: Device that created the
allocations
+ D3DKMT_PTR(D3DKMT_HANDLE*, pResources); // in: array of D3D runtime resource
handles.
+ D3DKMT_PTR(CONST D3DKMT_HANDLE*, HandleList); // in: array of allocation handles. If
non-NULL, pResources must be NULL.
+ UINT NumAllocations; // in: number of items in whichever of
pResources or HandleList is non-NULL.
+ D3DKMT_OFFER_PRIORITY Priority; // in: priority with which to offer the
allocations
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+ D3DKMT_OFFER_FLAGS Flags; // in: various flags for determining
offer behavior
+#endif // DXGKDDI_INTERFACE_VERSION
+} D3DKMT_OFFERALLOCATIONS;
+
+typedef struct _D3DKMT_RECLAIMALLOCATIONS
+{
+ D3DKMT_HANDLE hDevice; // in: Device that created the
allocations
+ D3DKMT_PTR(D3DKMT_HANDLE*, pResources); // in: array of D3D runtime resource
handles.
+ D3DKMT_PTR(CONST D3DKMT_HANDLE*, HandleList); // in: array of allocation handles. If
non-NULL, pResources must be NULL.
+ D3DKMT_PTR(BOOL*, pDiscarded); // out: optional array of booleans
specifying whether each resource or allocation was discarded.
+ UINT NumAllocations; // in: number of items in pDiscarded
and whichever of pResources or HandleList is non-NULL.
+} D3DKMT_RECLAIMALLOCATIONS;
+
+typedef struct _D3DKMT_RECLAIMALLOCATIONS2
+{
+ D3DKMT_HANDLE hPagingQueue; // in: Device that created the
allocations
+ UINT NumAllocations; // in: number of items in pDiscarded
and whichever of pResources or HandleList is non-NULL.
+ D3DKMT_PTR(D3DKMT_HANDLE*, pResources); // in: array of D3D runtime resource
handles.
+ D3DKMT_PTR(CONST D3DKMT_HANDLE*, HandleList); // in: array of allocation handles. If
non-NULL, pResources must be NULL.
+#if(DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1 || \
+ D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_1)
+ union
+ {
+ BOOL* pDiscarded; // out: optional array of booleans specifying
whether each resource or allocation was discarded.
+ D3DDDI_RECLAIM_RESULT* pResults; // out: array of results specifying whether
each resource or allocation is OK, discarded, or has no commitment.
+ D3DKMT_PTR_HELPER(AlignUnionTo64)
+ };
+#else
+ D3DKMT_PTR(BOOL*, pDiscarded); // out: optional array of booleans specifying
whether each resource or allocation was discarded.
+#endif // (DXGKDDI_INTERFACE_VERSION || D3D_UMD_INTERFACE_VERSION)
+ D3DKMT_ALIGN64 UINT64 PagingFenceValue; // out: The paging fence to synchronize
against before submitting work to the GPU which
+ // references any of the resources or
allocations in the provided arrays
+} D3DKMT_RECLAIMALLOCATIONS2;
+
+typedef struct _D3DKMT_OUTPUTDUPLCREATIONFLAGS
+{
+ union
+ {
+ struct
+ {
+ UINT CompositionUiCaptureOnly : 1;
+ UINT Reserved : 31;
+ };
+ UINT Value;
+ };
+} D3DKMT_OUTPUTDUPLCREATIONFLAGS;
+
+typedef struct _D3DKMT_OUTPUTDUPL_KEYEDMUTEX
+{
+ D3DKMT_PTR(HANDLE, hSharedSurfaceNt);
+}D3DKMT_OUTPUTDUPL_KEYEDMUTEX;
+
+#define OUTPUTDUPL_CREATE_MAX_KEYEDMUTXES 3
+typedef struct _D3DKMT_CREATE_OUTPUTDUPL
+{
+ D3DKMT_HANDLE hAdapter;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ UINT KeyedMutexCount; // in : If zero then
means is this the pre-create check
+ UINT RequiredKeyedMutexCount; // out: The number of
keyed mutexs needed
+ D3DKMT_OUTPUTDUPL_KEYEDMUTEX KeyedMutexs[OUTPUTDUPL_CREATE_MAX_KEYEDMUTXES];
+ D3DKMT_OUTPUTDUPLCREATIONFLAGS Flags;
+} D3DKMT_CREATE_OUTPUTDUPL;
+
+typedef struct _D3DKMT_DESTROY_OUTPUTDUPL
+{
+ D3DKMT_HANDLE hAdapter;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ BOOL bDestroyAllContexts;
+} D3DKMT_DESTROY_OUTPUTDUPL;
+
+typedef struct _D3DKMT_OUTPUTDUPL_POINTER_POSITION
+{
+ POINT Position;
+ BOOL Visible;
+} D3DKMT_OUTPUTDUPL_POINTER_POSITION;
+
+typedef struct _D3DKMT_OUTPUTDUPL_FRAMEINFO
+{
+ D3DKMT_ALIGN64 LARGE_INTEGER LastPresentTime;
+ D3DKMT_ALIGN64 LARGE_INTEGER LastMouseUpdateTime;
+ UINT AccumulatedFrames;
+ BOOL RectsCoalesced;
+ BOOL ProtectedContentMaskedOut;
+ D3DKMT_OUTPUTDUPL_POINTER_POSITION PointerPosition;
+ UINT TotalMetadataBufferSize;
+ UINT PointerShapeBufferSize;
+} D3DKMT_OUTPUTDUPL_FRAMEINFO;
+
+typedef struct _D3DKMT_OUTPUTDUPL_GET_FRAMEINFO
+{
+ D3DKMT_HANDLE hAdapter;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ D3DKMT_OUTPUTDUPL_FRAMEINFO FrameInfo;
+} D3DKMT_OUTPUTDUPL_GET_FRAMEINFO;
+
+typedef enum _D3DKMT_OUTPUTDUPL_METADATATYPE
+{
+ D3DKMT_OUTPUTDUPL_METADATATYPE_DIRTY_RECTS = 0,
+ D3DKMT_OUTPUTDUPL_METADATATYPE_MOVE_RECTS = 1
+} D3DKMT_OUTPUTDUPL_METADATATYPE;
+
+typedef struct _D3DKMT_OUTPUTDUPL_METADATA
+{
+ D3DKMT_HANDLE hAdapter;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ D3DKMT_OUTPUTDUPL_METADATATYPE Type;
+ UINT
BufferSizeSupplied;
+ D3DKMT_PTR(_Field_size_bytes_part_(BufferSizeSupplied, BufferSizeRequired) PVOID,
pBuffer);
+ UINT
BufferSizeRequired;
+} D3DKMT_OUTPUTDUPL_METADATA;
+
+typedef enum _D3DKMT_OUTDUPL_POINTER_SHAPE_TYPE
+{
+ D3DKMT_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 0x00000001,
+ D3DKMT_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 0x00000002,
+ D3DKMT_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 0x00000004
+} D3DKMT_OUTDUPL_POINTER_SHAPE_TYPE;
+
+typedef struct _D3DKMT_OUTDUPL_POINTER_SHAPE_INFO
+{
+ D3DKMT_OUTDUPL_POINTER_SHAPE_TYPE Type;
+ UINT Width;
+ UINT Height;
+ UINT Pitch;
+ POINT HotSpot;
+} D3DKMT_OUTDUPL_POINTER_SHAPE_INFO;
+
+typedef struct _D3DKMT_OUTPUTDUPL_GET_POINTER_SHAPE_DATA
+{
+ D3DKMT_HANDLE hAdapter;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ UINT
BufferSizeSupplied;
+ D3DKMT_PTR(_Field_size_bytes_part_(BufferSizeSupplied, BufferSizeRequired) PVOID,
pShapeBuffer);
+ UINT
BufferSizeRequired;
+ D3DKMT_OUTDUPL_POINTER_SHAPE_INFO ShapeInfo;
+} D3DKMT_OUTPUTDUPL_GET_POINTER_SHAPE_DATA;
+
+typedef struct _D3DKMT_OUTPUTDUPL_RELEASE_FRAME
+{
+ D3DKMT_HANDLE hAdapter;
+ D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId;
+ UINT NextKeyMutexIdx; // out : index of the next keyed
mutex to use
+} D3DKMT_OUTPUTDUPL_RELEASE_FRAME;
+
+
+#define D3DKMT_MAX_OBJECTS_PER_HANDLE 3
+
+#define D3DKMT_MAX_BUNDLE_OBJECTS_PER_HANDLE 16
+
+#define D3DKMT_GDI_STYLE_HANDLE_DECORATION 0x2
+
+typedef struct _D3DKMT_GETSHAREDRESOURCEADAPTERLUID
+{
+ D3DKMT_HANDLE hGlobalShare; // in : Shared resource handle
+ D3DKMT_PTR(HANDLE, hNtHandle); // in : Process's NT handle
+ LUID AdapterLuid; // out: adapter LUID
+} D3DKMT_GETSHAREDRESOURCEADAPTERLUID;
+
+typedef enum _D3DKMT_GPU_PREFERENCE_QUERY_STATE
+{
+ D3DKMT_GPU_PREFERENCE_STATE_UNINITIALIZED,
+ D3DKMT_GPU_PREFERENCE_STATE_HIGH_PERFORMANCE,
+ D3DKMT_GPU_PREFERENCE_STATE_MINIMUM_POWER,
+ D3DKMT_GPU_PREFERENCE_STATE_UNSPECIFIED,
+ D3DKMT_GPU_PREFERENCE_STATE_NOT_FOUND,
+ D3DKMT_GPU_PREFERENCE_STATE_USER_SPECIFIED_GPU
+} D3DKMT_GPU_PREFERENCE_QUERY_STATE;
+
+typedef enum _D3DKMT_GPU_PREFERENCE_QUERY_TYPE
+{
+ D3DKMT_GPU_PREFERENCE_TYPE_IHV_DLIST,
+ D3DKMT_GPU_PREFERENCE_TYPE_DX_DATABASE,
+ D3DKMT_GPU_PREFERENCE_TYPE_USER_PREFERENCE
+} D3DKMT_GPU_PREFERENCE_QUERY_TYPE;
+
+typedef struct _D3DKMT_HYBRID_LIST
+{
+ D3DKMT_GPU_PREFERENCE_QUERY_STATE State; // Gpu preference query state
+ LUID AdapterLuid; // in,opt: Adapter luid to per-adapter
DList state. Optional if QueryType == D3DKMT_GPU_PREFERENCE_TYPE_IHV_DLIST
+ BOOL bUserPreferenceQuery; // Whether referring to user gpu
preference, or per-adapter DList query
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
+ D3DKMT_GPU_PREFERENCE_QUERY_TYPE QueryType; // Replaced bUserPreferenceQuery, for
referring to which D3DKMT_GPU_PREFERENCE_QUERY_TYPE
+#endif
+} D3DKMT_HYBRID_LIST;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+typedef struct
+{
+ DXGK_MIRACAST_CHUNK_INFO ChunkInfo;
+ UINT PrivateDriverDataSize; // Size of private data
+ BYTE PrivateDriverData[1]; // Private data buffer
+} D3DKMT_MIRACAST_CHUNK_DATA;
+
+typedef enum
+{
+ MiracastStopped = 0,
+ MiracastStartPending = 1,
+ MiracastStarted = 2,
+ MiracastStopPending = 3,
+} D3DKMT_MIRACAST_DISPLAY_DEVICE_STATE;
+
+typedef enum
+{
+ D3DKMT_MIRACAST_DEVICE_STATUS_SUCCESS = 0,
+ D3DKMT_MIRACAST_DEVICE_STATUS_SUCCESS_NO_MONITOR = 1,
+ D3DKMT_MIRACAST_DEVICE_STATUS_PENDING = 2,
+ D3DKMT_MIRACAST_DEVICE_STATUS_UNKOWN_ERROR = 0x80000001,
+ D3DKMT_MIRACAST_DEVICE_STATUS_GPU_RESOURCE_IN_USE = 0x80000002,
+ D3DKMT_MIRACAST_DEVICE_STATUS_DEVICE_ERROR = 0x80000003,
+ D3DKMT_MIRACAST_DEVICE_STATUS_UNKOWN_PAIRING = 0x80000004,
+ D3DKMT_MIRACAST_DEVICE_STATUS_REMOTE_SESSION = 0x80000005,
+ D3DKMT_MIRACAST_DEVICE_STATUS_DEVICE_NOT_FOUND = 0x80000006,
+ D3DKMT_MIRACAST_DEVICE_STATUS_DEVICE_NOT_STARTED = 0x80000007,
+ D3DKMT_MIRACAST_DEVICE_STATUS_INVALID_PARAMETER = 0x80000008,
+ D3DKMT_MIRACAST_DEVICE_STATUS_INSUFFICIENT_BANDWIDTH = 0x80000009,
+ D3DKMT_MIRACAST_DEVICE_STATUS_INSUFFICIENT_MEMORY = 0x8000000A,
+ D3DKMT_MIRACAST_DEVICE_STATUS_CANCELLED = 0x8000000B,
+} D3DKMT_MIRACAST_DEVICE_STATUS;
+
+typedef struct _D3DKMT_MIRACAST_DISPLAY_DEVICE_STATUS
+{
+ //
+ // Miracast display device state.
+ //
+ D3DKMT_MIRACAST_DISPLAY_DEVICE_STATE State;
+} D3DKMT_MIRACAST_DISPLAY_DEVICE_STATUS, *PD3DKMT_MIRACAST_DISPLAY_DEVICE_STATUS;
+
+typedef struct _D3DKMT_MIRACAST_DISPLAY_DEVICE_CAPS
+{
+ BOOLEAN HdcpSupported;
+ ULONG DefaultControlPort;
+ BOOLEAN UsesIhvSolution;
+} D3DKMT_MIRACAST_DISPLAY_DEVICE_CAPS, *PD3DKMT_MIRACAST_DISPLAY_DEVICE_CAPS;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+typedef struct _D3DKMT_MIRACAST_DISPLAY_STOP_SESSIONS
+{
+ LUID AdapterLuid;
+ D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId;
+ UINT StopReason;
+} D3DKMT_MIRACAST_DISPLAY_STOP_SESSIONS, *PD3DKMT_MIRACAST_DISPLAY_STOP_SESSIONS;
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+
+#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
+
+typedef struct _D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMCPU
+{
+ D3DKMT_HANDLE hDevice; // in: Handle to the device.
+ UINT ObjectCount; // in: Number of objects to
wait on.
+
+ D3DKMT_PTR(_Field_size_(ObjectCount)
+ const D3DKMT_HANDLE*, ObjectHandleArray); // in: Handle to monitored
fence synchronization objects to wait on.
+
+ D3DKMT_PTR(_Field_size_(ObjectCount)
+ const UINT64*, FenceValueArray); // in: Fence values to be
waited on.
+
+ D3DKMT_PTR(HANDLE, hAsyncEvent); // in: Event to be signaled
when the wait condition is satisfied.
+ // When set to NULL, the call
will not return until the wait condition is satisfied.
+
+ D3DDDI_WAITFORSYNCHRONIZATIONOBJECTFROMCPU_FLAGS Flags; // in: Flags that specify the
wait mode.
+} D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMCPU;
+
+typedef struct _D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMCPU
+{
+ D3DKMT_HANDLE hDevice; // in: Handle to the device.
+ UINT ObjectCount; // in: Number of objects to signal.
+
+ D3DKMT_PTR(_Field_size_(ObjectCount)
+ const D3DKMT_HANDLE*, ObjectHandleArray); // in: Handle to monitored fence
synchronization objects to signal.
+
+ D3DKMT_PTR(_Field_size_(ObjectCount)
+ const UINT64*, FenceValueArray); // in: Fence values to be signaled.
+
+ D3DDDICB_SIGNALFLAGS Flags; // in: Specifies signal behavior.
+} D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMCPU;
+
+typedef struct _D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMGPU
+{
+ D3DKMT_HANDLE hContext; // in: Specify the context that
should be waiting.
+ UINT ObjectCount; // in: Number of object to wait
on.
+
+ D3DKMT_PTR(_Field_size_(ObjectCount)
+ const D3DKMT_HANDLE*, ObjectHandleArray); // in: Handles to synchronization
objects to wait on.
+
+ union
+ {
+ _Field_size_(ObjectCount)
+ const UINT64* MonitoredFenceValueArray; // in: monitored fence values to
be waited.
+
+ D3DKMT_ALIGN64 UINT64 FenceValue; // in: fence value to be waited.
+
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+ };
+} D3DKMT_WAITFORSYNCHRONIZATIONOBJECTFROMGPU;
+
+typedef struct _D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMGPU
+{
+ D3DKMT_HANDLE hContext; // in: Identifies the context that the
signal is being submitted to.
+ UINT ObjectCount; // in: Specifies the number of objects to
signal.
+
+ D3DKMT_PTR(_Field_size_(ObjectCount)
+ const D3DKMT_HANDLE*, ObjectHandleArray); // in: Specifies the objects to signal.
+
+ union
+ {
+ _Field_size_(ObjectCount)
+ const UINT64* MonitoredFenceValueArray; // in: monitored fence values to be
signaled
+
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+ };
+} D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMGPU;
+
+typedef struct _D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMGPU2
+{
+ UINT ObjectCount; // in: Specifies the number of
objects to signal.
+
+ D3DKMT_PTR(_Field_size_(ObjectCount)
+ const D3DKMT_HANDLE*, ObjectHandleArray); // in: Specifies the objects to
signal.
+
+ D3DDDICB_SIGNALFLAGS Flags; // in: Specifies signal behavior.
+
+ ULONG BroadcastContextCount; // in: Specifies the number of
contexts to broadcast this signal to.
+
+ D3DKMT_PTR(_Field_size_(BroadcastContextCount)
+ const D3DKMT_HANDLE*, BroadcastContextArray); // in: Specifies context handles to
broadcast to.
+
+ union
+ {
+ D3DKMT_ALIGN64 UINT64 FenceValue; // in: fence value to be signaled;
+
+ HANDLE CpuEventHandle; // in: handle of a CPU event to be
signaled if Flags.EnqueueCpuEvent flag is set.
+
+ _Field_size_(ObjectCount)
+ const UINT64* MonitoredFenceValueArray; // in: monitored fence values to be
signaled
+
+ D3DKMT_ALIGN64 UINT64 Reserved[8];
+ };
+} D3DKMT_SIGNALSYNCHRONIZATIONOBJECTFROMGPU2;
+
+typedef struct _D3DKMT_CREATEPAGINGQUEUE
+{
+ D3DKMT_HANDLE hDevice; // in: Handle to the
device.
+ D3DDDI_PAGINGQUEUE_PRIORITY Priority; // in: scheduling
priority relative to other paging queues on this device
+ D3DKMT_HANDLE hPagingQueue; // out: handle to the
paging queue used to synchronize paging operations for this device.
+ D3DKMT_HANDLE hSyncObject; // out: handle to the
monitored fence object used to synchronize paging operations for this paging queue.
+ D3DKMT_PTR(VOID*, FenceValueCPUVirtualAddress); // out: Read-only mapping
of the fence value for the CPU
+ UINT PhysicalAdapterIndex; // in: Physical adapter
index (engine ordinal)
+} D3DKMT_CREATEPAGINGQUEUE;
-typedef struct _D3DKMT_DESTROYDCFROMMEMORY
+typedef struct _D3DKMT_EVICT
{
- HDC hDc;
- HANDLE hBitmap;
-} D3DKMT_DESTROYDCFROMMEMORY;
+ D3DKMT_HANDLE hDevice; // in: Device that created the
allocations
+ UINT NumAllocations; // in: number of allocation handles
+ D3DKMT_PTR(CONST D3DKMT_HANDLE*, AllocationList); // in: an array of NumAllocations
allocation handles
+ D3DDDI_EVICT_FLAGS Flags; // in: eviction flags
+ D3DKMT_ALIGN64 UINT64 NumBytesToTrim; // out: This value indicates how much
to trim in order to satisfy the new budget.
+} D3DKMT_EVICT;
+
+typedef struct _D3DKMT_LOCK2
+{
+ D3DKMT_HANDLE hDevice; // in: Handle to the device.
+ D3DKMT_HANDLE hAllocation; // in: allocation to lock
+ D3DDDICB_LOCK2FLAGS Flags; // in: Bit field defined by
D3DDDI_LOCK2FLAGS
+ D3DKMT_PTR(PVOID, pData); // out: Virtual address of the locked
allocation
+} D3DKMT_LOCK2;
+
+typedef struct _D3DKMT_UNLOCK2
+{
+ D3DKMT_HANDLE hDevice; // in: Handle to the device.
+ D3DKMT_HANDLE hAllocation; // in: allocation to unlock
+} D3DKMT_UNLOCK2;
+
+typedef struct _D3DKMT_INVALIDATECACHE
+{
+ D3DKMT_HANDLE hDevice;
+ D3DKMT_HANDLE hAllocation;
+ D3DKMT_ALIGN64 D3DKMT_SIZE_T Offset;
+ D3DKMT_ALIGN64 D3DKMT_SIZE_T Length;
+} D3DKMT_INVALIDATECACHE;
+
+typedef struct _D3DKMT_FREEGPUVIRTUALADDRESS
+{
+ D3DKMT_HANDLE hAdapter; // in: Handle to an
adapter.
+ D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress; // in:
Start of a virtual address range in bytes
+ D3DKMT_ALIGN64 D3DGPU_SIZE_T Size; // in:
Size of the virtual address range in bytes
+} D3DKMT_FREEGPUVIRTUALADDRESS;
+
+typedef struct _D3DKMT_UPDATEGPUVIRTUALADDRESS
+{
+ D3DKMT_HANDLE hDevice;
+ D3DKMT_HANDLE hContext;
+ D3DKMT_HANDLE hFenceObject;
+ UINT NumOperations;
+ D3DKMT_PTR(D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION*, Operations);
+ D3DKMT_ALIGN64 D3DKMT_SIZE_T Reserved0;
+ D3DKMT_ALIGN64 UINT64 Reserved1;
+ D3DKMT_ALIGN64 UINT64 FenceValue;
+ union
+ {
+ struct
+ {
+ UINT DoNotWait : 1;
+ UINT Reserved : 31;
+ };
+ UINT Value;
+ } Flags;
+} D3DKMT_UPDATEGPUVIRTUALADDRESS;
+
+typedef struct _D3DKMT_CREATECONTEXTVIRTUAL
+{
+ D3DKMT_HANDLE hDevice; // in:
+ UINT NodeOrdinal; // in:
+ UINT EngineAffinity; // in:
+ D3DDDI_CREATECONTEXTFLAGS Flags; // in:
+ D3DKMT_PTR(VOID*, pPrivateDriverData); // in:
+ UINT PrivateDriverDataSize; // in:
+ D3DKMT_CLIENTHINT ClientHint; // in: Hints which
client is creating the context
+ D3DKMT_HANDLE hContext; // out:
+} D3DKMT_CREATECONTEXTVIRTUAL;
+
+typedef struct _D3DKMT_SUBMITCOMMANDFLAGS
+{
+ UINT NullRendering : 1; // 0x00000001
+ UINT PresentRedirected : 1; // 0x00000002
+ UINT NoKmdAccess : 1; // 0x00000004
+ UINT Reserved : 29; // 0xFFFFFFF8
+} D3DKMT_SUBMITCOMMANDFLAGS;
+
+typedef struct _D3DKMT_SUBMITCOMMAND
+{
+ D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS Commands;
+ UINT CommandLength;
+ D3DKMT_SUBMITCOMMANDFLAGS Flags;
+ D3DKMT_ALIGN64 ULONGLONG PresentHistoryToken; // in:
Present history token for redirected present calls
+ UINT BroadcastContextCount;
+ D3DKMT_HANDLE BroadcastContext[D3DDDI_MAX_BROADCAST_CONTEXT];
+ D3DKMT_PTR(VOID*, pPrivateDriverData);
+ UINT PrivateDriverDataSize;
+ UINT NumPrimaries;
+ D3DKMT_HANDLE WrittenPrimaries[D3DDDI_MAX_WRITTEN_PRIMARIES];
+ UINT NumHistoryBuffers;
+ D3DKMT_PTR(D3DKMT_HANDLE*, HistoryBufferArray);
+} D3DKMT_SUBMITCOMMAND;
+
+#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
+
+typedef struct _D3DKMT_SUBMITCOMMANDTOHWQUEUE
+{
+ D3DKMT_HANDLE hHwQueue; // in: Context queue to submit
the command to.
+
+ D3DKMT_ALIGN64 UINT64 HwQueueProgressFenceId; // in: Hardware queue progress
fence value that will be signaled once the command is finished.
+
+ D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS CommandBuffer;// in: GPU VA of the command
buffer to be executed on the GPU.
+ UINT CommandLength; // in: Length in bytes of the
command buffer.
+
+ UINT PrivateDriverDataSize; // in: Size of private driver
data in bytes.
+
+ D3DKMT_PTR(_Field_size_bytes_(PrivateDriverDataSize)
+ VOID*, pPrivateDriverData); // in: Pointer to the private
driver data.
+
+ UINT NumPrimaries; // in: The number of primaries
written by this command buffer.
+
+ D3DKMT_PTR(_Field_size_ (NumPrimaries)
+ D3DKMT_HANDLE CONST*, WrittenPrimaries); // in: The array of primaries
written by this command buffer.
+} D3DKMT_SUBMITCOMMANDTOHWQUEUE;
+
+typedef struct _D3DKMT_SUBMITWAITFORSYNCOBJECTSTOHWQUEUE
+{
+ D3DKMT_HANDLE hHwQueue; // in: Context queue to submit the
command to.
+
+ UINT ObjectCount; // in: Number of objects to wait on.
+
+ D3DKMT_PTR(_Field_size_(ObjectCount)
+ const D3DKMT_HANDLE*, ObjectHandleArray); // in: Handles to monitored fence
synchronization objects to wait on.
+
+ D3DKMT_PTR(_Field_size_(ObjectCount)
+ const UINT64*, FenceValueArray); // in: monitored fence values to be
waited.
+} D3DKMT_SUBMITWAITFORSYNCOBJECTSTOHWQUEUE;
+
+typedef struct _D3DKMT_SUBMITSIGNALSYNCOBJECTSTOHWQUEUE
+{
+ D3DDDICB_SIGNALFLAGS Flags; // in: Specifies signal behavior.
+
+ ULONG BroadcastHwQueueCount; // in: Specifies the number of
hardware queues to broadcast this signal to.
+
+ D3DKMT_PTR(_Field_size_(BroadcastHwQueueCount)
+ const D3DKMT_HANDLE*, BroadcastHwQueueArray); // in: Specifies hardware queue
handles to broadcast to.
... 5677 lines suppressed ...