// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. use ctypes::c_void; use shared::basetsd::{UINT64, UINT8}; use shared::dxgiformat::DXGI_FORMAT; use shared::dxgitype::{DXGI_COLOR_SPACE_TYPE, DXGI_RATIONAL}; use shared::guiddef::{GUID, REFIID}; use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, INT, UINT}; use um::d3d11::{ D3D11_BLEND, D3D11_BLEND_OP, D3D11_BOX, D3D11_CULL_MODE, D3D11_FILL_MODE, D3D11_RECT, D3D11_VIDEO_DECODER_BUFFER_TYPE, D3D11_VIDEO_DECODER_CONFIG, D3D11_VIDEO_DECODER_DESC, ID3D11BlendState, ID3D11BlendStateVtbl, ID3D11Buffer, ID3D11CryptoSession, ID3D11Device, ID3D11DeviceChild, ID3D11DeviceChildVtbl, ID3D11DeviceContext, ID3D11DeviceContextVtbl, ID3D11DeviceVtbl, ID3D11RasterizerState, ID3D11RasterizerStateVtbl, ID3D11Resource, ID3D11VideoContext, ID3D11VideoContextVtbl, ID3D11VideoDecoder, ID3D11VideoDevice, ID3D11VideoDeviceVtbl, ID3D11VideoProcessor, ID3D11VideoProcessorEnumerator, ID3D11VideoProcessorEnumeratorVtbl, ID3D11View }; use um::d3dcommon::D3D_FEATURE_LEVEL; use um::unknwnbase::{IUnknown, IUnknownVtbl}; use um::winnt::{HANDLE, HRESULT, LPCWSTR}; DEFINE_GUID!{IID_ID3D11BlendState1, 0xcc86fabe, 0xda55, 0x401d, 0x85, 0xe7, 0xe3, 0xc9, 0xde, 0x28, 0x77, 0xe9} DEFINE_GUID!{IID_ID3D11RasterizerState1, 0x1217d7a6, 0x5039, 0x418c, 0xb0, 0x42, 0x9c, 0xbe, 0x25, 0x6a, 0xfd, 0x6e} DEFINE_GUID!{IID_ID3DDeviceContextState, 0x5c1e0d8a, 0x7c23, 0x48f9, 0x8c, 0x59, 0xa9, 0x29, 0x58, 0xce, 0xff, 0x11} DEFINE_GUID!{IID_ID3D11DeviceContext1, 0xbb2c6faa, 0xb5fb, 0x4082, 0x8e, 0x6b, 0x38, 0x8b, 0x8c, 0xfa, 0x90, 0xe1} DEFINE_GUID!{IID_ID3D11VideoContext1, 0xa7f026da, 0xa5f8, 0x4487, 0xa5, 0x64, 0x15, 0xe3, 0x43, 0x57, 0x65, 0x1e} DEFINE_GUID!{IID_ID3D11VideoDevice1, 0x29da1d51, 0x1321, 0x4454, 0x80, 0x4b, 0xf5, 0xfc, 0x9f, 0x86, 0x1f, 0x0f} DEFINE_GUID!{IID_ID3D11VideoProcessorEnumerator1, 0x465217f2, 0x5568, 0x43cf, 0xb5, 0xb9, 0xf6, 0x1d, 0x54, 0x53, 0x1c, 0xa1} DEFINE_GUID!{IID_ID3D11Device1, 0xa04bfb29, 0x08ef, 0x43d6, 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86} DEFINE_GUID!{IID_ID3DUserDefinedAnnotation, 0xb2daad8b, 0x03d4, 0x4dbf, 0x95, 0xeb, 0x32, 0xab, 0x4b, 0x63, 0xd0, 0xab} ENUM!{enum D3D11_COPY_FLAGS { D3D11_COPY_NO_OVERWRITE = 0x00000001, D3D11_COPY_DISCARD = 0x00000002, }} ENUM!{enum D3D11_LOGIC_OP { D3D11_LOGIC_OP_CLEAR = 0, D3D11_LOGIC_OP_SET = 1, D3D11_LOGIC_OP_COPY = 2, D3D11_LOGIC_OP_COPY_INVERTED = 3, D3D11_LOGIC_OP_NOOP = 4, D3D11_LOGIC_OP_INVERT = 5, D3D11_LOGIC_OP_AND = 6, D3D11_LOGIC_OP_NAND = 7, D3D11_LOGIC_OP_OR = 8, D3D11_LOGIC_OP_NOR = 9, D3D11_LOGIC_OP_XOR = 10, D3D11_LOGIC_OP_EQUIV = 11, D3D11_LOGIC_OP_AND_REVERSE = 12, D3D11_LOGIC_OP_AND_INVERTED = 13, D3D11_LOGIC_OP_OR_REVERSE = 14, D3D11_LOGIC_OP_OR_INVERTED = 15, }} STRUCT!{struct D3D11_RENDER_TARGET_BLEND_DESC1 { BlendEnable: BOOL, LogicOpEnable: BOOL, SrcBlend: D3D11_BLEND, DestBlend: D3D11_BLEND, BlendOp: D3D11_BLEND_OP, SrcBlendAlpha: D3D11_BLEND, DestBlendAlpha: D3D11_BLEND, BlendOpAlpha: D3D11_BLEND_OP, LogicOp: D3D11_LOGIC_OP, RenderTargetWriteMask: UINT8, }} STRUCT!{struct D3D11_BLEND_DESC1 { AlphaToCoverageEnable: BOOL, IndependentBlendEnable: BOOL, RenderTarget: [D3D11_RENDER_TARGET_BLEND_DESC1; 8], }} RIDL!{#[uuid(0xcc86fabe, 0xda55, 0x401d, 0x85, 0xe7, 0xe3, 0xc9, 0xde, 0x28, 0x77, 0xe9)] interface ID3D11BlendState1(ID3D11BlendState1Vtbl): ID3D11BlendState(ID3D11BlendStateVtbl) { fn GetDesc1( pDesc: *mut D3D11_BLEND_DESC1, ) -> (), }} STRUCT!{struct D3D11_RASTERIZER_DESC1 { FillMode: D3D11_FILL_MODE, CullMode: D3D11_CULL_MODE, FrontCounterClockwise: BOOL, DepthBias: INT, DepthBiasClamp: FLOAT, SlopeScaledDepthBias: FLOAT, DepthClipEnable: BOOL, ScissorEnable: BOOL, MultisampleEnable: BOOL, AntialiasedLineEnable: BOOL, ForcedSampleCount: UINT, }} RIDL!{#[uuid(0x1217d7a6, 0x5039, 0x418c, 0xb0, 0x42, 0x9c, 0xbe, 0x25, 0x6a, 0xfd, 0x6e)] interface ID3D11RasterizerState1(ID3D11RasterizerState1Vtbl): ID3D11RasterizerState(ID3D11RasterizerStateVtbl) { fn GetDesc1( pDesc: *mut D3D11_RASTERIZER_DESC1, ) -> (), }} ENUM!{enum D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG { D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED = 0x1, }} RIDL!{#[uuid(0x5c1e0d8a, 0x7c23, 0x48f9, 0x8c, 0x59, 0xa9, 0x29, 0x58, 0xce, 0xff, 0x11)] interface ID3DDeviceContextState(ID3DDeviceContextStateVtbl): ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}} RIDL!{#[uuid(0xbb2c6faa, 0xb5fb, 0x4082, 0x8e, 0x6b, 0x38, 0x8b, 0x8c, 0xfa, 0x90, 0xe1)] interface ID3D11DeviceContext1(ID3D11DeviceContext1Vtbl): ID3D11DeviceContext(ID3D11DeviceContextVtbl) { fn CopySubresourceRegion1( pDstResource: *mut ID3D11Resource, DstSubresource: UINT, DstX: UINT, DstY: UINT, DstZ: UINT, pSrcResource: *mut ID3D11Resource, SrcSubresource: UINT, pSrcBox: *const D3D11_BOX, CopyFlags: UINT, ) -> (), fn UpdateSubresource1( pDstResource: *mut ID3D11Resource, DstSubresource: UINT, pDstBox: *const D3D11_BOX, pSrcData: *mut c_void, SrcRowPitch: UINT, SrcDepthPitch: UINT, CopyFlags: UINT, ) -> (), fn DiscardResource( pResource: *mut ID3D11Resource, ) -> (), fn DiscardView( pResource: *mut ID3D11Resource, ) -> (), fn VSSetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *const *mut ID3D11Buffer, pFirstConstant: *const UINT, pNumConstants: *const UINT, ) -> (), fn HSSetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *const *mut ID3D11Buffer, pFirstConstant: *const UINT, pNumConstants: *const UINT, ) -> (), fn DSSetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *const *mut ID3D11Buffer, pFirstConstant: *const UINT, pNumConstants: *const UINT, ) -> (), fn GSSetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *const *mut ID3D11Buffer, pFirstConstant: *const UINT, pNumConstants: *const UINT, ) -> (), fn PSSetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *const *mut ID3D11Buffer, pFirstConstant: *const UINT, pNumConstants: *const UINT, ) -> (), fn CSSetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *const *mut ID3D11Buffer, pFirstConstant: *const UINT, pNumConstants: *const UINT, ) -> (), fn VSGetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *mut *mut ID3D11Buffer, pFirstConstant: *mut UINT, pNumConstants: *mut UINT, ) -> (), fn HSGetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *mut *mut ID3D11Buffer, pFirstConstant: *mut UINT, pNumConstants: *mut UINT, ) -> (), fn DSGetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *mut *mut ID3D11Buffer, pFirstConstant: *mut UINT, pNumConstants: *mut UINT, ) -> (), fn GSGetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *mut *mut ID3D11Buffer, pFirstConstant: *mut UINT, pNumConstants: *mut UINT, ) -> (), fn PSGetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *mut *mut ID3D11Buffer, pFirstConstant: *mut UINT, pNumConstants: *mut UINT, ) -> (), fn CSGetConstantBuffers1( StartSlot: UINT, NumBuffers: UINT, ppConstantBuffers: *mut *mut ID3D11Buffer, pFirstConstant: *mut UINT, pNumConstants: *mut UINT, ) -> (), fn SwapDeviceContextState( pState: *mut ID3DDeviceContextState, ppPreviousState: *mut *mut ID3DDeviceContextState, ) -> (), fn ClearView( pView: *mut ID3D11View, Color: [FLOAT; 4], pRect: *const D3D11_RECT, NumRects: UINT, ) -> (), fn DiscardView1( pResourceView: *mut ID3D11View, pRects: *const D3D11_RECT, NumRects: UINT, ) -> (), }} STRUCT!{struct D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK { ClearSize: UINT, EncryptedSize: UINT, }} STRUCT!{struct D3D11_VIDEO_DECODER_BUFFER_DESC1 { BufferType: D3D11_VIDEO_DECODER_BUFFER_TYPE, DataOffset: UINT, DataSize: UINT, pIV: *mut c_void, IVSize: UINT, pSubSampleMappingBlock: *mut D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK, SubSampleMappingCount: UINT, }} STRUCT!{struct D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION { pCryptoSession: *mut ID3D11CryptoSession, BlobSize: UINT, pBlob: *mut c_void, pKeyInfoId: *mut GUID, PrivateDataSize: UINT, pPrivateData: *mut c_void, }} ENUM!{enum D3D11_VIDEO_DECODER_CAPS { D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE = 0x1, D3D11_VIDEO_DECODER_CAPS_NON_REAL_TIME = 0x02, D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC = 0x04, D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_REQUIRED = 0x08, D3D11_VIDEO_DECODER_CAPS_UNSUPPORTED = 0x10, }} ENUM!{enum D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINTS { D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_ROTATION = 0x01, D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_RESIZE = 0x02, D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_COLOR_SPACE_CONVERSION = 0x04, D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_TRIPLE_BUFFER_OUTPUT = 0x08, }} STRUCT!{struct D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT { Enable: BOOL, Width: UINT, Height: UINT, Format: DXGI_FORMAT, }} ENUM!{enum D3D11_CRYPTO_SESSION_STATUS { D3D11_CRYPTO_SESSION_STATUS_OK = 0, D3D11_CRYPTO_SESSION_STATUS_KEY_LOST = 1, D3D11_CRYPTO_SESSION_STATUS_KEY_AND_CONTENT_LOST = 2, }} STRUCT!{struct D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA { PrivateDataSize: UINT, HWProtectionDataSize: UINT, pbInput: [BYTE; 4], }} STRUCT!{struct D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA { PrivateDataSize: UINT, MaxHWProtectionDataSize: UINT, HWProtectionDataSize: UINT, TransportTime: UINT64, ExecutionTime: UINT64, pbOutput: [BYTE; 4], }} STRUCT!{struct D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA { HWProtectionFunctionID: UINT, pInputData: *mut D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA, pOutputData: *mut D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA, Status: HRESULT, }} STRUCT!{struct D3D11_VIDEO_SAMPLE_DESC { Width: UINT, Height: UINT, Format: DXGI_FORMAT, ColorSpace: DXGI_COLOR_SPACE_TYPE, }} RIDL!{#[uuid(0xa7f026da, 0xa5f8, 0x4487, 0xa5, 0x64, 0x15, 0xe3, 0x43, 0x57, 0x65, 0x1e)] interface ID3D11VideoContext1(ID3D11VideoContext1Vtbl): ID3D11VideoContext(ID3D11VideoContextVtbl) { fn SubmitDecoderBuffers1( pDecoder: *mut ID3D11VideoDecoder, NumBuffers: UINT, pBufferDesc: *const D3D11_VIDEO_DECODER_BUFFER_DESC1, ) -> HRESULT, fn GetDataForNewHardwareKey( pCryptoSession: *mut ID3D11CryptoSession, PrivateInputSize: UINT, pPrivateInputData: *const c_void, pPrivateOutputData: *mut UINT64, ) -> HRESULT, fn CheckCryptoSessionStatus( pCryptoSession: *mut ID3D11CryptoSession, pStatus: *mut D3D11_CRYPTO_SESSION_STATUS, ) -> HRESULT, fn DecoderEnableDownsampling( pDecoder: *mut ID3D11VideoDecoder, InputColorSpace: DXGI_COLOR_SPACE_TYPE, pOutputDesc: *const D3D11_VIDEO_SAMPLE_DESC, ReferenceFrameCount: UINT, ) -> HRESULT, fn DecoderUpdateDownsampling( pDecoder: *mut ID3D11VideoDecoder, pOutputDesc: *const D3D11_VIDEO_SAMPLE_DESC, ) -> HRESULT, fn VideoProcessorSetOutputColorSpace1( pVideoProcessor: *mut ID3D11VideoProcessor, ColorSpace: DXGI_COLOR_SPACE_TYPE, ) -> (), fn VideoProcessorSetOutputShaderUsage( pVideoProcessor: *mut ID3D11VideoProcessor, ShaderUsage: BOOL, ) -> (), fn VideoProcessorGetOutputColorSpace1( pVideoProcessor: *mut ID3D11VideoProcessor, pColorSpace: *mut DXGI_COLOR_SPACE_TYPE, ) -> (), fn VideoProcessorGetOutputShaderUsage( pVideoProcessor: *mut ID3D11VideoProcessor, pShaderUsage: *mut BOOL, ) -> (), fn VideoProcessorSetStreamColorSpace1( pVideoProcessor: *mut ID3D11VideoProcessor, StreamIndex: UINT, ColorSpace: DXGI_COLOR_SPACE_TYPE, ) -> (), fn VideoProcessorSetStreamMirror( pVideoProcessor: *mut ID3D11VideoProcessor, StreamIndex: UINT, Enable: BOOL, FlipHorizontal: BOOL, FlipVertical: BOOL, ) -> (), fn VideoProcessorGetStreamColorSpace1( pVideoProcessor: *mut ID3D11VideoProcessor, StreamIndex: UINT, pColorSpace: *mut DXGI_COLOR_SPACE_TYPE, ) -> (), fn VideoProcessorGetStreamMirror( pVideoProcessor: *mut ID3D11VideoProcessor, StreamIndex: UINT, pEnable: *mut BOOL, pFlipHorizontal: *mut BOOL, pFlipVertical: *mut BOOL, ) -> (), fn VideoProcessorGetBehaviorHints( pVideoProcessor: *mut ID3D11VideoProcessor, OutputWidth: UINT, OutputHeight: UINT, OutputFormat: DXGI_FORMAT, StreamCount: UINT, pStreams: *const D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT, pBehaviorHints: *mut UINT, ) -> (), }} RIDL!{#[uuid(0x29da1d51, 0x1321, 0x4454, 0x80, 0x4b, 0xf5, 0xfc, 0x9f, 0x86, 0x1f, 0x0f)] interface ID3D11VideoDevice1(ID3D11VideoDevice1Vtbl): ID3D11VideoDevice(ID3D11VideoDeviceVtbl) { fn GetCryptoSessionPrivateDataSize( pCryptoType: *const GUID, pDecoderProfile: *const GUID, pKeyExchangeType: *const GUID, pPrivateInputSize: *mut UINT, pPrivateOutputSize: *mut UINT, ) -> HRESULT, fn GetVideoDecoderCaps( pDecoderProfile: *const GUID, SampleWidth: UINT, SampleHeight: UINT, pFrameRate: *const DXGI_RATIONAL, BitRate: UINT, pCryptoType: *const GUID, pDecoderCaps: *mut UINT, ) -> HRESULT, fn CheckVideoDecoderDownsampling( pInputDesc: *const D3D11_VIDEO_DECODER_DESC, InputColorSpace: DXGI_COLOR_SPACE_TYPE, pInputConfig: *const D3D11_VIDEO_DECODER_CONFIG, pFrameRate: *const DXGI_RATIONAL, pOutputDesc: *const D3D11_VIDEO_SAMPLE_DESC, pSupported: *mut BOOL, pRealTimeHint: *mut BOOL, ) -> HRESULT, fn RecommendVideoDecoderDownsampleParameters( pInputDesc: *const D3D11_VIDEO_DECODER_DESC, InputColorSpace: DXGI_COLOR_SPACE_TYPE, pInputConfig: *const D3D11_VIDEO_DECODER_CONFIG, pRecommendedOutputDesc: *mut D3D11_VIDEO_SAMPLE_DESC, ) -> HRESULT, }} RIDL!{#[uuid(0x465217f2, 0x5568, 0x43cf, 0xb5, 0xb9, 0xf6, 0x1d, 0x54, 0x53, 0x1c, 0xa1)] interface ID3D11VideoProcessorEnumerator1(ID3D11VideoProcessorEnumerator1Vtbl): ID3D11VideoProcessorEnumerator(ID3D11VideoProcessorEnumeratorVtbl) { fn CheckVideoProcessorFormatConversion( InputFormat: DXGI_FORMAT, InputCOlorSpace: DXGI_COLOR_SPACE_TYPE, OutputFormat: DXGI_FORMAT, OutputColorSpace: DXGI_COLOR_SPACE_TYPE, pSupported: *mut BOOL, ) -> HRESULT, }} RIDL!{#[uuid(0xa04bfb29, 0x08ef, 0x43d6, 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86)] interface ID3D11Device1(ID3D11Device1Vtbl): ID3D11Device(ID3D11DeviceVtbl) { fn GetImmediateContext1( ppImmediateContext: *mut *mut ID3D11DeviceContext1, ) -> (), fn CreateDeferredContext1( ContextFlags: UINT, ppDeferredContext: *mut *mut ID3D11DeviceContext1, ) -> HRESULT, fn CreateBlendState( pBlendStateDesc: *const D3D11_BLEND_DESC1, ppBlendState: *mut *mut ID3D11BlendState1, ) -> HRESULT, fn CreateRasterizerState( pRasterizerDesc: *const D3D11_RASTERIZER_DESC1, ppRasterizerState: *mut *mut ID3D11RasterizerState1, ) -> HRESULT, fn CreateDeviceContextState( Flags: UINT, pFeatureLevels: *const D3D_FEATURE_LEVEL, FeatureLevels: UINT, SDKVersion: UINT, EmulatedInterface: REFIID, pChosenFeatureLevel: *mut D3D_FEATURE_LEVEL, ppContextState: *mut *mut ID3DDeviceContextState, ) -> HRESULT, fn OpenSharedResource1( hResource: HANDLE, returnedInterface: REFIID, ppResource: *mut *mut c_void, ) -> HRESULT, fn OpenSharedResourceByName( Name: LPCWSTR, dwDesiredAccess: DWORD, returnedInterface: REFIID, ppResource: *mut *mut c_void, ) -> HRESULT, }} RIDL!{#[uuid(0xb2daad8b, 0x03d4, 0x4dbf, 0x95, 0xeb, 0x32, 0xab, 0x4b, 0x63, 0xd0, 0xab)] interface ID3DUserDefinedAnnotation(ID3DUserDefinedAnnotationVtbl): IUnknown(IUnknownVtbl) { fn BeginEvent( Name: LPCWSTR, ) -> INT, fn EndEvent() -> INT, fn SetMarker( Name: LPCWSTR, ) -> (), fn GetStatus() -> BOOL, }}