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)
FramebufferImpl *ContextVk::createFramebuffer(const gl::FramebufferState &state)
{
return FramebufferVk::CreateUserFBO(state);
return FramebufferVk::CreateUserFBO(mRenderer, state);
}
TextureImpl *ContextVk::createTexture(const gl::TextureState &state)
......
......@@ -61,34 +61,33 @@ bool HasSrcAndDstBlitProperties(const VkPhysicalDevice &physicalDevice,
} // anonymous namespace
// 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
FramebufferVk *FramebufferVk::CreateDefaultFBO(const gl::FramebufferState &state,
FramebufferVk *FramebufferVk::CreateDefaultFBO(RendererVk *renderer,
const gl::FramebufferState &state,
WindowSurfaceVk *backbuffer)
{
return new FramebufferVk(state, backbuffer);
return new FramebufferVk(renderer, state, backbuffer);
}
FramebufferVk::FramebufferVk(const gl::FramebufferState &state)
: FramebufferImpl(state),
mBackbuffer(nullptr),
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)
FramebufferVk::FramebufferVk(RendererVk *renderer,
const gl::FramebufferState &state,
WindowSurfaceVk *backbuffer)
: FramebufferImpl(state),
mBackbuffer(backbuffer),
mActiveColorComponents(0),
mReadPixelsBuffer(VK_BUFFER_USAGE_TRANSFER_DST_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;
......@@ -477,12 +476,6 @@ angle::Result FramebufferVk::blitWithReadback(ContextVk *contextVk,
VkBuffer handleOut = VK_NULL_HANDLE;
uint32_t offsetOut = 0;
if (!mBlitPixelBuffer.valid())
{
mBlitPixelBuffer.init(1, renderer);
ASSERT(mBlitPixelBuffer.valid());
}
VkImageAspectFlags copyFlags =
vk::GetDepthStencilAspectFlagsForCopy(blitDepthBuffer, blitStencilBuffer);
......@@ -1154,12 +1147,6 @@ angle::Result FramebufferVk::readPixelsImpl(ContextVk *contextVk,
{
RendererVk *renderer = contextVk->getRenderer();
if (!mReadPixelsBuffer.valid())
{
mReadPixelsBuffer.init(1, renderer);
ASSERT(mReadPixelsBuffer.valid());
}
vk::CommandBuffer *commandBuffer = nullptr;
ANGLE_TRY(beginWriteResource(contextVk, &commandBuffer));
......
......@@ -26,12 +26,13 @@ class FramebufferVk : public FramebufferImpl, public vk::CommandGraphResource
{
public:
// 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
// ref-counted on the number of 'current' contexts, so we shouldn't get any dangling surface
// references. See Surface::setIsCurrent(bool).
static FramebufferVk *CreateDefaultFBO(const gl::FramebufferState &state,
static FramebufferVk *CreateDefaultFBO(RendererVk *renderer,
const gl::FramebufferState &state,
WindowSurfaceVk *backbuffer);
~FramebufferVk() override;
......@@ -107,8 +108,9 @@ class FramebufferVk : public FramebufferImpl, public vk::CommandGraphResource
RenderTargetVk *getColorReadRenderTarget() const;
private:
FramebufferVk(const gl::FramebufferState &state);
FramebufferVk(const gl::FramebufferState &state, WindowSurfaceVk *backbuffer);
FramebufferVk(RendererVk *renderer,
const gl::FramebufferState &state,
WindowSurfaceVk *backbuffer);
void blitUsingCopy(vk::CommandBuffer *commandBuffer,
const gl::Rectangle &readArea,
......
......@@ -13,6 +13,7 @@
#include "libANGLE/Context.h"
#include "libANGLE/Display.h"
#include "libANGLE/Surface.h"
#include "libANGLE/renderer/vulkan/ContextVk.h"
#include "libANGLE/renderer/vulkan/DisplayVk.h"
#include "libANGLE/renderer/vulkan/FramebufferVk.h"
#include "libANGLE/renderer/vulkan/RendererVk.h"
......@@ -151,8 +152,10 @@ void OffscreenSurfaceVk::destroy(const egl::Display *display)
FramebufferImpl *OffscreenSurfaceVk::createDefaultFramebuffer(const gl::Context *context,
const gl::FramebufferState &state)
{
RendererVk *renderer = vk::GetImpl(context)->getRenderer();
// 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)
......@@ -537,7 +540,8 @@ angle::Result WindowSurfaceVk::initializeImpl(DisplayVk *displayVk)
FramebufferImpl *WindowSurfaceVk::createDefaultFramebuffer(const gl::Context *context,
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)
......
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