1 // Copyright © 2015; Dmitry Roschin 2 // Licensed under the MIT License <LICENSE.md> 3 //! Mappings for the contents of dxgi1_2.h 4 5 ENUM!{ enum DXGI_ALPHA_MODE { 6 DXGI_ALPHA_MODE_UNSPECIFIED = 0, 7 DXGI_ALPHA_MODE_PREMULTIPLIED = 1, 8 DXGI_ALPHA_MODE_STRAIGHT = 2, 9 DXGI_ALPHA_MODE_IGNORE = 3, 10 DXGI_ALPHA_MODE_FORCE_DWORD = 0xFFFFFFFF, 11 }} 12 13 ENUM!{ enum DXGI_COMPUTE_PREEMPTION_GRANULARITY { 14 DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY = 0, 15 DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY = 1, 16 DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY = 2, 17 DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY = 3, 18 DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY = 4, 19 }} 20 21 ENUM!{ enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY { 22 DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY = 0, 23 DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY = 1, 24 DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY = 2, 25 DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY = 3, 26 DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY = 4, 27 }} 28 29 ENUM!{ enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE { 30 DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 1, 31 DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 2, 32 DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 4, 33 }} 34 35 ENUM!{ enum DXGI_SCALING { 36 DXGI_SCALING_STRETCH = 0, 37 DXGI_SCALING_NONE = 1, 38 DXGI_SCALING_ASPECT_RATIO_STRETCH = 2, 39 }} 40 41 ENUM!{ enum _DXGI_OFFER_RESOURCE_PRIORITY { 42 DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1, 43 DXGI_OFFER_RESOURCE_PRIORITY_NORMAL = 2, 44 DXGI_OFFER_RESOURCE_PRIORITY_HIGH = 3, 45 }} 46 47 STRUCT!{nodebug struct DXGI_ADAPTER_DESC2 { 48 Description: [::WCHAR; 128], 49 VendorId: ::UINT, 50 DeviceId: ::UINT, 51 SubSysId: ::UINT, 52 Revision: ::UINT, 53 DedicatedVideoMemory: ::SIZE_T, 54 DedicatedSystemMemory: ::SIZE_T, 55 SharedSystemMemory: ::SIZE_T, 56 AdapterLuid: ::LUID, 57 Flags: ::UINT, 58 GraphicsPreemptionGranularity: ::DXGI_GRAPHICS_PREEMPTION_GRANULARITY, 59 ComputePreemptionGranularity: ::DXGI_COMPUTE_PREEMPTION_GRANULARITY, 60 }} 61 62 STRUCT!{struct DXGI_MODE_DESC1 { 63 Width: ::UINT, 64 Height: ::UINT, 65 RefreshRate: ::DXGI_RATIONAL, 66 Format: ::DXGI_FORMAT, 67 ScanlineOrdering: ::DXGI_MODE_SCANLINE_ORDER, 68 Scaling: ::DXGI_MODE_SCALING, 69 Stereo: ::BOOL, 70 }} 71 72 STRUCT!{struct DXGI_OUTDUPL_DESC { 73 ModeDesc: ::DXGI_MODE_DESC, 74 Rotation: ::DXGI_MODE_ROTATION, 75 DesktopImageInSystemMemory: ::BOOL, 76 }} 77 78 STRUCT!{struct DXGI_OUTDUPL_FRAME_INFO { 79 LastPresentTime: ::LARGE_INTEGER, 80 LastMouseUpdateTime: ::LARGE_INTEGER, 81 AccumulatedFrames: ::UINT, 82 RectsCoalesced: ::BOOL, 83 ProtectedContentMaskedOut: ::BOOL, 84 PointerPosition: ::DXGI_OUTDUPL_POINTER_POSITION, 85 TotalMetadataBufferSize: ::UINT, 86 PointerShapeBufferSize: ::UINT, 87 }} 88 89 STRUCT!{struct DXGI_OUTDUPL_MOVE_RECT { 90 SourcePoint: ::POINT, 91 DestinationRect: ::RECT, 92 }} 93 94 STRUCT!{struct DXGI_OUTDUPL_POINTER_POSITION { 95 Position: ::POINT, 96 Visible: ::BOOL, 97 }} 98 99 STRUCT!{struct DXGI_OUTDUPL_POINTER_SHAPE_INFO { 100 Type: ::UINT, 101 Width: ::UINT, 102 Height: ::UINT, 103 Pitch: ::UINT, 104 HotSpot: ::POINT, 105 }} 106 107 STRUCT!{struct DXGI_PRESENT_PARAMETERS { 108 DirtyRectsCount: ::UINT, 109 pDirtyRects: *mut ::RECT, 110 pScrollRect: *mut ::RECT, 111 pScrollOffset: *mut ::POINT, 112 }} 113 114 STRUCT!{struct DXGI_SWAP_CHAIN_DESC1 { 115 Width: ::UINT, 116 Height: ::UINT, 117 Format: ::DXGI_FORMAT, 118 Stereo: ::BOOL, 119 SampleDesc: ::DXGI_SAMPLE_DESC, 120 BufferUsage: ::DXGI_USAGE, 121 BufferCount: ::UINT, 122 Scaling: ::DXGI_SCALING, 123 SwapEffect: ::DXGI_SWAP_EFFECT, 124 AlphaMode: ::DXGI_ALPHA_MODE, 125 Flags: ::UINT, 126 }} 127 128 STRUCT!{struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC { 129 RefreshRate: ::DXGI_RATIONAL, 130 ScanlineOrdering: ::DXGI_MODE_SCANLINE_ORDER, 131 Scaling: ::DXGI_MODE_SCALING, 132 Windowed: ::BOOL, 133 }} 134 135 RIDL!( 136 interface IDXGIAdapter2(IDXGIAdapter2Vtbl): IDXGIAdapter1(IDXGIAdapter1Vtbl) { 137 fn GetDesc2(&mut self, pDesc: *mut ::DXGI_ADAPTER_DESC2) -> ::HRESULT 138 }); 139 140 RIDL!( 141 interface IDXGIDevice2(IDXGIDevice2Vtbl): IDXGIDevice1(IDXGIDevice1Vtbl) { 142 fn OfferResources( 143 &mut self, NumResources: ::UINT, ppResources: *mut *mut ::IDXGIResource, 144 Priority: ::DXGI_OFFER_RESOURCE_PRIORITY 145 ) -> ::HRESULT, 146 fn ReclaimResources( 147 &mut self, NumResources: ::UINT, ppResources: *mut *mut ::IDXGIResource, 148 pDiscarded: *mut ::BOOL 149 ) -> ::HRESULT, 150 fn EnqueueSetEvent(&mut self, hEvent: ::HANDLE) -> ::HRESULT 151 }); 152 153 RIDL!( 154 interface IDXGIDisplayControl(IDXGIDisplayControlVtbl): IUnknown(IUnknownVtbl) { 155 fn IsStereoEnabled(&mut self) -> ::BOOL, 156 fn SetStereoEnabled(&mut self, enabled: ::BOOL) -> () 157 }); 158 159 RIDL!( 160 interface IDXGIFactory2(IDXGIFactory2Vtbl): IDXGIFactory1(IDXGIFactory1Vtbl) { 161 fn IsWindowedStereoEnabled(&mut self) -> ::BOOL, 162 fn CreateSwapChainForHwnd( 163 &mut self, pDevice: *mut ::IUnknown, hWnd: ::HWND, pDesc: *const ::DXGI_SWAP_CHAIN_DESC1, 164 pFullscreenDesc: *const ::DXGI_SWAP_CHAIN_FULLSCREEN_DESC, 165 pRestrictToOutput: *mut ::IDXGIOutput, ppSwapChain: *mut *mut ::IDXGISwapChain1 166 ) -> ::HRESULT, 167 fn CreateSwapChainForCoreWindow( 168 &mut self, pDevice: *mut ::IUnknown, pWindow: *mut ::IUnknown, 169 pDesc: *const ::DXGI_SWAP_CHAIN_DESC1, pRestrictToOutput: *mut ::IDXGIOutput, 170 ppSwapChain: *mut *mut ::IDXGISwapChain1 171 ) -> ::HRESULT, 172 fn GetSharedResourceAdapterLuid( 173 &mut self, hResource: ::HANDLE, pLuid: *mut ::LUID 174 ) -> ::HRESULT, 175 fn RegisterStereoStatusWindow( 176 &mut self, WindowHandle: ::HWND, wMsg: ::UINT, pdwCookie: *mut ::DWORD 177 ) -> ::HRESULT, 178 fn RegisterStereoStatusEvent( 179 &mut self, hEvent: ::HANDLE, pdwCookie: *mut ::DWORD 180 ) -> ::HRESULT, 181 fn UnregisterStereoStatus(&mut self, dwCookie: ::DWORD) -> (), 182 fn RegisterOcclusionStatusWindow( 183 &mut self, WindowHandle: ::HWND, wMsg: ::UINT, pdwCookie: *mut ::DWORD 184 ) -> ::HRESULT, 185 fn RegisterOcclusionStatusEvent( 186 &mut self, hEvent: ::HANDLE, pdwCookie: *mut ::DWORD 187 ) -> ::HRESULT, 188 fn UnregisterOcclusionStatus(&mut self, dwCookie: ::DWORD) -> (), 189 fn CreateSwapChainForComposition( 190 &mut self, pDevice: *mut ::IUnknown, pDesc: *const ::DXGI_SWAP_CHAIN_DESC1, 191 pRestrictToOutput: *mut ::IDXGIOutput, ppSwapChain: *mut *mut ::IDXGISwapChain1 192 ) -> ::HRESULT 193 }); 194 195 RIDL!( 196 interface IDXGIOutput1(IDXGIOutput1Vtbl): IDXGIOutput(IDXGIOutputVtbl) { 197 fn GetDisplayModeList1( 198 &mut self, EnumFormat: ::DXGI_FORMAT, Flags: ::UINT, pNumModes: *mut ::UINT, 199 pDesc: *mut ::DXGI_MODE_DESC1 200 ) -> ::HRESULT, 201 fn FindClosestMatchingMode1( 202 &mut self, pModeToMatch: *const ::DXGI_MODE_DESC1, pClosestMatch: *mut ::DXGI_MODE_DESC1, 203 pConcernedDevice: *mut ::IUnknown 204 ) -> ::HRESULT, 205 fn GetDisplaySurfaceData1( 206 &mut self, pDestination: *mut ::IDXGIResource 207 ) -> ::HRESULT, 208 fn DuplicateOutput( 209 &mut self, pDevice: *mut ::IUnknown, 210 ppOutputDuplication: *mut *mut ::IDXGIOutputDuplication 211 ) -> ::HRESULT 212 }); 213 214 RIDL!( 215 interface IDXGIOutputDuplication(IDXGIOutputDuplicationVtbl): IDXGIObject(IDXGIObjectVtbl) { 216 fn GetDesc(&mut self, pDesc: *mut ::DXGI_OUTDUPL_DESC) -> (), 217 fn AcquireNextFrame( 218 &mut self, TimeoutInMilliseconds: ::UINT, pFrameInfo: *mut ::DXGI_OUTDUPL_FRAME_INFO, 219 ppDesktopResource: *mut *mut ::IDXGIResource 220 ) -> ::HRESULT, 221 fn GetFrameDirtyRects( 222 &mut self, DirtyRectsBufferSize: ::UINT, pDirtyRectsBuffer: *mut ::RECT, 223 pDirtyRectsBufferSizeRequired: *mut ::UINT 224 ) -> ::HRESULT, 225 fn GetFrameMoveRects( 226 &mut self, MoveRectsBufferSize: ::UINT, pMoveRectBuffer: *mut ::DXGI_OUTDUPL_MOVE_RECT, 227 pMoveRectsBufferSizeRequired: *mut ::UINT 228 ) -> ::HRESULT, 229 fn GetFramePointerShape( 230 &mut self, PointerShapeBufferSize: ::UINT, pPointerShapeBuffer: *mut ::c_void, 231 pPointerShapeBufferSizeRequired: *mut ::UINT, 232 pPointerShapeInfo: *mut ::DXGI_OUTDUPL_POINTER_SHAPE_INFO 233 ) -> ::HRESULT, 234 fn MapDesktopSurface( 235 &mut self, pLockedRect: *mut ::DXGI_MAPPED_RECT 236 ) -> ::HRESULT, 237 fn UnMapDesktopSurface(&mut self) -> ::HRESULT, 238 fn ReleaseFrame(&mut self) -> ::HRESULT 239 }); 240 241 RIDL!( 242 interface IDXGIResource1(IDXGIResource1Vtbl): IDXGIResource(IDXGIResourceVtbl) { 243 fn CreateSubresourceSurface( 244 &mut self, index: ::UINT, ppSurface: *mut *mut ::IDXGISurface2 245 ) -> ::HRESULT, 246 fn CreateSharedHandle( 247 &mut self, pAttributes: *const ::SECURITY_ATTRIBUTES, dwAccess: ::DWORD, lpName: ::LPCWSTR, 248 pHandle: *mut ::HANDLE 249 ) -> ::HRESULT 250 }); 251 252 RIDL!( 253 interface IDXGISurface2(IDXGISurface2Vtbl): IDXGISurface1(IDXGISurface1Vtbl) { 254 fn GetResource( 255 &mut self, riid: ::REFGUID, ppParentResource: *mut *mut ::c_void, 256 pSubresourceIndex: *mut ::UINT 257 ) -> ::HRESULT 258 }); 259 260 RIDL!( 261 interface IDXGISwapChain1(IDXGISwapChain1Vtbl): IDXGISwapChain(IDXGISwapChainVtbl) { 262 fn GetDesc1(&mut self, pDesc: *mut ::DXGI_SWAP_CHAIN_DESC1) -> ::HRESULT, 263 fn GetFullscreenDesc( 264 &mut self, pDesc: *mut ::DXGI_SWAP_CHAIN_FULLSCREEN_DESC 265 ) -> ::HRESULT, 266 fn GetHwnd(&mut self, pHwnd: *mut ::HWND) -> ::HRESULT, 267 fn GetCoreWindow( 268 &mut self, refiid: ::REFGUID, ppUnk: *mut *mut ::c_void 269 ) -> ::HRESULT, 270 fn Present1( 271 &mut self, SyncInterval: ::UINT, PresentFlags: ::UINT, 272 pPresentParameters: *const ::DXGI_PRESENT_PARAMETERS 273 ) -> ::HRESULT, 274 fn IsTemporaryMonoSupported(&mut self) -> ::BOOL, 275 fn GetRestrictToOutput( 276 &mut self, ppRestrictToOutput: *mut *mut ::IDXGIOutput 277 ) -> ::HRESULT, 278 fn SetBackgroundColor(&mut self, pColor: *const ::DXGI_RGBA) -> ::HRESULT, 279 fn GetBackgroundColor(&mut self, pColor: *mut ::DXGI_RGBA) -> ::HRESULT, 280 fn SetRotation(&mut self, Rotation: ::DXGI_MODE_ROTATION) -> ::HRESULT, 281 fn GetRotation(&mut self, pRotation: *mut ::DXGI_MODE_ROTATION) -> ::HRESULT 282 }); 283 284 pub type DXGI_OFFER_RESOURCE_PRIORITY = ::_DXGI_OFFER_RESOURCE_PRIORITY; 285 pub const DXGI_ENUM_MODES_DISABLED_STEREO: ::UINT = 8; 286 pub const DXGI_ENUM_MODES_STEREO: ::UINT = 4; 287 pub const DXGI_SHARED_RESOURCE_READ: ::UINT = 0x80000000; 288 pub const DXGI_SHARED_RESOURCE_WRITE: ::UINT = 1; 289