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