1 module directx.dxgi1_4;
2 
3 public import directx.dxgi1_3;
4 
5 alias DWORD DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG;
6 enum : DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG {
7     DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT	     = 0x1,
8     DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_OVERLAY_PRESENT = 0x2
9 }
10 
11 mixin(uuid!(IDXGISwapChain3, "94d99bdb-f1f8-4ab0-b236-7da0170edab1"));
12 extern (C++) interface IDXGISwapChain3 : IDXGISwapChain2 {
13     UINT GetCurrentBackBufferIndex();
14 
15     HRESULT CheckColorSpaceSupport(DXGI_COLOR_SPACE_TYPE ColorSpace,
16                                    UINT* pColorSpaceSupport);
17 
18     HRESULT SetColorSpace1(DXGI_COLOR_SPACE_TYPE ColorSpace);
19 
20     HRESULT ResizeBuffers1(UINT BufferCount,
21                            UINT Width,
22                            UINT Height,
23                            DXGI_FORMAT Format,
24                            UINT SwapChainFlags,
25                            const(UINT)* pCreationNodeMask,
26                            const(IUnknown)* ppPresentQueue);
27 }
28 
29 alias DWORD DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG;
30 enum : DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG {
31     DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG_PRESENT = 0x1
32 }
33 
34 mixin(uuid!(IDXGIOutput4, "dc7dca35-2196-414d-9F53-617884032a60"));
35 extern (C++) interface IDXGIOutput4 : IDXGIOutput3 {
36     HRESULT CheckOverlayColorSpaceSupport(DXGI_FORMAT Format,
37                                           DXGI_COLOR_SPACE_TYPE ColorSpace,
38                                           IUnknown pConcernedDevice,
39                                           UINT* pFlags);
40 }
41 
42 mixin(uuid!(IDXGIFactory4, "1bc6ea02-ef36-464f-bf0c-21ca39e5168a"));
43 extern (C++) interface IDXGIFactory4 : IDXGIFactory3 {
44     HRESULT EnumAdapterByLuid(LUID AdapterLuid,
45                               REFIID riid,
46                               IDXGIAdapter* ppvAdapter);
47 
48     HRESULT EnumWarpAdapter(REFIID riid, IDXGIAdapter* ppvAdapter);
49 }
50 
51 alias DWORD DXGI_MEMORY_SEGMENT_GROUP;
52 enum : DXGI_MEMORY_SEGMENT_GROUP {
53     DXGI_MEMORY_SEGMENT_GROUP_LOCAL	    = 0,
54     DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL	= 1
55 }
56 
57 struct DXGI_QUERY_VIDEO_MEMORY_INFO {
58     UINT64 Budget;
59     UINT64 CurrentUsage;
60     UINT64 AvailableForReservation;
61     UINT64 CurrentReservation;
62 }
63 
64 mixin(uuid!(IDXGIAdapter3, "645967a4-1392-4310-a798-8053ce3e93fd"));
65 extern (C++) interface IDXGIAdapter3 : IDXGIAdapter2 {
66     HRESULT RegisterHardwareContentProtectionTeardownStatusEvent(HANDLE hEvent,
67                                                                  DWORD* pdwCookie);
68 
69     void UnregisterHardwareContentProtectionTeardownStatus(DWORD dwCookie);
70 
71     HRESULT QueryVideoMemoryInfo(UINT NodeIndex,
72                                  DXGI_MEMORY_SEGMENT_GROUP MemorySegmentGroup,
73                                  DXGI_QUERY_VIDEO_MEMORY_INFO* pVideoMemoryInfo);
74 
75     HRESULT SetVideoMemoryReservation(UINT NodeIndex,
76                                       DXGI_MEMORY_SEGMENT_GROUP MemorySegmentGroup,
77                                       UINT64 Reservation);
78 
79     HRESULT RegisterVideoMemoryBudgetChangeNotificationEvent(HANDLE hEvent,
80                                                              DWORD* pdwCookie);
81 
82     void UnregisterVideoMemoryBudgetChangeNotification(DWORD dwCookie);
83 }