Commit 639bc908 by Jamie Madill Committed by Commit Bot

Vulkan: Pass Renderer to FramebufferVk init.

This cleans up a few places where we were initializing the dynamic buffers. Bug: angleproject:2729 Change-Id: I0c9a61c62ef4d0eb865abc0011f7086d6e2acef6 Reviewed-on: https://chromium-review.googlesource.com/1142297 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarFrank Henigman <fjhenigman@chromium.org>
parent 4edf1bca
...@@ -756,7 +756,7 @@ ProgramImpl *ContextVk::createProgram(const gl::ProgramState &state) ...@@ -756,7 +756,7 @@ ProgramImpl *ContextVk::createProgram(const gl::ProgramState &state)
FramebufferImpl *ContextVk::createFramebuffer(const gl::FramebufferState &state) FramebufferImpl *ContextVk::createFramebuffer(const gl::FramebufferState &state)
{ {
return FramebufferVk::CreateUserFBO(state); return FramebufferVk::CreateUserFBO(mRenderer, state);
} }
TextureImpl *ContextVk::createTexture(const gl::TextureState &state) TextureImpl *ContextVk::createTexture(const gl::TextureState &state)
......
...@@ -61,34 +61,33 @@ bool HasSrcAndDstBlitProperties(const VkPhysicalDevice &physicalDevice, ...@@ -61,34 +61,33 @@ bool HasSrcAndDstBlitProperties(const VkPhysicalDevice &physicalDevice,
} // anonymous namespace } // anonymous namespace
// static // static
FramebufferVk *FramebufferVk::CreateUserFBO(const gl::FramebufferState &state) FramebufferVk *FramebufferVk::CreateUserFBO(RendererVk *renderer, const gl::FramebufferState &state)
{ {
return new FramebufferVk(state); return new FramebufferVk(renderer, state, nullptr);
} }
// static // static
FramebufferVk *FramebufferVk::CreateDefaultFBO(const gl::FramebufferState &state, FramebufferVk *FramebufferVk::CreateDefaultFBO(RendererVk *renderer,
const gl::FramebufferState &state,
WindowSurfaceVk *backbuffer) WindowSurfaceVk *backbuffer)
{ {
return new FramebufferVk(state, backbuffer); return new FramebufferVk(renderer, state, backbuffer);
} }
FramebufferVk::FramebufferVk(const gl::FramebufferState &state) FramebufferVk::FramebufferVk(RendererVk *renderer,
: FramebufferImpl(state), const gl::FramebufferState &state,
mBackbuffer(nullptr), WindowSurfaceVk *backbuffer)
mActiveColorComponents(0),
mReadPixelsBuffer(VK_BUFFER_USAGE_TRANSFER_DST_BIT, kMinReadPixelsBufferSize),
mBlitPixelBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT, kMinReadPixelsBufferSize)
{
}
FramebufferVk::FramebufferVk(const gl::FramebufferState &state, WindowSurfaceVk *backbuffer)
: FramebufferImpl(state), : FramebufferImpl(state),
mBackbuffer(backbuffer), mBackbuffer(backbuffer),
mActiveColorComponents(0), mActiveColorComponents(0),
mReadPixelsBuffer(VK_BUFFER_USAGE_TRANSFER_DST_BIT, kMinReadPixelsBufferSize), mReadPixelsBuffer(VK_BUFFER_USAGE_TRANSFER_DST_BIT, kMinReadPixelsBufferSize),
mBlitPixelBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT, kMinReadPixelsBufferSize) mBlitPixelBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT, kMinReadPixelsBufferSize)
{ {
mBlitPixelBuffer.init(1, renderer);
ASSERT(mBlitPixelBuffer.valid());
mReadPixelsBuffer.init(1, renderer);
ASSERT(mReadPixelsBuffer.valid());
} }
FramebufferVk::~FramebufferVk() = default; FramebufferVk::~FramebufferVk() = default;
...@@ -477,12 +476,6 @@ angle::Result FramebufferVk::blitWithReadback(ContextVk *contextVk, ...@@ -477,12 +476,6 @@ angle::Result FramebufferVk::blitWithReadback(ContextVk *contextVk,
VkBuffer handleOut = VK_NULL_HANDLE; VkBuffer handleOut = VK_NULL_HANDLE;
uint32_t offsetOut = 0; uint32_t offsetOut = 0;
if (!mBlitPixelBuffer.valid())
{
mBlitPixelBuffer.init(1, renderer);
ASSERT(mBlitPixelBuffer.valid());
}
VkImageAspectFlags copyFlags = VkImageAspectFlags copyFlags =
vk::GetDepthStencilAspectFlagsForCopy(blitDepthBuffer, blitStencilBuffer); vk::GetDepthStencilAspectFlagsForCopy(blitDepthBuffer, blitStencilBuffer);
...@@ -1154,12 +1147,6 @@ angle::Result FramebufferVk::readPixelsImpl(ContextVk *contextVk, ...@@ -1154,12 +1147,6 @@ angle::Result FramebufferVk::readPixelsImpl(ContextVk *contextVk,
{ {
RendererVk *renderer = contextVk->getRenderer(); RendererVk *renderer = contextVk->getRenderer();
if (!mReadPixelsBuffer.valid())
{
mReadPixelsBuffer.init(1, renderer);
ASSERT(mReadPixelsBuffer.valid());
}
vk::CommandBuffer *commandBuffer = nullptr; vk::CommandBuffer *commandBuffer = nullptr;
ANGLE_TRY(beginWriteResource(contextVk, &commandBuffer)); ANGLE_TRY(beginWriteResource(contextVk, &commandBuffer));
......
...@@ -26,12 +26,13 @@ class FramebufferVk : public FramebufferImpl, public vk::CommandGraphResource ...@@ -26,12 +26,13 @@ class FramebufferVk : public FramebufferImpl, public vk::CommandGraphResource
{ {
public: public:
// Factory methods so we don't have to use constructors with overloads. // Factory methods so we don't have to use constructors with overloads.
static FramebufferVk *CreateUserFBO(const gl::FramebufferState &state); static FramebufferVk *CreateUserFBO(RendererVk *renderer, const gl::FramebufferState &state);
// The passed-in SurfaceVK must be destroyed after this FBO is destroyed. Our Surface code is // The passed-in SurfaceVK must be destroyed after this FBO is destroyed. Our Surface code is
// ref-counted on the number of 'current' contexts, so we shouldn't get any dangling surface // ref-counted on the number of 'current' contexts, so we shouldn't get any dangling surface
// references. See Surface::setIsCurrent(bool). // references. See Surface::setIsCurrent(bool).
static FramebufferVk *CreateDefaultFBO(const gl::FramebufferState &state, static FramebufferVk *CreateDefaultFBO(RendererVk *renderer,
const gl::FramebufferState &state,
WindowSurfaceVk *backbuffer); WindowSurfaceVk *backbuffer);
~FramebufferVk() override; ~FramebufferVk() override;
...@@ -107,8 +108,9 @@ class FramebufferVk : public FramebufferImpl, public vk::CommandGraphResource ...@@ -107,8 +108,9 @@ class FramebufferVk : public FramebufferImpl, public vk::CommandGraphResource
RenderTargetVk *getColorReadRenderTarget() const; RenderTargetVk *getColorReadRenderTarget() const;
private: private:
FramebufferVk(const gl::FramebufferState &state); FramebufferVk(RendererVk *renderer,
FramebufferVk(const gl::FramebufferState &state, WindowSurfaceVk *backbuffer); const gl::FramebufferState &state,
WindowSurfaceVk *backbuffer);
void blitUsingCopy(vk::CommandBuffer *commandBuffer, void blitUsingCopy(vk::CommandBuffer *commandBuffer,
const gl::Rectangle &readArea, const gl::Rectangle &readArea,
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "libANGLE/Context.h" #include "libANGLE/Context.h"
#include "libANGLE/Display.h" #include "libANGLE/Display.h"
#include "libANGLE/Surface.h" #include "libANGLE/Surface.h"
#include "libANGLE/renderer/vulkan/ContextVk.h"
#include "libANGLE/renderer/vulkan/DisplayVk.h" #include "libANGLE/renderer/vulkan/DisplayVk.h"
#include "libANGLE/renderer/vulkan/FramebufferVk.h" #include "libANGLE/renderer/vulkan/FramebufferVk.h"
#include "libANGLE/renderer/vulkan/RendererVk.h" #include "libANGLE/renderer/vulkan/RendererVk.h"
...@@ -151,8 +152,10 @@ void OffscreenSurfaceVk::destroy(const egl::Display *display) ...@@ -151,8 +152,10 @@ void OffscreenSurfaceVk::destroy(const egl::Display *display)
FramebufferImpl *OffscreenSurfaceVk::createDefaultFramebuffer(const gl::Context *context, FramebufferImpl *OffscreenSurfaceVk::createDefaultFramebuffer(const gl::Context *context,
const gl::FramebufferState &state) const gl::FramebufferState &state)
{ {
RendererVk *renderer = vk::GetImpl(context)->getRenderer();
// Use a user FBO for an offscreen RT. // Use a user FBO for an offscreen RT.
return FramebufferVk::CreateUserFBO(state); return FramebufferVk::CreateUserFBO(renderer, state);
} }
egl::Error OffscreenSurfaceVk::swap(const gl::Context *context) egl::Error OffscreenSurfaceVk::swap(const gl::Context *context)
...@@ -537,7 +540,8 @@ angle::Result WindowSurfaceVk::initializeImpl(DisplayVk *displayVk) ...@@ -537,7 +540,8 @@ angle::Result WindowSurfaceVk::initializeImpl(DisplayVk *displayVk)
FramebufferImpl *WindowSurfaceVk::createDefaultFramebuffer(const gl::Context *context, FramebufferImpl *WindowSurfaceVk::createDefaultFramebuffer(const gl::Context *context,
const gl::FramebufferState &state) const gl::FramebufferState &state)
{ {
return FramebufferVk::CreateDefaultFBO(state, this); RendererVk *renderer = vk::GetImpl(context)->getRenderer();
return FramebufferVk::CreateDefaultFBO(renderer, state, this);
} }
egl::Error WindowSurfaceVk::swap(const gl::Context *context) egl::Error WindowSurfaceVk::swap(const gl::Context *context)
......
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