#pragma once #include #include "d3d11_buffer.h" #include "d3d11_input_layout.h" #include "d3d11_sampler.h" #include "d3d11_shader.h" #include "d3d11_state.h" #include "d3d11_uav.h" #include "d3d11_view.h" namespace dxvk { using D3D11ConstantBufferBindings = std::array< Com, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT>; using D3D11SamplerBindings = std::array< Com, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT>; using D3D11ShaderResourceBindings = std::array< Com, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT>; using D3D11UnorderedAccessBindings = std::array< Com, D3D11_1_UAV_SLOT_COUNT>; struct D3D11ContextStateVS { Com shader; D3D11ConstantBufferBindings constantBuffers; D3D11SamplerBindings samplers; D3D11ShaderResourceBindings shaderResources; }; struct D3D11ContextStateHS { Com shader; D3D11ConstantBufferBindings constantBuffers; D3D11SamplerBindings samplers; D3D11ShaderResourceBindings shaderResources; }; struct D3D11ContextStateDS { Com shader; D3D11ConstantBufferBindings constantBuffers; D3D11SamplerBindings samplers; D3D11ShaderResourceBindings shaderResources; }; struct D3D11ContextStateGS { Com shader; D3D11ConstantBufferBindings constantBuffers; D3D11SamplerBindings samplers; D3D11ShaderResourceBindings shaderResources; }; struct D3D11ContextStatePS { Com shader; D3D11ConstantBufferBindings constantBuffers; D3D11SamplerBindings samplers; D3D11ShaderResourceBindings shaderResources; D3D11UnorderedAccessBindings unorderedAccessViews; }; struct D3D11ContextStateCS { Com shader; D3D11ConstantBufferBindings constantBuffers; D3D11SamplerBindings samplers; D3D11ShaderResourceBindings shaderResources; D3D11UnorderedAccessBindings unorderedAccessViews; }; struct D3D11VertexBufferBinding { Com buffer = nullptr; UINT offset = 0; UINT stride = 0; }; struct D3D11IndexBufferBinding { Com buffer = nullptr; UINT offset = 0; DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN; }; struct D3D11ContextStateIA { Com inputLayout; D3D11_PRIMITIVE_TOPOLOGY primitiveTopology = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED; std::array vertexBuffers; D3D11IndexBufferBinding indexBuffer; }; struct D3D11ContextStateOM { std::array, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT> renderTargetViews; Com depthStencilView; Com cbState = nullptr; Com dsState = nullptr; FLOAT blendFactor[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; UINT sampleMask = 0xFFFFFFFFu; UINT stencilRef = 0u; }; struct D3D11ContextStateRS { uint32_t numViewports = 0; uint32_t numScissors = 0; std::array viewports; std::array scissors; Com state; }; /** * \brief Context state */ struct D3D11ContextState { D3D11ContextStateCS cs; D3D11ContextStateDS ds; D3D11ContextStateGS gs; D3D11ContextStateHS hs; D3D11ContextStatePS ps; D3D11ContextStateVS vs; D3D11ContextStateIA ia; D3D11ContextStateOM om; D3D11ContextStateRS rs; }; }