blob: 42082747c2b18571493ab50a3dfcfe521ab9d516 [file] [log] [blame]
// Copyright © 2015; Dmitry Roschin
// Licensed under the MIT License <LICENSE.md>
//! Mappings for the contents of dxgi1_2.h
ENUM!{ enum DXGI_ALPHA_MODE {
DXGI_ALPHA_MODE_UNSPECIFIED = 0,
DXGI_ALPHA_MODE_PREMULTIPLIED = 1,
DXGI_ALPHA_MODE_STRAIGHT = 2,
DXGI_ALPHA_MODE_IGNORE = 3,
DXGI_ALPHA_MODE_FORCE_DWORD = 0xFFFFFFFF,
}}
ENUM!{ enum DXGI_COMPUTE_PREEMPTION_GRANULARITY {
DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY = 1,
DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY = 2,
DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY = 3,
DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
}}
ENUM!{ enum DXGI_GRAPHICS_PREEMPTION_GRANULARITY {
DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY = 0,
DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY = 1,
DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY = 2,
DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY = 3,
DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY = 4,
}}
ENUM!{ enum DXGI_OUTDUPL_POINTER_SHAPE_TYPE {
DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME = 1,
DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR = 2,
DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR = 4,
}}
ENUM!{ enum DXGI_SCALING {
DXGI_SCALING_STRETCH = 0,
DXGI_SCALING_NONE = 1,
DXGI_SCALING_ASPECT_RATIO_STRETCH = 2,
}}
ENUM!{ enum _DXGI_OFFER_RESOURCE_PRIORITY {
DXGI_OFFER_RESOURCE_PRIORITY_LOW = 1,
DXGI_OFFER_RESOURCE_PRIORITY_NORMAL = 2,
DXGI_OFFER_RESOURCE_PRIORITY_HIGH = 3,
}}
STRUCT!{nodebug struct DXGI_ADAPTER_DESC2 {
Description: [::WCHAR; 128],
VendorId: ::UINT,
DeviceId: ::UINT,
SubSysId: ::UINT,
Revision: ::UINT,
DedicatedVideoMemory: ::SIZE_T,
DedicatedSystemMemory: ::SIZE_T,
SharedSystemMemory: ::SIZE_T,
AdapterLuid: ::LUID,
Flags: ::UINT,
GraphicsPreemptionGranularity: ::DXGI_GRAPHICS_PREEMPTION_GRANULARITY,
ComputePreemptionGranularity: ::DXGI_COMPUTE_PREEMPTION_GRANULARITY,
}}
STRUCT!{struct DXGI_MODE_DESC1 {
Width: ::UINT,
Height: ::UINT,
RefreshRate: ::DXGI_RATIONAL,
Format: ::DXGI_FORMAT,
ScanlineOrdering: ::DXGI_MODE_SCANLINE_ORDER,
Scaling: ::DXGI_MODE_SCALING,
Stereo: ::BOOL,
}}
STRUCT!{struct DXGI_OUTDUPL_DESC {
ModeDesc: ::DXGI_MODE_DESC,
Rotation: ::DXGI_MODE_ROTATION,
DesktopImageInSystemMemory: ::BOOL,
}}
STRUCT!{struct DXGI_OUTDUPL_FRAME_INFO {
LastPresentTime: ::LARGE_INTEGER,
LastMouseUpdateTime: ::LARGE_INTEGER,
AccumulatedFrames: ::UINT,
RectsCoalesced: ::BOOL,
ProtectedContentMaskedOut: ::BOOL,
PointerPosition: ::DXGI_OUTDUPL_POINTER_POSITION,
TotalMetadataBufferSize: ::UINT,
PointerShapeBufferSize: ::UINT,
}}
STRUCT!{struct DXGI_OUTDUPL_MOVE_RECT {
SourcePoint: ::POINT,
DestinationRect: ::RECT,
}}
STRUCT!{struct DXGI_OUTDUPL_POINTER_POSITION {
Position: ::POINT,
Visible: ::BOOL,
}}
STRUCT!{struct DXGI_OUTDUPL_POINTER_SHAPE_INFO {
Type: ::UINT,
Width: ::UINT,
Height: ::UINT,
Pitch: ::UINT,
HotSpot: ::POINT,
}}
STRUCT!{struct DXGI_PRESENT_PARAMETERS {
DirtyRectsCount: ::UINT,
pDirtyRects: *mut ::RECT,
pScrollRect: *mut ::RECT,
pScrollOffset: *mut ::POINT,
}}
STRUCT!{struct DXGI_SWAP_CHAIN_DESC1 {
Width: ::UINT,
Height: ::UINT,
Format: ::DXGI_FORMAT,
Stereo: ::BOOL,
SampleDesc: ::DXGI_SAMPLE_DESC,
BufferUsage: ::DXGI_USAGE,
BufferCount: ::UINT,
Scaling: ::DXGI_SCALING,
SwapEffect: ::DXGI_SWAP_EFFECT,
AlphaMode: ::DXGI_ALPHA_MODE,
Flags: ::UINT,
}}
STRUCT!{struct DXGI_SWAP_CHAIN_FULLSCREEN_DESC {
RefreshRate: ::DXGI_RATIONAL,
ScanlineOrdering: ::DXGI_MODE_SCANLINE_ORDER,
Scaling: ::DXGI_MODE_SCALING,
Windowed: ::BOOL,
}}
RIDL!(
interface IDXGIAdapter2(IDXGIAdapter2Vtbl): IDXGIAdapter1(IDXGIAdapter1Vtbl) {
fn GetDesc2(&mut self, pDesc: *mut ::DXGI_ADAPTER_DESC2) -> ::HRESULT
});
RIDL!(
interface IDXGIDevice2(IDXGIDevice2Vtbl): IDXGIDevice1(IDXGIDevice1Vtbl) {
fn OfferResources(
&mut self, NumResources: ::UINT, ppResources: *mut *mut ::IDXGIResource,
Priority: ::DXGI_OFFER_RESOURCE_PRIORITY
) -> ::HRESULT,
fn ReclaimResources(
&mut self, NumResources: ::UINT, ppResources: *mut *mut ::IDXGIResource,
pDiscarded: *mut ::BOOL
) -> ::HRESULT,
fn EnqueueSetEvent(&mut self, hEvent: ::HANDLE) -> ::HRESULT
});
RIDL!(
interface IDXGIDisplayControl(IDXGIDisplayControlVtbl): IUnknown(IUnknownVtbl) {
fn IsStereoEnabled(&mut self) -> ::BOOL,
fn SetStereoEnabled(&mut self, enabled: ::BOOL) -> ()
});
RIDL!(
interface IDXGIFactory2(IDXGIFactory2Vtbl): IDXGIFactory1(IDXGIFactory1Vtbl) {
fn IsWindowedStereoEnabled(&mut self) -> ::BOOL,
fn CreateSwapChainForHwnd(
&mut self, pDevice: *mut ::IUnknown, hWnd: ::HWND, pDesc: *const ::DXGI_SWAP_CHAIN_DESC1,
pFullscreenDesc: *const ::DXGI_SWAP_CHAIN_FULLSCREEN_DESC,
pRestrictToOutput: *mut ::IDXGIOutput, ppSwapChain: *mut *mut ::IDXGISwapChain1
) -> ::HRESULT,
fn CreateSwapChainForCoreWindow(
&mut self, pDevice: *mut ::IUnknown, pWindow: *mut ::IUnknown,
pDesc: *const ::DXGI_SWAP_CHAIN_DESC1, pRestrictToOutput: *mut ::IDXGIOutput,
ppSwapChain: *mut *mut ::IDXGISwapChain1
) -> ::HRESULT,
fn GetSharedResourceAdapterLuid(
&mut self, hResource: ::HANDLE, pLuid: *mut ::LUID
) -> ::HRESULT,
fn RegisterStereoStatusWindow(
&mut self, WindowHandle: ::HWND, wMsg: ::UINT, pdwCookie: *mut ::DWORD
) -> ::HRESULT,
fn RegisterStereoStatusEvent(
&mut self, hEvent: ::HANDLE, pdwCookie: *mut ::DWORD
) -> ::HRESULT,
fn UnregisterStereoStatus(&mut self, dwCookie: ::DWORD) -> (),
fn RegisterOcclusionStatusWindow(
&mut self, WindowHandle: ::HWND, wMsg: ::UINT, pdwCookie: *mut ::DWORD
) -> ::HRESULT,
fn RegisterOcclusionStatusEvent(
&mut self, hEvent: ::HANDLE, pdwCookie: *mut ::DWORD
) -> ::HRESULT,
fn UnregisterOcclusionStatus(&mut self, dwCookie: ::DWORD) -> (),
fn CreateSwapChainForComposition(
&mut self, pDevice: *mut ::IUnknown, pDesc: *const ::DXGI_SWAP_CHAIN_DESC1,
pRestrictToOutput: *mut ::IDXGIOutput, ppSwapChain: *mut *mut ::IDXGISwapChain1
) -> ::HRESULT
});
RIDL!(
interface IDXGIOutput1(IDXGIOutput1Vtbl): IDXGIOutput(IDXGIOutputVtbl) {
fn GetDisplayModeList1(
&mut self, EnumFormat: ::DXGI_FORMAT, Flags: ::UINT, pNumModes: *mut ::UINT,
pDesc: *mut ::DXGI_MODE_DESC1
) -> ::HRESULT,
fn FindClosestMatchingMode1(
&mut self, pModeToMatch: *const ::DXGI_MODE_DESC1, pClosestMatch: *mut ::DXGI_MODE_DESC1,
pConcernedDevice: *mut ::IUnknown
) -> ::HRESULT,
fn GetDisplaySurfaceData1(
&mut self, pDestination: *mut ::IDXGIResource
) -> ::HRESULT,
fn DuplicateOutput(
&mut self, pDevice: *mut ::IUnknown,
ppOutputDuplication: *mut *mut ::IDXGIOutputDuplication
) -> ::HRESULT
});
RIDL!(
interface IDXGIOutputDuplication(IDXGIOutputDuplicationVtbl): IDXGIObject(IDXGIObjectVtbl) {
fn GetDesc(&mut self, pDesc: *mut ::DXGI_OUTDUPL_DESC) -> (),
fn AcquireNextFrame(
&mut self, TimeoutInMilliseconds: ::UINT, pFrameInfo: *mut ::DXGI_OUTDUPL_FRAME_INFO,
ppDesktopResource: *mut *mut ::IDXGIResource
) -> ::HRESULT,
fn GetFrameDirtyRects(
&mut self, DirtyRectsBufferSize: ::UINT, pDirtyRectsBuffer: *mut ::RECT,
pDirtyRectsBufferSizeRequired: *mut ::UINT
) -> ::HRESULT,
fn GetFrameMoveRects(
&mut self, MoveRectsBufferSize: ::UINT, pMoveRectBuffer: *mut ::DXGI_OUTDUPL_MOVE_RECT,
pMoveRectsBufferSizeRequired: *mut ::UINT
) -> ::HRESULT,
fn GetFramePointerShape(
&mut self, PointerShapeBufferSize: ::UINT, pPointerShapeBuffer: *mut ::c_void,
pPointerShapeBufferSizeRequired: *mut ::UINT,
pPointerShapeInfo: *mut ::DXGI_OUTDUPL_POINTER_SHAPE_INFO
) -> ::HRESULT,
fn MapDesktopSurface(
&mut self, pLockedRect: *mut ::DXGI_MAPPED_RECT
) -> ::HRESULT,
fn UnMapDesktopSurface(&mut self) -> ::HRESULT,
fn ReleaseFrame(&mut self) -> ::HRESULT
});
RIDL!(
interface IDXGIResource1(IDXGIResource1Vtbl): IDXGIResource(IDXGIResourceVtbl) {
fn CreateSubresourceSurface(
&mut self, index: ::UINT, ppSurface: *mut *mut ::IDXGISurface2
) -> ::HRESULT,
fn CreateSharedHandle(
&mut self, pAttributes: *const ::SECURITY_ATTRIBUTES, dwAccess: ::DWORD, lpName: ::LPCWSTR,
pHandle: *mut ::HANDLE
) -> ::HRESULT
});
RIDL!(
interface IDXGISurface2(IDXGISurface2Vtbl): IDXGISurface1(IDXGISurface1Vtbl) {
fn GetResource(
&mut self, riid: ::REFGUID, ppParentResource: *mut *mut ::c_void,
pSubresourceIndex: *mut ::UINT
) -> ::HRESULT
});
RIDL!(
interface IDXGISwapChain1(IDXGISwapChain1Vtbl): IDXGISwapChain(IDXGISwapChainVtbl) {
fn GetDesc1(&mut self, pDesc: *mut ::DXGI_SWAP_CHAIN_DESC1) -> ::HRESULT,
fn GetFullscreenDesc(
&mut self, pDesc: *mut ::DXGI_SWAP_CHAIN_FULLSCREEN_DESC
) -> ::HRESULT,
fn GetHwnd(&mut self, pHwnd: *mut ::HWND) -> ::HRESULT,
fn GetCoreWindow(
&mut self, refiid: ::REFGUID, ppUnk: *mut *mut ::c_void
) -> ::HRESULT,
fn Present1(
&mut self, SyncInterval: ::UINT, PresentFlags: ::UINT,
pPresentParameters: *const ::DXGI_PRESENT_PARAMETERS
) -> ::HRESULT,
fn IsTemporaryMonoSupported(&mut self) -> ::BOOL,
fn GetRestrictToOutput(
&mut self, ppRestrictToOutput: *mut *mut ::IDXGIOutput
) -> ::HRESULT,
fn SetBackgroundColor(&mut self, pColor: *const ::DXGI_RGBA) -> ::HRESULT,
fn GetBackgroundColor(&mut self, pColor: *mut ::DXGI_RGBA) -> ::HRESULT,
fn SetRotation(&mut self, Rotation: ::DXGI_MODE_ROTATION) -> ::HRESULT,
fn GetRotation(&mut self, pRotation: *mut ::DXGI_MODE_ROTATION) -> ::HRESULT
});
pub type DXGI_OFFER_RESOURCE_PRIORITY = ::_DXGI_OFFER_RESOURCE_PRIORITY;
pub const DXGI_ENUM_MODES_DISABLED_STEREO: ::UINT = 8;
pub const DXGI_ENUM_MODES_STEREO: ::UINT = 4;
pub const DXGI_SHARED_RESOURCE_READ: ::UINT = 0x80000000;
pub const DXGI_SHARED_RESOURCE_WRITE: ::UINT = 1;