From 8934ab0fc7586aad349850876dc076b12ae9bf49 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 6 Dec 2017 14:16:14 +0100 Subject: [PATCH] [d3d11] Added stubs for shader classes --- src/d3d11/d3d11_context.cpp | 2 +- src/d3d11/d3d11_context_state.h | 66 +++++++++++++++++++++++++++++++++ src/d3d11/d3d11_shader.cpp | 8 ++++ src/d3d11/d3d11_shader.h | 56 ++++++++++++++++++++++++++++ src/d3d11/d3d11_state_rs.h | 2 +- src/d3d11/meson.build | 1 + 6 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 src/d3d11/d3d11_shader.cpp create mode 100644 src/d3d11/d3d11_shader.h diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index 9140ed24d..231fdd72d 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -1003,7 +1003,7 @@ namespace dxvk { // state is not explicitly defined. m_context->setRasterizerState( rasterizerState != nullptr - ? rasterizerState->GetDXVKStateObject() + ? rasterizerState->GetDXVKRasterizerState() : m_defaultRsState); // In D3D11, the rasterizer state defines diff --git a/src/d3d11/d3d11_context_state.h b/src/d3d11/d3d11_context_state.h index 6e80ee1ef..ce5b0cff9 100644 --- a/src/d3d11/d3d11_context_state.h +++ b/src/d3d11/d3d11_context_state.h @@ -2,11 +2,69 @@ #include +#include "d3d11_buffer.h" +#include "d3d11_shader.h" #include "d3d11_state.h" #include "d3d11_view.h" namespace dxvk { + struct D3D11ComputePipelineBindings { + std::array, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT> constantBuffers; +// std::array, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT> shaderResourceViews; +// std::array, D3D11_1_UAV_SLOT_COUNT> uniformAccessViews; +// std::array, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT> samplers; + }; + + + struct D3D11GraphicsPipelineBindings { + std::array, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT> constantBuffers; +// std::array, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT> shaderResourceViews; +// std::array, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT> samplers; + }; + + + struct D3D11ContextStateVS { + Com shader; + D3D11GraphicsPipelineBindings bindings; + }; + + + struct D3D11ContextStateHS { + Com shader; + D3D11GraphicsPipelineBindings bindings; + }; + + + struct D3D11ContextStateDS { + Com shader; + D3D11GraphicsPipelineBindings bindings; + }; + + + struct D3D11ContextStateGS { + Com shader; + D3D11GraphicsPipelineBindings bindings; + }; + + + struct D3D11ContextStatePS { + Com shader; + D3D11GraphicsPipelineBindings bindings; + }; + + + struct D3D11ContextStateCS { + Com shader; + D3D11ComputePipelineBindings bindings; + }; + + + struct D3D11ContextStateIA { + + }; + + struct D3D11ContextStateOM { std::array, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT> renderTargetViews; @@ -29,6 +87,14 @@ namespace dxvk { * \brief Context state */ struct D3D11ContextState { + D3D11ContextStateCS cs; + D3D11ContextStateDS ds; + D3D11ContextStateGS gs; + D3D11ContextStateHS hs; + D3D11ContextStatePS ps; + D3D11ContextStateVS vs; + + D3D11ContextStateIA ia; D3D11ContextStateOM om; D3D11ContextStateRS rs; }; diff --git a/src/d3d11/d3d11_shader.cpp b/src/d3d11/d3d11_shader.cpp new file mode 100644 index 000000000..6694f0a87 --- /dev/null +++ b/src/d3d11/d3d11_shader.cpp @@ -0,0 +1,8 @@ +#include "d3d11_device.h" +#include "d3d11_shader.h" + +namespace dxvk { + + + +} diff --git a/src/d3d11/d3d11_shader.h b/src/d3d11/d3d11_shader.h new file mode 100644 index 000000000..8ea1480a9 --- /dev/null +++ b/src/d3d11/d3d11_shader.h @@ -0,0 +1,56 @@ +#pragma once + +#include + +#include "d3d11_device_child.h" +#include "d3d11_interfaces.h" + +namespace dxvk { + + class D3D11Device; + + + /** + * \brief Common shader interface + * + * Implements methods for all D3D11*Shader + * interfaces and stores the actual shader + * module object. + */ + template + class D3D11Shader : public D3D11DeviceChild { + + public: + + D3D11Shader(D3D11Device* device) + : m_device(device) { } + + ~D3D11Shader() { } + + HRESULT QueryInterface(REFIID riid, void** ppvObject) final { + COM_QUERY_IFACE(riid, ppvObject, IUnknown); + COM_QUERY_IFACE(riid, ppvObject, ID3D11DeviceChild); + COM_QUERY_IFACE(riid, ppvObject, Base); + + Logger::warn("D3D11Shader::QueryInterface: Unknown interface query"); + return E_NOINTERFACE; + } + + void GetDevice(ID3D11Device **ppDevice) final { + *ppDevice = m_device.ref(); + } + + private: + + Com m_device; + + }; + + using D3D11VertexShader = D3D11Shader; + using D3D11HullShader = D3D11Shader; + using D3D11DomainShader = D3D11Shader; + using D3D11GeometryShader = D3D11Shader; + using D3D11PixelShader = D3D11Shader; + using D3D11ComputeShader = D3D11Shader; + +} diff --git a/src/d3d11/d3d11_state_rs.h b/src/d3d11/d3d11_state_rs.h index a0a11804b..8a1ddda91 100644 --- a/src/d3d11/d3d11_state_rs.h +++ b/src/d3d11/d3d11_state_rs.h @@ -29,7 +29,7 @@ namespace dxvk { void GetDesc( D3D11_RASTERIZER_DESC* pDesc) final; - Rc GetDXVKStateObject() { + Rc GetDXVKRasterizerState() { return m_state; } diff --git a/src/d3d11/meson.build b/src/d3d11/meson.build index 7b964405e..be3bb5d9f 100644 --- a/src/d3d11/meson.build +++ b/src/d3d11/meson.build @@ -5,6 +5,7 @@ d3d11_src = [ 'd3d11_enums.cpp', 'd3d11_main.cpp', 'd3d11_present.cpp', + 'd3d11_shader.cpp', 'd3d11_state.cpp', 'd3d11_state_rs.cpp', 'd3d11_texture.cpp',