1/* 2 * Copyright 2014 Jacek Caban for CodeWeavers 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 "dxgi.idl"; 20 21const UINT DXGI_ENUM_MODES_STEREO = 0x4; 22const UINT DXGI_ENUM_MODES_DISABLED_STEREO = 0x8; 23 24const DWORD DXGI_SHARED_RESOURCE_READ = 0x80000000; 25const DWORD DXGI_SHARED_RESOURCE_WRITE = 0x00000001; 26 27typedef enum _DXGI_OFFER_RESOURCE_PRIORITY { 28 DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1, 29 DXGI_OFFER_RESOURCE_PRIORITY_NORMAL, 30 DXGI_OFFER_RESOURCE_PRIORITY_HIGH 31} DXGI_OFFER_RESOURCE_PRIORITY; 32 33typedef enum DXGI_ALPHA_MODE { 34 DXGI_ALPHA_MODE_UNSPECIFIED = 0, 35 DXGI_ALPHA_MODE_PREMULTIPLIED = 1, 36 DXGI_ALPHA_MODE_STRAIGHT = 2, 37 DXGI_ALPHA_MODE_IGNORE = 3, 38 DXGI_ALPHA_MODE_FORCE_DWORD = 0xffffffff 39} DXGI_ALPHA_MODE; 40 41typedef struct DXGI_OUTDUPL_MOVE_RECT 42{ 43 POINT SourcePoint; 44 RECT DestinationRect; 45} DXGI_OUTDUPL_MOVE_RECT; 46 47typedef struct DXGI_OUTDUPL_DESC 48{ 49 DXGI_MODE_DESC ModeDesc; 50 DXGI_MODE_ROTATION Rotation; 51 BOOL DesktopImageInSystemMemory; 52} DXGI_OUTDUPL_DESC; 53 54typedef struct DXGI_OUTDUPL_POINTER_POSITION 55{ 56 POINT Position; 57 BOOL Visible; 58} DXGI_OUTDUPL_POINTER_POSITION; 59 60typedef enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE 61{ 62 DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 0x00000001, 63 DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 0x00000002, 64 DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 0x00000004 65} DXGI_OUTDUPL_POINTER_SHAPE_TYPE; 66 67typedef struct DXGI_OUTDUPL_POINTER_SHAPE_INFO 68{ 69 UINT Type; 70 UINT Width; 71 UINT Height; 72 UINT Pitch; 73 POINT HotSpot; 74} DXGI_OUTDUPL_POINTER_SHAPE_INFO; 75 76typedef struct DXGI_OUTDUPL_FRAME_INFO 77{ 78 LARGE_INTEGER LastPresentTime; 79 LARGE_INTEGER LastMouseUpdateTime; 80 UINT AccumulatedFrames; 81 BOOL RectsCoalesced; 82 BOOL ProtectedContentMaskedOut; 83 DXGI_OUTDUPL_POINTER_POSITION PointerPosition; 84 UINT TotalMetadataBufferSize; 85 UINT PointerShapeBufferSize; 86} DXGI_OUTDUPL_FRAME_INFO; 87 88typedef struct DXGI_MODE_DESC1 89{ 90 UINT Width; 91 UINT Height; 92 DXGI_RATIONAL RefreshRate; 93 DXGI_FORMAT Format; 94 DXGI_MODE_SCANLINE_ORDER ScanlineOrdering; 95 DXGI_MODE_SCALING Scaling; 96 BOOL Stereo; 97} DXGI_MODE_DESC1; 98 99[ 100 object, 101 uuid(191cfac3-a341-470d-b26e-a864f428319c), 102 local, 103 pointer_default(unique) 104] 105interface IDXGIOutputDuplication : IDXGIObject 106{ 107 void GetDesc( 108 [out] DXGI_OUTDUPL_DESC *desc 109 ); 110 111 HRESULT AcquireNextFrame( 112 [in] UINT timeout_in_milliseconds, 113 [out] DXGI_OUTDUPL_FRAME_INFO *frame_info, 114 [out] IDXGIResource **desktop_resource 115 ); 116 117 HRESULT GetFrameDirtyRects( 118 [in] UINT dirty_rects_buffer_size, 119 [out] RECT *dirty_rects_buffer, 120 [out] UINT *dirty_rects_buffer_size_required 121 ); 122 123 HRESULT GetFrameMoveRects( 124 [in] UINT move_rects_buffer_size, 125 [out] DXGI_OUTDUPL_MOVE_RECT *move_rect_buffer, 126 [out] UINT *move_rects_buffer_size_required 127 ); 128 129 HRESULT GetFramePointerShape( 130 [in] UINT pointer_shape_buffer_size, 131 [out] void *pointer_shape_buffer, 132 [out] UINT *pointer_shape_buffer_size_required, 133 [out] DXGI_OUTDUPL_POINTER_SHAPE_INFO *pointer_shape_info 134 ); 135 136 HRESULT MapDesktopSurface( 137 [out] DXGI_MAPPED_RECT *locked_rect 138 ); 139 140 HRESULT UnMapDesktopSurface(); 141 142 HRESULT ReleaseFrame(); 143} 144 145[ 146 object, 147 uuid(aba496dd-b617-4cb8-a866-bc44d7eb1fa2), 148 local, 149 pointer_default(unique) 150] 151interface IDXGISurface2 : IDXGISurface1 152{ 153 HRESULT GetResource( 154 [in] REFIID iid, 155 [out] void **parent_resource, 156 [out] UINT *subresource_idx 157 ); 158} 159 160[ 161 object, 162 uuid(30961379-4609-4a41-998e-54fe567ee0c1), 163 local, 164 pointer_default(unique) 165] 166interface IDXGIResource1 : IDXGIResource 167{ 168 HRESULT CreateSubresourceSurface( 169 UINT index, 170 [out] IDXGISurface2 **surface 171 ); 172 HRESULT CreateSharedHandle( 173 [in] const SECURITY_ATTRIBUTES *attributes, 174 [in] DWORD access, 175 [in] const WCHAR *name, 176 [out] HANDLE *handle 177 ); 178} 179 180[ 181 object, 182 uuid(ea9dbf1a-c88e-4486-854a-98aa0138f30c), 183 local, 184 pointer_default(unique) 185] 186interface IDXGIDisplayControl : IUnknown 187{ 188 BOOL IsStereoEnabled(); 189 void SetStereoEnabled(BOOL enabled); 190} 191 192[ 193 object, 194 uuid(05008617-fbfd-4051-a790-144884b4f6a9), 195 local, 196 pointer_default(unique) 197] 198interface IDXGIDevice2 : IDXGIDevice1 199{ 200 HRESULT OfferResources( 201 [in] UINT NumResources, 202 [in, size_is(NumResources)] IDXGIResource *const *ppResources, 203 [in] DXGI_OFFER_RESOURCE_PRIORITY Priority); 204 205 HRESULT ReclaimResources( 206 [in] UINT NumResources, 207 [in, size_is(NumResources)] IDXGIResource *const *ppResources, 208 [out, size_is(NumResources)] BOOL *pDiscarded); 209 210 HRESULT EnqueueSetEvent( 211 [in] HANDLE hEvent); 212} 213 214typedef enum DXGI_SCALING { 215 DXGI_SCALING_STRETCH = 0, 216 DXGI_SCALING_NONE = 1 217} DXGI_SCALING; 218 219typedef struct DXGI_SWAP_CHAIN_DESC1 { 220 UINT Width; 221 UINT Height; 222 DXGI_FORMAT Format; 223 BOOL Stereo; 224 DXGI_SAMPLE_DESC SampleDesc; 225 DXGI_USAGE BufferUsage; 226 UINT BufferCount; 227 DXGI_SCALING Scaling; 228 DXGI_SWAP_EFFECT SwapEffect; 229 DXGI_ALPHA_MODE AlphaMode; 230 UINT Flags; 231} DXGI_SWAP_CHAIN_DESC1; 232 233typedef struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC { 234 DXGI_RATIONAL RefreshRate; 235 DXGI_MODE_SCANLINE_ORDER ScanlineOrdering; 236 DXGI_MODE_SCALING Scaling; 237 BOOL Windowed; 238} DXGI_SWAP_CHAIN_FULLSCREEN_DESC; 239 240typedef struct DXGI_PRESENT_PARAMETERS { 241 UINT DirtyRectsCount; 242 RECT *pDirtyRects; 243 RECT *pScrollRect; 244 POINT *pScrollOffset; 245} DXGI_PRESENT_PARAMETERS; 246 247[ 248 object, 249 uuid(790a45f7-0d42-4876-983a-0a55cfe6f4aa), 250 local, 251 pointer_default(unique) 252] 253interface IDXGISwapChain1 : IDXGISwapChain 254{ 255 HRESULT GetDesc1( 256 [out] DXGI_SWAP_CHAIN_DESC1 *pDesc); 257 258 HRESULT GetFullscreenDesc( 259 [out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pDesc); 260 261 HRESULT GetHwnd( 262 [out] HWND *pHwnd); 263 264 HRESULT GetCoreWindow( 265 [in] REFIID refiid, 266 [out] void **ppUnk); 267 268 HRESULT Present1( 269 [in] UINT SyncInterval, 270 [in] UINT PresentFlags, 271 [in] const DXGI_PRESENT_PARAMETERS *pPresentParameters); 272 273 BOOL IsTemporaryMonoSupported(); 274 275 HRESULT GetRestrictToOutput( 276 [out] IDXGIOutput **ppRestrictToOutput); 277 278 HRESULT SetBackgroundColor( 279 [in] const DXGI_RGBA *pColor); 280 281 HRESULT GetBackgroundColor( 282 [out] DXGI_RGBA *pColor); 283 284 HRESULT SetRotation( 285 [in] DXGI_MODE_ROTATION Rotation); 286 287 HRESULT GetRotation( 288 [out] DXGI_MODE_ROTATION *pRotation); 289} 290 291[ 292 object, 293 uuid(50c83a1c-e072-4c48-87b0-3630fa36a6d0), 294 local, 295 pointer_default(unique) 296] 297interface IDXGIFactory2 : IDXGIFactory1 298{ 299 BOOL IsWindowedStereoEnabled(); 300 301 HRESULT CreateSwapChainForHwnd( 302 [in] IUnknown *pDevice, 303 [in] HWND hWnd, 304 [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc, 305 [in] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc, 306 [in] IDXGIOutput *pRestrictToOutput, 307 [out] IDXGISwapChain1 **ppSwapChain); 308 309 HRESULT CreateSwapChainForCoreWindow( 310 [in] IUnknown *pDevice, 311 [in] IUnknown *pWindow, 312 [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc, 313 [in] IDXGIOutput *pRestrictToOutput, 314 [out] IDXGISwapChain1 **ppSwapChain); 315 316 HRESULT GetSharedResourceAdapterLuid( 317 [in] HANDLE hResource, 318 [out] LUID *pLuid); 319 320 HRESULT RegisterOcclusionStatusWindow( 321 [in] HWND WindowHandle, 322 [in] UINT wMsg, 323 [out] DWORD *pdwCookie); 324 325 HRESULT RegisterStereoStatusEvent( 326 [in] HANDLE hEvent, 327 [out] DWORD *pdwCookie); 328 329 void UnregisterStereoStatus( 330 [in] DWORD dwCookie); 331 332 HRESULT RegisterStereoStatusWindow( 333 [in] HWND WindowHandle, 334 [in] UINT wMsg, 335 [out] DWORD *pdwCookie); 336 337 HRESULT RegisterOcclusionStatusEvent( 338 [in] HANDLE hEvent, 339 [out] DWORD *pdwCookie); 340 341 void UnregisterOcclusionStatus( 342 [in] DWORD dwCookie); 343 344 HRESULT CreateSwapChainForComposition( 345 [in] IUnknown *pDevice, 346 [in] const DXGI_SWAP_CHAIN_DESC1 *pDesc, 347 [in] IDXGIOutput *pRestrictToOutput, 348 [out] IDXGISwapChain1 **ppSwapChain); 349} 350 351typedef enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY { 352 DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY, 353 DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY, 354 DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY, 355 DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY, 356 DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY 357} DXGI_GRAPHICS_PREEMPTION_GRANULARITY; 358 359typedef enum DXGI_COMPUTE_PREEMPTION_GRANULARITY { 360 DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY, 361 DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY, 362 DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY, 363 DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY, 364 DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY 365} DXGI_COMPUTE_PREEMPTION_GRANULARITY; 366 367typedef struct DXGI_ADAPTER_DESC2 { 368 WCHAR Description[128]; 369 UINT VendorId; 370 UINT DeviceId; 371 UINT SubSysId; 372 UINT Revision; 373 SIZE_T DedicatedVideoMemory; 374 SIZE_T DedicatedSystemMemory; 375 SIZE_T SharedSystemMemory; 376 LUID AdapterLuid; 377 UINT Flags; 378 DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity; 379 DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity; 380} DXGI_ADAPTER_DESC2; 381 382[ 383 object, 384 uuid(0aa1ae0a-fa0e-4b84-8644-e05ff8e5acb5), 385 local, 386 pointer_default(unique) 387] 388interface IDXGIAdapter2 : IDXGIAdapter1 389{ 390 HRESULT GetDesc2([out] DXGI_ADAPTER_DESC2 *pDesc); 391} 392 393[ 394 object, 395 uuid(00cddea8-939b-4b83-a340-a685226666cc), 396 local, 397 pointer_default(unique) 398] 399interface IDXGIOutput1 : IDXGIOutput 400{ 401 HRESULT GetDisplayModeList1( 402 [in] DXGI_FORMAT enum_format, 403 [in] UINT flags, 404 [in, out] UINT *num_modes, 405 [out] DXGI_MODE_DESC1 *desc 406 ); 407 408 HRESULT FindClosestMatchingMode1( 409 [in] const DXGI_MODE_DESC1 *mode_to_match, 410 [out] DXGI_MODE_DESC1 *closest_match, 411 [in] IUnknown *concerned_device 412 ); 413 414 HRESULT GetDisplaySurfaceData1( 415 [in] IDXGIResource *destination 416 ); 417 418 HRESULT DuplicateOutput( 419 [in] IUnknown *device, 420 [out] IDXGIOutputDuplication **output_duplication 421 ); 422} 423