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
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:
// Constructor to build application-defined framebuffers
......
......@@ -35,6 +35,8 @@ class RenderTargetCache final : angle::NonCopyable
const RenderTargetArray &getColors() const;
RenderTargetT *getDepthStencil() const;
RenderTargetT *getColorRead(const gl::FramebufferState &state) const;
private:
void updateCachedRenderTarget(const gl::Context *context,
const gl::FramebufferAttachment *attachment,
......@@ -142,6 +144,15 @@ void RenderTargetCache<RenderTargetT>::updateCachedRenderTarget(
*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
#endif // LIBANGLE_RENDERER_RENDER_TARGET_CACHE_H_
......@@ -19,7 +19,7 @@ namespace rx
{
class Renderer11;
class VertexArray11 : public VertexArrayImpl, public angle::ObserverInterface
class VertexArray11 : public angle::ObserverInterface, public VertexArrayImpl
{
public:
VertexArray11(const gl::VertexArrayState &data);
......
......@@ -11,6 +11,7 @@
#define LIBANGLE_RENDERER_VULKAN_FRAMEBUFFERVK_H_
#include "libANGLE/renderer/FramebufferImpl.h"
#include "libANGLE/renderer/RenderTargetCache.h"
#include "libANGLE/renderer/vulkan/vk_cache_utils.h"
namespace rx
......@@ -102,6 +103,7 @@ class FramebufferVk : public FramebufferImpl, public ResourceVk
Optional<vk::RenderPassDesc> mRenderPassDesc;
vk::Framebuffer mFramebuffer;
Serial mLastRenderNodeSerial;
RenderTargetCache<RenderTargetVk> mRenderTargetCache;
};
} // 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