// Copyright © 2015; Connor Hilarides // Licensed under the MIT License //! Mappings for the contents of dxgi.h STRUCT!{struct DXGI_FRAME_STATISTICS { PresentCount: ::UINT, PresentRefreshCount: ::UINT, SyncRefreshCount: ::UINT, SyncQPCTime: ::LARGE_INTEGER, SyncGPUTime: ::LARGE_INTEGER, }} STRUCT!{struct DXGI_MAPPED_RECT { Pitch: ::INT, pBits: *mut ::BYTE, }} STRUCT!{nodebug struct DXGI_ADAPTER_DESC { Description: [::WCHAR; 128], VectorId: ::UINT, DeviceId: ::UINT, SubSysId: ::UINT, Revision: ::UINT, DedicatedVideoMemory: ::SIZE_T, DedicatedSystemMemory: ::SIZE_T, SharedSystemMemory: ::SIZE_T, AdapterLuid: ::LUID, }} STRUCT!{nodebug struct DXGI_OUTPUT_DESC { DeviceName: [::WCHAR; 32], DesktopCoordinates: ::RECT, AttachedToDesktop: ::BOOL, Rotation: ::DXGI_MODE_ROTATION, Monitor: ::HMONITOR, }} STRUCT!{struct DXGI_SHARED_RESOURCE { Handle: ::HANDLE, }} pub const DXGI_RESOURCE_PRIORITY_MINIMUM: ::DWORD = 0x28000000; pub const DXGI_RESOURCE_PRIORITY_LOW: ::DWORD = 0x50000000; pub const DXGI_RESOURCE_PRIORITY_NORMAL: ::DWORD = 0x78000000; pub const DXGI_RESOURCE_PRIORITY_HIGH: ::DWORD = 0xa0000000; pub const DXGI_RESOURCE_PRIORITY_MAXIMUM: ::DWORD = 0xc8000000; ENUM!{enum DXGI_RESIDENCY { DXGI_RESIDENCY_FULLY_RESIDENT = 1, DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY = 2, DXGI_RESIDENCY_EVICTED_TO_DISK = 3, }} STRUCT!{struct DXGI_SURFACE_DESC { Width: ::UINT, Height: ::UINT, Format: ::DXGI_FORMAT, SampleDesc: ::DXGI_SAMPLE_DESC, }} ENUM!{enum DXGI_SWAP_EFFECT { DXGI_SWAP_EFFECT_DISCARD = 0, DXGI_SWAP_EFFECT_SEQUENTIAL = 1, DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL = 3, }} FLAGS!{enum DXGI_SWAP_CHAIN_FLAG { DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1, DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2, DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE = 4, DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT = 8, DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER = 16, DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY = 32, DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT = 64, DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER = 128, DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO = 256, DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO = 512, }} STRUCT!{struct DXGI_SWAP_CHAIN_DESC { BufferDesc: ::DXGI_MODE_DESC, SampleDesc: ::DXGI_SAMPLE_DESC, BufferUsage: ::DXGI_USAGE, BufferCount: ::UINT, OutputWindow: ::HWND, Windowed: ::BOOL, SwapEffect: DXGI_SWAP_EFFECT, Flags: ::UINT, }} RIDL!( interface IDXGIObject(IDXGIObjectVtbl): IUnknown(IUnknownVtbl) { fn SetPrivateData( &mut self, Name: ::REFGUID, DataSize: ::UINT, pData: *const ::c_void ) -> ::HRESULT, fn SetPrivateDataInterface(&mut self, Name: ::REFGUID, pUnknown: *const ::IUnknown) -> ::HRESULT, fn GetPrivateData( &mut self, Name: ::REFGUID, pDataSize: *mut ::UINT, pData: *mut ::c_void ) -> ::HRESULT, fn GetParent( &mut self, riid: ::REFIID, ppParent: *mut *mut ::c_void ) -> ::HRESULT }); RIDL!( interface IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl): IDXGIObject(IDXGIObjectVtbl) { fn GetDevice(&mut self, riid: ::REFIID, ppDevice: *mut *mut ::c_void) -> ::HRESULT }); RIDL!( interface IDXGIResource(IDXGIResourceVtbl): IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl) { fn GetSharedHandle(&mut self, pSharedHandle: *mut ::HANDLE) -> ::HRESULT, fn GetUsage(&mut self, pUsage: *mut ::DXGI_USAGE) -> ::HRESULT, fn SetEvictionPriority(&mut self, EvictionPriority: ::UINT) -> ::HRESULT, fn GetEvictionPriority(&mut self, pEvictionPriority: *mut ::UINT) -> ::HRESULT }); RIDL!( interface IDXGIKeyedMutex(IDXGIKeyedMutexVtbl): IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl) { fn AcquireSync(&mut self, Key: ::UINT64, dwMilliseconds: ::DWORD) -> ::HRESULT, fn ReleaseSync(&mut self, Key: ::UINT64) -> ::HRESULT }); RIDL!( interface IDXGISurface(IDXGISurfaceVtbl): IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl) { fn GetDesc(&mut self, pDesc: *mut DXGI_SURFACE_DESC) -> ::HRESULT, fn Map(&mut self, pLockedRect: *mut DXGI_MAPPED_RECT, MapFlags: ::UINT) -> ::HRESULT, fn Unmap(&mut self) -> ::HRESULT }); RIDL!( interface IDXGISurface1(IDXGISurface1Vtbl): IDXGISurface(IDXGISurfaceVtbl) { fn GetDC(&mut self, Discard: ::BOOL, phdc: *mut ::HDC) -> ::HRESULT, fn ReleaseDC(&mut self, pDirtyRect: *mut ::RECT) -> ::HRESULT }); RIDL!( interface IDXGIAdapter(IDXGIAdapterVtbl): IDXGIObject(IDXGIObjectVtbl) { fn EnumOutputs(&mut self, Output: ::UINT, ppOutput: *mut *mut IDXGIOutput) -> ::HRESULT, fn GetDesc(&mut self, pDesc: *mut DXGI_ADAPTER_DESC) -> ::HRESULT, fn CheckInterfaceSupport( &mut self, InterfaceName: ::REFGUID, pUMDVersion: *mut ::LARGE_INTEGER ) -> ::HRESULT }); RIDL!( interface IDXGIOutput(IDXGIOutputVtbl): IDXGIObject(IDXGIObjectVtbl) { fn GetDesc(&mut self, pDesc: *mut DXGI_OUTPUT_DESC) -> ::HRESULT, fn GetDisplayModeList( &mut self, EnumFormat: ::DXGI_FORMAT, Flags: ::UINT, pNumModes: *mut ::UINT, pDesc: *mut ::DXGI_MODE_DESC ) -> ::HRESULT, fn FindClosestMatchingMode( &mut self, pModeToMatch: *const ::DXGI_MODE_DESC, pClosestMatch: *mut ::DXGI_MODE_DESC, pConcernedDevice: *mut ::IUnknown ) -> ::HRESULT, fn WaitForVBlank(&mut self) -> ::HRESULT, fn TakeOwnership(&mut self, pDevice: *mut ::IUnknown, Exclusive: ::BOOL) -> ::HRESULT, fn ReleaseOwnership(&mut self) -> (), fn GetGammaControlCapabilities( &mut self, pGammaCaps: *mut ::DXGI_GAMMA_CONTROL_CAPABILITIES ) -> ::HRESULT, fn SetGammaControl(&mut self, pArray: *const ::DXGI_GAMMA_CONTROL) -> ::HRESULT, fn GetGammaControl(&mut self, pArray: *mut ::DXGI_GAMMA_CONTROL) -> ::HRESULT, fn SetDisplaySurface(&mut self, pScanoutSurface: *mut IDXGISurface) -> ::HRESULT, fn GetDisplaySurfaceData(&mut self, pDestination: *mut IDXGISurface) -> ::HRESULT, fn GetFrameStatistics(&mut self, pStats: *mut DXGI_FRAME_STATISTICS) -> ::HRESULT }); pub const DXGI_MAX_SWAP_CHAIN_BUFFERS: ::DWORD = 16; pub const DXGI_PRESENT_TEST: ::DWORD = 0x00000001; pub const DXGI_PRESENT_DO_NOT_SEQUENCE: ::DWORD = 0x00000002; pub const DXGI_PRESENT_RESTART: ::DWORD = 0x00000004; pub const DXGI_PRESENT_DO_NOT_WAIT: ::DWORD = 0x00000008; pub const DXGI_PRESENT_STEREO_PREFER_RIGHT: ::DWORD = 0x00000010; pub const DXGI_PRESENT_STEREO_TEMPORARY_MONO: ::DWORD = 0x00000020; pub const DXGI_PRESENT_RESTRICT_TO_OUTPUT: ::DWORD = 0x00000040; pub const DXGI_PRESENT_USE_DURATION: ::DWORD = 0x00000100; RIDL!( interface IDXGISwapChain(IDXGISwapChainVtbl): IDXGIDeviceSubObject(IDXGIDeviceSubObjectVtbl) { fn Present(&mut self, SyncInterval: ::UINT, Flags: ::UINT) -> ::HRESULT, fn GetBuffer( &mut self, Buffer: ::UINT, riid: ::REFIID, ppSurface: *mut *mut ::c_void ) -> ::HRESULT, fn SetFullscreenState(&mut self, Fullscreen: ::BOOL, pTarget: *mut IDXGIOutput) -> ::HRESULT, fn GetFullscreenState( &mut self, pFullscreen: *mut ::BOOL, ppTarget: *mut *mut IDXGIOutput ) -> ::HRESULT, fn GetDesc(&mut self, pDesc: *mut DXGI_SWAP_CHAIN_DESC) -> ::HRESULT, fn ResizeBuffers( &mut self, BufferCount: ::UINT, Width: ::UINT, Height: ::UINT, NewFormat: ::DXGI_FORMAT, SwapChainFlags: ::UINT ) -> ::HRESULT, fn ResizeTarget(&mut self, pNewTargetParameters: *const ::DXGI_MODE_DESC) -> ::HRESULT, fn GetContainingOutput(&mut self, ppOutput: *mut *mut IDXGIOutput) -> ::HRESULT, fn GetFrameStatistics(&mut self, pStats: *mut DXGI_FRAME_STATISTICS) -> ::HRESULT, fn GetLastPresentCount(&mut self, pLastPresentCount: *mut ::UINT) -> ::HRESULT }); RIDL!( interface IDXGIFactory(IDXGIFactoryVtbl): IDXGIObject(IDXGIObjectVtbl) { fn EnumAdapters(&mut self, Adapter: ::UINT, ppAdapter: *mut *mut IDXGIAdapter) -> ::HRESULT, fn MakeWindowAssociation(&mut self, WindowHandle: ::HWND, Flags: ::UINT) -> ::HRESULT, fn GetWindowAssociation(&mut self, pWindowHandle: *mut ::HWND) -> ::HRESULT, fn CreateSwapChain( &mut self, pDevice: *mut ::IUnknown, pDesc: *mut DXGI_SWAP_CHAIN_DESC, ppSwapChain: *mut *mut IDXGISwapChain ) -> ::HRESULT, fn CreateSoftwareAdapter( &mut self, Module: ::HMODULE, ppAdapter: *mut *mut IDXGIAdapter ) -> ::HRESULT }); RIDL!( interface IDXGIDevice(IDXGIDeviceVtbl): IDXGIObject(IDXGIObjectVtbl) { fn GetAdapter(&mut self, pAdapter: *mut *mut IDXGIAdapter) -> ::HRESULT, fn CreateSurface( &mut self, pDesc: *const DXGI_SURFACE_DESC, NumSurfaces: ::UINT, Usage: ::DXGI_USAGE, pSharedResource: *const DXGI_SHARED_RESOURCE, ppSurface: *mut *mut IDXGISurface ) -> ::HRESULT, fn QueryResourceResidency( &mut self, ppResources: *const *mut ::IUnknown, pResidencyStatus: *mut DXGI_RESIDENCY, NumResources: ::UINT ) -> ::HRESULT, fn SetGPUThreadPriority(&mut self, Priority: ::INT) -> ::HRESULT, fn GetGPUThreadPriority(&mut self, pPriority: *mut ::INT) -> ::HRESULT }); ENUM!{enum DXGI_ADAPTER_FLAG { DXGI_ADAPTER_FLAG_NONE, DXGI_ADAPTER_FLAG_REMOTE, DXGI_ADAPTER_FLAG_SOFTWARE, }} STRUCT!{nodebug struct DXGI_ADAPTER_DESC1 { Description: [::WCHAR; 128], VendorId: ::UINT, DeviceId: ::UINT, SubSysId: ::UINT, Revision: ::UINT, DedicatedVideoMemory: ::SIZE_T, DedicatedSystemMemory: ::SIZE_T, SharedSystemMemory: ::SIZE_T, AdapterLuid: ::LUID, Flags: ::UINT, }} STRUCT!{struct DXGI_DISPLAY_COLOR_SPACE { PrimaryCoordinates: [[::FLOAT; 2]; 8], WhitePoints: [[::FLOAT; 2]; 16], }} RIDL!( interface IDXGIFactory1(IDXGIFactory1Vtbl): IDXGIFactory(IDXGIFactoryVtbl) { fn EnumAdapters1(&mut self, Adapter: ::UINT, ppAdapter: *mut *mut IDXGIAdapter1) -> ::HRESULT, fn IsCurrent(&mut self) -> ::BOOL }); RIDL!( interface IDXGIAdapter1(IDXGIAdapter1Vtbl): IDXGIAdapter(IDXGIAdapterVtbl) { fn GetDesc1(&mut self, pDesc: *mut DXGI_ADAPTER_DESC1) -> ::HRESULT }); RIDL!( interface IDXGIDevice1(IDXGIDevice1Vtbl): IDXGIDevice(IDXGIDeviceVtbl) { fn SetMaximumFrameLatency(&mut self, MaxLatency: ::UINT) -> ::HRESULT, fn GetMaximumFrameLatency(&mut self, pMaxLatency: *mut ::UINT) -> ::HRESULT });