ReactOS 0.4.16-dev-570-g1868985
d3dukmdt.h
Go to the documentation of this file.
1/******************************Module*Header************************************\
2*
3* Module Name: d3dukmdt.h
4*
5* Content: Windows Display Driver Model (WDDM) user/kernel mode
6* shared data type definitions.
7*
8* Copyright (c) Microsoft Corporation.
9* Licensed under the MIT License.
10*
11\*******************************************************************************/
12#ifndef _D3DUKMDT_H_
13#define _D3DUKMDT_H_
14#include <winapifamily.h>
15
16#pragma region Desktop Family
17#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
18
19#if !defined(_D3DKMDT_H) && \
20 !defined(_D3DKMTHK_H_) && \
21 !defined(_D3DUMDDI_H_) && \
22 !defined(__DXGKRNLETW_H__)
23 #error This header should not be included directly!
24#endif
25
26#pragma warning(push)
27#pragma warning(disable:4201) // anonymous unions warning
28#pragma warning(disable:4214) // nonstandard extension used: bit field types other than int
29
30
31//
32// WDDM DDI Interface Version
33//
34
35#define DXGKDDI_INTERFACE_VERSION_VISTA 0x1052
36#define DXGKDDI_INTERFACE_VERSION_VISTA_SP1 0x1053
37#define DXGKDDI_INTERFACE_VERSION_WIN7 0x2005
38#define DXGKDDI_INTERFACE_VERSION_WIN8 0x300E
39#define DXGKDDI_INTERFACE_VERSION_WDDM1_3 0x4002
40#define DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION 0x4003
41#define DXGKDDI_INTERFACE_VERSION_WDDM2_0 0x5023
42#define DXGKDDI_INTERFACE_VERSION_WDDM2_1 0x6003
43#define DXGKDDI_INTERFACE_VERSION_WDDM2_1_5 0x6010 // Used in RS1.7 for GPU-P
44#define DXGKDDI_INTERFACE_VERSION_WDDM2_1_6 0x6011 // Used in RS1.8 for GPU-P
45#define DXGKDDI_INTERFACE_VERSION_WDDM2_2 0x700A
46#define DXGKDDI_INTERFACE_VERSION_WDDM2_3 0x8001
47#define DXGKDDI_INTERFACE_VERSION_WDDM2_4 0x9006
48#define DXGKDDI_INTERFACE_VERSION_WDDM2_5 0xA00B
49#define DXGKDDI_INTERFACE_VERSION_WDDM2_6 0xB004
50#define DXGKDDI_INTERFACE_VERSION_WDDM2_7 0xC004
51#define DXGKDDI_INTERFACE_VERSION_WDDM2_8 0xD001
52#define DXGKDDI_INTERFACE_VERSION_WDDM2_9 0xE003
53#define DXGKDDI_INTERFACE_VERSION_WDDM3_0 0xF003
54
55
56#define IS_OFFICIAL_DDI_INTERFACE_VERSION(version) \
57 (((version) == DXGKDDI_INTERFACE_VERSION_VISTA) || \
58 ((version) == DXGKDDI_INTERFACE_VERSION_VISTA_SP1) || \
59 ((version) == DXGKDDI_INTERFACE_VERSION_WIN7) || \
60 ((version) == DXGKDDI_INTERFACE_VERSION_WIN8) || \
61 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM1_3) || \
62 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION) || \
63 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_0) || \
64 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_1) || \
65 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_1_5) || \
66 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_1_6) || \
67 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_2) || \
68 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_3) || \
69 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_4) || \
70 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_5) || \
71 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_6) || \
72 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_7) || \
73 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_8) || \
74 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM2_9) || \
75 ((version) == DXGKDDI_INTERFACE_VERSION_WDDM3_0) \
76 )
77
78#if !defined(DXGKDDI_INTERFACE_VERSION)
79#define DXGKDDI_INTERFACE_VERSION DXGKDDI_INTERFACE_VERSION_WDDM3_0
80#endif // !defined(DXGKDDI_INTERFACE_VERSION)
81
82#define D3D_UMD_INTERFACE_VERSION_VISTA 0x000C
83#define D3D_UMD_INTERFACE_VERSION_WIN7 0x2003
84#define D3D_UMD_INTERFACE_VERSION_WIN8_M3 0x3001
85#define D3D_UMD_INTERFACE_VERSION_WIN8_CP 0x3002
86#define D3D_UMD_INTERFACE_VERSION_WIN8_RC 0x3003
87#define D3D_UMD_INTERFACE_VERSION_WIN8 0x3004
88#define D3D_UMD_INTERFACE_VERSION_WDDM1_3 0x4002
89
90#define D3D_UMD_INTERFACE_VERSION_WDDM2_0_M1 0x5000
91#define D3D_UMD_INTERFACE_VERSION_WDDM2_0_M1_3 0x5001
92#define D3D_UMD_INTERFACE_VERSION_WDDM2_0_M2_2 0x5002
93#define D3D_UMD_INTERFACE_VERSION_WDDM2_0 0x5002
94
95#define D3D_UMD_INTERFACE_VERSION_WDDM2_1_1 0x6000
96#define D3D_UMD_INTERFACE_VERSION_WDDM2_1_2 0x6001
97#define D3D_UMD_INTERFACE_VERSION_WDDM2_1_3 0x6002
98#define D3D_UMD_INTERFACE_VERSION_WDDM2_1_4 0x6003
99#define D3D_UMD_INTERFACE_VERSION_WDDM2_1 D3D_UMD_INTERFACE_VERSION_WDDM2_1_4
100
101#define D3D_UMD_INTERFACE_VERSION_WDDM2_2_1 0x7000
102#define D3D_UMD_INTERFACE_VERSION_WDDM2_2_2 0x7001
103#define D3D_UMD_INTERFACE_VERSION_WDDM2_2 D3D_UMD_INTERFACE_VERSION_WDDM2_2_2
104
105#define D3D_UMD_INTERFACE_VERSION_WDDM2_3_1 0x8000
106#define D3D_UMD_INTERFACE_VERSION_WDDM2_3_2 0x8001
107#define D3D_UMD_INTERFACE_VERSION_WDDM2_3 D3D_UMD_INTERFACE_VERSION_WDDM2_3_2
108
109#define D3D_UMD_INTERFACE_VERSION_WDDM2_4_1 0x9000
110#define D3D_UMD_INTERFACE_VERSION_WDDM2_4_2 0x9001
111#define D3D_UMD_INTERFACE_VERSION_WDDM2_4 D3D_UMD_INTERFACE_VERSION_WDDM2_4_2
112
113#define D3D_UMD_INTERFACE_VERSION_WDDM2_5_1 0xA000
114#define D3D_UMD_INTERFACE_VERSION_WDDM2_5_2 0xA001
115#define D3D_UMD_INTERFACE_VERSION_WDDM2_5_3 0xA002
116#define D3D_UMD_INTERFACE_VERSION_WDDM2_5 D3D_UMD_INTERFACE_VERSION_WDDM2_5_3
117
118#define D3D_UMD_INTERFACE_VERSION_WDDM2_6_1 0xB000
119#define D3D_UMD_INTERFACE_VERSION_WDDM2_6_2 0xB001
120#define D3D_UMD_INTERFACE_VERSION_WDDM2_6_3 0xB002
121#define D3D_UMD_INTERFACE_VERSION_WDDM2_6_4 0xB003
122#define D3D_UMD_INTERFACE_VERSION_WDDM2_6 D3D_UMD_INTERFACE_VERSION_WDDM2_6_4
123
124#define D3D_UMD_INTERFACE_VERSION_WDDM2_7_1 0xC000
125#define D3D_UMD_INTERFACE_VERSION_WDDM2_7_2 0xC001
126#define D3D_UMD_INTERFACE_VERSION_WDDM2_7 D3D_UMD_INTERFACE_VERSION_WDDM2_7_2
127
128#define D3D_UMD_INTERFACE_VERSION_WDDM2_8_1 0xD000
129#define D3D_UMD_INTERFACE_VERSION_WDDM2_8 D3D_UMD_INTERFACE_VERSION_WDDM2_8_1
130
131#define D3D_UMD_INTERFACE_VERSION_WDDM2_9_1 0xE000
132#define D3D_UMD_INTERFACE_VERSION_WDDM2_9 D3D_UMD_INTERFACE_VERSION_WDDM2_9_1
133
134#define D3D_UMD_INTERFACE_VERSION_WDDM3_0_1 0xF000
135#define D3D_UMD_INTERFACE_VERSION_WDDM3_0 D3D_UMD_INTERFACE_VERSION_WDDM3_0_1
136
137// Components which depend on D3D_UMD_INTERFACE_VERSION need to be updated, static assert validation present.
138// Search for D3D_UMD_INTERFACE_VERSION across all depots to ensure all dependencies are updated.
139
140#if !defined(D3D_UMD_INTERFACE_VERSION)
141#define D3D_UMD_INTERFACE_VERSION D3D_UMD_INTERFACE_VERSION_WDDM3_0
142#endif // !defined(D3D_UMD_INTERFACE_VERSION)
143
144//
145// These macros are used to enable non-Windows 32-bit usermode to fill out a fixed-size
146// structure for D3DKMT structures, so that they can be sent to a 64-bit kernel
147// without a thunking layer for translation.
148//
149// Note that a thunking layer is still used for wchar_t translation, where Windows uses
150// 16-bit characters and non-Windows uses 32-bit characters.
151//
152// If brace initialization is used (e.g. D3DKMT_FOO foo = { a, b, c }), be aware that for
153// non-Windows, pointers will be unioned such that a 64-bit integer is the member that is
154// initialized. It is not possible to achieve both type safety and proper zero-initialization
155// of the high bits of pointers with brace initialization in this model. Use D3DKMT_PTR_INIT(ptr)
156// to appropriately cast to a 64-bit integer for non-Windows, or to pass the pointer unchanged for
157// Windows. To maintain type safety, manually assign the fields after zero-initializing the struct.
158//
159#ifdef _WIN32
160// For Windows, don't enforce any unnatural alignment or data sizes/types.
161// The WOW64 thunking layer will handle translation.
162#define D3DKMT_ALIGN64
163#define D3DKMT_PTR_HELPER(Name)
164#define D3DKMT_PTR(Type, Name) Type Name
165#define D3DKMT_PTR_INIT(x) (x)
166typedef SIZE_T D3DKMT_SIZE_T;
167typedef UINT_PTR D3DKMT_UINT_PTR;
168typedef ULONG_PTR D3DKMT_ULONG_PTR;
169typedef HANDLE D3DKMT_PTR_TYPE;
170#else
171// For other platforms, struct layout should be fixed-size, x64-compatible
172#if __cplusplus >= 201103L
173 #define D3DKMT_ALIGN64 alignas(8)
174#else
175 #define D3DKMT_ALIGN64 __attribute__((aligned(8)))
176#endif
177#define D3DKMT_PTR_HELPER(Name) D3DKMT_ALIGN64 UINT64 Name;
178#define D3DKMT_PTR(Type, Name) \
179union D3DKMT_ALIGN64 \
180{ \
181 D3DKMT_PTR_HELPER(Name##_Align) \
182 Type Name; \
183}
184#define D3DKMT_PTR_INIT(x) { (UINT64)(SIZE_T)(x) }
185typedef UINT64 D3DKMT_SIZE_T, D3DKMT_UINT_PTR, D3DKMT_ULONG_PTR;
186typedef union _D3DKMT_PTR_TYPE
187{
188 D3DKMT_PTR_HELPER(Ptr_Align);
189 HANDLE Ptr;
190} D3DKMT_PTR_TYPE;
191#endif
192
193//
194// Available only for Vista (LONGHORN) and later and for
195// multiplatform tools such as debugger extensions
196//
197#if defined(__REACTOS__) || ((NTDDI_VERSION >= NTDDI_LONGHORN) || defined(D3DKMDT_SPECIAL_MULTIPLATFORM_TOOL))
198
199typedef ULONGLONG D3DGPU_VIRTUAL_ADDRESS;
200typedef ULONGLONG D3DGPU_SIZE_T;
201#define D3DGPU_UNIQUE_DRIVER_PROTECTION 0x8000000000000000ULL
202
203#define DXGK_MAX_PAGE_TABLE_LEVEL_COUNT 6
204#define DXGK_MIN_PAGE_TABLE_LEVEL_COUNT 2
205
206//
207// IOCTL_GPUP_DRIVER_ESCAPE - The user mode emulation DLL calls this IOCTL
208// to exchange information with the kernel mode driver.
209//
210#define IOCTL_GPUP_DRIVER_ESCAPE CTL_CODE(FILE_DEVICE_UNKNOWN, (8 + 0x910), METHOD_BUFFERED, FILE_READ_DATA)
211typedef struct _GPUP_DRIVER_ESCAPE_INPUT
212{
213 LUID vfLUID; //LUID that was returned from SET_PARTITION_DETAILS
214} GPUP_DRIVER_ESCAPE_INPUT, *PGPUP_DRIVER_ESCAPE_INPUT;
215
216typedef enum _DXGKVGPU_ESCAPE_TYPE
217{
218 DXGKVGPU_ESCAPE_TYPE_READ_PCI_CONFIG = 0,
219 DXGKVGPU_ESCAPE_TYPE_WRITE_PCI_CONFIG = 1,
220 DXGKVGPU_ESCAPE_TYPE_INITIALIZE = 2,
221 DXGKVGPU_ESCAPE_TYPE_RELEASE = 3,
222 DXGKVGPU_ESCAPE_TYPE_GET_VGPU_TYPE = 4,
223 DXGKVGPU_ESCAPE_TYPE_POWERTRANSITIONCOMPLETE = 5,
224} DXGKVGPU_ESCAPE_TYPE;
225
226typedef struct _DXGKVGPU_ESCAPE_HEAD
227{
228 GPUP_DRIVER_ESCAPE_INPUT Luid;
229 DXGKVGPU_ESCAPE_TYPE Type;
230} DXGKVGPU_ESCAPE_HEAD;
231
232typedef struct _DXGKVGPU_ESCAPE_READ_PCI_CONFIG
233{
234 DXGKVGPU_ESCAPE_HEAD Header;
235
236 UINT Offset; // Offset in bytes in the PCI config space
237 UINT Size; // Size in bytes to read
238} DXGKVGPU_ESCAPE_READ_PCI_CONFIG;
239
240typedef struct _DXGKVGPU_ESCAPE_WRITE_PCI_CONFIG
241{
242 DXGKVGPU_ESCAPE_HEAD Header;
243
244 UINT Offset; // Offset in bytes in the PCI config space
245 UINT Size; // Size in bytes to write
246 // "Size" number of bytes follow
247} DXGKVGPU_ESCAPE_WRITE_PCI_CONFIG;
248
249typedef struct _DXGKVGPU_ESCAPE_READ_VGPU_TYPE
250{
251 DXGKVGPU_ESCAPE_HEAD Header;
252} DXGKVGPU_ESCAPE_READ_VGPU_TYPE;
253
254typedef struct _DXGKVGPU_ESCAPE_POWERTRANSITIONCOMPLETE
255{
256 DXGKVGPU_ESCAPE_HEAD Header;
258} DXGKVGPU_ESCAPE_POWERTRANSITIONCOMPLETE;
259
260typedef struct _DXGKVGPU_ESCAPE_INITIALIZE
261{
262 DXGKVGPU_ESCAPE_HEAD Header;
263 GUID VmGuid;
264} DXGKVGPU_ESCAPE_INITIALIZE;
265
266typedef struct _DXGKVGPU_ESCAPE_RELEASE
267{
268 DXGKVGPU_ESCAPE_HEAD Header;
269} DXGKVGPU_ESCAPE_RELEASE;
270
271
272typedef enum _DXGK_PTE_PAGE_SIZE
273{
274 DXGK_PTE_PAGE_TABLE_PAGE_4KB = 0,
275 DXGK_PTE_PAGE_TABLE_PAGE_64KB = 1,
276} DXGK_PTE_PAGE_SIZE;
277
278//
279// Page Table Entry structure. Contains segment/physical address pointing to a page
280//
281
282typedef struct _DXGK_PTE
283{
284 union
285 {
286 struct
287 {
288 ULONGLONG Valid : 1;
289 ULONGLONG Zero : 1;
290 ULONGLONG CacheCoherent : 1;
292 ULONGLONG NoExecute : 1;
293 ULONGLONG Segment : 5;
294 ULONGLONG LargePage : 1;
295 ULONGLONG PhysicalAdapterIndex : 6;
296 ULONGLONG PageTablePageSize : 2; // DXGK_PTE_PAGE_SIZE
297 ULONGLONG SystemReserved0 : 1;
298 ULONGLONG Reserved : 44;
299 };
301 };
302 union
303 {
304 ULONGLONG PageAddress; // High 52 bits of 64 bit physical address. Low 12 bits are zero.
305 ULONGLONG PageTableAddress; // High 52 bits of 64 bit physical address. Low 12 bits are zero.
306 };
307} DXGK_PTE;
308
309#define D3DGPU_NULL 0
310#define D3DDDI_MAX_WRITTEN_PRIMARIES 16
311#define D3DDDI_MAX_MPO_PRESENT_DIRTY_RECTS 0xFFF
312
313typedef struct _D3DGPU_PHYSICAL_ADDRESS
314{
315 UINT SegmentId;
316 UINT Padding;
317 UINT64 SegmentOffset;
318} D3DGPU_PHYSICAL_ADDRESS;
319
321// Purpose: Video present source unique identification number descriptor type
322//
323
324typedef UINT D3DDDI_VIDEO_PRESENT_SOURCE_ID;
325
327// Purpose: Video present source unique identification number descriptor type.
328//
329typedef UINT D3DDDI_VIDEO_PRESENT_TARGET_ID;
330
331//
332// DDI level handle that represents a kernel mode object (allocation, device, etc)
333//
334typedef UINT D3DKMT_HANDLE;
335
337// Purpose: Video present target mode fractional frequency descriptor type.
338//
339// Remarks: Fractional value used to represent vertical and horizontal frequencies of a video mode
340// (i.e. VSync and HSync). Vertical frequencies are stored in Hz. Horizontal frequencies
341// are stored in Hz.
342// The dynamic range of this encoding format, given 10^-7 resolution is {0..(2^32 - 1) / 10^7},
343// which translates to {0..428.4967296} [Hz] for vertical frequencies and {0..428.4967296} [Hz]
344// for horizontal frequencies. This sub-microseconds precision range should be acceptable even
345// for a pro-video application (error in one microsecond for video signal synchronization would
346// imply a time drift with a cycle of 10^7/(60*60*24) = 115.741 days.
347//
348// If rational number with a finite fractional sequence, use denominator of form 10^(length of fractional sequence).
349// If rational number without a finite fractional sequence, or a sequence exceeding the precision allowed by the
350// dynamic range of the denominator, or an irrational number, use an appropriate ratio of integers which best
351// represents the value.
352//
353typedef struct _D3DDDI_RATIONAL
354{
355 UINT Numerator;
356 UINT Denominator;
357} D3DDDI_RATIONAL;
358
359typedef struct _D3DDDI_ALLOCATIONINFO
360{
361 D3DKMT_HANDLE hAllocation; // out: Private driver data for allocation
362 D3DKMT_PTR(CONST VOID*, pSystemMem); // in: Pointer to pre-allocated sysmem
363 D3DKMT_PTR(VOID*, pPrivateDriverData); // in(out optional): Private data for each allocation
364 UINT PrivateDriverDataSize; // in: Size of the private data
365 D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: VidPN source ID if this is a primary
366 union
367 {
368 struct
369 {
370 UINT Primary : 1; // 0x00000001
371#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8) || \
372 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WIN8))
373 UINT Stereo : 1; // 0x00000002
374 UINT Reserved :30; // 0xFFFFFFFC
375#else
376 UINT Reserved :31; // 0xFFFFFFFE
377#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
378 };
379 UINT Value;
380 } Flags;
381} D3DDDI_ALLOCATIONINFO;
382
383#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN7) || \
384 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WIN7))
385
386typedef struct _D3DDDI_ALLOCATIONINFO2
387{
388 D3DKMT_HANDLE hAllocation; // out: Private driver data for allocation
389 union D3DKMT_ALIGN64
390 {
391 D3DKMT_PTR_HELPER(pSystemMem_hSection_Align)
392 HANDLE hSection; // in: Handle to valid section object
393 CONST VOID* pSystemMem; // in: Pointer to pre-allocated sysmem
394 };
395 D3DKMT_PTR(VOID*, pPrivateDriverData); // in(out optional): Private data for each allocation
396 UINT PrivateDriverDataSize; // in: Size of the private data
397 D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: VidPN source ID if this is a primary
398 union
399 {
400 struct
401 {
402 UINT Primary : 1; // 0x00000001
403#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8) || \
404 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WIN8))
405 UINT Stereo : 1; // 0x00000002
406#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2) || \
407 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_2))
408 UINT OverridePriority : 1; // 0x00000004
409 UINT Reserved : 29; // 0xFFFFFFF8
410#else
411 UINT Reserved : 30; // 0xFFFFFFFC
412#endif
413#else
414 UINT Reserved :31; // 0xFFFFFFFE
415#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
416 };
417 UINT Value;
418 } Flags;
419 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS GpuVirtualAddress; // out: GPU Virtual address of the allocation created.
420#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2) || \
421 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_2))
422 union
423 {
424 UINT Priority; // in: priority of allocation
425 D3DKMT_ALIGN64 ULONG_PTR Unused;
426 };
427 D3DKMT_ALIGN64 ULONG_PTR Reserved[5]; // Reserved
428#else
429 D3DKMT_ALIGN64 ULONG_PTR Reserved[6]; // Reserved
430#endif
431} D3DDDI_ALLOCATIONINFO2;
432
433#endif
434
435typedef struct _D3DDDI_OPENALLOCATIONINFO
436{
437 D3DKMT_HANDLE hAllocation; // in: Handle for this allocation in this process
438 D3DKMT_PTR(CONST VOID*, pPrivateDriverData); // in: Ptr to driver private buffer for this allocations
439 UINT PrivateDriverDataSize; // in: Size in bytes of driver private buffer for this allocations
440
441} D3DDDI_OPENALLOCATIONINFO;
442
443#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN7) || \
444 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WIN7))
445
446typedef struct _D3DDDI_OPENALLOCATIONINFO2
447{
448 D3DKMT_HANDLE hAllocation; // in: Handle for this allocation in this process
449 D3DKMT_PTR(CONST VOID*, pPrivateDriverData);// in: Ptr to driver private buffer for this allocations
450 UINT PrivateDriverDataSize; // in: Size in bytes of driver private buffer for this allocations
451 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS GpuVirtualAddress; // out: GPU Virtual address of the allocation opened.
452 D3DKMT_ALIGN64 ULONG_PTR Reserved[6]; // Reserved
453} D3DDDI_OPENALLOCATIONINFO2;
454
455#endif
456
457#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8) || \
458 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WIN8))
459
460typedef enum _D3DDDI_OFFER_PRIORITY
461{
462 D3DDDI_OFFER_PRIORITY_NONE=0, // Do not offer
463 D3DDDI_OFFER_PRIORITY_LOW=1, // Content is not useful
464 D3DDDI_OFFER_PRIORITY_NORMAL, // Content is useful but easy to regenerate
465 D3DDDI_OFFER_PRIORITY_HIGH, // Content is useful and difficult to regenerate
466 D3DDDI_OFFER_PRIORITY_AUTO, // Let VidMm decide offer priority based on eviction priority
467} D3DDDI_OFFER_PRIORITY;
468
469#endif
470
471typedef struct _D3DDDI_ALLOCATIONLIST
472{
473 D3DKMT_HANDLE hAllocation;
474 union
475 {
476 struct
477 {
478 UINT WriteOperation : 1; // 0x00000001
479 UINT DoNotRetireInstance : 1; // 0x00000002
480
481#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8) || \
482 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WIN8))
483 UINT OfferPriority : 3; // 0x0000001C D3DDDI_OFFER_PRIORITY
484 UINT Reserved :27; // 0xFFFFFFE0
485#else
486 UINT Reserved :30; // 0xFFFFFFFC
487#endif
488 };
489 UINT Value;
490 };
491} D3DDDI_ALLOCATIONLIST;
492
493typedef struct _D3DDDI_PATCHLOCATIONLIST
494{
495 UINT AllocationIndex;
496 union
497 {
498 struct
499 {
500 UINT SlotId : 24; // 0x00FFFFFF
501 UINT Reserved : 8; // 0xFF000000
502 };
503 UINT Value;
504 };
505 UINT DriverId;
506 UINT AllocationOffset;
507 UINT PatchOffset;
508 UINT SplitOffset;
509} D3DDDI_PATCHLOCATIONLIST;
510
511typedef struct _D3DDDICB_LOCKFLAGS
512{
513 union
514 {
515 struct
516 {
517 UINT ReadOnly : 1; // 0x00000001
518 UINT WriteOnly : 1; // 0x00000002
519 UINT DonotWait : 1; // 0x00000004
520 UINT IgnoreSync : 1; // 0x00000008
521 UINT LockEntire : 1; // 0x00000010
522 UINT DonotEvict : 1; // 0x00000020
523 UINT AcquireAperture : 1; // 0x00000040
524 UINT Discard : 1; // 0x00000080
525 UINT NoExistingReference : 1; // 0x00000100
526 UINT UseAlternateVA : 1; // 0x00000200
527 UINT IgnoreReadSync : 1; // 0x00000400
528 UINT Reserved :21; // 0xFFFFF800
529 };
530 UINT Value;
531 };
532} D3DDDICB_LOCKFLAGS;
533
534typedef struct _D3DDDICB_LOCK2FLAGS
535{
536 union
537 {
538 struct
539 {
540 UINT Reserved : 32; // 0xFFFFFFFF
541 };
542 UINT Value;
543 };
544} D3DDDICB_LOCK2FLAGS;
545
546typedef struct _D3DDDICB_DESTROYALLOCATION2FLAGS
547{
548 union
549 {
550 struct
551 {
552 UINT AssumeNotInUse : 1; // 0x00000001
553 UINT SynchronousDestroy : 1; // 0x00000002
554 UINT Reserved : 29; // 0x7FFFFFFC
555 UINT SystemUseOnly : 1; // 0x80000000 // Should not be set by the UMD
556 };
557 UINT Value;
558 };
559} D3DDDICB_DESTROYALLOCATION2FLAGS;
560
561typedef struct _D3DDDI_ESCAPEFLAGS
562{
563 union
564 {
565 struct
566 {
567 UINT HardwareAccess : 1; // 0x00000001
568#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3) || \
569 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM1_3))
570 UINT DeviceStatusQuery : 1; // 0x00000002
571 UINT ChangeFrameLatency : 1; // 0x00000004
572#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
573 UINT NoAdapterSynchronization : 1; // 0x00000008
574#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
575 UINT Reserved : 1; // 0x00000010 Used internally by DisplayOnly present
576 UINT VirtualMachineData : 1; // 0x00000020 Cannot be set from user mode
577#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_5)
578 UINT DriverKnownEscape : 1; // 0x00000040 // Driver private data points to a well known structure
579 UINT DriverCommonEscape : 1; // 0x00000080 // Private data points runtime defined structure
580 UINT Reserved2 :24; // 0xFFFFFF00
581#else // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_5)
582 UINT Reserved2 :26; // 0xFFFFFFC0
583#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_5)
584#else
585 UINT Reserved :28; // 0xFFFFFFF0
586#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
587#else
588 UINT Reserved :29; // 0xFFFFFFF8
589#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
590#else
591 UINT Reserved :31; // 0xFFFFFFFE
592#endif // WDDM1_3
593 };
594 UINT Value;
595 };
596} D3DDDI_ESCAPEFLAGS;
597
598#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_5)
599
600typedef enum _D3DDDI_DRIVERESCAPETYPE
601{
602 D3DDDI_DRIVERESCAPETYPE_TRANSLATEALLOCATIONHANDLE = 0,
603 D3DDDI_DRIVERESCAPETYPE_TRANSLATERESOURCEHANDLE = 1,
604#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
605 D3DDDI_DRIVERESCAPETYPE_CPUEVENTUSAGE = 2,
606#endif
607 D3DDDI_DRIVERESCAPETYPE_MAX,
608} D3DDDI_DRIVERESCAPETYPE;
609
610typedef struct _D3DDDI_DRIVERESCAPE_TRANSLATEALLOCATIONEHANDLE
611{
612 D3DDDI_DRIVERESCAPETYPE EscapeType;
613 D3DKMT_HANDLE hAllocation;
614} D3DDDI_DRIVERESCAPE_TRANSLATEALLOCATIONEHANDLE;
615
616typedef struct _D3DDDI_DRIVERESCAPE_TRANSLATERESOURCEHANDLE
617{
618 D3DDDI_DRIVERESCAPETYPE EscapeType;
619 D3DKMT_HANDLE hResource;
620} D3DDDI_DRIVERESCAPE_TRANSLATERESOURCEHANDLE;
621
622#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_5)
623
624#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
625
626typedef struct _D3DDDI_DRIVERESCAPE_CPUEVENTUSAGE
627{
628 D3DDDI_DRIVERESCAPETYPE EscapeType;
629 D3DKMT_HANDLE hSyncObject;
630 D3DKMT_ALIGN64 UINT64 hKmdCpuEvent;
631 UINT Usage[8];
632} D3DDDI_DRIVERESCAPE_CPUEVENTUSAGE;
633
634#endif
635
636typedef struct _D3DDDI_CREATECONTEXTFLAGS
637{
638 union
639 {
640 struct
641 {
642 UINT NullRendering : 1; // 0x00000001
643 UINT InitialData : 1; // 0x00000002
644#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0) || \
645 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_0))
646 UINT DisableGpuTimeout : 1; // 0x00000004
647 UINT SynchronizationOnly : 1; // 0x00000008
648#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3) || \
649 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_3_1))
650 UINT HwQueueSupported : 1; // 0x00000010
651 UINT NoKmdAccess : 1; // 0x00000020
652 UINT Reserved :26; // 0xFFFFFFC0
653#else
654 UINT Reserved :28; // 0xFFFFFFF0
655#endif // DXGKDDI_INTERFACE_VERSION
656
657#else
658 UINT Reserved :30; // 0xFFFFFFFC
659#endif // DXGKDDI_INTERFACE_VERSION
660 };
661 UINT Value;
662 };
663} D3DDDI_CREATECONTEXTFLAGS;
664
665#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2) || \
666 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_2_1))
667
668typedef struct _D3DDDI_CREATEHWCONTEXTFLAGS
669{
670 union
671 {
672 struct
673 {
674 UINT Reserved :32; // 0xFFFFFFFF
675 };
676 UINT Value;
677 };
678} D3DDDI_CREATEHWCONTEXTFLAGS;
679
680typedef struct _D3DDDI_CREATEHWQUEUEFLAGS
681{
682 union
683 {
684 struct
685 {
686 UINT DisableGpuTimeout : 1; // 0x00000001
687 UINT NoBroadcastSignal : 1; // 0x00000002
688 UINT NoBroadcastWait : 1; // 0x00000004
689 UINT NoKmdAccess : 1; // 0x00000008
690 UINT Reserved :28; // 0xFFFFFFF0
691 };
692 UINT Value;
693 };
694} D3DDDI_CREATEHWQUEUEFLAGS;
695
696#endif // ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
697
698typedef struct _D3DDDI_SEGMENTPREFERENCE
699{
700 union
701 {
702 struct
703 {
704 UINT SegmentId0 : 5; // 0x0000001F
705 UINT Direction0 : 1; // 0x00000020
706 UINT SegmentId1 : 5; // 0x000007C0
707 UINT Direction1 : 1; // 0x00000800
708 UINT SegmentId2 : 5; // 0x0001F000
709 UINT Direction2 : 1; // 0x00020000
710 UINT SegmentId3 : 5; // 0x007C0000
711 UINT Direction3 : 1; // 0x00800000
712 UINT SegmentId4 : 5; // 0x1F000000
713 UINT Direction4 : 1; // 0x20000000
714 UINT Reserved : 2; // 0xC0000000
715 };
716 UINT Value;
717 };
718} D3DDDI_SEGMENTPREFERENCE;
719
720/* Formats
721 * Most of these names have the following convention:
722 * A = Alpha
723 * R = Red
724 * G = Green
725 * B = Blue
726 * X = Unused Bits
727 * P = Palette
728 * L = Luminance
729 * U = dU coordinate for BumpMap
730 * V = dV coordinate for BumpMap
731 * S = Stencil
732 * D = Depth (e.g. Z or W buffer)
733 * C = Computed from other channels (typically on certain read operations)
734 *
735 * Further, the order of the pieces are from MSB first; hence
736 * D3DFMT_A8L8 indicates that the high byte of this two byte
737 * format is alpha.
738 *
739 * D16 indicates:
740 * - An integer 16-bit value.
741 * - An app-lockable surface.
742 *
743 * All Depth/Stencil formats except D3DFMT_D16_LOCKABLE indicate:
744 * - no particular bit ordering per pixel, and
745 * - are not app lockable, and
746 * - the driver is allowed to consume more than the indicated
747 * number of bits per Depth channel (but not Stencil channel).
748 */
749#ifndef MAKEFOURCC
750 #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
751 ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
752 ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
753#endif /* defined(MAKEFOURCC) */
754
755
756typedef enum _D3DDDIFORMAT
757{
758
759 D3DDDIFMT_UNKNOWN = 0,
760
761 D3DDDIFMT_R8G8B8 = 20,
762 D3DDDIFMT_A8R8G8B8 = 21,
763 D3DDDIFMT_X8R8G8B8 = 22,
764 D3DDDIFMT_R5G6B5 = 23,
765 D3DDDIFMT_X1R5G5B5 = 24,
766 D3DDDIFMT_A1R5G5B5 = 25,
767 D3DDDIFMT_A4R4G4B4 = 26,
768 D3DDDIFMT_R3G3B2 = 27,
769 D3DDDIFMT_A8 = 28,
770 D3DDDIFMT_A8R3G3B2 = 29,
771 D3DDDIFMT_X4R4G4B4 = 30,
772 D3DDDIFMT_A2B10G10R10 = 31,
773 D3DDDIFMT_A8B8G8R8 = 32,
774 D3DDDIFMT_X8B8G8R8 = 33,
775 D3DDDIFMT_G16R16 = 34,
776 D3DDDIFMT_A2R10G10B10 = 35,
777 D3DDDIFMT_A16B16G16R16 = 36,
778
779 D3DDDIFMT_A8P8 = 40,
780 D3DDDIFMT_P8 = 41,
781
782 D3DDDIFMT_L8 = 50,
783 D3DDDIFMT_A8L8 = 51,
784 D3DDDIFMT_A4L4 = 52,
785
786 D3DDDIFMT_V8U8 = 60,
787 D3DDDIFMT_L6V5U5 = 61,
788 D3DDDIFMT_X8L8V8U8 = 62,
789 D3DDDIFMT_Q8W8V8U8 = 63,
790 D3DDDIFMT_V16U16 = 64,
791 D3DDDIFMT_W11V11U10 = 65,
792 D3DDDIFMT_A2W10V10U10 = 67,
793
794 D3DDDIFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'),
795 D3DDDIFMT_R8G8_B8G8 = MAKEFOURCC('R', 'G', 'B', 'G'),
796 D3DDDIFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'),
797 D3DDDIFMT_G8R8_G8B8 = MAKEFOURCC('G', 'R', 'G', 'B'),
798 D3DDDIFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'),
799 D3DDDIFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'),
800 D3DDDIFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'),
801 D3DDDIFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'),
802 D3DDDIFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'),
803
804 D3DDDIFMT_D16_LOCKABLE = 70,
805 D3DDDIFMT_D32 = 71,
806 D3DDDIFMT_D15S1 = 73,
807 D3DDDIFMT_D24S8 = 75,
808 D3DDDIFMT_D24X8 = 77,
809 D3DDDIFMT_D24X4S4 = 79,
810 D3DDDIFMT_D16 = 80,
811
812 D3DDDIFMT_D32F_LOCKABLE = 82,
813 D3DDDIFMT_D24FS8 = 83,
814
815 D3DDDIFMT_D32_LOCKABLE = 84,
816 D3DDDIFMT_S8_LOCKABLE = 85,
817
818 D3DDDIFMT_S1D15 = 72,
819 D3DDDIFMT_S8D24 = 74,
820 D3DDDIFMT_X8D24 = 76,
821 D3DDDIFMT_X4S4D24 = 78,
822
823 D3DDDIFMT_L16 = 81,
824#if (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM1_3) // M1
825 D3DDDIFMT_G8R8 = 91,
826 D3DDDIFMT_R8 = 92,
827#endif
828
829 D3DDDIFMT_VERTEXDATA =100,
830 D3DDDIFMT_INDEX16 =101,
831 D3DDDIFMT_INDEX32 =102,
832
833 D3DDDIFMT_Q16W16V16U16 =110,
834
835 D3DDDIFMT_MULTI2_ARGB8 = MAKEFOURCC('M','E','T','1'),
836
837 // Floating point surface formats
838
839 // s10e5 formats (16-bits per channel)
840 D3DDDIFMT_R16F = 111,
841 D3DDDIFMT_G16R16F = 112,
842 D3DDDIFMT_A16B16G16R16F = 113,
843
844 // IEEE s23e8 formats (32-bits per channel)
845 D3DDDIFMT_R32F = 114,
846 D3DDDIFMT_G32R32F = 115,
847 D3DDDIFMT_A32B32G32R32F = 116,
848
849 D3DDDIFMT_CxV8U8 = 117,
850
851 // Monochrome 1 bit per pixel format
852 D3DDDIFMT_A1 = 118,
853
854 // 2.8 biased fixed point
855 D3DDDIFMT_A2B10G10R10_XR_BIAS = 119,
856
857 // Decode compressed buffer formats
858 D3DDDIFMT_DXVACOMPBUFFER_BASE = 150,
859 D3DDDIFMT_PICTUREPARAMSDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE+0, // 150
860 D3DDDIFMT_MACROBLOCKDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE+1, // 151
861 D3DDDIFMT_RESIDUALDIFFERENCEDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE+2, // 152
862 D3DDDIFMT_DEBLOCKINGDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE+3, // 153
863 D3DDDIFMT_INVERSEQUANTIZATIONDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE+4, // 154
864 D3DDDIFMT_SLICECONTROLDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE+5, // 155
865 D3DDDIFMT_BITSTREAMDATA = D3DDDIFMT_DXVACOMPBUFFER_BASE+6, // 156
866 D3DDDIFMT_MOTIONVECTORBUFFER = D3DDDIFMT_DXVACOMPBUFFER_BASE+7, // 157
867 D3DDDIFMT_FILMGRAINBUFFER = D3DDDIFMT_DXVACOMPBUFFER_BASE+8, // 158
868 D3DDDIFMT_DXVA_RESERVED9 = D3DDDIFMT_DXVACOMPBUFFER_BASE+9, // 159
869 D3DDDIFMT_DXVA_RESERVED10 = D3DDDIFMT_DXVACOMPBUFFER_BASE+10, // 160
870 D3DDDIFMT_DXVA_RESERVED11 = D3DDDIFMT_DXVACOMPBUFFER_BASE+11, // 161
871 D3DDDIFMT_DXVA_RESERVED12 = D3DDDIFMT_DXVACOMPBUFFER_BASE+12, // 162
872 D3DDDIFMT_DXVA_RESERVED13 = D3DDDIFMT_DXVACOMPBUFFER_BASE+13, // 163
873 D3DDDIFMT_DXVA_RESERVED14 = D3DDDIFMT_DXVACOMPBUFFER_BASE+14, // 164
874 D3DDDIFMT_DXVA_RESERVED15 = D3DDDIFMT_DXVACOMPBUFFER_BASE+15, // 165
875 D3DDDIFMT_DXVA_RESERVED16 = D3DDDIFMT_DXVACOMPBUFFER_BASE+16, // 166
876 D3DDDIFMT_DXVA_RESERVED17 = D3DDDIFMT_DXVACOMPBUFFER_BASE+17, // 167
877 D3DDDIFMT_DXVA_RESERVED18 = D3DDDIFMT_DXVACOMPBUFFER_BASE+18, // 168
878 D3DDDIFMT_DXVA_RESERVED19 = D3DDDIFMT_DXVACOMPBUFFER_BASE+19, // 169
879 D3DDDIFMT_DXVA_RESERVED20 = D3DDDIFMT_DXVACOMPBUFFER_BASE+20, // 170
880 D3DDDIFMT_DXVA_RESERVED21 = D3DDDIFMT_DXVACOMPBUFFER_BASE+21, // 171
881 D3DDDIFMT_DXVA_RESERVED22 = D3DDDIFMT_DXVACOMPBUFFER_BASE+22, // 172
882 D3DDDIFMT_DXVA_RESERVED23 = D3DDDIFMT_DXVACOMPBUFFER_BASE+23, // 173
883 D3DDDIFMT_DXVA_RESERVED24 = D3DDDIFMT_DXVACOMPBUFFER_BASE+24, // 174
884 D3DDDIFMT_DXVA_RESERVED25 = D3DDDIFMT_DXVACOMPBUFFER_BASE+25, // 175
885 D3DDDIFMT_DXVA_RESERVED26 = D3DDDIFMT_DXVACOMPBUFFER_BASE+26, // 176
886 D3DDDIFMT_DXVA_RESERVED27 = D3DDDIFMT_DXVACOMPBUFFER_BASE+27, // 177
887 D3DDDIFMT_DXVA_RESERVED28 = D3DDDIFMT_DXVACOMPBUFFER_BASE+28, // 178
888 D3DDDIFMT_DXVA_RESERVED29 = D3DDDIFMT_DXVACOMPBUFFER_BASE+29, // 179
889 D3DDDIFMT_DXVA_RESERVED30 = D3DDDIFMT_DXVACOMPBUFFER_BASE+30, // 180
890 D3DDDIFMT_DXVA_RESERVED31 = D3DDDIFMT_DXVACOMPBUFFER_BASE+31, // 181
891 D3DDDIFMT_DXVACOMPBUFFER_MAX = D3DDDIFMT_DXVA_RESERVED31,
892
893 D3DDDIFMT_BINARYBUFFER = 199,
894
895 D3DDDIFMT_FORCE_UINT =0x7fffffff
896} D3DDDIFORMAT;
897
898typedef enum D3DDDI_COLOR_SPACE_TYPE
899{
900 D3DDDI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 = 0,
901 D3DDDI_COLOR_SPACE_RGB_FULL_G10_NONE_P709 = 1,
902 D3DDDI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P709 = 2,
903 D3DDDI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P2020 = 3,
904 D3DDDI_COLOR_SPACE_RESERVED = 4,
905 D3DDDI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 = 5,
906 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 = 6,
907 D3DDDI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601 = 7,
908 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 = 8,
909 D3DDDI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709 = 9,
910 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020 = 10,
911 D3DDDI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020 = 11,
912 D3DDDI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 = 12,
913 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_G2084_LEFT_P2020 = 13,
914 D3DDDI_COLOR_SPACE_RGB_STUDIO_G2084_NONE_P2020 = 14,
915 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_G22_TOPLEFT_P2020 = 15,
916 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_G2084_TOPLEFT_P2020 = 16,
917 D3DDDI_COLOR_SPACE_RGB_FULL_G22_NONE_P2020 = 17,
918 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_GHLG_TOPLEFT_P2020 = 18,
919 D3DDDI_COLOR_SPACE_YCBCR_FULL_GHLG_TOPLEFT_P2020 = 19,
920 D3DDDI_COLOR_SPACE_RGB_STUDIO_G24_NONE_P709 = 20,
921 D3DDDI_COLOR_SPACE_RGB_STUDIO_G24_NONE_P2020 = 21,
922 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_G24_LEFT_P709 = 22,
923 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_G24_LEFT_P2020 = 23,
924 D3DDDI_COLOR_SPACE_YCBCR_STUDIO_G24_TOPLEFT_P2020 = 24,
925 D3DDDI_COLOR_SPACE_CUSTOM = 0xFFFFFFFF
926} D3DDDI_COLOR_SPACE_TYPE;
927
928//
929// Note: This enum is intended to specify the final wire signaling
930// colorspace values. Do not mix it with enum values defined in
931// D3DDDI_COLOR_SPACE_TYPE which are used to specify
932// input colorspace for MPOs and other surfaces.
933//
934typedef enum _D3DDDI_OUTPUT_WIRE_COLOR_SPACE_TYPE
935{
936 // We are using the same values for these first two enums for
937 // backward compatibility to WDDM2.2 drivers which used
938 // to get these 2 values from D3DDDI_COLOR_SPACE_TYPE
939 D3DDDI_OUTPUT_WIRE_COLOR_SPACE_G22_P709 = 0,
940 D3DDDI_OUTPUT_WIRE_COLOR_SPACE_RESERVED = 4,
941 D3DDDI_OUTPUT_WIRE_COLOR_SPACE_G2084_P2020 = 12,
942
943 // We are starting the new enum value at 30 just to make sure it
944 // is not confused with the existing D3DDDI_COLOR_SPACE_TYPE
945 // in the short term
946 D3DDDI_OUTPUT_WIRE_COLOR_SPACE_G22_P709_WCG = 30,
947
948 // OS only intend to use the _G22_P2020 value in future,
949 // for now graphics drivers should not expect it.
950 D3DDDI_OUTPUT_WIRE_COLOR_SPACE_G22_P2020 = 31,
951
952 // OS only intend to use the _G2084_P2020_HDR10PLUS value in future,
953 // for now graphics drivers should not expect it.
954 D3DDDI_OUTPUT_WIRE_COLOR_SPACE_G2084_P2020_HDR10PLUS = 32,
955
956 // OS only intend to use the _G2084_P2020_DVLL value in future,
957 // for now graphics drivers should not expect it.
958 D3DDDI_OUTPUT_WIRE_COLOR_SPACE_G2084_P2020_DVLL = 33,
959} D3DDDI_OUTPUT_WIRE_COLOR_SPACE_TYPE;
960
961typedef struct _D3DDDIRECT
962{
963 LONG left;
964 LONG top;
965 LONG right;
966 LONG bottom;
967} D3DDDIRECT;
968
969typedef struct _D3DDDI_KERNELOVERLAYINFO
970{
971 D3DKMT_HANDLE hAllocation; // in: Allocation to be displayed
972 D3DDDIRECT DstRect; // in: Dest rect
973 D3DDDIRECT SrcRect; // in: Source rect
974 D3DKMT_PTR(VOID*, pPrivateDriverData); // in: Private driver data
975 UINT PrivateDriverDataSize; // in: Size of private driver data
976} D3DDDI_KERNELOVERLAYINFO;
977
978typedef enum _D3DDDI_GAMMARAMP_TYPE
979{
980 D3DDDI_GAMMARAMP_UNINITIALIZED = 0,
981 D3DDDI_GAMMARAMP_DEFAULT = 1,
982 D3DDDI_GAMMARAMP_RGB256x3x16 = 2,
983 D3DDDI_GAMMARAMP_DXGI_1 = 3,
984#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
985 D3DDDI_GAMMARAMP_MATRIX_3x4 = 4,
986#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_3)
987#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6)
988 D3DDDI_GAMMARAMP_MATRIX_V2 = 5,
989#endif // DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_6
990} D3DDDI_GAMMARAMP_TYPE;
991
992typedef struct _D3DDDI_GAMMA_RAMP_RGB256x3x16
993{
994 USHORT Red[256];
995 USHORT Green[256];
996 USHORT Blue[256];
997} D3DDDI_GAMMA_RAMP_RGB256x3x16;
998
999typedef struct D3DDDI_DXGI_RGB
1000{
1001 float Red;
1002 float Green;
1003 float Blue;
1004} D3DDDI_DXGI_RGB;
1005
1006typedef struct _D3DDDI_GAMMA_RAMP_DXGI_1
1007{
1008 D3DDDI_DXGI_RGB Scale;
1009 D3DDDI_DXGI_RGB Offset;
1010 D3DDDI_DXGI_RGB GammaCurve[1025];
1011} D3DDDI_GAMMA_RAMP_DXGI_1;
1012
1013typedef struct _D3DKMDT_3X4_COLORSPACE_TRANSFORM
1014{
1015 float ColorMatrix3x4[3][4];
1016 float ScalarMultiplier;
1017 D3DDDI_DXGI_RGB LookupTable1D[4096];
1018} D3DKMDT_3x4_COLORSPACE_TRANSFORM, *PD3DDDI_3x4_COLORSPACE_TRANSFORM;
1019
1020typedef enum _D3DKMDT_COLORSPACE_TRANSFORM_STAGE_CONTROL
1021{
1022 D3DKMDT_COLORSPACE_TRANSFORM_STAGE_CONTROL_NO_CHANGE = 0,
1023 D3DKMDT_COLORSPACE_TRANSFORM_STAGE_CONTROL_ENABLE = 1,
1024 D3DKMDT_COLORSPACE_TRANSFORM_STAGE_CONTROL_BYPASS = 2,
1025}D3DKMDT_COLORSPACE_TRANSFORM_STAGE_CONTROL, *PD3DKMDT_COLORSPACE_TRANSFORM_STAGE_CONTROL;
1026
1027typedef struct _D3DKMDT_COLORSPACE_TRANSFORM_MATRIX_V2
1028{
1029 // stage of 1D Degamma.
1030 D3DKMDT_COLORSPACE_TRANSFORM_STAGE_CONTROL StageControlLookupTable1DDegamma;
1031 D3DDDI_DXGI_RGB LookupTable1DDegamma[4096];
1032
1033 // stage of 3x3 matrix
1034 D3DKMDT_COLORSPACE_TRANSFORM_STAGE_CONTROL StageControlColorMatrix3x3;
1035 float ColorMatrix3x3[3][3];
1036
1037 // stage of 1D Regamma.
1038 D3DKMDT_COLORSPACE_TRANSFORM_STAGE_CONTROL StageControlLookupTable1DRegamma;
1039 D3DDDI_DXGI_RGB LookupTable1DRegamma[4096];
1040} D3DKMDT_COLORSPACE_TRANSFORM_MATRIX_V2, *PD3DKMDT_COLORSPACE_TRANSFORM_MATRIX_V2;
1041
1042typedef enum _D3DDDI_HDR_METADATA_TYPE
1043{
1044 D3DDDI_HDR_METADATA_TYPE_NONE = 0,
1045 D3DDDI_HDR_METADATA_TYPE_HDR10 = 1,
1046 D3DDDI_HDR_METADATA_TYPE_HDR10PLUS = 2,
1047} D3DDDI_HDR_METADATA_TYPE;
1048
1049typedef struct _D3DDDI_HDR_METADATA_HDR10
1050{
1051 // Color gamut
1052 UINT16 RedPrimary[2];
1053 UINT16 GreenPrimary[2];
1054 UINT16 BluePrimary[2];
1055 UINT16 WhitePoint[2];
1056
1057 // Luminance
1058 UINT MaxMasteringLuminance;
1059 UINT MinMasteringLuminance;
1060 UINT16 MaxContentLightLevel;
1061 UINT16 MaxFrameAverageLightLevel;
1062} D3DDDI_HDR_METADATA_HDR10;
1063
1064typedef struct D3DDDI_HDR_METADATA_HDR10PLUS
1065{
1066 BYTE Data[72];
1067} D3DDDI_HDR_METADATA_HDR10PLUS;
1068
1069// Used as a value for D3DDDI_VIDEO_PRESENT_SOURCE_ID and D3DDDI_VIDEO_PRESENT_TARGET_ID types to specify
1070// that the respective video present source/target ID hasn't been initialized.
1071#define D3DDDI_ID_UNINITIALIZED (UINT)(~0)
1072
1073// TODO:[mmilirud] Define this as (UINT)(~1) to avoid collision with valid source ID equal to 0.
1074//
1075// Used as a value for D3DDDI_VIDEO_PRESENT_SOURCE_ID and D3DDDI_VIDEO_PRESENT_TARGET_ID types to specify
1076// that the respective video present source/target ID isn't applicable for the given execution context.
1077#define D3DDDI_ID_NOTAPPLICABLE (UINT)(0)
1078
1079// Indicates that a resource can be associated with "any" VidPn source, even none at all.
1080#define D3DDDI_ID_ANY (UINT)(~1)
1081
1082// Used as a value for D3DDDI_VIDEO_PRESENT_SOURCE_ID and D3DDDI_VIDEO_PRESENT_TARGET_ID types to specify
1083// that the respective video present source/target ID describes every VidPN source/target in question.
1084#define D3DDDI_ID_ALL (UINT)(~2)
1085
1086//
1087// Hardcoded VidPnSource count
1088//
1089#define D3DKMDT_MAX_VIDPN_SOURCES_BITCOUNT 4
1090#define D3DKMDT_MAX_VIDPN_SOURCES (1 << D3DKMDT_MAX_VIDPN_SOURCES_BITCOUNT)
1091
1092
1094// Purpose: Multi-sampling method descriptor type.
1095//
1096// Remarks: Driver is free to partition its quality levels for a given multi-sampling method into as many
1097// increments as it likes, with the condition that each incremental step does noticably improve
1098// quality of the presented image.
1099//
1100typedef struct _D3DDDI_MULTISAMPLINGMETHOD
1101{
1102 // Number of sub-pixels employed in this multi-sampling method (e.g. 2 for 2x and 8 for 8x multi-sampling)
1103 UINT NumSamples;
1104
1105 // Upper bound on the quality range supported for this multi-sampling method. The range starts from 0
1106 // and goes upto and including the reported maximum quality setting.
1107 UINT NumQualityLevels;
1108}
1109D3DDDI_MULTISAMPLINGMETHOD;
1110
1111
1113// Purpose: Video signal scan line ordering descriptor type.
1114//
1115// Remarks: Scan-line ordering of the video mode, specifies whether each field contains the entire
1116// content of a frame, or only half of it (i.e. even/odd lines interchangeably).
1117// Note that while for standard interlaced modes, what field comes first can be inferred
1118// from the mode, specifying this characteristic explicitly with an enum both frees up the
1119// client from having to maintain mode-based look-up tables and is extensible for future
1120// standard modes not listed in the D3DKMDT_VIDEO_SIGNAL_STANDARD enum.
1121//
1122typedef enum _D3DDDI_VIDEO_SIGNAL_SCANLINE_ORDERING
1123{
1124 D3DDDI_VSSLO_UNINITIALIZED = 0,
1125 D3DDDI_VSSLO_PROGRESSIVE = 1,
1126 D3DDDI_VSSLO_INTERLACED_UPPERFIELDFIRST = 2,
1127 D3DDDI_VSSLO_INTERLACED_LOWERFIELDFIRST = 3,
1128 D3DDDI_VSSLO_OTHER = 255
1129}
1130D3DDDI_VIDEO_SIGNAL_SCANLINE_ORDERING;
1131
1132
1133typedef enum D3DDDI_FLIPINTERVAL_TYPE
1134{
1135 D3DDDI_FLIPINTERVAL_IMMEDIATE = 0,
1136 D3DDDI_FLIPINTERVAL_ONE = 1,
1137 D3DDDI_FLIPINTERVAL_TWO = 2,
1138 D3DDDI_FLIPINTERVAL_THREE = 3,
1139 D3DDDI_FLIPINTERVAL_FOUR = 4,
1140
1141 // This value is only valid for the D3D9 runtime PresentCb SyncIntervalOverride field.
1142 // For this field, IMMEDIATE means the API semantic of sync interval 0, where
1143 // IMMEDIATE_ALLOW_TEARING is equivalent to the addition of the DXGI ALLOW_TEARING API flags.
1144 D3DDDI_FLIPINTERVAL_IMMEDIATE_ALLOW_TEARING = 5,
1145} D3DDDI_FLIPINTERVAL_TYPE;
1146
1147
1148typedef enum _D3DDDI_POOL
1149{
1150 D3DDDIPOOL_SYSTEMMEM = 1,
1151 D3DDDIPOOL_VIDEOMEMORY = 2,
1152 D3DDDIPOOL_LOCALVIDMEM = 3,
1153 D3DDDIPOOL_NONLOCALVIDMEM = 4,
1154#if (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM1_3) // M1
1155 D3DDDIPOOL_STAGINGMEM = 5,
1156#endif
1157} D3DDDI_POOL;
1158
1159
1160typedef enum _D3DDDIMULTISAMPLE_TYPE
1161{
1162 D3DDDIMULTISAMPLE_NONE = 0,
1163 D3DDDIMULTISAMPLE_NONMASKABLE = 1,
1164 D3DDDIMULTISAMPLE_2_SAMPLES = 2,
1165 D3DDDIMULTISAMPLE_3_SAMPLES = 3,
1166 D3DDDIMULTISAMPLE_4_SAMPLES = 4,
1167 D3DDDIMULTISAMPLE_5_SAMPLES = 5,
1168 D3DDDIMULTISAMPLE_6_SAMPLES = 6,
1169 D3DDDIMULTISAMPLE_7_SAMPLES = 7,
1170 D3DDDIMULTISAMPLE_8_SAMPLES = 8,
1171 D3DDDIMULTISAMPLE_9_SAMPLES = 9,
1172 D3DDDIMULTISAMPLE_10_SAMPLES = 10,
1173 D3DDDIMULTISAMPLE_11_SAMPLES = 11,
1174 D3DDDIMULTISAMPLE_12_SAMPLES = 12,
1175 D3DDDIMULTISAMPLE_13_SAMPLES = 13,
1176 D3DDDIMULTISAMPLE_14_SAMPLES = 14,
1177 D3DDDIMULTISAMPLE_15_SAMPLES = 15,
1178 D3DDDIMULTISAMPLE_16_SAMPLES = 16,
1179
1180 D3DDDIMULTISAMPLE_FORCE_UINT = 0x7fffffff
1181} D3DDDIMULTISAMPLE_TYPE;
1182
1183typedef struct _D3DDDI_RESOURCEFLAGS
1184{
1185 union
1186 {
1187 struct
1188 {
1189 UINT RenderTarget : 1; // 0x00000001
1190 UINT ZBuffer : 1; // 0x00000002
1191 UINT Dynamic : 1; // 0x00000004
1192 UINT HintStatic : 1; // 0x00000008
1193 UINT AutogenMipmap : 1; // 0x00000010
1194 UINT DMap : 1; // 0x00000020
1195 UINT WriteOnly : 1; // 0x00000040
1196 UINT NotLockable : 1; // 0x00000080
1197 UINT Points : 1; // 0x00000100
1198 UINT RtPatches : 1; // 0x00000200
1199 UINT NPatches : 1; // 0x00000400
1200 UINT SharedResource : 1; // 0x00000800
1201 UINT DiscardRenderTarget : 1; // 0x00001000
1202 UINT Video : 1; // 0x00002000
1203 UINT CaptureBuffer : 1; // 0x00004000
1204 UINT Primary : 1; // 0x00008000
1205 UINT Texture : 1; // 0x00010000
1206 UINT CubeMap : 1; // 0x00020000
1207 UINT Volume : 1; // 0x00040000
1208 UINT VertexBuffer : 1; // 0x00080000
1209 UINT IndexBuffer : 1; // 0x00100000
1210 UINT DecodeRenderTarget : 1; // 0x00200000
1211 UINT DecodeCompressedBuffer : 1; // 0x00400000
1212 UINT VideoProcessRenderTarget: 1; // 0x00800000
1213 UINT CpuOptimized : 1; // 0x01000000
1214 UINT MightDrawFromLocked : 1; // 0x02000000
1215 UINT Overlay : 1; // 0x04000000
1216 UINT MatchGdiPrimary : 1; // 0x08000000
1217 UINT InterlacedRefresh : 1; // 0x10000000
1218 UINT TextApi : 1; // 0x20000000
1219 UINT RestrictedContent : 1; // 0x40000000
1220 UINT RestrictSharedAccess : 1; // 0x80000000
1221 };
1222 UINT Value;
1223 };
1224} D3DDDI_RESOURCEFLAGS;
1225
1226typedef struct _D3DDDI_SURFACEINFO
1227{
1228 UINT Width; // in: For linear, surface and volume
1229 UINT Height; // in: For surface and volume
1230 UINT Depth; // in: For volume
1231 CONST VOID* pSysMem;
1232 UINT SysMemPitch;
1233 UINT SysMemSlicePitch;
1234} D3DDDI_SURFACEINFO;
1235
1236typedef enum _D3DDDI_ROTATION
1237{
1238 D3DDDI_ROTATION_IDENTITY = 1, // No rotation.
1239 D3DDDI_ROTATION_90 = 2, // Rotated 90 degrees.
1240 D3DDDI_ROTATION_180 = 3, // Rotated 180 degrees.
1241 D3DDDI_ROTATION_270 = 4 // Rotated 270 degrees.
1242} D3DDDI_ROTATION;
1243
1244typedef enum D3DDDI_SCANLINEORDERING
1245{
1246 D3DDDI_SCANLINEORDERING_UNKNOWN = 0,
1247 D3DDDI_SCANLINEORDERING_PROGRESSIVE = 1,
1248 D3DDDI_SCANLINEORDERING_INTERLACED = 2,
1249} D3DDDI_SCANLINEORDERING;
1250
1251typedef struct _D3DDDIARG_CREATERESOURCE
1252{
1253 D3DDDIFORMAT Format;
1254 D3DDDI_POOL Pool;
1255 D3DDDIMULTISAMPLE_TYPE MultisampleType;
1256 UINT MultisampleQuality;
1257 CONST D3DDDI_SURFACEINFO* pSurfList; // in: List of sub resource objects to create
1258 UINT SurfCount; // in: Number of sub resource objects
1259 UINT MipLevels;
1260 UINT Fvf; // in: FVF format for vertex buffers
1261 D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: VidPnSourceId on which the primary surface is created
1262 D3DDDI_RATIONAL RefreshRate; // in: RefreshRate that this primary surface is to be used with
1263 HANDLE hResource; // in/out: D3D runtime handle/UM driver handle
1264 D3DDDI_RESOURCEFLAGS Flags;
1265 D3DDDI_ROTATION Rotation; // in: The orientation of the resource. (0, 90, 180, 270)
1266} D3DDDIARG_CREATERESOURCE;
1267
1268#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8) || \
1269 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WIN8))
1270
1271typedef struct _D3DDDI_RESOURCEFLAGS2
1272{
1273 union
1274 {
1275 struct
1276 {
1277 UINT VideoEncoder : 1; // 0x00000001
1278 UINT UserMemory : 1; // 0x00000002
1279#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3) || \
1280 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM1_3)) // M1
1281 UINT CrossAdapter : 1; // 0x00000004
1282#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0) || \
1283 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_0))
1284 UINT IsDisplayable : 1; // 0x00000008
1285 UINT Reserved : 28;
1286#else
1287 UINT Reserved : 29;
1288#endif
1289#else
1290 UINT Reserved : 30;
1291#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
1292 };
1293 UINT Value;
1294 };
1295} D3DDDI_RESOURCEFLAGS2;
1296
1297
1298typedef struct _D3DDDIARG_CREATERESOURCE2
1299{
1300 D3DDDIFORMAT Format;
1301 D3DDDI_POOL Pool;
1302 D3DDDIMULTISAMPLE_TYPE MultisampleType;
1303 UINT MultisampleQuality;
1304 CONST D3DDDI_SURFACEINFO* pSurfList; // in: List of sub resource objects to create
1305 UINT SurfCount; // in: Number of sub resource objects
1306 UINT MipLevels;
1307 UINT Fvf; // in: FVF format for vertex buffers
1308 D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; // in: VidPnSourceId on which the primary surface is created
1309 D3DDDI_RATIONAL RefreshRate; // in: RefreshRate that this primary surface is to be used with
1310 HANDLE hResource; // in/out: D3D runtime handle/UM driver handle
1311 D3DDDI_RESOURCEFLAGS Flags;
1312 D3DDDI_ROTATION Rotation; // in: The orientation of the resource. (0, 90, 180, 270)
1313 D3DDDI_RESOURCEFLAGS2 Flags2;
1314} D3DDDIARG_CREATERESOURCE2;
1315#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
1316
1317typedef struct _D3DDDICB_SIGNALFLAGS
1318{
1319 union
1320 {
1321 struct
1322 {
1323 UINT SignalAtSubmission : 1;
1324#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
1325 UINT EnqueueCpuEvent : 1;
1326#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
1327 UINT AllowFenceRewind : 1;
1328 UINT Reserved : 28;
1329 UINT DXGK_SIGNAL_FLAG_INTERNAL0 : 1;
1330#else
1331 UINT Reserved : 30;
1332#endif
1333#else
1334 UINT Reserved : 31;
1335#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN8)
1336 };
1337 UINT Value;
1338 };
1339} D3DDDICB_SIGNALFLAGS;
1340
1341#define D3DDDI_MAX_OBJECT_WAITED_ON 32
1342#define D3DDDI_MAX_OBJECT_SIGNALED 32
1343
1344typedef enum _D3DDDI_SYNCHRONIZATIONOBJECT_TYPE
1345{
1346 D3DDDI_SYNCHRONIZATION_MUTEX = 1,
1347 D3DDDI_SEMAPHORE = 2,
1348 D3DDDI_FENCE = 3,
1349 D3DDDI_CPU_NOTIFICATION = 4,
1350
1351#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0) || \
1352 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_0))
1353 D3DDDI_MONITORED_FENCE = 5,
1354#endif // DXGKDDI_INTERFACE_VERSION
1355
1356#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2) || \
1357 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_2))
1358 D3DDDI_PERIODIC_MONITORED_FENCE = 6,
1359#endif // DXGKDDI_INTERFACE_VERSION
1360
1361 D3DDDI_SYNCHRONIZATION_TYPE_LIMIT
1362
1363} D3DDDI_SYNCHRONIZATIONOBJECT_TYPE;
1364
1365#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0) || \
1366 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_0))
1367
1368#define D3DDDI_SYNC_OBJECT_WAIT 0x1
1369#define D3DDDI_SYNC_OBJECT_SIGNAL 0x2
1370#define D3DDDI_SYNC_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | D3DDDI_SYNC_OBJECT_WAIT | D3DDDI_SYNC_OBJECT_SIGNAL)
1371
1372#endif // DXGKDDI_INTERFACE_VERSION
1373
1374#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
1375
1376typedef union
1377{
1378 struct
1379 {
1380 UINT64 FrameNumber : 40;
1381 UINT64 PartNumber : 24;
1382 };
1383 UINT64 Value;
1384}DXGK_MIRACAST_CHUNK_ID;
1385
1386typedef enum _DXGK_MIRACAST_CHUNK_TYPE
1387{
1388 DXGK_MIRACAST_CHUNK_TYPE_UNKNOWN = 0,
1389 DXGK_MIRACAST_CHUNK_TYPE_COLOR_CONVERT_COMPLETE = 1,
1390 DXGK_MIRACAST_CHUNK_TYPE_ENCODE_COMPLETE = 2,
1391 DXGK_MIRACAST_CHUNK_TYPE_FRAME_START = 3,
1392 DXGK_MIRACAST_CHUNK_TYPE_FRAME_DROPPED = 4,
1393 DXGK_MIRACAST_CHUNK_TYPE_ENCODE_DRIVER_DEFINED_1 = 0x80000000,
1394 DXGK_MIRACAST_CHUNK_TYPE_ENCODE_DRIVER_DEFINED_2 = 0x80000001,
1395} DXGK_MIRACAST_CHUNK_TYPE;
1396
1397typedef struct
1398{
1399 DXGK_MIRACAST_CHUNK_TYPE ChunkType; // Type of chunk info
1400 DXGK_MIRACAST_CHUNK_ID ChunkId; // Identifier for this chunk
1401 UINT ProcessingTime; // Time the process took to complete in microsecond
1402 UINT EncodeRate; // Encode bitrate driver reported for the chunk, kilobits per second
1403} DXGK_MIRACAST_CHUNK_INFO;
1404#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
1405
1406#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0) || \
1407 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_0))
1408
1409typedef enum D3DDDI_PAGINGQUEUE_PRIORITY
1410{
1411 D3DDDI_PAGINGQUEUE_PRIORITY_BELOW_NORMAL = -1,
1412 D3DDDI_PAGINGQUEUE_PRIORITY_NORMAL = 0,
1413 D3DDDI_PAGINGQUEUE_PRIORITY_ABOVE_NORMAL = 1,
1414} D3DDDI_PAGINGQUEUE_PRIORITY;
1415
1416typedef struct D3DDDI_MAKERESIDENT_FLAGS
1417{
1418 union
1419 {
1420 struct
1421 {
1422 UINT CantTrimFurther : 1; // When set, MakeResidentCb will succeed even if the request puts the application over the current budget.
1423 // MakeResidentCb will still fail if the request puts the application over the maximum budget.
1424 UINT MustSucceed : 1; // When set, instructs MakeResidentCb to put the device in error if the resource cannot be made resident.
1425 UINT Reserved : 30;
1426 };
1427 UINT Value;
1428 };
1429} D3DDDI_MAKERESIDENT_FLAGS;
1430
1431typedef struct D3DDDI_MAKERESIDENT
1432{
1433 D3DKMT_HANDLE hPagingQueue; // [in] Handle to the paging queue used to synchronize paging operations for this call.
1434 UINT NumAllocations; // [in/out] On input, the number of allocation handles om the AllocationList array. On output,
1435 // the number of allocations successfully made resident.
1436 D3DKMT_PTR(_Field_size_(NumAllocations)
1437 CONST D3DKMT_HANDLE*, AllocationList); // [in] An array of NumAllocations allocation handles
1438 D3DKMT_PTR(CONST UINT*, PriorityList); // [in] Residency priority array for each of the allocations in the resource or allocation list
1439 D3DDDI_MAKERESIDENT_FLAGS Flags; // [in] Residency flags
1440 D3DKMT_ALIGN64 UINT64 PagingFenceValue; // [out] Paging fence value to synchronize on before submitting the command
1441 // that uses above resources to the GPU. This value applies to the monitored fence
1442 // synchronization object associated with hPagingQueue.
1443 D3DKMT_ALIGN64 UINT64 NumBytesToTrim; // [out] When MakeResident fails due to being over budget, this value
1444 // indicates how much to trim in order for the call to succeed on a retry.
1445} D3DDDI_MAKERESIDENT;
1446
1447typedef struct D3DDDI_EVICT_FLAGS
1448{
1449 union
1450 {
1451 struct
1452 {
1453 UINT EvictOnlyIfNecessary : 1;
1454 UINT NotWrittenTo : 1;
1455 UINT Reserved : 30;
1456 };
1457 UINT Value;
1458 };
1459} D3DDDI_EVICT_FLAGS;
1460
1461typedef struct D3DDDI_TRIMRESIDENCYSET_FLAGS
1462{
1463 union
1464 {
1465 struct
1466 {
1467 UINT PeriodicTrim : 1; // When PeriodicTrim flag is set, the driver is required to performed the following operations:
1468 // a) trim all allocations that were not referenced since the previous periodic trim request
1469 // by comparing the allocation last referenced fence with the last periodic trim context fence
1470 // b) Refresh the last periodic trim context fence with the last completed context fence.
1471 UINT RestartPeriodicTrim : 1; // May not be set together with PeriodicTrim flag.
1472 // Reset the last periodic trim context fence to the last completed context fence.
1473 UINT TrimToBudget : 1; // Indicates that the application usage is over the memory budget,
1474 // and NumBytesToTrim bytes should be trimmed to fit in the new memory budget.
1475 UINT Reserved : 29;
1476 };
1477 UINT Value;
1478 };
1479} D3DDDI_TRIMRESIDENCYSET_FLAGS;
1480
1481typedef struct _D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE
1482{
1483 union
1484 {
1485 struct
1486 {
1487 UINT64 Write : 1;
1488 UINT64 Execute : 1;
1489 UINT64 Zero : 1;
1490 UINT64 NoAccess : 1;
1491 UINT64 SystemUseOnly : 1; // Should not be set by the UMD
1492 UINT64 Reserved : 59;
1493 };
1494 D3DKMT_ALIGN64 UINT64 Value;
1495 };
1496} D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE;
1497
1498typedef enum _D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION_TYPE
1499{
1500 D3DDDI_UPDATEGPUVIRTUALADDRESS_MAP = 0,
1501 D3DDDI_UPDATEGPUVIRTUALADDRESS_UNMAP = 1,
1502 D3DDDI_UPDATEGPUVIRTUALADDRESS_COPY = 2,
1503 D3DDDI_UPDATEGPUVIRTUALADDRESS_MAP_PROTECT = 3,
1504} D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION_TYPE;
1505
1506typedef struct _D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION
1507{
1508 D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION_TYPE OperationType;
1509 union
1510 {
1511 struct
1512 {
1513 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress;
1514 D3DKMT_ALIGN64 D3DGPU_SIZE_T SizeInBytes;
1515 D3DKMT_HANDLE hAllocation;
1516 D3DKMT_ALIGN64 D3DGPU_SIZE_T AllocationOffsetInBytes;
1517 D3DKMT_ALIGN64 D3DGPU_SIZE_T AllocationSizeInBytes;
1518 } Map;
1519 struct
1520 {
1521 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress;
1522 D3DKMT_ALIGN64 D3DGPU_SIZE_T SizeInBytes;
1523 D3DKMT_HANDLE hAllocation;
1524 D3DKMT_ALIGN64 D3DGPU_SIZE_T AllocationOffsetInBytes;
1525 D3DKMT_ALIGN64 D3DGPU_SIZE_T AllocationSizeInBytes;
1526 D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE Protection;
1527 D3DKMT_ALIGN64 UINT64 DriverProtection;
1528 } MapProtect;
1529 struct
1530 {
1531 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress;
1532 D3DKMT_ALIGN64 D3DGPU_SIZE_T SizeInBytes;
1533 D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE Protection;
1534 } Unmap; // Used for UNMAP_NOACCESS as well
1535 struct
1536 {
1537 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS SourceAddress;
1538 D3DKMT_ALIGN64 D3DGPU_SIZE_T SizeInBytes;
1539 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS DestAddress;
1540 } Copy;
1541 };
1542} D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION;
1543
1544typedef enum _D3DDDIGPUVIRTUALADDRESS_RESERVATION_TYPE
1545{
1546 D3DDDIGPUVIRTUALADDRESS_RESERVE_NO_ACCESS = 0,
1547 D3DDDIGPUVIRTUALADDRESS_RESERVE_ZERO = 1,
1548 D3DDDIGPUVIRTUALADDRESS_RESERVE_NO_COMMIT = 2 // Reserved for system use
1549} D3DDDIGPUVIRTUALADDRESS_RESERVATION_TYPE;
1550
1551typedef struct D3DDDI_MAPGPUVIRTUALADDRESS
1552{
1553 D3DKMT_HANDLE hPagingQueue; // in: Paging queue to synchronize the operation on.
1554 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress; // in_opt: Base virtual address to map
1555 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS MinimumAddress; // in_opt: Minimum virtual address
1556 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS MaximumAddress; // in_opt: Maximum virtual address
1557 D3DKMT_HANDLE hAllocation; // in: Allocation handle to map
1558 D3DKMT_ALIGN64 D3DGPU_SIZE_T OffsetInPages; // in: Offset in 4 KB pages from the start of the allocation
1559 D3DKMT_ALIGN64 D3DGPU_SIZE_T SizeInPages; // in: Size in 4 KB pages to map
1560 D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE Protection; // in: Virtual address protection
1561 D3DKMT_ALIGN64 UINT64 DriverProtection; // in: Driver specific protection
1562 UINT Reserved0; // in:
1563 D3DKMT_ALIGN64 UINT64 Reserved1; // in:
1564 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS VirtualAddress; // out: Virtual address
1565 D3DKMT_ALIGN64 UINT64 PagingFenceValue; // out: Paging fence Id for synchronization
1566} D3DDDI_MAPGPUVIRTUALADDRESS;
1567
1568typedef struct D3DDDI_RESERVEGPUVIRTUALADDRESS
1569{
1570 union
1571 {
1572 D3DKMT_HANDLE hPagingQueue; // in: Paging queue to synchronize the operation on.
1573 D3DKMT_HANDLE hAdapter; // in: DXG adapter handle. (M2)
1574 };
1575 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress; // in_opt: Base virtual address to map
1576 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS MinimumAddress; // in_opt: Minimum virtual address
1577 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS MaximumAddress; // in_opt: Maximum virtual address
1578 D3DKMT_ALIGN64 D3DGPU_SIZE_T Size; // in: Size to reserve in bytes
1579 union
1580 {
1581 D3DDDIGPUVIRTUALADDRESS_RESERVATION_TYPE ReservationType; // in: Reservation type
1582 UINT Reserved0; // M2
1583 };
1584 union
1585 {
1586 D3DKMT_ALIGN64 UINT64 DriverProtection;// in: Driver specific protection
1587 D3DKMT_ALIGN64 UINT64 Reserved1; // M2
1588 };
1589 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS VirtualAddress; // out: Virtual address
1590 union
1591 {
1592 D3DKMT_ALIGN64 UINT64 PagingFenceValue;// out: Paging fence Id for synchronization
1593 D3DKMT_ALIGN64 UINT64 Reserved2; // M2
1594 };
1595} D3DDDI_RESERVEGPUVIRTUALADDRESS;
1596
1597typedef struct _D3DDDI_GETRESOURCEPRESENTPRIVATEDRIVERDATA
1598{
1599 D3DKMT_HANDLE hResource;
1600 UINT PrivateDriverDataSize;
1601 D3DKMT_PTR(PVOID, pPrivateDriverData);
1602} D3DDDI_GETRESOURCEPRESENTPRIVATEDRIVERDATA;
1603
1604typedef struct D3DDDI_DESTROYPAGINGQUEUE
1605{
1606 D3DKMT_HANDLE hPagingQueue; // in: handle to the paging queue to destroy
1607} D3DDDI_DESTROYPAGINGQUEUE;
1608
1609#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
1610
1611#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1) || \
1612 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_1_1))
1613
1614typedef struct D3DDDI_UPDATEALLOCPROPERTY_FLAGS
1615{
1616 union
1617 {
1618 struct
1619 {
1620 UINT AccessedPhysically : 1; // The new value for AccessedPhysically on an allocation
1621 UINT Unmoveable : 1; // Indicates an allocation cannot be moved while pinned in a memory segment
1622 UINT Reserved : 30;
1623 };
1624 UINT Value;
1625 };
1626} D3DDDI_UPDATEALLOCPROPERTY_FLAGS;
1627
1628typedef struct D3DDDI_UPDATEALLOCPROPERTY
1629{
1630 D3DKMT_HANDLE hPagingQueue; // [in] Handle to the paging queue used to synchronize paging operations for this call.
1631 D3DKMT_HANDLE hAllocation; // [in] Handle to the allocation to be updated.
1632 UINT SupportedSegmentSet; // [in] New supported segment set, ignored if the same.
1633 D3DDDI_SEGMENTPREFERENCE PreferredSegment; // [in] New preferred segment set, ignored if the same.
1634 D3DDDI_UPDATEALLOCPROPERTY_FLAGS Flags; // [in] Flags to set on the allocation, ignored if the same.
1635 D3DKMT_ALIGN64 UINT64 PagingFenceValue; // [out] Paging fence value to synchronize on before using the above allocation.
1636 // This value applies to the monitored fence synchronization
1637 // object associated with hPagingQueue.
1638 union
1639 {
1640 struct
1641 {
1642 UINT SetAccessedPhysically : 1; // [in] When set to 1, will set AccessedPhysically to new value
1643 UINT SetSupportedSegmentSet : 1; // [in] When set to 1, will set SupportedSegmentSet to new value
1644 UINT SetPreferredSegment : 1; // [in] When set to 1, will set PreferredSegment to new value
1645 UINT SetUnmoveable : 1; // [in] When set to 1, will set Unmoveable to new value
1646 UINT Reserved : 28;
1647 };
1648 UINT PropertyMaskValue;
1649 };
1650} D3DDDI_UPDATEALLOCPROPERTY;
1651
1652#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1)
1653
1654#if(D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_1_1)
1655
1656typedef struct D3DDDI_OFFER_FLAGS
1657{
1658 union
1659 {
1660 struct
1661 {
1662 UINT AllowDecommit : 1;
1663 UINT Reserved : 31;
1664 };
1665 UINT Value;
1666 };
1667} D3DDDI_OFFER_FLAGS;
1668
1669#endif // (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_1_1)
1670
1671#if(DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_1 || \
1672 D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_1)
1673
1674typedef enum _D3DDDI_RECLAIM_RESULT
1675{
1676 D3DDDI_RECLAIM_RESULT_OK = 0,
1677 D3DDDI_RECLAIM_RESULT_DISCARDED = 1,
1678 D3DDDI_RECLAIM_RESULT_NOT_COMMITTED = 2,
1679} D3DDDI_RECLAIM_RESULT;
1680
1681#endif
1682
1683typedef struct _D3DDDI_SYNCHRONIZATIONOBJECTINFO
1684{
1685 D3DDDI_SYNCHRONIZATIONOBJECT_TYPE Type; // in: Type of synchronization object to create.
1686 union
1687 {
1688 struct
1689 {
1690 BOOL InitialState; // in: Initial state of a synchronization mutex.
1691 } SynchronizationMutex;
1692
1693 struct
1694 {
1695 UINT MaxCount; // in: Max count of the semaphore.
1696 UINT InitialCount; // in: Initial count of the semaphore.
1697 } Semaphore;
1698
1699
1700 struct
1701 {
1702 UINT Reserved[16]; // Reserved for future use.
1703 } Reserved;
1704 };
1705} D3DDDI_SYNCHRONIZATIONOBJECTINFO;
1706
1707#ifndef D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_EXT
1708#define D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_EXT
1709#define D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 Reserved0
1710#endif
1711
1712typedef struct _D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS
1713{
1714 union
1715 {
1716 struct
1717 {
1718 UINT Shared : 1;
1719 UINT NtSecuritySharing : 1;
1720#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3) || \
1721 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM1_3)) // M1
1722
1723 UINT CrossAdapter : 1;
1724
1725#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0) || \
1726 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_0))
1727
1728 // When set, the sync object is signaled as soon as the contents of command buffers preceding it
1729 // is entirely copied to the GPU pipeline, but not necessarily completed execution.
1730 // This flag can be set in order to start reusing command buffers as soon as possible.
1731 UINT TopOfPipeline : 1;
1732
1733 // When set, the device this sync object is created or opened on
1734 // can only submit wait commands for it.
1735 UINT NoSignal : 1;
1736
1737 // When set, the device this sync object is created or opened on
1738 // can only submit signal commands for it. This flag cannot be set
1739 // simultaneously with NoSignal.
1740 UINT NoWait : 1;
1741
1742 // When set, instructs the GPU scheduler to bypass signaling of the monitored fence
1743 // to the maximum value when the device is affected by the GPU reset.
1744 UINT NoSignalMaxValueOnTdr : 1;
1745
1746 // When set, the fence will not be mapped into the GPU virtual address space.
1747 // Only packet-based signal/wait operations are supported
1748 // When this is set, the fence is always stored as a 64-bit value (regardless of adapter caps)
1749 UINT NoGPUAccess : 1;
1750
1751#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
1752 // When set, the fence can be signaled by KMD.
1753 // The flag can be used only with D3DDDI_CPU_NOTIFICATION objects.
1754 UINT SignalByKmd : 1;
1755 UINT Reserved : 22;
1756#else
1757 UINT Reserved : 23;
1758#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM3_0)
1759
1760#else
1761 UINT Reserved : 28;
1762#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
1763
1764#else
1765 UINT Reserved : 29;
1766#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
1767 UINT D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 : 1;
1768 };
1769 UINT Value;
1770 };
1771} D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS;
1772
1773typedef struct _D3DDDI_SYNCHRONIZATIONOBJECTINFO2
1774{
1775 D3DDDI_SYNCHRONIZATIONOBJECT_TYPE Type; // in: Type of synchronization object to create.
1776 D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS Flags; // in: flags.
1777 union
1778 {
1779 struct
1780 {
1781 BOOL InitialState; // in: Initial state of a synchronization mutex.
1782 } SynchronizationMutex;
1783
1784 struct
1785 {
1786 UINT MaxCount; // in: Max count of the semaphore.
1787 UINT InitialCount; // in: Initial count of the semaphore.
1788 } Semaphore;
1789
1790 struct
1791 {
1792 D3DKMT_ALIGN64 UINT64 FenceValue; // in: inital fence value.
1793 } Fence;
1794
1795 struct
1796 {
1797 D3DKMT_PTR(HANDLE, Event); // in: Handle to the event
1798 } CPUNotification;
1799
1800#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0) || \
1801 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_0))
1802 struct
1803 {
1804 D3DKMT_ALIGN64 UINT64 InitialFenceValue; // in: inital fence value.
1805 D3DKMT_PTR(VOID*, FenceValueCPUVirtualAddress); // out: Read-only mapping of the fence value for the CPU
1806 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress; // out: Read/write mapping of the fence value for the GPU
1807 UINT EngineAffinity; // in: Defines physical adapters where the GPU VA will be mapped
1808 UINT Padding;
1809 } MonitoredFence;
1810#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
1811
1812#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2) || \
1813 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_2))
1814 struct
1815 {
1816 D3DKMT_HANDLE hAdapter; // in: A handle to the adapter associated with VidPnTargetId
1817 D3DDDI_VIDEO_PRESENT_TARGET_ID VidPnTargetId; // in: The output that the compositor wishes to receive notifications for
1818 D3DKMT_ALIGN64 UINT64 Time; // in: Represents an offset before the VSync.
1819 // The Time value may not be longer than a VSync interval. In units of 100ns.
1820 D3DKMT_PTR(VOID*, FenceValueCPUVirtualAddress); // out: Read-only mapping of the fence value for the CPU
1821 D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress; // out: Read-only mapping of the fence value for the GPU
1822 UINT EngineAffinity; // in: Defines physical adapters where the GPU VA will be mapped
1823 UINT Padding;
1824 } PeriodicMonitoredFence;
1825#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_2)
1826
1827
1828 struct
1829 {
1830 D3DKMT_ALIGN64 UINT64 Reserved[8]; // Reserved for future use.
1831 } Reserved;
1832 };
1833
1834 D3DKMT_HANDLE SharedHandle; // out: global shared handle (when requested to be shared)
1835
1836} D3DDDI_SYNCHRONIZATIONOBJECTINFO2;
1837
1838#if ((DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0) || \
1839 (D3D_UMD_INTERFACE_VERSION >= D3D_UMD_INTERFACE_VERSION_WDDM2_0))
1840
1841typedef struct _D3DDDI_WAITFORSYNCHRONIZATIONOBJECTFROMCPU_FLAGS
1842{
1843 union
1844 {
1845 struct
1846 {
1847 UINT WaitAny : 1; // when waiting for multiple objects, signal the wait event if any
1848 // of the wait array conditions is satisfied as opposed to all conditions.
1849 UINT Reserved : 31;
1850 };
1851 UINT Value;
1852 };
1853} D3DDDI_WAITFORSYNCHRONIZATIONOBJECTFROMCPU_FLAGS;
1854
1855#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_0)
1856
1857#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
1858
1859typedef struct _D3DDDI_QUERYREGISTRY_FLAGS
1860{
1861 union
1862 {
1863 struct
1864 {
1865 UINT TranslatePath : 1;
1866 UINT MutableValue : 1;
1867 UINT Reserved : 30;
1868 };
1869 UINT Value;
1870 };
1871} D3DDDI_QUERYREGISTRY_FLAGS;
1872
1873typedef enum _D3DDDI_QUERYREGISTRY_TYPE
1874{
1875 D3DDDI_QUERYREGISTRY_SERVICEKEY = 0,
1876 D3DDDI_QUERYREGISTRY_ADAPTERKEY = 1,
1877 D3DDDI_QUERYREGISTRY_DRIVERSTOREPATH = 2,
1878 D3DDDI_QUERYREGISTRY_DRIVERIMAGEPATH = 3,
1879 D3DDDI_QUERYREGISTRY_MAX,
1880} D3DDDI_QUERYREGISTRY_TYPE;
1881
1882typedef enum _D3DDDI_QUERYREGISTRY_STATUS
1883{
1884 D3DDDI_QUERYREGISTRY_STATUS_SUCCESS = 0,
1885 D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW = 1,
1886 D3DDDI_QUERYREGISTRY_STATUS_FAIL = 2,
1887 D3DDDI_QUERYREGISTRY_STATUS_MAX,
1888} D3DDDI_QUERYREGISTRY_STATUS;
1889
1890//
1891// Output data value follows this structure.
1892// PrivateDriverSize must be sizeof(D3DDDI_QUERYREGISTRY_INFO) + (size of the the key value in bytes)
1893//
1894typedef struct _D3DDDI_QUERYREGISTRY_INFO
1895{
1896 D3DDDI_QUERYREGISTRY_TYPE QueryType; // In
1897 D3DDDI_QUERYREGISTRY_FLAGS QueryFlags; // In
1898 WCHAR ValueName[MAX_PATH]; // In
1899 ULONG ValueType; // In
1900 ULONG PhysicalAdapterIndex; // In
1901 ULONG OutputValueSize; // Out. Number of bytes written to the output value or required in case of D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW.
1902 D3DDDI_QUERYREGISTRY_STATUS Status; // Out
1903 union {
1904 DWORD OutputDword; // Out
1905 D3DKMT_ALIGN64 UINT64 OutputQword; // Out
1906 WCHAR OutputString[1]; // Out. Dynamic array
1907 BYTE OutputBinary[1]; // Out. Dynamic array
1908 };
1909 } D3DDDI_QUERYREGISTRY_INFO;
1910
1911#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM2_4)
1912
1913//
1914// Defines the maximum number of context a particular command buffer can
1915// be broadcast to.
1916//
1917#define D3DDDI_MAX_BROADCAST_CONTEXT 64
1918
1919//
1920// Allocation priorities.
1921//
1922#define D3DDDI_ALLOCATIONPRIORITY_MINIMUM 0x28000000
1923#define D3DDDI_ALLOCATIONPRIORITY_LOW 0x50000000
1924#define D3DDDI_ALLOCATIONPRIORITY_NORMAL 0x78000000
1925#define D3DDDI_ALLOCATIONPRIORITY_HIGH 0xa0000000
1926#define D3DDDI_ALLOCATIONPRIORITY_MAXIMUM 0xc8000000
1927
1928#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
1929
1930// Cross adapter resource pitch alignment in bytes.
1931// Must be power of 2.
1932//
1933#define D3DKMT_CROSS_ADAPTER_RESOURCE_PITCH_ALIGNMENT 128
1934
1935// Cross adapter resource height alignment in rows.
1936//
1937#define D3DKMT_CROSS_ADAPTER_RESOURCE_HEIGHT_ALIGNMENT 4
1938
1939#endif // (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WDDM1_3)
1940
1941#endif // (NTDDI_VERSION >= NTDDI_LONGHORN) || defined(D3DKMDT_SPECIAL_MULTIPLATFORM_TOOL)
1942
1943#pragma warning(pop)
1944
1945
1946#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
1947#pragma endregion
1948
1949#endif /* _D3DUKMDT_H_ */
1950
unsigned short UINT16
unsigned long long UINT64
Type
Definition: Type.h:7
static INT Execute(LPTSTR Full, LPTSTR First, LPTSTR Rest, PARSED_COMMAND *Cmd)
Definition: cmd.c:347
@ Reserved2
Definition: bcd.h:202
@ Reserved1
Definition: bcd.h:201
@ Green
Definition: bl.h:199
@ Red
Definition: bl.h:201
@ Blue
Definition: bl.h:198
Definition: Header.h:9
Definition: bufpool.h:50
#define MAX_PATH
Definition: compat.h:34
VOID Copy(PVOID Src, PVOID Dst, ULONG NumBytes)
Definition: mmixer.c:126
#define MAKEFOURCC(ch0, ch1, ch2, ch3)
Definition: dmdls.h:24
IN PVCB IN VBO IN ULONG OUT PBCB OUT PVOID IN BOOLEAN IN BOOLEAN Zero
Definition: fatprocs.h:419
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
localAdvHdr Flags2
Definition: fsrtlfuncs.h:1692
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
Status
Definition: gdiplustypes.h:25
GLdouble GLdouble GLdouble GLdouble top
Definition: glext.h:10859
GLdouble GLdouble right
Definition: glext.h:10859
GLint left
Definition: glext.h:7726
GLint GLint bottom
Definition: glext.h:7726
_Must_inspect_result_ _In_ USAGE _In_ USHORT _In_ USAGE Usage
Definition: hidpi.h:384
#define Unused(x)
Definition: atlwin.h:28
UNICODE_STRING Volume
Definition: fltkernel.h:1172
static PLARGE_INTEGER Time
Definition: time.c:105
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_ EVENT_TYPE _In_ BOOLEAN InitialState
Definition: exfuncs.h:169
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
Definition: mmfuncs.h:404
#define _Field_size_(s)
Definition: no_sal2.h:332
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
@ WaitAny
_Must_inspect_result_ _In_ KTMOBJECT_TYPE QueryType
Definition: nttmapi.h:404
#define CONST
Definition: pedump.c:81
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
@ ReadOnly
Definition: arc.h:80
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
static BOOL Write(PBYTE Address, PBYTE Data, SIZE_T Size)
Definition: vmhorizon.c:15
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ WDF_DEVICE_POWER_STATE PowerState
Definition: wdfdevice.h:3034
_Must_inspect_result_ _In_ WDFDMATRANSACTION _In_ PFN_WDF_PROGRAM_DMA _In_ WDF_DMA_DIRECTION _In_ PMDL _In_ PVOID VirtualAddress
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY _In_ WDF_INTERRUPT_PRIORITY Priority
Definition: wdfinterrupt.h:655
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_ ULONG _Out_opt_ PULONG _Out_opt_ PULONG ValueType
Definition: wdfregistry.h:282
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
Definition: wdfregistry.h:243
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
_Reserved_ PVOID Reserved
Definition: winddi.h:3974
_In_ const BITMAPINFO _In_ UINT _In_opt_ HANDLE hSection
Definition: wingdi.h:3239
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
_Inout_ PVOID Segment
Definition: exfuncs.h:1101
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION _In_ ULONG _In_ SIZE_T _In_ ULONG _In_ USHORT Depth
Definition: exfuncs.h:819
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS SourceAddress
Definition: iotypes.h:1127
_Must_inspect_result_ _In_ SIZE_T _In_ PVOID PageAddress
Definition: mmfuncs.h:472
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned char BYTE
Definition: xxhash.c:193