#pragma once #include #include "d3d10_include.h" #include #include namespace dxvk { class D3D10ShaderReflectionType : public ID3D10ShaderReflectionType { public: D3D10ShaderReflectionType( ID3D11ShaderReflectionType* d3d11); ~D3D10ShaderReflectionType(); HRESULT STDMETHODCALLTYPE GetDesc( D3D10_SHADER_TYPE_DESC* pDesc); ID3D10ShaderReflectionType* STDMETHODCALLTYPE GetMemberTypeByIndex( UINT Index); ID3D10ShaderReflectionType* STDMETHODCALLTYPE GetMemberTypeByName( const char* Name); const char* STDMETHODCALLTYPE GetMemberTypeName( UINT Index); ID3D11ShaderReflectionType* GetD3D11Iface() { return m_d3d11; } private: ID3D11ShaderReflectionType* m_d3d11; std::vector m_members; ID3D10ShaderReflectionType* FindMemberType( ID3D11ShaderReflectionType* pMemberType); }; class D3D10ShaderReflectionVariable : public ID3D10ShaderReflectionVariable { public: D3D10ShaderReflectionVariable( ID3D11ShaderReflectionVariable* d3d11); ~D3D10ShaderReflectionVariable(); HRESULT STDMETHODCALLTYPE GetDesc( D3D10_SHADER_VARIABLE_DESC* pDesc); ID3D10ShaderReflectionType* STDMETHODCALLTYPE GetType(); ID3D11ShaderReflectionVariable* STDMETHODCALLTYPE GetD3D11Iface() { return m_d3d11; } private: ID3D11ShaderReflectionVariable* m_d3d11; D3D10ShaderReflectionType m_type; }; class D3D10ShaderReflectionConstantBuffer : public ID3D10ShaderReflectionConstantBuffer { public: D3D10ShaderReflectionConstantBuffer( ID3D11ShaderReflectionConstantBuffer* d3d11); ~D3D10ShaderReflectionConstantBuffer(); HRESULT STDMETHODCALLTYPE GetDesc( D3D10_SHADER_BUFFER_DESC* pDesc); ID3D10ShaderReflectionVariable* STDMETHODCALLTYPE GetVariableByIndex( UINT Index); ID3D10ShaderReflectionVariable* STDMETHODCALLTYPE GetVariableByName( LPCSTR Name); ID3D11ShaderReflectionConstantBuffer* STDMETHODCALLTYPE GetD3D11Iface() { return m_d3d11; } private: ID3D11ShaderReflectionConstantBuffer* m_d3d11; std::vector m_variables; ID3D10ShaderReflectionVariable* FindVariable( ID3D11ShaderReflectionVariable* pVariable); }; class D3D10ShaderReflection : public ComObject { public: D3D10ShaderReflection(ID3D11ShaderReflection* d3d11); ~D3D10ShaderReflection(); HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void** ppvObject); HRESULT STDMETHODCALLTYPE GetDesc( D3D10_SHADER_DESC* pDesc); ID3D10ShaderReflectionConstantBuffer* STDMETHODCALLTYPE GetConstantBufferByIndex( UINT Index); ID3D10ShaderReflectionConstantBuffer* STDMETHODCALLTYPE GetConstantBufferByName( LPCSTR Name); HRESULT STDMETHODCALLTYPE GetInputParameterDesc( UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC* pDesc); HRESULT STDMETHODCALLTYPE GetOutputParameterDesc( UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC* pDesc); HRESULT STDMETHODCALLTYPE GetResourceBindingDesc( UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC* pDesc); private: Com m_d3d11; std::vector m_constantBuffers; ID3D10ShaderReflectionConstantBuffer* FindConstantBuffer( ID3D11ShaderReflectionConstantBuffer* pConstantBuffer); void ConvertSignatureParameterDesc( const D3D11_SIGNATURE_PARAMETER_DESC* pSrcDesc, D3D10_SIGNATURE_PARAMETER_DESC* pDstDesc); }; }