1 /* 2 * Copyright 2007 Andras Kovacs 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19 import "oaidl.idl"; 20 import "ocidl.idl"; 21 import "dxgitype.h"; 22 23 const UINT _FACDXGI = 0x87a; 24 25 cpp_quote("#define MAKE_DXGI_STATUS(x) MAKE_HRESULT(0, _FACDXGI, x)") 26 cpp_quote("#define DXGI_STATUS_OCCLUDED MAKE_DXGI_STATUS(1)") 27 cpp_quote("#define DXGI_STATUS_CLIPPED MAKE_DXGI_STATUS(2)") 28 cpp_quote("#define DXGI_STATUS_NO_REDIRECTION MAKE_DXGI_STATUS(4)") 29 cpp_quote("#define DXGI_STATUS_NO_DESKTOP_ACCESS MAKE_DXGI_STATUS(5)") 30 cpp_quote("#define DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE MAKE_DXGI_STATUS(6)") 31 cpp_quote("#define DXGI_STATUS_MODE_CHANGED MAKE_DXGI_STATUS(7)") 32 cpp_quote("#define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS MAKE_DXGI_STATUS(8)") 33 34 cpp_quote("#define MAKE_DXGI_HRESULT(x) MAKE_HRESULT(1, _FACDXGI, x)") 35 cpp_quote("#define DXGI_ERROR_INVALID_CALL MAKE_DXGI_HRESULT(1)") 36 cpp_quote("#define DXGI_ERROR_NOT_FOUND MAKE_DXGI_HRESULT(2)") 37 cpp_quote("#define DXGI_ERROR_MORE_DATA MAKE_DXGI_HRESULT(3)") 38 cpp_quote("#define DXGI_ERROR_UNSUPPORTED MAKE_DXGI_HRESULT(4)") 39 cpp_quote("#define DXGI_ERROR_DEVICE_REMOVED MAKE_DXGI_HRESULT(5)") 40 cpp_quote("#define DXGI_ERROR_DEVICE_HUNG MAKE_DXGI_HRESULT(6)") 41 cpp_quote("#define DXGI_ERROR_DEVICE_RESET MAKE_DXGI_HRESULT(7)") 42 cpp_quote("#define DXGI_ERROR_WAS_STILL_DRAWING MAKE_DXGI_HRESULT(10)") 43 cpp_quote("#define DXGI_ERROR_FRAME_STATISTICS_DISJOINT MAKE_DXGI_HRESULT(11)") 44 cpp_quote("#define DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE MAKE_DXGI_HRESULT(12)") 45 cpp_quote("#define DXGI_ERROR_DRIVER_INTERNAL_ERROR MAKE_DXGI_HRESULT(32)") 46 cpp_quote("#define DXGI_ERROR_NONEXCLUSIVE MAKE_DXGI_HRESULT(33)") 47 cpp_quote("#define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE MAKE_DXGI_HRESULT(34)") 48 49 cpp_quote("#if 0") 50 typedef HANDLE HMONITOR; 51 typedef struct _LUID { 52 DWORD LowPart; 53 LONG HighPart; 54 } LUID, *PLUID; 55 cpp_quote("#endif") 56 57 typedef UINT DXGI_USAGE; 58 const DXGI_USAGE DXGI_USAGE_SHADER_INPUT = 0x10L; 59 const DXGI_USAGE DXGI_USAGE_RENDER_TARGET_OUTPUT = 0x20L; 60 const DXGI_USAGE DXGI_USAGE_BACK_BUFFER = 0x40L; 61 const DXGI_USAGE DXGI_USAGE_SHARED = 0x80L; 62 const DXGI_USAGE DXGI_USAGE_READ_ONLY = 0x100L; 63 const DXGI_USAGE DXGI_USAGE_DISCARD_ON_PRESENT = 0x200L; 64 const DXGI_USAGE DXGI_USAGE_UNORDERED_ACCESS = 0x400L; 65 66 const UINT DXGI_ENUM_MODES_INTERLACED = 1; 67 const UINT DXGI_ENUM_MODES_SCALING = 2; 68 69 typedef enum DXGI_SWAP_EFFECT { 70 DXGI_SWAP_EFFECT_DISCARD = 0, 71 DXGI_SWAP_EFFECT_SEQUENTIAL = 1, 72 DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3, 73 DXGI_SWAP_EFFECT_FLIP_DISCARD = 4 74 } DXGI_SWAP_EFFECT; 75 76 typedef enum DXGI_RESIDENCY { 77 DXGI_RESIDENCY_FULLY_RESIDENT = 1, 78 DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY = 2, 79 DXGI_RESIDENCY_EVICTED_TO_DISK = 3, 80 } DXGI_RESIDENCY; 81 82 typedef struct DXGI_SURFACE_DESC { 83 UINT Width; 84 UINT Height; 85 DXGI_FORMAT Format; 86 DXGI_SAMPLE_DESC SampleDesc; 87 } DXGI_SURFACE_DESC; 88 89 typedef struct DXGI_MAPPED_RECT { 90 INT Pitch; 91 BYTE *pBits; 92 } DXGI_MAPPED_RECT; 93 94 typedef struct DXGI_OUTPUT_DESC { 95 WCHAR DeviceName[32]; 96 RECT DesktopCoordinates; 97 BOOL AttachedToDesktop; 98 DXGI_MODE_ROTATION Rotation; 99 HMONITOR Monitor; 100 } DXGI_OUTPUT_DESC; 101 102 typedef struct DXGI_FRAME_STATISTICS { 103 UINT PresentCount; 104 UINT PresentRefreshCount; 105 UINT SyncRefreshCount; 106 LARGE_INTEGER SyncQPCTime; 107 LARGE_INTEGER SyncGPUTime; 108 } DXGI_FRAME_STATISTICS; 109 110 typedef struct DXGI_ADAPTER_DESC { 111 WCHAR Description[128]; 112 UINT VendorId; 113 UINT DeviceId; 114 UINT SubSysId; 115 UINT Revision; 116 SIZE_T DedicatedVideoMemory; 117 SIZE_T DedicatedSystemMemory; 118 SIZE_T SharedSystemMemory; 119 LUID AdapterLuid; 120 } DXGI_ADAPTER_DESC; 121 122 typedef enum DXGI_SWAP_CHAIN_FLAG { 123 DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1, 124 DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2, 125 DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE = 4 126 } DXGI_SWAP_CHAIN_FLAG; 127 128 typedef struct DXGI_SWAP_CHAIN_DESC { 129 DXGI_MODE_DESC BufferDesc; 130 DXGI_SAMPLE_DESC SampleDesc; 131 DXGI_USAGE BufferUsage; 132 UINT BufferCount; 133 HWND OutputWindow; 134 BOOL Windowed; 135 DXGI_SWAP_EFFECT SwapEffect; 136 UINT Flags; 137 } DXGI_SWAP_CHAIN_DESC; 138 139 typedef struct DXGI_SHARED_RESOURCE { 140 HANDLE Handle; 141 } DXGI_SHARED_RESOURCE; 142 143 [ 144 object, 145 local, 146 uuid(aec22fb8-76f3-4639-9be0-28eb43a67a2e) 147 ] 148 interface IDXGIObject : IUnknown 149 { 150 HRESULT SetPrivateData( 151 [in] REFGUID guid, 152 [in] UINT data_size, 153 [in] const void *data 154 ); 155 HRESULT SetPrivateDataInterface( 156 [in] REFGUID guid, 157 [in] const IUnknown *object 158 ); 159 HRESULT GetPrivateData( 160 [in] REFGUID guid, 161 [in, out] UINT *data_size, 162 [out] void *data 163 ); 164 HRESULT GetParent( 165 [in] REFIID riid, 166 [out] void **parent 167 ); 168 } 169 170 [ 171 object, 172 local, 173 uuid(3d3e0379-f9de-4d58-bb6c-18d62992f1a6) 174 ] 175 interface IDXGIDeviceSubObject : IDXGIObject 176 { 177 HRESULT GetDevice( 178 [in] REFIID riid, 179 [out] void **device 180 ); 181 } 182 183 [ 184 object, 185 uuid(035f3ab4-482e-4e50-b41f-8a7f8bd8960b), 186 local, 187 pointer_default(unique) 188 ] 189 interface IDXGIResource : IDXGIDeviceSubObject 190 { 191 HRESULT GetSharedHandle([out] HANDLE *pSharedHandle); 192 HRESULT GetUsage([out] DXGI_USAGE *pUsage); 193 HRESULT SetEvictionPriority([in] UINT EvictionPriority); 194 HRESULT GetEvictionPriority([out, retval] UINT *pEvictionPriority); 195 } 196 197 [ 198 object, 199 uuid(9d8e1289-d7b3-465f-8126-250e349af85d), 200 local, 201 pointer_default(unique) 202 ] 203 interface IDXGIKeyedMutex : IDXGIDeviceSubObject 204 { 205 HRESULT AcquireSync([in] UINT64 Key, [in] DWORD dwMilliseconds); 206 HRESULT ReleaseSync([in] UINT64 Key); 207 } 208 209 [ 210 object, 211 local, 212 uuid(cafcb56c-6ac3-4889-bf47-9e23bbd260ec) 213 ] 214 interface IDXGISurface : IDXGIDeviceSubObject 215 { 216 HRESULT GetDesc( 217 [out] DXGI_SURFACE_DESC *desc 218 ); 219 HRESULT Map( 220 [out] DXGI_MAPPED_RECT *mapped_rect, 221 [in] UINT flags 222 ); 223 HRESULT Unmap( 224 ); 225 } 226 227 [ 228 object, 229 local, 230 uuid(ae02eedb-c735-4690-8d52-5a8dc20213aa) 231 ] 232 interface IDXGIOutput : IDXGIObject 233 { 234 HRESULT GetDesc( 235 [out] DXGI_OUTPUT_DESC *desc 236 ); 237 HRESULT GetDisplayModeList( 238 [in] DXGI_FORMAT format, 239 [in] UINT flags, 240 [in, out] UINT *mode_count, 241 [out] DXGI_MODE_DESC *desc 242 ); 243 HRESULT FindClosestMatchingMode( 244 [in] const DXGI_MODE_DESC *mode, 245 [out] DXGI_MODE_DESC *closest_match, 246 [in] IUnknown *device 247 ); 248 HRESULT WaitForVBlank( 249 ); 250 HRESULT TakeOwnership( 251 [in] IUnknown *device, 252 [in] BOOL exclusive 253 ); 254 void ReleaseOwnership( 255 ); 256 HRESULT GetGammaControlCapabilities( 257 [out] DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps 258 ); 259 HRESULT SetGammaControl( 260 [in] const DXGI_GAMMA_CONTROL *gamma_control 261 ); 262 HRESULT GetGammaControl( 263 [out] DXGI_GAMMA_CONTROL *gamma_control 264 ); 265 HRESULT SetDisplaySurface( 266 [in] IDXGISurface *surface 267 ); 268 HRESULT GetDisplaySurfaceData( 269 [in] IDXGISurface *surface 270 ); 271 HRESULT GetFrameStatistics( 272 [out] DXGI_FRAME_STATISTICS *stats 273 ); 274 } 275 276 [ 277 object, 278 local, 279 uuid(2411e7e1-12ac-4ccf-bd14-9798e8534dc0) 280 ] 281 interface IDXGIAdapter : IDXGIObject 282 { 283 HRESULT EnumOutputs( 284 [in] UINT output_idx, 285 [in, out] IDXGIOutput **output 286 ); 287 HRESULT GetDesc( 288 [out] DXGI_ADAPTER_DESC *desc 289 ); 290 HRESULT CheckInterfaceSupport( 291 [in] REFGUID guid, 292 [out] LARGE_INTEGER *umd_version 293 ); 294 } 295 296 cpp_quote("#define DXGI_MAX_SWAP_CHAIN_BUFFERS (16)") 297 298 cpp_quote("#define DXGI_PRESENT_TEST __MSABI_LONG(0x00000001U)") 299 cpp_quote("#define DXGI_PRESENT_DO_NOT_SEQUENCE __MSABI_LONG(0x00000002U)") 300 cpp_quote("#define DXGI_PRESENT_RESTART __MSABI_LONG(0x00000004U)") 301 cpp_quote("#define DXGI_PRESENT_DO_NOT_WAIT __MSABI_LONG(0x00000008U)") 302 cpp_quote("#define DXGI_PRESENT_STEREO_PREFER_RIGHT __MSABI_LONG(0x00000010U)") 303 cpp_quote("#define DXGI_PRESENT_STEREO_TEMPORARY_MONO __MSABI_LONG(0x00000020U)") 304 cpp_quote("#define DXGI_PRESENT_RESTRICT_TO_OUTPUT __MSABI_LONG(0x00000040U)") 305 306 [ 307 object, 308 local, 309 uuid(310d36a0-d2e7-4c0a-aa04-6a9d23b8886a) 310 ] 311 interface IDXGISwapChain : IDXGIDeviceSubObject 312 { 313 HRESULT Present( 314 [in] UINT sync_interval, 315 [in] UINT flags 316 ); 317 HRESULT GetBuffer( 318 [in] UINT buffer_idx, 319 [in] REFIID riid, 320 [in, out] void **surface 321 ); 322 HRESULT SetFullscreenState( 323 [in] BOOL fullscreen, 324 [in] IDXGIOutput *target 325 ); 326 HRESULT GetFullscreenState( 327 [out] BOOL *fullscreen, 328 [out] IDXGIOutput **target 329 ); 330 HRESULT GetDesc( 331 [out] DXGI_SWAP_CHAIN_DESC *desc 332 ); 333 HRESULT ResizeBuffers( 334 [in] UINT buffer_count, 335 [in] UINT width, 336 [in] UINT height, 337 [in] DXGI_FORMAT format, 338 [in] UINT flags 339 ); 340 HRESULT ResizeTarget( 341 [in] const DXGI_MODE_DESC *target_mode_desc 342 ); 343 HRESULT GetContainingOutput( 344 [out] IDXGIOutput **output 345 ); 346 HRESULT GetFrameStatistics( 347 [out] DXGI_FRAME_STATISTICS *stats 348 ); 349 HRESULT GetLastPresentCount( 350 [out] UINT *last_present_count 351 ); 352 } 353 354 cpp_quote("#define DXGI_MWA_NO_WINDOW_CHANGES 0x1") 355 cpp_quote("#define DXGI_MWA_NO_ALT_ENTER 0x2") 356 cpp_quote("#define DXGI_MWA_NO_PRINT_SCREEN 0x4") 357 cpp_quote("#define DXGI_MWA_VALID 0x7") 358 359 [ 360 object, 361 local, 362 uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369) 363 ] 364 interface IDXGIFactory : IDXGIObject 365 { 366 HRESULT EnumAdapters( 367 [in] UINT adapter_idx, 368 [out] IDXGIAdapter **adapter 369 ); 370 HRESULT MakeWindowAssociation( 371 [in] HWND window, 372 [in] UINT flags 373 ); 374 HRESULT GetWindowAssociation( 375 [in] HWND *window 376 ); 377 HRESULT CreateSwapChain( 378 [in] IUnknown *device, 379 [in] DXGI_SWAP_CHAIN_DESC *desc, 380 [out] IDXGISwapChain **swapchain 381 ); 382 HRESULT CreateSoftwareAdapter( 383 [in] HMODULE swrast, 384 [out] IDXGIAdapter **adapter 385 ); 386 } 387 388 [local] HRESULT __stdcall CreateDXGIFactory(REFIID riid, void **factory); 389 [local] HRESULT __stdcall CreateDXGIFactory1(REFIID riid, void **factory); 390 391 [ 392 object, 393 local, 394 uuid(54ec77fa-1377-44e6-8c32-88fd5f44c84c) 395 ] 396 interface IDXGIDevice : IDXGIObject 397 { 398 HRESULT GetAdapter( 399 [out] IDXGIAdapter **adapter 400 ); 401 HRESULT CreateSurface( 402 [in] const DXGI_SURFACE_DESC *desc, 403 [in] UINT surface_count, 404 [in] DXGI_USAGE usage, 405 [in] const DXGI_SHARED_RESOURCE *shared_resource, 406 [out] IDXGISurface **surface 407 ); 408 HRESULT QueryResourceResidency( 409 [in] IUnknown *const *resources, 410 [out] DXGI_RESIDENCY *residency, 411 [in] UINT resource_count 412 ); 413 HRESULT SetGPUThreadPriority( 414 [in] INT priority 415 ); 416 HRESULT GetGPUThreadPriority( 417 [out] INT *priority 418 ); 419 } 420 421 typedef enum DXGI_ADAPTER_FLAG { 422 DXGI_ADAPTER_FLAG_NONE = 0, 423 DXGI_ADAPTER_FLAG_REMOTE = 1, 424 DXGI_ADAPTER_FLAG_FORCE_DWORD = 0xFFFFFFFF 425 } DXGI_ADAPTER_FLAG; 426 427 typedef struct DXGI_ADAPTER_DESC1 { 428 WCHAR Description[128]; 429 UINT VendorId; 430 UINT DeviceId; 431 UINT SubSysId; 432 UINT Revision; 433 SIZE_T DedicatedVideoMemory; 434 SIZE_T DedicatedSystemMemory; 435 SIZE_T SharedSystemMemory; 436 LUID AdapterLuid; 437 UINT Flags; 438 } DXGI_ADAPTER_DESC1; 439 440 [ 441 object, 442 uuid(29038f61-3839-4626-91fd-086879011a05), 443 local, 444 pointer_default(unique) 445 ] 446 interface IDXGIAdapter1 : IDXGIAdapter 447 { 448 HRESULT GetDesc1([out] DXGI_ADAPTER_DESC1 *pDesc); 449 } 450 451 [ 452 object, 453 uuid(77db970f-6276-48ba-ba28-070143b4392c), 454 local, 455 pointer_default(unique) 456 ] 457 interface IDXGIDevice1 : IDXGIDevice 458 { 459 HRESULT SetMaximumFrameLatency([in] UINT MaxLatency); 460 HRESULT GetMaximumFrameLatency([out] UINT *pMaxLatency); 461 } 462 463 [ 464 object, 465 uuid(770aae78-f26f-4dba-a829-253c83d1b387), 466 local, 467 pointer_default(unique) 468 ] 469 interface IDXGIFactory1 : IDXGIFactory 470 { 471 HRESULT EnumAdapters1([in] UINT Adapter, [out] IDXGIAdapter1 **ppAdapter); 472 BOOL IsCurrent(); 473 } 474