Commit 66546be2 by Jamie Madill Committed by Commit Bot

Vulkan: Use RenderTargetCache in FramebufferVk.

The RenderTargetCache avoids many multiple calls to getRenderTarget, and should speed up the code somewhat on state changes. Also as a side benefit removes a bunch of swallowed ANGLE errors. Bug: angleproject:2372 Change-Id: I072481856aae8607f17a116e25c71acf04b4cc68 Reviewed-on: https://chromium-review.googlesource.com/948785Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 5242d5bf
...@@ -133,7 +133,7 @@ class FramebufferState final : angle::NonCopyable ...@@ -133,7 +133,7 @@ class FramebufferState final : angle::NonCopyable
angle::BitSet<IMPLEMENTATION_MAX_FRAMEBUFFER_ATTACHMENTS + 2> mResourceNeedsInit; angle::BitSet<IMPLEMENTATION_MAX_FRAMEBUFFER_ATTACHMENTS + 2> mResourceNeedsInit;
}; };
class Framebuffer final : public LabeledObject, public angle::ObserverInterface class Framebuffer final : public angle::ObserverInterface, public LabeledObject
{ {
public: public:
// Constructor to build application-defined framebuffers // Constructor to build application-defined framebuffers
......
...@@ -35,6 +35,8 @@ class RenderTargetCache final : angle::NonCopyable ...@@ -35,6 +35,8 @@ class RenderTargetCache final : angle::NonCopyable
const RenderTargetArray &getColors() const; const RenderTargetArray &getColors() const;
RenderTargetT *getDepthStencil() const; RenderTargetT *getDepthStencil() const;
RenderTargetT *getColorRead(const gl::FramebufferState &state) const;
private: private:
void updateCachedRenderTarget(const gl::Context *context, void updateCachedRenderTarget(const gl::Context *context,
const gl::FramebufferAttachment *attachment, const gl::FramebufferAttachment *attachment,
...@@ -142,6 +144,15 @@ void RenderTargetCache<RenderTargetT>::updateCachedRenderTarget( ...@@ -142,6 +144,15 @@ void RenderTargetCache<RenderTargetT>::updateCachedRenderTarget(
*cachedRenderTarget = newRenderTarget; *cachedRenderTarget = newRenderTarget;
} }
template <typename RenderTargetT>
RenderTargetT *RenderTargetCache<RenderTargetT>::getColorRead(
const gl::FramebufferState &state) const
{
ASSERT(mColorRenderTargets[state.getReadIndex()] &&
state.getReadIndex() < mColorRenderTargets.size());
return mColorRenderTargets[state.getReadIndex()];
}
} // namespace rx } // namespace rx
#endif // LIBANGLE_RENDERER_RENDER_TARGET_CACHE_H_ #endif // LIBANGLE_RENDERER_RENDER_TARGET_CACHE_H_
...@@ -19,7 +19,7 @@ namespace rx ...@@ -19,7 +19,7 @@ namespace rx
{ {
class Renderer11; class Renderer11;
class VertexArray11 : public VertexArrayImpl, public angle::ObserverInterface class VertexArray11 : public angle::ObserverInterface, public VertexArrayImpl
{ {
public: public:
VertexArray11(const gl::VertexArrayState &data); VertexArray11(const gl::VertexArrayState &data);
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#define LIBANGLE_RENDERER_VULKAN_FRAMEBUFFERVK_H_ #define LIBANGLE_RENDERER_VULKAN_FRAMEBUFFERVK_H_
#include "libANGLE/renderer/FramebufferImpl.h" #include "libANGLE/renderer/FramebufferImpl.h"
#include "libANGLE/renderer/RenderTargetCache.h"
#include "libANGLE/renderer/vulkan/vk_cache_utils.h" #include "libANGLE/renderer/vulkan/vk_cache_utils.h"
namespace rx namespace rx
...@@ -102,6 +103,7 @@ class FramebufferVk : public FramebufferImpl, public ResourceVk ...@@ -102,6 +103,7 @@ class FramebufferVk : public FramebufferImpl, public ResourceVk
Optional<vk::RenderPassDesc> mRenderPassDesc; Optional<vk::RenderPassDesc> mRenderPassDesc;
vk::Framebuffer mFramebuffer; vk::Framebuffer mFramebuffer;
Serial mLastRenderNodeSerial; Serial mLastRenderNodeSerial;
RenderTargetCache<RenderTargetVk> mRenderTargetCache;
}; };
} // namespace rx } // namespace rx
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment