// // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Clear11.h: Framebuffer clear utility class. #ifndef LIBANGLE_RENDERER_D3D_D3D11_CLEAR11_H_ #define LIBANGLE_RENDERER_D3D_D3D11_CLEAR11_H_ #include #include #include "libANGLE/angletypes.h" #include "libANGLE/Error.h" #include "libANGLE/Framebuffer.h" #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" namespace rx { class Renderer11; class RenderTarget11; struct ClearParameters; template struct RtvDsvClearInfo { T r, g, b, a; float z; float c1padding[3]; }; class Clear11 : angle::NonCopyable { public: explicit Clear11(Renderer11 *renderer); ~Clear11(); // Clears the framebuffer with the supplied clear parameters, assumes that the framebuffer is currently applied. gl::Error clearFramebuffer(const gl::Context *context, const ClearParameters &clearParams, const gl::FramebufferState &fboData); private: class ShaderManager final : angle::NonCopyable { 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 mVs9; d3d11::LazyShader mPsFloat9; d3d11::LazyShader mVs; d3d11::LazyShader mVsMultiview; d3d11::LazyShader mGsMultiview; d3d11::LazyShader mPsDepth; std::array, kNumShaders> mPsFloat; std::array, kNumShaders> mPsUInt; std::array, kNumShaders> mPsSInt; }; bool useVertexBuffer() const; gl::Error ensureConstantBufferCreated(); gl::Error ensureVertexBufferCreated(); gl::Error ensureResourcesInitialized(); Renderer11 *mRenderer; bool mResourcesInitialized; // States d3d11::RasterizerState mScissorEnabledRasterizerState; d3d11::RasterizerState mScissorDisabledRasterizerState; gl::DepthStencilState mDepthStencilStateKey; d3d11::BlendStateKey mBlendStateKey; // Shaders and shader resources ShaderManager mShaderManager; d3d11::Buffer mConstantBuffer; d3d11::Buffer mVertexBuffer; // Buffer data and draw parameters RtvDsvClearInfo mShaderData; }; } // namespace rx #endif // LIBANGLE_RENDERER_D3D_D3D11_CLEAR11_H_