mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-25 07:09:48 -06:00
Move most backend functionality to VideoCommon
This commit is contained in:
@ -16,6 +16,8 @@
|
||||
|
||||
namespace DX11
|
||||
{
|
||||
class DXFramebuffer;
|
||||
|
||||
class StateCache
|
||||
{
|
||||
public:
|
||||
@ -112,14 +114,6 @@ public:
|
||||
m_pending.geometryConstants = buffer;
|
||||
}
|
||||
|
||||
void SetComputeConstants(ID3D11Buffer* buffer)
|
||||
{
|
||||
if (m_current.computeConstants != buffer)
|
||||
m_dirtyFlags |= DirtyFlag_ComputeConstants;
|
||||
|
||||
m_pending.computeConstants = buffer;
|
||||
}
|
||||
|
||||
void SetVertexBuffer(ID3D11Buffer* buffer, u32 stride, u32 offset)
|
||||
{
|
||||
if (m_current.vertexBuffer != buffer || m_current.vertexBufferStride != stride ||
|
||||
@ -187,22 +181,45 @@ public:
|
||||
m_pending.geometryShader = shader;
|
||||
}
|
||||
|
||||
void SetComputeShader(ID3D11ComputeShader* shader)
|
||||
void SetFramebuffer(DXFramebuffer* fb)
|
||||
{
|
||||
if (m_current.computeShader != shader)
|
||||
m_dirtyFlags |= DirtyFlag_ComputeShader;
|
||||
if (m_current.framebuffer != fb)
|
||||
m_dirtyFlags |= DirtyFlag_Framebuffer;
|
||||
|
||||
m_pending.computeShader = shader;
|
||||
m_pending.framebuffer = fb;
|
||||
}
|
||||
|
||||
void SetOMUAV(ID3D11UnorderedAccessView* uav)
|
||||
{
|
||||
if (m_current.uav != uav)
|
||||
m_dirtyFlags |= DirtyFlag_Framebuffer;
|
||||
|
||||
m_pending.uav = uav;
|
||||
}
|
||||
|
||||
void SetIntegerRTV(bool enable)
|
||||
{
|
||||
if (m_current.use_integer_rtv != enable)
|
||||
m_dirtyFlags |= DirtyFlag_Framebuffer;
|
||||
|
||||
m_pending.use_integer_rtv = enable;
|
||||
}
|
||||
|
||||
// removes currently set texture from all slots, returns mask of previously bound slots
|
||||
u32 UnsetTexture(ID3D11ShaderResourceView* srv);
|
||||
void SetTextureByMask(u32 textureSlotMask, ID3D11ShaderResourceView* srv);
|
||||
void ApplyTextures();
|
||||
|
||||
// call this immediately before any drawing operation or to explicitly apply pending resource
|
||||
// state changes
|
||||
void Apply();
|
||||
|
||||
// Binds constant buffers/textures/samplers to the compute shader stage.
|
||||
// We don't track these explicitly because it's not often-used.
|
||||
void SetComputeUAV(ID3D11UnorderedAccessView* uav);
|
||||
void SetComputeShader(ID3D11ComputeShader* shader);
|
||||
void SyncComputeBindings();
|
||||
|
||||
private:
|
||||
enum DirtyFlags
|
||||
{
|
||||
@ -227,20 +244,19 @@ private:
|
||||
DirtyFlag_PixelConstants = 1 << 16,
|
||||
DirtyFlag_VertexConstants = 1 << 17,
|
||||
DirtyFlag_GeometryConstants = 1 << 18,
|
||||
DirtyFlag_ComputeConstants = 1 << 19,
|
||||
|
||||
DirtyFlag_VertexBuffer = 1 << 20,
|
||||
DirtyFlag_IndexBuffer = 1 << 21,
|
||||
DirtyFlag_VertexBuffer = 1 << 19,
|
||||
DirtyFlag_IndexBuffer = 1 << 20,
|
||||
|
||||
DirtyFlag_PixelShader = 1 << 22,
|
||||
DirtyFlag_VertexShader = 1 << 23,
|
||||
DirtyFlag_GeometryShader = 1 << 24,
|
||||
DirtyFlag_ComputeShader = 1 << 25,
|
||||
DirtyFlag_PixelShader = 1 << 21,
|
||||
DirtyFlag_VertexShader = 1 << 22,
|
||||
DirtyFlag_GeometryShader = 1 << 23,
|
||||
|
||||
DirtyFlag_InputAssembler = 1 << 26,
|
||||
DirtyFlag_BlendState = 1 << 27,
|
||||
DirtyFlag_DepthState = 1 << 28,
|
||||
DirtyFlag_RasterizerState = 1 << 29,
|
||||
DirtyFlag_InputAssembler = 1 << 24,
|
||||
DirtyFlag_BlendState = 1 << 25,
|
||||
DirtyFlag_DepthState = 1 << 26,
|
||||
DirtyFlag_RasterizerState = 1 << 27,
|
||||
DirtyFlag_Framebuffer = 1 << 28
|
||||
};
|
||||
|
||||
u32 m_dirtyFlags = ~0u;
|
||||
@ -252,7 +268,6 @@ private:
|
||||
std::array<ID3D11Buffer*, 2> pixelConstants;
|
||||
ID3D11Buffer* vertexConstants;
|
||||
ID3D11Buffer* geometryConstants;
|
||||
ID3D11Buffer* computeConstants;
|
||||
ID3D11Buffer* vertexBuffer;
|
||||
ID3D11Buffer* indexBuffer;
|
||||
u32 vertexBufferStride;
|
||||
@ -262,18 +277,27 @@ private:
|
||||
ID3D11PixelShader* pixelShader;
|
||||
ID3D11VertexShader* vertexShader;
|
||||
ID3D11GeometryShader* geometryShader;
|
||||
ID3D11ComputeShader* computeShader;
|
||||
ID3D11BlendState* blendState;
|
||||
ID3D11DepthStencilState* depthState;
|
||||
ID3D11RasterizerState* rasterizerState;
|
||||
DXFramebuffer* framebuffer;
|
||||
ID3D11UnorderedAccessView* uav;
|
||||
bool use_integer_rtv;
|
||||
};
|
||||
|
||||
Resources m_pending = {};
|
||||
Resources m_current = {};
|
||||
|
||||
// Compute resources are synced with the graphics resources when we need them.
|
||||
ID3D11Buffer* m_compute_constants = nullptr;
|
||||
std::array<ID3D11ShaderResourceView*, 8> m_compute_textures{};
|
||||
std::array<ID3D11SamplerState*, 8> m_compute_samplers{};
|
||||
ID3D11UnorderedAccessView* m_compute_image = nullptr;
|
||||
ID3D11ComputeShader* m_compute_shader = nullptr;
|
||||
};
|
||||
|
||||
extern StateManager* stateman;
|
||||
|
||||
} // namespace
|
||||
} // namespace D3D
|
||||
|
||||
} // namespace DX11
|
||||
|
Reference in New Issue
Block a user