1 #pragma once
2 
3 #include <retro_inline.h>
4 
5 #ifdef __MINGW32__
6 #define __REQUIRED_RPCNDR_H_VERSION__ 475
7 /* Pointer parameters */
8 #define _In_
9 #define _Out_
10 #define _Inout_
11 #define _In_z_
12 #define _Inout_z_
13 #define _In_reads_(s)
14 #define _In_reads_bytes_(s)
15 #define _In_reads_z_(s)
16 #define _In_reads_or_z_(s)
17 #define _Out_writes_(s)
18 #define _Out_writes_bytes_(s)
19 #define _Out_writes_z_(s)
20 #define _Inout_updates_(s)
21 #define _Inout_updates_bytes_(s)
22 #define _Inout_updates_z_(s)
23 #define _Out_writes_to_(s,c)
24 #define _Out_writes_bytes_to_(s, c)
25 #define _Out_writes_all_(s)
26 #define _Out_writes_bytes_all_(s)
27 #define _Inout_updates_to_(s, c)
28 #define _Inout_updates_bytes_to_(s, c)
29 #define _Inout_updates_all_(s)
30 #define _Inout_updates_bytes_all_(s)
31 #define _In_reads_to_ptr_(p)
32 #define _In_reads_to_ptr_z_(p)
33 #define _Out_writes_to_ptr_(p)
34 #define _Out_writes_to_ptr_z(p)
35 
36 /* Optional pointer parameters */
37 #define __in_opt
38 #define __out_opt
39 #define __inout_opt
40 #define _In_opt_
41 #define _Out_opt_
42 #define _Inout_opt_
43 #define _In_opt_z_
44 #define _Inout_opt_z_
45 #define _In_reads_opt_(s)
46 #define _In_reads_bytes_opt_(s)
47 #define _In_reads_opt_z_(s)
48 
49 #define _Out_writes_opt_(s)
50 #define _Out_writes_opt_z_(s)
51 #define _Inout_updates_opt_(s)
52 #define _Inout_updates_bytes_opt_(s)
53 #define _Inout_updates_opt_z_(s)
54 #define _Out_writes_to_opt_(s, c)
55 #define _Out_writes_bytes_to_opt_(s, c)
56 #define _Out_writes_all_opt_(s)
57 #define _Out_writes_bytes_all_opt_(s)
58 
59 #define _Inout_updates_to_opt_(s, c)
60 #define _Inout_updates_bytes_to_opt_(s, c)
61 #define _Inout_updates_all_opt_(s)
62 #define _Inout_updates_bytes_all_opt_(s)
63 #define _In_reads_to_ptr_opt_(p)
64 #define _In_reads_to_ptr_opt_z_(p)
65 #define _Out_writes_to_ptr_opt_(p)
66 #define _Out_writes_to_ptr_opt_z_(p)
67 
68 /* Output pointer parameters */
69 #define _Outptr_
70 #define _Outptr_opt_
71 #define _Outptr_result_maybenull_
72 #define _Outptr_opt_result_maybenull_
73 #define _Outptr_result_z_
74 #define _Outptr_opt_result_z_
75 #define _Outptr_result_maybenull_z_
76 #define _Outptr_opt_result_maybenull_z_
77 #define _COM_Outptr_
78 #define _COM_Outptr_opt_
79 #define _COM_Outptr_result_maybenull_
80 #define _COM_Outptr_opt_result_maybenull_
81 #define _Outptr_result_buffer_(s)
82 #define _Outptr_result_bytebuffer_(s)
83 #define _Outptr_opt_result_buffer_(s)
84 #define _Outptr_opt_result_bytebuffer_(s)
85 #define _Outptr_result_buffer_to_(s, c)
86 #define _Outptr_result_bytebuffer_to_(s, c)
87 #define _Outptr_result_bytebuffer_maybenull_(s)
88 #define _Outptr_opt_result_buffer_to_(s, c)
89 #define _Outptr_opt_result_bytebuffer_to_(s, c)
90 #define _Result_nullonfailure_
91 #define _Result_zeroonfailure_
92 #define _Outptr_result_nullonfailure_
93 #define _Outptr_opt_result_nullonfailure_
94 #define _Outref_result_nullonfailure_
95 
96 /* Output reference parameters */
97 #define _Outref_
98 #define _Outref_result_maybenull_
99 #define _Outref_result_buffer_(s)
100 #define _Outref_result_bytebuffer_(s)
101 #define _Outref_result_buffer_to_(s, c)
102 #define _Outref_result_bytebuffer_to_(s, c)
103 #define _Outref_result_buffer_all_(s)
104 #define _Outref_result_bytebuffer_all_(s)
105 #define _Outref_result_buffer_maybenull_(s)
106 #define _Outref_result_bytebuffer_maybenull_(s)
107 #define _Outref_result_buffer_to_maybenull_(s, c)
108 #define _Outref_result_bytebuffer_to_maybenull_(s, c)
109 #define _Outref_result_buffer_all_maybenull_(s)
110 #define _Outref_result_bytebuffer_all_maybenull_(s)
111 
112 /* Return values */
113 #define _Ret_z_
114 #define _Ret_writes_(s)
115 #define _Ret_writes_bytes_(s)
116 #define _Ret_writes_z_(s)
117 #define _Ret_writes_bytes_to_(s, c)
118 #define _Ret_writes_maybenull_(s)
119 #define _Ret_writes_to_maybenull_(s, c)
120 #define _Ret_writes_maybenull_z_(s)
121 #define _Ret_maybenull_
122 #define _Ret_maybenull_z_
123 #define _Ret_null_
124 #define _Ret_notnull_
125 #define _Ret_writes_bytes_to_(s, c)
126 #define _Ret_writes_bytes_maybenull_(s)
127 #define _Ret_writes_bytes_to_maybenull_(s, c)
128 
129 /* Other common annotations */
130 #define _In_range_(low, hi)
131 #define _Out_range_(low, hi)
132 #define _Ret_range_(low, hi)
133 #define _Deref_in_range_(low, hi)
134 #define _Deref_out_range_(low, hi)
135 #define _Deref_inout_range_(low, hi)
136 #define _Pre_equal_to_(expr)
137 #define _Post_equal_to_(expr)
138 #define _Struct_size_bytes_(size)
139 
140 /* Function annotations */
141 #define _Called_from_function_class_(name)
142 #define _Check_return_ __checkReturn
143 #define _Function_class_(name)
144 #define _Raises_SEH_exception_
145 #define _Maybe_raises_SEH_exception_
146 #define _Must_inspect_result_
147 #define _Use_decl_annotations_
148 
149 /* Success/failure annotations */
150 #define _Always_(anno_list)
151 #define _On_failure_(anno_list)
152 #define _Return_type_success_(expr)
153 #define _Success_(expr)
154 
155 #define _Reserved_
156 #define _Const_
157 
158 /* Buffer properties */
159 #define _Readable_bytes_(s)
160 #define _Readable_elements_(s)
161 #define _Writable_bytes_(s)
162 #define _Writable_elements_(s)
163 #define _Null_terminated_
164 #define _NullNull_terminated_
165 #define _Pre_readable_size_(s)
166 #define _Pre_writable_size_(s)
167 #define _Pre_readable_byte_size_(s)
168 #define _Pre_writable_byte_size_(s)
169 #define _Post_readable_size_(s)
170 #define _Post_writable_size_(s)
171 #define _Post_readable_byte_size_(s)
172 #define _Post_writable_byte_size_(s)
173 
174 /* Field properties */
175 #define _Field_size_(s)
176 #define _Field_size_full_(s)
177 #define _Field_size_full_opt_(s)
178 #define _Field_size_opt_(s)
179 #define _Field_size_part_(s, c)
180 #define _Field_size_part_opt_(s, c)
181 #define _Field_size_bytes_(size)
182 #define _Field_size_bytes_full_(size)
183 #define _Field_size_bytes_full_opt_(s)
184 #define _Field_size_bytes_opt_(s)
185 #define _Field_size_bytes_part_(s, c)
186 #define _Field_size_bytes_part_opt_(s, c)
187 #define _Field_z_
188 #define _Field_range_(min, max)
189 
190 /* Structural annotations */
191 #define _At_(e, a)
192 #define _At_buffer_(e, i, c, a)
193 #define _Group_(a)
194 #define _When_(e, a)
195 
196 /* printf/scanf annotations */
197 #define _Printf_format_string_
198 #define _Scanf_format_string_
199 #define _Scanf_s_format_string_
200 #define _Format_string_impl_(kind,where)
201 #define _Printf_format_string_params_(x)
202 #define _Scanf_format_string_params_(x)
203 #define _Scanf_s_format_string_params_(x)
204 
205 /* Analysis */
206 #define _Analysis_assume_(expr)
207 #define _Analysis_assume_nullterminated_(expr)
208 
209 #define __in
210 #define __out
211 
212 #define __in_bcount(size)
213 #define __in_ecount(size)
214 #define __out_bcount(size)
215 #define __out_bcount_part(size, length)
216 #define __out_ecount(size)
217 #define __inout
218 #define __deref_out_ecount(size)
219 #define __in_ecount_opt(s)
220 
221 #define _In_
222 #define _In_opt_
223 #define _Null_
224 
225 #define _Out_writes_bytes_opt_(s)
226 #define _Out_writes_bytes_(s)
227 #define _In_reads_bytes_(s)
228 #define _Inout_opt_bytecount_(s)
229 
230 #ifndef __cplusplus
231 #define static_assert _Static_assert
232 #endif
233 #endif
234 
235 #include <assert.h>
236 #include <dxgi1_5.h>
237 
238 #ifndef countof
239 #define countof(a) (sizeof(a) / sizeof(*a))
240 #endif
241 
242 #ifndef uuidof
243 #if defined(__cplusplus)
244 #define uuidof(type) IID_##type
245 #else
246 #define uuidof(type) &IID_##type
247 #endif
248 #endif
249 
250 #if !defined(__cplusplus) || defined(CINTERFACE)
251 #ifndef COM_RELEASE_DECLARED
252 #define COM_RELEASE_DECLARED
Release(void * object)253 static INLINE ULONG Release(void* object)
254 {
255    if (object)
256       return ((IUnknown*)object)->lpVtbl->Release((IUnknown*)object);
257 
258    return 0;
259 }
260 #endif
261 #endif
262 
263 #if !defined(__cplusplus) || defined(CINTERFACE)
264 #ifndef COM_ADDREF_DECLARED
265 #define COM_ADDREF_DECLARED
AddRef(void * object)266 static INLINE ULONG AddRef(void* object)
267 {
268    if (object)
269       return ((IUnknown*)object)->lpVtbl->AddRef((IUnknown*)object);
270 
271    return 0;
272 }
273 #endif
274 #endif
275 
276 /* auto-generated */
277 
278 typedef IDXGIObject*            DXGIObject;
279 typedef IDXGIDeviceSubObject*   DXGIDeviceSubObject;
280 typedef IDXGIResource*          DXGIResource;
281 typedef IDXGIKeyedMutex*        DXGIKeyedMutex;
282 typedef IDXGISurface1*          DXGISurface;
283 typedef IDXGIOutput*            DXGIOutput;
284 typedef IDXGIDevice*            DXGIDevice;
285 typedef IDXGIFactory1*          DXGIFactory;
286 #ifdef __WINRT__
287 typedef IDXGIFactory2*          DXGIFactory2;
288 #endif
289 typedef IDXGIAdapter1*          DXGIAdapter;
290 typedef IDXGIDisplayControl*    DXGIDisplayControl;
291 typedef IDXGIOutputDuplication* DXGIOutputDuplication;
292 typedef IDXGIDecodeSwapChain*   DXGIDecodeSwapChain;
293 typedef IDXGIFactoryMedia*      DXGIFactoryMedia;
294 typedef IDXGISwapChainMedia*    DXGISwapChainMedia;
295 typedef IDXGISwapChain3*        DXGISwapChain;
296 
297 #if !defined(__cplusplus) || defined(CINTERFACE)
DXGIReleaseDeviceSubObject(DXGIDeviceSubObject device_sub_object)298 static INLINE ULONG DXGIReleaseDeviceSubObject(DXGIDeviceSubObject device_sub_object)
299 {
300    return device_sub_object->lpVtbl->Release(device_sub_object);
301 }
DXGIGetSharedHandle(void * resource,HANDLE * shared_handle)302 static INLINE HRESULT DXGIGetSharedHandle(void* resource, HANDLE* shared_handle)
303 {
304    return ((IDXGIResource*)resource)->lpVtbl->GetSharedHandle((IDXGIResource*)resource, shared_handle);
305 }
DXGIGetUsage(void * resource,DXGI_USAGE * usage)306 static INLINE HRESULT DXGIGetUsage(void* resource, DXGI_USAGE* usage)
307 {
308    return ((IDXGIResource*)resource)->lpVtbl->GetUsage((IDXGIResource*)resource, usage);
309 }
DXGISetEvictionPriority(void * resource,UINT eviction_priority)310 static INLINE HRESULT DXGISetEvictionPriority(void* resource, UINT eviction_priority)
311 {
312    return ((IDXGIResource*)resource)->lpVtbl->SetEvictionPriority((IDXGIResource*)resource, eviction_priority);
313 }
DXGIGetEvictionPriority(void * resource,UINT * eviction_priority)314 static INLINE HRESULT DXGIGetEvictionPriority(void* resource, UINT* eviction_priority)
315 {
316    return ((IDXGIResource*)resource)->lpVtbl->GetEvictionPriority((IDXGIResource*)resource, eviction_priority);
317 }
DXGIReleaseKeyedMutex(DXGIKeyedMutex keyed_mutex)318 static INLINE ULONG DXGIReleaseKeyedMutex(DXGIKeyedMutex keyed_mutex)
319 {
320    return keyed_mutex->lpVtbl->Release(keyed_mutex);
321 }
DXGIAcquireSync(DXGIKeyedMutex keyed_mutex,UINT64 key,DWORD dw_milliseconds)322 static INLINE HRESULT DXGIAcquireSync(DXGIKeyedMutex keyed_mutex, UINT64 key, DWORD dw_milliseconds)
323 {
324    return keyed_mutex->lpVtbl->AcquireSync(keyed_mutex, key, dw_milliseconds);
325 }
DXGIReleaseSync(DXGIKeyedMutex keyed_mutex,UINT64 key)326 static INLINE HRESULT DXGIReleaseSync(DXGIKeyedMutex keyed_mutex, UINT64 key)
327 {
328    return keyed_mutex->lpVtbl->ReleaseSync(keyed_mutex, key);
329 }
DXGIReleaseSurface(DXGISurface surface)330 static INLINE ULONG DXGIReleaseSurface(DXGISurface surface)
331 {
332    return surface->lpVtbl->Release(surface);
333 }
DXGIMap(DXGISurface surface,DXGI_MAPPED_RECT * locked_rect,UINT map_flags)334 static INLINE HRESULT DXGIMap(DXGISurface surface, DXGI_MAPPED_RECT* locked_rect, UINT map_flags)
335 {
336    return surface->lpVtbl->Map(surface, locked_rect, map_flags);
337 }
DXGIUnmap(DXGISurface surface)338 static INLINE HRESULT DXGIUnmap(DXGISurface surface) { return surface->lpVtbl->Unmap(surface); }
DXGIGetDC(DXGISurface surface,BOOL discard,HDC * hdc)339 static INLINE HRESULT DXGIGetDC(DXGISurface surface, BOOL discard, HDC* hdc)
340 {
341    return surface->lpVtbl->GetDC(surface, discard, hdc);
342 }
DXGIReleaseDC(DXGISurface surface,RECT * dirty_rect)343 static INLINE HRESULT DXGIReleaseDC(DXGISurface surface, RECT* dirty_rect)
344 {
345    return surface->lpVtbl->ReleaseDC(surface, dirty_rect);
346 }
DXGIReleaseOutput(DXGIOutput output)347 static INLINE ULONG DXGIReleaseOutput(DXGIOutput output) { return output->lpVtbl->Release(output); }
DXGIGetDisplayModeList(DXGIOutput output,DXGI_FORMAT enum_format,UINT flags,UINT * num_modes,DXGI_MODE_DESC * desc)348 static INLINE HRESULT DXGIGetDisplayModeList(
349       DXGIOutput output, DXGI_FORMAT enum_format, UINT flags, UINT* num_modes, DXGI_MODE_DESC* desc)
350 {
351    return output->lpVtbl->GetDisplayModeList(output, enum_format, flags, num_modes, desc);
352 }
DXGIFindClosestMatchingMode(DXGIOutput output,DXGI_MODE_DESC * mode_to_match,DXGI_MODE_DESC * closest_match,void * concerned_device)353 static INLINE HRESULT DXGIFindClosestMatchingMode(
354       DXGIOutput      output,
355       DXGI_MODE_DESC* mode_to_match,
356       DXGI_MODE_DESC* closest_match,
357       void*           concerned_device)
358 {
359    return output->lpVtbl->FindClosestMatchingMode(
360          output, mode_to_match, closest_match, (IUnknown*)concerned_device);
361 }
DXGIWaitForVBlank(DXGIOutput output)362 static INLINE HRESULT DXGIWaitForVBlank(DXGIOutput output)
363 {
364    return output->lpVtbl->WaitForVBlank(output);
365 }
DXGITakeOwnership(DXGIOutput output,void * device,BOOL exclusive)366 static INLINE HRESULT DXGITakeOwnership(DXGIOutput output, void* device, BOOL exclusive)
367 {
368    return output->lpVtbl->TakeOwnership(output, (IUnknown*)device, exclusive);
369 }
DXGIReleaseOwnership(DXGIOutput output)370 static INLINE void DXGIReleaseOwnership(DXGIOutput output)
371 {
372    output->lpVtbl->ReleaseOwnership(output);
373 }
374 static INLINE HRESULT
DXGIGetGammaControlCapabilities(DXGIOutput output,DXGI_GAMMA_CONTROL_CAPABILITIES * gamma_caps)375 DXGIGetGammaControlCapabilities(DXGIOutput output, DXGI_GAMMA_CONTROL_CAPABILITIES* gamma_caps)
376 {
377    return output->lpVtbl->GetGammaControlCapabilities(output, gamma_caps);
378 }
DXGISetGammaControl(DXGIOutput output,DXGI_GAMMA_CONTROL * array)379 static INLINE HRESULT DXGISetGammaControl(DXGIOutput output, DXGI_GAMMA_CONTROL* array)
380 {
381    return output->lpVtbl->SetGammaControl(output, array);
382 }
DXGIGetGammaControl(DXGIOutput output,DXGI_GAMMA_CONTROL * array)383 static INLINE HRESULT DXGIGetGammaControl(DXGIOutput output, DXGI_GAMMA_CONTROL* array)
384 {
385    return output->lpVtbl->GetGammaControl(output, array);
386 }
DXGISetDisplaySurface(DXGIOutput output,DXGISurface scanout_surface)387 static INLINE HRESULT DXGISetDisplaySurface(DXGIOutput output, DXGISurface scanout_surface)
388 {
389    return output->lpVtbl->SetDisplaySurface(output, (IDXGISurface*)scanout_surface);
390 }
DXGIGetDisplaySurfaceData(DXGIOutput output,DXGISurface destination)391 static INLINE HRESULT DXGIGetDisplaySurfaceData(DXGIOutput output, DXGISurface destination)
392 {
393    return output->lpVtbl->GetDisplaySurfaceData(output, (IDXGISurface*)destination);
394 }
DXGIReleaseDevice(DXGIDevice device)395 static INLINE ULONG DXGIReleaseDevice(DXGIDevice device) { return device->lpVtbl->Release(device); }
DXGICreateSurface(DXGIDevice device,DXGI_SURFACE_DESC * desc,UINT num_surfaces,DXGI_USAGE usage,DXGI_SHARED_RESOURCE * shared_resource,DXGISurface * surface)396 static INLINE HRESULT DXGICreateSurface(
397       DXGIDevice            device,
398       DXGI_SURFACE_DESC*    desc,
399       UINT                  num_surfaces,
400       DXGI_USAGE            usage,
401       DXGI_SHARED_RESOURCE* shared_resource,
402       DXGISurface*          surface)
403 {
404    return device->lpVtbl->CreateSurface(
405          device, desc, num_surfaces, usage, shared_resource, (IDXGISurface**)surface);
406 }
DXGISetGPUThreadPriority(DXGIDevice device,INT priority)407 static INLINE HRESULT DXGISetGPUThreadPriority(DXGIDevice device, INT priority)
408 {
409    return device->lpVtbl->SetGPUThreadPriority(device, priority);
410 }
DXGIGetGPUThreadPriority(DXGIDevice device,INT * priority)411 static INLINE HRESULT DXGIGetGPUThreadPriority(DXGIDevice device, INT* priority)
412 {
413    return device->lpVtbl->GetGPUThreadPriority(device, priority);
414 }
DXGIReleaseFactory(DXGIFactory factory)415 static INLINE ULONG DXGIReleaseFactory(DXGIFactory factory)
416 {
417    return factory->lpVtbl->Release(factory);
418 }
DXGIMakeWindowAssociation(DXGIFactory factory,HWND window_handle,UINT flags)419 static INLINE HRESULT DXGIMakeWindowAssociation(DXGIFactory factory, HWND window_handle, UINT flags)
420 {
421    return factory->lpVtbl->MakeWindowAssociation(factory, window_handle, flags);
422 }
DXGIGetWindowAssociation(DXGIFactory factory,HWND * window_handle)423 static INLINE HRESULT DXGIGetWindowAssociation(DXGIFactory factory, HWND* window_handle)
424 {
425    return factory->lpVtbl->GetWindowAssociation(factory, window_handle);
426 }
DXGICreateSwapChain(DXGIFactory factory,void * device,DXGI_SWAP_CHAIN_DESC * desc,DXGISwapChain * swap_chain)427 static INLINE HRESULT DXGICreateSwapChain(
428       DXGIFactory factory, void* device, DXGI_SWAP_CHAIN_DESC* desc, DXGISwapChain* swap_chain)
429 {
430    return factory->lpVtbl->CreateSwapChain(
431          factory, (IUnknown*)device, desc, (IDXGISwapChain**)swap_chain);
432 }
433 #ifdef __WINRT__
DXGICreateSwapChainForCoreWindow(DXGIFactory2 factory,void * device,void * corewindow,DXGI_SWAP_CHAIN_DESC1 * desc,DXGIOutput restrict_to,DXGISwapChain * swap_chain)434 static INLINE HRESULT DXGICreateSwapChainForCoreWindow(
435       DXGIFactory2 factory, void* device, void* corewindow, DXGI_SWAP_CHAIN_DESC1* desc, DXGIOutput restrict_to, DXGISwapChain* swap_chain)
436 {
437    return factory->lpVtbl->CreateSwapChainForCoreWindow(
438          factory, (IUnknown*)device, (IUnknown*)corewindow, desc, restrict_to, (IDXGISwapChain1**)swap_chain);
439 }
440 #endif
441 static INLINE HRESULT
DXGICreateSoftwareAdapter(DXGIFactory factory,HMODULE module,DXGIAdapter * adapter)442 DXGICreateSoftwareAdapter(DXGIFactory factory, HMODULE module, DXGIAdapter* adapter)
443 {
444    return factory->lpVtbl->CreateSoftwareAdapter(factory, module, (IDXGIAdapter**)adapter);
445 }
DXGIEnumAdapters(DXGIFactory factory,UINT id,DXGIAdapter * adapter)446 static INLINE HRESULT DXGIEnumAdapters(DXGIFactory factory, UINT id, DXGIAdapter* adapter)
447 {
448    return factory->lpVtbl->EnumAdapters1(factory, id, adapter);
449 }
450 #ifdef __WINRT__
DXGIEnumAdapters2(DXGIFactory2 factory,UINT id,DXGIAdapter * adapter)451 static INLINE HRESULT DXGIEnumAdapters2(DXGIFactory2 factory, UINT id, DXGIAdapter* adapter)
452 {
453    return factory->lpVtbl->EnumAdapters1(factory, id, adapter);
454 }
455 #endif
DXGIIsCurrent(DXGIFactory factory)456 static INLINE BOOL DXGIIsCurrent(DXGIFactory factory)
457 {
458    return factory->lpVtbl->IsCurrent(factory);
459 }
DXGIReleaseAdapter(DXGIAdapter adapter)460 static INLINE ULONG DXGIReleaseAdapter(DXGIAdapter adapter)
461 {
462    return adapter->lpVtbl->Release(adapter);
463 }
DXGIEnumOutputs(DXGIAdapter adapter,UINT id,DXGIOutput * output)464 static INLINE HRESULT DXGIEnumOutputs(DXGIAdapter adapter, UINT id, DXGIOutput* output)
465 {
466    return adapter->lpVtbl->EnumOutputs(adapter, id, output);
467 }
468 static INLINE HRESULT
DXGICheckInterfaceSupport(DXGIAdapter adapter,REFGUID interface_name,LARGE_INTEGER * u_m_d_version)469 DXGICheckInterfaceSupport(DXGIAdapter adapter, REFGUID interface_name, LARGE_INTEGER* u_m_d_version)
470 {
471    return adapter->lpVtbl->CheckInterfaceSupport(adapter, interface_name, u_m_d_version);
472 }
DXGIGetAdapterDesc1(DXGIAdapter adapter,DXGI_ADAPTER_DESC1 * desc)473 static INLINE HRESULT DXGIGetAdapterDesc1(DXGIAdapter adapter, DXGI_ADAPTER_DESC1* desc)
474 {
475    return adapter->lpVtbl->GetDesc1(adapter, desc);
476 }
477 #ifndef __WINRT__
DXGIReleaseDisplayControl(DXGIDisplayControl display_control)478 static INLINE ULONG DXGIReleaseDisplayControl(DXGIDisplayControl display_control)
479 {
480    return display_control->lpVtbl->Release(display_control);
481 }
DXGIIsStereoEnabled(DXGIDisplayControl display_control)482 static INLINE BOOL DXGIIsStereoEnabled(DXGIDisplayControl display_control)
483 {
484    return display_control->lpVtbl->IsStereoEnabled(display_control);
485 }
DXGISetStereoEnabled(DXGIDisplayControl display_control,BOOL enabled)486 static INLINE void DXGISetStereoEnabled(DXGIDisplayControl display_control, BOOL enabled)
487 {
488    display_control->lpVtbl->SetStereoEnabled(display_control, enabled);
489 }
DXGIReleaseOutputDuplication(DXGIOutputDuplication output_duplication)490 static INLINE ULONG DXGIReleaseOutputDuplication(DXGIOutputDuplication output_duplication)
491 {
492    return output_duplication->lpVtbl->Release(output_duplication);
493 }
DXGIAcquireNextFrame(DXGIOutputDuplication output_duplication,UINT timeout_in_milliseconds,DXGI_OUTDUPL_FRAME_INFO * frame_info,void * desktop_resource)494 static INLINE HRESULT DXGIAcquireNextFrame(
495       DXGIOutputDuplication    output_duplication,
496       UINT                     timeout_in_milliseconds,
497       DXGI_OUTDUPL_FRAME_INFO* frame_info,
498       void*                    desktop_resource)
499 {
500    return output_duplication->lpVtbl->AcquireNextFrame(
501          output_duplication, timeout_in_milliseconds, frame_info,
502          (IDXGIResource**)desktop_resource);
503 }
DXGIGetFrameDirtyRects(DXGIOutputDuplication output_duplication,UINT dirty_rects_buffer_size,RECT * dirty_rects_buffer,UINT * dirty_rects_buffer_size_required)504 static INLINE HRESULT DXGIGetFrameDirtyRects(
505       DXGIOutputDuplication output_duplication,
506       UINT                  dirty_rects_buffer_size,
507       RECT*                 dirty_rects_buffer,
508       UINT*                 dirty_rects_buffer_size_required)
509 {
510    return output_duplication->lpVtbl->GetFrameDirtyRects(
511          output_duplication, dirty_rects_buffer_size, dirty_rects_buffer,
512          dirty_rects_buffer_size_required);
513 }
DXGIGetFrameMoveRects(DXGIOutputDuplication output_duplication,UINT move_rects_buffer_size,DXGI_OUTDUPL_MOVE_RECT * move_rect_buffer,UINT * move_rects_buffer_size_required)514 static INLINE HRESULT DXGIGetFrameMoveRects(
515       DXGIOutputDuplication   output_duplication,
516       UINT                    move_rects_buffer_size,
517       DXGI_OUTDUPL_MOVE_RECT* move_rect_buffer,
518       UINT*                   move_rects_buffer_size_required)
519 {
520    return output_duplication->lpVtbl->GetFrameMoveRects(
521          output_duplication, move_rects_buffer_size, move_rect_buffer,
522          move_rects_buffer_size_required);
523 }
DXGIGetFramePointerShape(DXGIOutputDuplication output_duplication,UINT pointer_shape_buffer_size,void * pointer_shape_buffer,UINT * pointer_shape_buffer_size_required,DXGI_OUTDUPL_POINTER_SHAPE_INFO * pointer_shape_info)524 static INLINE HRESULT DXGIGetFramePointerShape(
525       DXGIOutputDuplication            output_duplication,
526       UINT                             pointer_shape_buffer_size,
527       void*                            pointer_shape_buffer,
528       UINT*                            pointer_shape_buffer_size_required,
529       DXGI_OUTDUPL_POINTER_SHAPE_INFO* pointer_shape_info)
530 {
531    return output_duplication->lpVtbl->GetFramePointerShape(
532          output_duplication, pointer_shape_buffer_size, pointer_shape_buffer,
533          pointer_shape_buffer_size_required, pointer_shape_info);
534 }
535 static INLINE HRESULT
DXGIMapDesktopSurface(DXGIOutputDuplication output_duplication,DXGI_MAPPED_RECT * locked_rect)536 DXGIMapDesktopSurface(DXGIOutputDuplication output_duplication, DXGI_MAPPED_RECT* locked_rect)
537 {
538    return output_duplication->lpVtbl->MapDesktopSurface(output_duplication, locked_rect);
539 }
DXGIUnMapDesktopSurface(DXGIOutputDuplication output_duplication)540 static INLINE HRESULT DXGIUnMapDesktopSurface(DXGIOutputDuplication output_duplication)
541 {
542    return output_duplication->lpVtbl->UnMapDesktopSurface(output_duplication);
543 }
DXGIReleaseFrame(DXGIOutputDuplication output_duplication)544 static INLINE HRESULT DXGIReleaseFrame(DXGIOutputDuplication output_duplication)
545 {
546    return output_duplication->lpVtbl->ReleaseFrame(output_duplication);
547 }
DXGIReleaseDecodeSwapChain(DXGIDecodeSwapChain decode_swap_chain)548 static INLINE ULONG DXGIReleaseDecodeSwapChain(DXGIDecodeSwapChain decode_swap_chain)
549 {
550    return decode_swap_chain->lpVtbl->Release(decode_swap_chain);
551 }
DXGIPresentBuffer(DXGIDecodeSwapChain decode_swap_chain,UINT buffer_to_present,UINT sync_interval,UINT flags)552 static INLINE HRESULT DXGIPresentBuffer(
553       DXGIDecodeSwapChain decode_swap_chain, UINT buffer_to_present, UINT sync_interval, UINT flags)
554 {
555    return decode_swap_chain->lpVtbl->PresentBuffer(
556          decode_swap_chain, buffer_to_present, sync_interval, flags);
557 }
DXGISetSourceRect(DXGIDecodeSwapChain decode_swap_chain,RECT * rect)558 static INLINE HRESULT DXGISetSourceRect(DXGIDecodeSwapChain decode_swap_chain, RECT* rect)
559 {
560    return decode_swap_chain->lpVtbl->SetSourceRect(decode_swap_chain, rect);
561 }
DXGISetTargetRect(DXGIDecodeSwapChain decode_swap_chain,RECT * rect)562 static INLINE HRESULT DXGISetTargetRect(DXGIDecodeSwapChain decode_swap_chain, RECT* rect)
563 {
564    return decode_swap_chain->lpVtbl->SetTargetRect(decode_swap_chain, rect);
565 }
566 static INLINE HRESULT
DXGISetDestSize(DXGIDecodeSwapChain decode_swap_chain,UINT width,UINT height)567 DXGISetDestSize(DXGIDecodeSwapChain decode_swap_chain, UINT width, UINT height)
568 {
569    return decode_swap_chain->lpVtbl->SetDestSize(decode_swap_chain, width, height);
570 }
DXGIGetSourceRect(DXGIDecodeSwapChain decode_swap_chain,RECT * rect)571 static INLINE HRESULT DXGIGetSourceRect(DXGIDecodeSwapChain decode_swap_chain, RECT* rect)
572 {
573    return decode_swap_chain->lpVtbl->GetSourceRect(decode_swap_chain, rect);
574 }
DXGIGetTargetRect(DXGIDecodeSwapChain decode_swap_chain,RECT * rect)575 static INLINE HRESULT DXGIGetTargetRect(DXGIDecodeSwapChain decode_swap_chain, RECT* rect)
576 {
577    return decode_swap_chain->lpVtbl->GetTargetRect(decode_swap_chain, rect);
578 }
579 static INLINE HRESULT
DXGIGetDestSize(DXGIDecodeSwapChain decode_swap_chain,UINT * width,UINT * height)580 DXGIGetDestSize(DXGIDecodeSwapChain decode_swap_chain, UINT* width, UINT* height)
581 {
582    return decode_swap_chain->lpVtbl->GetDestSize(decode_swap_chain, width, height);
583 }
DXGISetColorSpace(DXGIDecodeSwapChain decode_swap_chain,DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS color_space)584 static INLINE HRESULT DXGISetColorSpace(
585       DXGIDecodeSwapChain decode_swap_chain, DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS color_space)
586 {
587    return decode_swap_chain->lpVtbl->SetColorSpace(decode_swap_chain, color_space);
588 }
589 static INLINE DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS
DXGIGetColorSpace(DXGIDecodeSwapChain decode_swap_chain)590 DXGIGetColorSpace(DXGIDecodeSwapChain decode_swap_chain)
591 {
592    return decode_swap_chain->lpVtbl->GetColorSpace(decode_swap_chain);
593 }
DXGIReleaseFactoryMedia(DXGIFactoryMedia factory_media)594 static INLINE ULONG DXGIReleaseFactoryMedia(DXGIFactoryMedia factory_media)
595 {
596    return factory_media->lpVtbl->Release(factory_media);
597 }
DXGICreateSwapChainForCompositionSurfaceHandle(DXGIFactoryMedia factory_media,void * device,HANDLE h_surface,DXGI_SWAP_CHAIN_DESC1 * desc,DXGIOutput restrict_to_output,DXGISwapChain * swap_chain)598 static INLINE HRESULT DXGICreateSwapChainForCompositionSurfaceHandle(
599       DXGIFactoryMedia       factory_media,
600       void*                  device,
601       HANDLE                 h_surface,
602       DXGI_SWAP_CHAIN_DESC1* desc,
603       DXGIOutput             restrict_to_output,
604       DXGISwapChain*         swap_chain)
605 {
606    return factory_media->lpVtbl->CreateSwapChainForCompositionSurfaceHandle(
607          factory_media, (IUnknown*)device, h_surface, desc, restrict_to_output,
608          (IDXGISwapChain1**)swap_chain);
609 }
DXGICreateDecodeSwapChainForCompositionSurfaceHandle(DXGIFactoryMedia factory_media,void * device,HANDLE h_surface,DXGI_DECODE_SWAP_CHAIN_DESC * desc,void * yuv_decode_buffers,DXGIOutput restrict_to_output,DXGIDecodeSwapChain * swap_chain)610 static INLINE HRESULT DXGICreateDecodeSwapChainForCompositionSurfaceHandle(
611       DXGIFactoryMedia             factory_media,
612       void*                        device,
613       HANDLE                       h_surface,
614       DXGI_DECODE_SWAP_CHAIN_DESC* desc,
615       void*                        yuv_decode_buffers,
616       DXGIOutput                   restrict_to_output,
617       DXGIDecodeSwapChain*         swap_chain)
618 {
619    return factory_media->lpVtbl->CreateDecodeSwapChainForCompositionSurfaceHandle(
620          factory_media, (IUnknown*)device, h_surface, desc, (IDXGIResource*)yuv_decode_buffers,
621          restrict_to_output, swap_chain);
622 }
DXGIReleaseSwapChainMedia(DXGISwapChainMedia swap_chain_media)623 static INLINE ULONG DXGIReleaseSwapChainMedia(DXGISwapChainMedia swap_chain_media)
624 {
625    return swap_chain_media->lpVtbl->Release(swap_chain_media);
626 }
627 static INLINE HRESULT
DXGIGetFrameStatisticsMedia(DXGISwapChainMedia swap_chain_media,DXGI_FRAME_STATISTICS_MEDIA * stats)628 DXGIGetFrameStatisticsMedia(DXGISwapChainMedia swap_chain_media, DXGI_FRAME_STATISTICS_MEDIA* stats)
629 {
630    return swap_chain_media->lpVtbl->GetFrameStatisticsMedia(swap_chain_media, stats);
631 }
DXGISetPresentDuration(DXGISwapChainMedia swap_chain_media,UINT duration)632 static INLINE HRESULT DXGISetPresentDuration(DXGISwapChainMedia swap_chain_media, UINT duration)
633 {
634    return swap_chain_media->lpVtbl->SetPresentDuration(swap_chain_media, duration);
635 }
DXGICheckPresentDurationSupport(DXGISwapChainMedia swap_chain_media,UINT desired_present_duration,UINT * closest_smaller_present_duration,UINT * closest_larger_present_duration)636 static INLINE HRESULT DXGICheckPresentDurationSupport(
637       DXGISwapChainMedia swap_chain_media,
638       UINT               desired_present_duration,
639       UINT*              closest_smaller_present_duration,
640       UINT*              closest_larger_present_duration)
641 {
642    return swap_chain_media->lpVtbl->CheckPresentDurationSupport(
643          swap_chain_media, desired_present_duration, closest_smaller_present_duration,
644          closest_larger_present_duration);
645 }
646 #endif
DXGIReleaseSwapChain(DXGISwapChain swap_chain)647 static INLINE ULONG DXGIReleaseSwapChain(DXGISwapChain swap_chain)
648 {
649    return swap_chain->lpVtbl->Release(swap_chain);
650 }
651 
652 #define DXGIPresent(swap_chain, sync_interval, flags) ((swap_chain)->lpVtbl->Present((swap_chain), (UINT)(sync_interval), flags))
653 
DXGIGetBuffer(DXGISwapChain swap_chain,UINT buffer,IDXGISurface ** out)654 static INLINE HRESULT DXGIGetBuffer(DXGISwapChain swap_chain, UINT buffer, IDXGISurface** out)
655 {
656    return swap_chain->lpVtbl->GetBuffer(swap_chain, buffer, uuidof(IDXGISurface), (void**)out);
657 }
658 static INLINE HRESULT
DXGISetFullscreenState(DXGISwapChain swap_chain,BOOL fullscreen,DXGIOutput target)659 DXGISetFullscreenState(DXGISwapChain swap_chain, BOOL fullscreen, DXGIOutput target)
660 {
661    return swap_chain->lpVtbl->SetFullscreenState(swap_chain, fullscreen, target);
662 }
663 static INLINE HRESULT
DXGIGetFullscreenState(DXGISwapChain swap_chain,BOOL * fullscreen,DXGIOutput * target)664 DXGIGetFullscreenState(DXGISwapChain swap_chain, BOOL* fullscreen, DXGIOutput* target)
665 {
666    return swap_chain->lpVtbl->GetFullscreenState(swap_chain, fullscreen, target);
667 }
668 
669 #define DXGIResizeBuffers(swap_chain, buffer_count, width, height, new_format, swap_chain_flags) ((swap_chain)->lpVtbl->ResizeBuffers((swap_chain), buffer_count, width, height, new_format, swap_chain_flags))
670 
671 static INLINE HRESULT
DXGIResizeTarget(DXGISwapChain swap_chain,DXGI_MODE_DESC * new_target_parameters)672 DXGIResizeTarget(DXGISwapChain swap_chain, DXGI_MODE_DESC* new_target_parameters)
673 {
674    return swap_chain->lpVtbl->ResizeTarget(swap_chain, new_target_parameters);
675 }
DXGIGetContainingOutput(DXGISwapChain swap_chain,DXGIOutput * output)676 static INLINE HRESULT DXGIGetContainingOutput(DXGISwapChain swap_chain, DXGIOutput* output)
677 {
678    return swap_chain->lpVtbl->GetContainingOutput(swap_chain, output);
679 }
DXGIGetFrameStatistics(DXGISwapChain swap_chain,DXGI_FRAME_STATISTICS * stats)680 static INLINE HRESULT DXGIGetFrameStatistics(DXGISwapChain swap_chain, DXGI_FRAME_STATISTICS* stats)
681 {
682    return swap_chain->lpVtbl->GetFrameStatistics(swap_chain, stats);
683 }
DXGIGetLastPresentCount(DXGISwapChain swap_chain,UINT * last_present_count)684 static INLINE HRESULT DXGIGetLastPresentCount(DXGISwapChain swap_chain, UINT* last_present_count)
685 {
686    return swap_chain->lpVtbl->GetLastPresentCount(swap_chain, last_present_count);
687 }
DXGIGetSwapChainDesc1(DXGISwapChain swap_chain,DXGI_SWAP_CHAIN_DESC1 * desc)688 static INLINE HRESULT DXGIGetSwapChainDesc1(DXGISwapChain swap_chain, DXGI_SWAP_CHAIN_DESC1* desc)
689 {
690    return swap_chain->lpVtbl->GetDesc1(swap_chain, desc);
691 }
692 static INLINE HRESULT
DXGIGetFullscreenDesc(DXGISwapChain swap_chain,DXGI_SWAP_CHAIN_FULLSCREEN_DESC * desc)693 DXGIGetFullscreenDesc(DXGISwapChain swap_chain, DXGI_SWAP_CHAIN_FULLSCREEN_DESC* desc)
694 {
695    return swap_chain->lpVtbl->GetFullscreenDesc(swap_chain, desc);
696 }
DXGIGetHwnd(DXGISwapChain swap_chain,HWND * hwnd)697 static INLINE HRESULT DXGIGetHwnd(DXGISwapChain swap_chain, HWND* hwnd)
698 {
699    return swap_chain->lpVtbl->GetHwnd(swap_chain, hwnd);
700 }
DXGIPresent1(DXGISwapChain swap_chain,UINT sync_interval,UINT present_flags,DXGI_PRESENT_PARAMETERS * present_parameters)701 static INLINE HRESULT DXGIPresent1(
702       DXGISwapChain            swap_chain,
703       UINT                     sync_interval,
704       UINT                     present_flags,
705       DXGI_PRESENT_PARAMETERS* present_parameters)
706 {
707    return swap_chain->lpVtbl->Present1(
708          swap_chain, sync_interval, present_flags, present_parameters);
709 }
DXGIIsTemporaryMonoSupported(DXGISwapChain swap_chain)710 static INLINE BOOL DXGIIsTemporaryMonoSupported(DXGISwapChain swap_chain)
711 {
712    return swap_chain->lpVtbl->IsTemporaryMonoSupported(swap_chain);
713 }
714 static INLINE HRESULT
DXGIGetRestrictToOutput(DXGISwapChain swap_chain,DXGIOutput * restrict_to_output)715 DXGIGetRestrictToOutput(DXGISwapChain swap_chain, DXGIOutput* restrict_to_output)
716 {
717    return swap_chain->lpVtbl->GetRestrictToOutput(swap_chain, restrict_to_output);
718 }
DXGISetBackgroundColor(DXGISwapChain swap_chain,DXGI_RGBA * color)719 static INLINE HRESULT DXGISetBackgroundColor(DXGISwapChain swap_chain, DXGI_RGBA* color)
720 {
721    return swap_chain->lpVtbl->SetBackgroundColor(swap_chain, color);
722 }
DXGIGetBackgroundColor(DXGISwapChain swap_chain,DXGI_RGBA * color)723 static INLINE HRESULT DXGIGetBackgroundColor(DXGISwapChain swap_chain, DXGI_RGBA* color)
724 {
725    return swap_chain->lpVtbl->GetBackgroundColor(swap_chain, color);
726 }
DXGISetRotation(DXGISwapChain swap_chain,DXGI_MODE_ROTATION rotation)727 static INLINE HRESULT DXGISetRotation(DXGISwapChain swap_chain, DXGI_MODE_ROTATION rotation)
728 {
729    return swap_chain->lpVtbl->SetRotation(swap_chain, rotation);
730 }
DXGIGetRotation(DXGISwapChain swap_chain,DXGI_MODE_ROTATION * rotation)731 static INLINE HRESULT DXGIGetRotation(DXGISwapChain swap_chain, DXGI_MODE_ROTATION* rotation)
732 {
733    return swap_chain->lpVtbl->GetRotation(swap_chain, rotation);
734 }
DXGISetSourceSize(DXGISwapChain swap_chain,UINT width,UINT height)735 static INLINE HRESULT DXGISetSourceSize(DXGISwapChain swap_chain, UINT width, UINT height)
736 {
737    return swap_chain->lpVtbl->SetSourceSize(swap_chain, width, height);
738 }
DXGIGetSourceSize(DXGISwapChain swap_chain,UINT * width,UINT * height)739 static INLINE HRESULT DXGIGetSourceSize(DXGISwapChain swap_chain, UINT* width, UINT* height)
740 {
741    return swap_chain->lpVtbl->GetSourceSize(swap_chain, width, height);
742 }
DXGISetMaximumFrameLatency(DXGISwapChain swap_chain,UINT max_latency)743 static INLINE HRESULT DXGISetMaximumFrameLatency(DXGISwapChain swap_chain, UINT max_latency)
744 {
745    return swap_chain->lpVtbl->SetMaximumFrameLatency(swap_chain, max_latency);
746 }
DXGIGetMaximumFrameLatency(DXGISwapChain swap_chain,UINT * max_latency)747 static INLINE HRESULT DXGIGetMaximumFrameLatency(DXGISwapChain swap_chain, UINT* max_latency)
748 {
749    return swap_chain->lpVtbl->GetMaximumFrameLatency(swap_chain, max_latency);
750 }
DXGIGetFrameLatencyWaitableObject(DXGISwapChain swap_chain)751 static INLINE HANDLE DXGIGetFrameLatencyWaitableObject(DXGISwapChain swap_chain)
752 {
753    return swap_chain->lpVtbl->GetFrameLatencyWaitableObject(swap_chain);
754 }
DXGISetMatrixTransform(DXGISwapChain swap_chain,DXGI_MATRIX_3X2_F * matrix)755 static INLINE HRESULT DXGISetMatrixTransform(DXGISwapChain swap_chain, DXGI_MATRIX_3X2_F* matrix)
756 {
757    return swap_chain->lpVtbl->SetMatrixTransform(swap_chain, matrix);
758 }
DXGIGetMatrixTransform(DXGISwapChain swap_chain,DXGI_MATRIX_3X2_F * matrix)759 static INLINE HRESULT DXGIGetMatrixTransform(DXGISwapChain swap_chain, DXGI_MATRIX_3X2_F* matrix)
760 {
761    return swap_chain->lpVtbl->GetMatrixTransform(swap_chain, matrix);
762 }
DXGIGetCurrentBackBufferIndex(DXGISwapChain swap_chain)763 static INLINE UINT DXGIGetCurrentBackBufferIndex(DXGISwapChain swap_chain)
764 {
765    return swap_chain->lpVtbl->GetCurrentBackBufferIndex(swap_chain);
766 }
DXGICheckColorSpaceSupport(DXGISwapChain swap_chain,DXGI_COLOR_SPACE_TYPE color_space,UINT * color_space_support)767 static INLINE HRESULT DXGICheckColorSpaceSupport(
768       DXGISwapChain swap_chain, DXGI_COLOR_SPACE_TYPE color_space, UINT* color_space_support)
769 {
770    return swap_chain->lpVtbl->CheckColorSpaceSupport(swap_chain, color_space, color_space_support);
771 }
772 static INLINE HRESULT
DXGISetColorSpace1(DXGISwapChain swap_chain,DXGI_COLOR_SPACE_TYPE color_space)773 DXGISetColorSpace1(DXGISwapChain swap_chain, DXGI_COLOR_SPACE_TYPE color_space)
774 {
775    return swap_chain->lpVtbl->SetColorSpace1(swap_chain, color_space);
776 }
777 #endif
778 /* end of auto-generated */
779 
DXGICreateFactory(DXGIFactory * factory)780 static INLINE HRESULT DXGICreateFactory(DXGIFactory* factory)
781 {
782    return CreateDXGIFactory1(uuidof(IDXGIFactory1), (void**)factory);
783 }
784 #ifdef __WINRT__
DXGICreateFactory2(DXGIFactory2 * factory)785 static INLINE HRESULT DXGICreateFactory2(DXGIFactory2* factory)
786 {
787    return CreateDXGIFactory1(uuidof(IDXGIFactory2), (void**)factory);
788 }
789 #endif
790 
791 /* internal */
792 
793 #include "../../retroarch.h"
794 #include "../drivers_shader/glslang_util.h"
795 
796 #define DXGI_COLOR_RGBA(r, g, b, a) (((UINT32)(a) << 24) | ((UINT32)(b) << 16) | ((UINT32)(g) << 8) | ((UINT32)(r) << 0))
797 
798 typedef enum {
799    DXGI_FORMAT_EX_A4R4G4B4_UNORM = 1000
800 } DXGI_FORMAT_EX;
801 
802 typedef struct
803 {
804    float x;
805    float y;
806    float z;
807    float w;
808 } float4_t;
809 
810 RETRO_BEGIN_DECLS
811 
812 DXGI_FORMAT* dxgi_get_format_fallback_list(DXGI_FORMAT format);
813 
814 void dxgi_copy(
815       int         width,
816       int         height,
817       DXGI_FORMAT src_format,
818       int         src_pitch,
819       const void* src_data,
820       DXGI_FORMAT dst_format,
821       int         dst_pitch,
822       void*       dst_data);
823 
824 DXGI_FORMAT glslang_format_to_dxgi(glslang_format fmt);
825 
826 RETRO_END_DECLS
827