summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.h')
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.h105
1 files changed, 54 insertions, 51 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.h b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.h
index 3ff73c85d1..a09812c42b 100644
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.h
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/Clear11.h
@@ -23,6 +23,14 @@ class Renderer11;
class RenderTarget11;
struct ClearParameters;
+template <typename T>
+struct RtvDsvClearInfo
+{
+ T r, g, b, a;
+ float z;
+ float c1padding[3];
+};
+
class Clear11 : angle::NonCopyable
{
public:
@@ -30,68 +38,63 @@ class Clear11 : angle::NonCopyable
~Clear11();
// Clears the framebuffer with the supplied clear parameters, assumes that the framebuffer is currently applied.
- gl::Error clearFramebuffer(const ClearParameters &clearParams, const gl::Framebuffer::Data &fboData);
+ gl::Error clearFramebuffer(const gl::Context *context,
+ const ClearParameters &clearParams,
+ const gl::FramebufferState &fboData);
private:
- struct MaskedRenderTarget
- {
- bool colorMask[4];
- RenderTarget11 *renderTarget;
- };
-
- ID3D11BlendState *getBlendState(const std::vector<MaskedRenderTarget> &rts);
- ID3D11DepthStencilState *getDepthStencilState(const ClearParameters &clearParams);
-
- struct ClearShader final : public angle::NonCopyable
+ class ShaderManager final : angle::NonCopyable
{
- ClearShader(DXGI_FORMAT colorType,
- const char *inputLayoutName,
- const BYTE *vsByteCode,
- size_t vsSize,
- const char *vsDebugName,
- const BYTE *psByteCode,
- size_t psSize,
- const char *psDebugName);
- ~ClearShader();
-
- d3d11::LazyInputLayout *inputLayout;
- d3d11::LazyShader<ID3D11VertexShader> vertexShader;
- d3d11::LazyShader<ID3D11PixelShader> pixelShader;
+ public:
+ ShaderManager();
+ ~ShaderManager();
+ gl::Error getShadersAndLayout(Renderer11 *renderer,
+ const INT clearType,
+ const uint32_t numRTs,
+ const bool hasLayeredLayout,
+ const d3d11::InputLayout **il,
+ const d3d11::VertexShader **vs,
+ const d3d11::GeometryShader **gs,
+ const d3d11::PixelShader **ps);
+
+ private:
+ constexpr static size_t kNumShaders = D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT;
+
+ d3d11::InputLayout mIl9;
+ d3d11::LazyShader<ID3D11VertexShader> mVs9;
+ d3d11::LazyShader<ID3D11PixelShader> mPsFloat9;
+ d3d11::LazyShader<ID3D11VertexShader> mVs;
+ d3d11::LazyShader<ID3D11VertexShader> mVsMultiview;
+ d3d11::LazyShader<ID3D11GeometryShader> mGsMultiview;
+ d3d11::LazyShader<ID3D11PixelShader> mPsDepth;
+ std::array<d3d11::LazyShader<ID3D11PixelShader>, kNumShaders> mPsFloat;
+ std::array<d3d11::LazyShader<ID3D11PixelShader>, kNumShaders> mPsUInt;
+ std::array<d3d11::LazyShader<ID3D11PixelShader>, kNumShaders> mPsSInt;
};
- template <unsigned int vsSize, unsigned int psSize>
- static ClearShader CreateClearShader(ID3D11Device *device, DXGI_FORMAT colorType, const BYTE(&vsByteCode)[vsSize], const BYTE(&psByteCode)[psSize]);
-
- struct ClearBlendInfo
- {
- bool maskChannels[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT][4];
- };
- typedef bool(*ClearBlendInfoComparisonFunction)(const ClearBlendInfo&, const ClearBlendInfo &);
- typedef std::map<ClearBlendInfo, ID3D11BlendState*, ClearBlendInfoComparisonFunction> ClearBlendStateMap;
-
- struct ClearDepthStencilInfo
- {
- bool clearDepth;
- bool clearStencil;
- UINT8 stencilWriteMask;
- };
- typedef bool(*ClearDepthStencilInfoComparisonFunction)(const ClearDepthStencilInfo&, const ClearDepthStencilInfo &);
- typedef std::map<ClearDepthStencilInfo, ID3D11DepthStencilState*, ClearDepthStencilInfoComparisonFunction> ClearDepthStencilStateMap;
+ bool useVertexBuffer() const;
+ gl::Error ensureConstantBufferCreated();
+ gl::Error ensureVertexBufferCreated();
+ gl::Error ensureResourcesInitialized();
Renderer11 *mRenderer;
+ bool mResourcesInitialized;
- ClearBlendStateMap mClearBlendStates;
-
- ClearShader *mFloatClearShader;
- ClearShader *mUintClearShader;
- ClearShader *mIntClearShader;
+ // States
+ d3d11::RasterizerState mScissorEnabledRasterizerState;
+ d3d11::RasterizerState mScissorDisabledRasterizerState;
+ gl::DepthStencilState mDepthStencilStateKey;
+ d3d11::BlendStateKey mBlendStateKey;
- ClearDepthStencilStateMap mClearDepthStencilStates;
+ // Shaders and shader resources
+ ShaderManager mShaderManager;
+ d3d11::Buffer mConstantBuffer;
+ d3d11::Buffer mVertexBuffer;
- ID3D11Buffer *mVertexBuffer;
- ID3D11RasterizerState *mRasterizerState;
+ // Buffer data and draw parameters
+ RtvDsvClearInfo<float> mShaderData;
};
-}
+} // namespace rx
#endif // LIBANGLE_RENDERER_D3D_D3D11_CLEAR11_H_