// Copyright © 2016, Peter Atashian // Licensed under the MIT License use super::*; ENUM!{enum D3D11_SHADER_VERSION_TYPE { D3D11_SHVER_PIXEL_SHADER = 0, D3D11_SHVER_VERTEX_SHADER = 1, D3D11_SHVER_GEOMETRY_SHADER = 2, D3D11_SHVER_HULL_SHADER = 3, D3D11_SHVER_DOMAIN_SHADER = 4, D3D11_SHVER_COMPUTE_SHADER = 5, D3D11_SHVER_RESERVED0 = 0xFFF0, }} pub const D3D_RETURN_PARAMETER_INDEX: c_int = -1; pub type D3D11_RESOURCE_RETURN_TYPE = D3D_RESOURCE_RETURN_TYPE; pub type D3D11_CBUFFER_TYPE = D3D_CBUFFER_TYPE; STRUCT!{struct D3D11_SIGNATURE_PARAMETER_DESC { SemanticName: LPCSTR, SemanticIndex: UINT, Register: UINT, SystemValueType: D3D_NAME, ComponentType: D3D_REGISTER_COMPONENT_TYPE, Mask: BYTE, ReadWriteMask: BYTE, Stream: UINT, MinPrecision: D3D_MIN_PRECISION, }} STRUCT!{struct D3D11_SHADER_BUFFER_DESC { Name: LPCSTR, Type: D3D_CBUFFER_TYPE, Variables: UINT, Size: UINT, uFlags: UINT, }} STRUCT!{struct D3D11_SHADER_VARIABLE_DESC { Name: LPCSTR, StartOffset: UINT, Size: UINT, uFlags: UINT, DefaultValue: LPVOID, StartTexture: UINT, TextureSize: UINT, StartSampler: UINT, SamplerSize: UINT, }} STRUCT!{struct D3D11_SHADER_TYPE_DESC { Class: D3D_SHADER_VARIABLE_CLASS, Type: D3D_SHADER_VARIABLE_TYPE, Rows: UINT, Columns: UINT, Elements: UINT, Members: UINT, Offset: UINT, Name: LPCSTR, }} pub type D3D11_TESSELLATOR_DOMAIN = D3D_TESSELLATOR_DOMAIN; pub type D3D11_TESSELLATOR_PARTITIONING = D3D_TESSELLATOR_PARTITIONING; pub type D3D11_TESSELLATOR_OUTPUT_PRIMITIVE = D3D_TESSELLATOR_OUTPUT_PRIMITIVE; STRUCT!{struct D3D11_SHADER_DESC { Version: UINT, Creator: LPCSTR, Flags: UINT, ConstantBuffers: UINT, BoundResources: UINT, InputParameters: UINT, OutputParameters: UINT, InstructionCount: UINT, TempRegisterCount: UINT, TempArrayCount: UINT, DefCount: UINT, DclCount: UINT, TextureNormalInstructions: UINT, TextureLoadInstructions: UINT, TextureCompInstructions: UINT, TextureBiasInstructions: UINT, TextureGradientInstructions: UINT, FloatInstructionCount: UINT, IntInstructionCount: UINT, UintInstructionCount: UINT, StaticFlowControlCount: UINT, DynamicFlowControlCount: UINT, MacroInstructionCount: UINT, ArrayInstructionCount: UINT, CutInstructionCount: UINT, EmitInstructionCount: UINT, GSOutputTopology: D3D_PRIMITIVE_TOPOLOGY, GSMaxOutputVertexCount: UINT, InputPrimitive: D3D_PRIMITIVE, PatchConstantParameters: UINT, cGSInstanceCount: UINT, cControlPoints: UINT, HSOutputPrimitive: D3D_TESSELLATOR_OUTPUT_PRIMITIVE, HSPartitioning: D3D_TESSELLATOR_PARTITIONING, TessellatorDomain: D3D_TESSELLATOR_DOMAIN, cBarrierInstructions: UINT, cInterlockedInstructions: UINT, cTextureStoreInstructions: UINT, }} STRUCT!{struct D3D11_SHADER_INPUT_BIND_DESC { Name: LPCSTR, Type: D3D_SHADER_INPUT_TYPE, BindPoint: UINT, BindCount: UINT, uFlags: UINT, ReturnType: D3D_RESOURCE_RETURN_TYPE, Dimension: D3D_SRV_DIMENSION, NumSamples: UINT, }} pub const D3D_SHADER_REQUIRES_DOUBLES: UINT64 = 0x00000001; pub const D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL: UINT64 = 0x00000002; pub const D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE: UINT64 = 0x00000004; pub const D3D_SHADER_REQUIRES_64_UAVS: UINT64 = 0x00000008; pub const D3D_SHADER_REQUIRES_MINIMUM_PRECISION: UINT64 = 0x00000010; pub const D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS: UINT64 = 0x00000020; pub const D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS: UINT64 = 0x00000040; pub const D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING: UINT64 = 0x00000080; pub const D3D_SHADER_REQUIRES_TILED_RESOURCES: UINT64 = 0x00000100; STRUCT!{struct D3D11_LIBRARY_DESC { Creator: LPCSTR, Flags: UINT, FunctionCount: UINT, }} STRUCT!{struct D3D11_FUNCTION_DESC { Version: UINT, Creator: LPCSTR, Flags: UINT, ConstantBuffers: UINT, BoundResources: UINT, InstructionCount: UINT, TempRegisterCount: UINT, TempArrayCount: UINT, DefCount: UINT, DclCount: UINT, TextureNormalInstructions: UINT, TextureLoadInstructions: UINT, TextureCompInstructions: UINT, TextureBiasInstructions: UINT, TextureGradientInstructions: UINT, FloatInstructionCount: UINT, IntInstructionCount: UINT, UintInstructionCount: UINT, StaticFlowControlCount: UINT, DynamicFlowControlCount: UINT, MacroInstructionCount: UINT, ArrayInstructionCount: UINT, MovInstructionCount: UINT, MovcInstructionCount: UINT, ConversionInstructionCount: UINT, BitwiseInstructionCount: UINT, MinFeatureLevel: D3D_FEATURE_LEVEL, RequiredFeatureFlags: UINT64, Name: LPCSTR, FunctionParameterCount: INT, HasReturn: BOOL, Has10Level9VertexShader: BOOL, Has10Level9PixelShader: BOOL, }} STRUCT!{struct D3D11_PARAMETER_DESC { Name: LPCSTR, SemanticName: LPCSTR, Type: D3D_SHADER_VARIABLE_TYPE, Class: D3D_SHADER_VARIABLE_CLASS, Rows: UINT, Columns: UINT, InterpolationMode: D3D_INTERPOLATION_MODE, Flags: D3D_PARAMETER_FLAGS, FirstInRegister: UINT, FirstInComponent: UINT, FirstOutRegister: UINT, FirstOutComponent: UINT, }} RIDL!{interface ID3D11ShaderReflectionType(ID3D11ShaderReflectionTypeVtbl) { fn GetDesc(&mut self, pDesc: *mut D3D11_SHADER_TYPE_DESC) -> HRESULT, fn GetMemberTypeByIndex(&mut self, Index: UINT) -> *mut ID3D11ShaderReflectionType, fn GetMemberTypeByName(&mut self, Name: LPCSTR) -> *mut ID3D11ShaderReflectionType, fn GetMemberTypeName(&mut self, Index: UINT) -> LPCSTR, fn IsEqual(&mut self, pType: *mut ID3D11ShaderReflectionType) -> HRESULT, fn GetSubType(&mut self) -> *mut ID3D11ShaderReflectionType, fn GetBaseClass(&mut self) -> *mut ID3D11ShaderReflectionType, fn GetNumInterfaces(&mut self) -> UINT, fn GetInterfaceByIndex(&mut self, uIndex: UINT) -> *mut ID3D11ShaderReflectionType, fn IsOfType(&mut self, pType: *mut ID3D11ShaderReflectionType) -> HRESULT, fn ImplementsInterface(&mut self, pBase: *mut ID3D11ShaderReflectionType) -> HRESULT }} RIDL!{interface ID3D11ShaderReflectionVariable(ID3D11ShaderReflectionVariableVtbl) { fn GetDesc(&mut self, pDesc: *mut D3D11_SHADER_VARIABLE_DESC) -> HRESULT, fn GetType(&mut self) -> *mut ID3D11ShaderReflectionType, fn GetBuffer(&mut self) -> *mut ID3D11ShaderReflectionConstantBuffer, fn GetInterfaceSlot(&mut self, uArrayIndex: UINT) -> UINT }} RIDL!{interface ID3D11ShaderReflectionConstantBuffer(ID3D11ShaderReflectionConstantBufferVtbl) { fn GetDesc(&mut self, pDesc: *mut D3D11_SHADER_BUFFER_DESC) -> HRESULT, fn GetVariableByIndex(&mut self, Index: UINT) -> *mut ID3D11ShaderReflectionVariable, fn GetVariableByName(&mut self, Name: LPCSTR) -> *mut ID3D11ShaderReflectionVariable }} RIDL!{interface ID3D11ShaderReflection(ID3D11ShaderReflectionVtbl): IUnknown(IUnknownVtbl) { fn GetDesc(&mut self, pDesc: *mut D3D11_SHADER_DESC) -> HRESULT, fn GetConstantBufferByIndex( &mut self, Index: UINT ) -> *mut ID3D11ShaderReflectionConstantBuffer, fn GetConstantBufferByName( &mut self, Name: LPCSTR ) -> *mut ID3D11ShaderReflectionConstantBuffer, fn GetResourceBindingDesc( &mut self, ResourceIndex: UINT, pDesc: *mut D3D11_SHADER_INPUT_BIND_DESC ) -> HRESULT, fn GetInputParameterDesc( &mut self, ParameterIndex: UINT, pDesc: *mut D3D11_SIGNATURE_PARAMETER_DESC ) -> HRESULT, fn GetOutputParameterDesc( &mut self, ParameterIndex: UINT, pDesc: *mut D3D11_SIGNATURE_PARAMETER_DESC ) -> HRESULT, fn GetPatchConstantParameterDesc( &mut self, ParameterIndex: UINT, pDesc: *mut D3D11_SIGNATURE_PARAMETER_DESC ) -> HRESULT, fn GetVariableByName(&mut self, Name: LPCSTR) -> *mut ID3D11ShaderReflectionVariable, fn GetResourceBindingDescByName( &mut self, Name: LPCSTR, pDesc: *mut D3D11_SHADER_INPUT_BIND_DESC ) -> HRESULT, fn GetMovInstructionCount(&mut self) -> UINT, fn GetMovcInstructionCount(&mut self) -> UINT, fn GetConversionInstructionCount(&mut self) -> UINT, fn GetBitwiseInstructionCount(&mut self) -> UINT, fn GetGSInputPrimitive(&mut self) -> D3D_PRIMITIVE, fn IsSampleFrequencyShader(&mut self) -> BOOL, fn GetNumInterfaceSlots(&mut self) -> UINT, fn GetMinFeatureLevel(&mut self, pLevel: *mut D3D_FEATURE_LEVEL) -> HRESULT, fn GetThreadGroupSize( &mut self, pSizeX: *mut UINT, pSizeY: *mut UINT, pSizeZ: *mut UINT ) -> UINT, fn GetRequiresFlags(&mut self) -> UINT64 }} RIDL!{interface ID3D11LibraryReflection(ID3D11LibraryReflectionVtbl): IUnknown(IUnknownVtbl) { fn GetDesc(&mut self, pDesc: *mut D3D11_LIBRARY_DESC) -> HRESULT, fn GetFunctionByIndex(&mut self, FunctionIndex: INT) -> *mut ID3D11FunctionReflection }} RIDL!{interface ID3D11FunctionReflection(ID3D11FunctionReflectionVtbl) { fn GetDesc(&mut self, pDesc: *mut D3D11_FUNCTION_DESC) -> HRESULT, fn GetConstantBufferByIndex( &mut self, BufferIndex: UINT ) -> *mut ID3D11ShaderReflectionConstantBuffer, fn GetConstantBufferByName( &mut self, Name: LPCSTR ) -> *mut ID3D11ShaderReflectionConstantBuffer, fn GetResourceBindingDesc( &mut self, ResourceIndex: UINT, pDesc: *mut D3D11_SHADER_INPUT_BIND_DESC ) -> HRESULT, fn GetVariableByName(&mut self, Name: LPCSTR) -> *mut ID3D11ShaderReflectionVariable, fn GetResourceBindingDescByName( &mut self, Name: LPCSTR, pDesc: *mut D3D11_SHADER_INPUT_BIND_DESC ) -> HRESULT, fn GetFunctionParameter( &mut self, ParameterIndex: INT ) -> *mut ID3D11FunctionParameterReflection }} RIDL!{interface ID3D11FunctionParameterReflection(ID3D11FunctionParameterReflectionVtbl) { fn GetDesc(&mut self, pDesc: *mut D3D11_PARAMETER_DESC) -> HRESULT }} RIDL!{interface ID3D11Module(ID3D11ModuleVtbl): IUnknown(IUnknownVtbl) { fn CreateInstance( &mut self, pNamespace: LPCSTR, ppModuleInstance: *mut *mut ID3D11ModuleInstance ) -> HRESULT }} RIDL!{interface ID3D11ModuleInstance(ID3D11ModuleInstanceVtbl): IUnknown(IUnknownVtbl) { fn BindConstantBuffer(&mut self, uSrcSlot: UINT, uDstSlot: UINT, cbDstOffset: UINT) -> HRESULT, fn BindConstantBufferByName( &mut self, pName: LPCSTR, uDstSlot: UINT, cbDstOffset: UINT ) -> HRESULT, fn BindResource(&mut self, uSrcSlot: UINT, uDstSlot: UINT, uCount: UINT) -> HRESULT, fn BindResourceByName(&mut self, pName: LPCSTR, uDstSlot: UINT, uCount: UINT) -> HRESULT, fn BindSampler(&mut self, uSrcSlot: UINT, uDstSlot: UINT, uCount: UINT) -> HRESULT, fn BindSamplerByName(&mut self, pName: LPCSTR, uDstSlot: UINT, uCount: UINT) -> HRESULT, fn BindUnorderedAccessView(&mut self, uSrcSlot: UINT, uDstSlot: UINT, uCount: UINT) -> HRESULT, fn BindUnorderedAccessViewByName( &mut self, pName: LPCSTR, uDstSlot: UINT, uCount: UINT ) -> HRESULT, fn BindResourceAsUnorderedAccessView( &mut self, uSrcSrvSlot: UINT, uDstUavSlot: UINT, uCount: UINT ) -> HRESULT, fn BindResourceAsUnorderedAccessViewByName( &mut self, pSrvName: LPCSTR, uDstUavSlot: UINT, uCount: UINT ) -> HRESULT }} RIDL!{interface ID3D11Linker(ID3D11LinkerVtbl): IUnknown(IUnknownVtbl) { fn Link( &mut self, pEntry: *mut ID3D11ModuleInstance, pEntryName: LPCSTR, pTargetName: LPCSTR, uFlags: UINT, ppShaderBlob: *mut *mut ID3DBlob, ppErrorBuffer: *mut *mut ID3DBlob ) -> HRESULT, fn UseLibrary(&mut self, pLibraryMI: *mut ID3D11ModuleInstance) -> HRESULT, fn AddClipPlaneFromCBuffer(&mut self, uCBufferSlot: UINT, uCBufferEntry: UINT) -> HRESULT }} RIDL!{interface ID3D11LinkingNode(ID3D11LinkingNodeVtbl): IUnknown(IUnknownVtbl) {}} RIDL!{interface ID3D11FunctionLinkingGraph(ID3D11FunctionLinkingGraphVtbl): IUnknown(IUnknownVtbl) { fn CreateModuleInstance( &mut self, ppModuleInstance: *mut *mut ID3D11ModuleInstance, ppErrorBuffer: *mut *mut ID3DBlob ) -> HRESULT, fn SetInputSignature( &mut self, pInputParameters: *const D3D11_PARAMETER_DESC, cInputParameters: UINT, ppInputNode: *mut *mut ID3D11LinkingNode ) -> HRESULT, fn SetOutputSignature( &mut self, pOutputParameters: *const D3D11_PARAMETER_DESC, cOutputParameters: UINT, ppOutputNode: *mut *mut ID3D11LinkingNode ) -> HRESULT, fn CallFunction( &mut self, pModuleInstanceNamespace: LPCSTR, pModuleWithFunctionPrototype: *mut ID3D11Module, pFunctionName: LPCSTR, ppCallNode: *mut *mut ID3D11LinkingNode ) -> HRESULT, fn PassValue( &mut self, pSrcNode: *mut ID3D11LinkingNode, SrcParameterIndex: INT, pDstNode: *mut ID3D11LinkingNode, DstParameterIndex: INT ) -> HRESULT, fn PassValueWithSwizzle( &mut self, pSrcNode: *mut ID3D11LinkingNode, SrcParameterIndex: INT, pSrcSwizzle: LPCSTR, pDstNode: *mut ID3D11LinkingNode, DstParameterIndex: INT, pDstSwizzle: LPCSTR ) -> HRESULT, fn GetLastError(&mut self, ppErrorBuffer: *mut *mut ID3DBlob) -> HRESULT, fn GenerateHlsl(&mut self, uFlags: UINT, ppBuffer: *mut *mut ID3DBlob) -> HRESULT }}