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 64 const UINT DXGI_ENUM_MODES_INTERLACED = 1; 65 const UINT DXGI_ENUM_MODES_SCALING = 2; 66 67 typedef enum DXGI_SWAP_EFFECT { 68 DXGI_SWAP_EFFECT_DISCARD = 0, 69 DXGI_SWAP_EFFECT_SEQUENTIAL = 1, 70 } DXGI_SWAP_EFFECT; 71 72 typedef 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 78 typedef struct DXGI_SURFACE_DESC { 79 UINT Width; 80 UINT Height; 81 DXGI_FORMAT Format; 82 DXGI_SAMPLE_DESC SampleDesc; 83 } DXGI_SURFACE_DESC; 84 85 typedef struct DXGI_MAPPED_RECT { 86 INT Pitch; 87 BYTE *pBits; 88 } DXGI_MAPPED_RECT; 89 90 typedef 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 98 typedef 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 106 typedef 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 118 typedef 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 124 typedef 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 135 typedef 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 ] 144 interface 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 ] 171 interface 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 ] 185 interface 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 ] 199 interface 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 ] 210 interface 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 ] 228 interface 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 ] 277 interface 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 ] 297 interface 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 340 cpp_quote("#define DXGI_MWA_NO_WINDOW_CHANGES 0x1") 341 cpp_quote("#define DXGI_MWA_NO_ALT_ENTER 0x2") 342 cpp_quote("#define DXGI_MWA_NO_PRINT_SCREEN 0x4") 343 cpp_quote("#define DXGI_MWA_VALID 0x7") 344 345 [ 346 object, 347 local, 348 uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369) 349 ] 350 interface 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 ] 381 interface 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 406 typedef 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 412 typedef 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 ] 431 interface 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 ] 442 interface IDXGIFactory1 : IDXGIFactory 443 { 444 HRESULT EnumAdapters1([in] UINT Adapter, [out] IDXGIAdapter1 **ppAdapter); 445 BOOL IsCurrent(); 446 } 447