#pragma once #include <dxvk_device.h> #include "d3d11_device_child.h" #include "d3d11_util.h" namespace dxvk { class D3D11Device; class D3D11BlendState : public D3D11DeviceChild<ID3D11BlendState> { public: using DescType = D3D11_BLEND_DESC; D3D11BlendState( D3D11Device* device, const D3D11_BLEND_DESC& desc); ~D3D11BlendState(); HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void** ppvObject) final; void STDMETHODCALLTYPE GetDevice( ID3D11Device **ppDevice) final; void STDMETHODCALLTYPE GetDesc( D3D11_BLEND_DESC* pDesc) final; void BindToContext( const Rc<DxvkContext>& ctx, UINT sampleMask) const; private: D3D11Device* const m_device; D3D11_BLEND_DESC m_desc; std::array<DxvkBlendMode, 8> m_blendModes; DxvkMultisampleState m_msState; DxvkLogicOpState m_loState; static DxvkBlendMode DecodeBlendMode( const D3D11_RENDER_TARGET_BLEND_DESC& blendDesc); static VkBlendFactor DecodeBlendFactor( D3D11_BLEND blendFactor, bool isAlpha); static VkBlendOp DecodeBlendOp( D3D11_BLEND_OP blendOp); }; }