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