Commit c57ee259 by Jamie Madill Committed by Commit Bot

Vulkan: Clean up object releasing APIs.

This cleans up the confusing releaseResource/releaseObject pair in the RendererVk class. It also makes getQueueSerial private in ResourceVk but keeps a public isResourceInUse API for external use. Bug: angleproject:2539 Change-Id: I6b4f24db16e36130a85ef03fc2c3b26d8d9e1fba Reviewed-on: https://chromium-review.googlesource.com/1069291 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarFrank Henigman <fjhenigman@chromium.org>
parent d014c9e6
......@@ -36,8 +36,8 @@ void BufferVk::destroy(const gl::Context *context)
void BufferVk::release(RendererVk *renderer)
{
renderer->releaseResource(*this, &mBuffer);
renderer->releaseResource(*this, &mBufferMemory);
renderer->releaseObject(getStoredQueueSerial(), &mBuffer);
renderer->releaseObject(getStoredQueueSerial(), &mBufferMemory);
}
gl::Error BufferVk::setData(const gl::Context *context,
......@@ -190,7 +190,7 @@ vk::Error BufferVk::setDataImpl(ContextVk *contextVk,
VkDevice device = contextVk->getDevice();
// Use map when available.
if (renderer->isResourceInUse(*this))
if (isResourceInUse(renderer))
{
vk::StagingBuffer stagingBuffer;
ANGLE_TRY(stagingBuffer.init(contextVk, static_cast<VkDeviceSize>(size),
......@@ -230,7 +230,7 @@ vk::Error BufferVk::setDataImpl(ContextVk *contextVk,
// Immediately release staging buffer.
// TODO(jmadill): Staging buffer re-use.
renderer->releaseObject(getQueueSerial(), &stagingBuffer);
renderer->releaseObject(getStoredQueueSerial(), &stagingBuffer);
}
else
{
......
......@@ -142,7 +142,12 @@ void CommandGraphResource::updateQueueSerial(Serial queueSerial)
}
}
Serial CommandGraphResource::getQueueSerial() const
bool CommandGraphResource::isResourceInUse(RendererVk *renderer) const
{
return renderer->isSerialInUse(mStoredQueueSerial);
}
Serial CommandGraphResource::getStoredQueueSerial() const
{
return mStoredQueueSerial;
}
......@@ -250,7 +255,7 @@ void CommandGraphResource::addWriteDependency(CommandGraphResource *writingResou
CommandGraphNode *writingNode = writingResource->mCurrentWritingNode;
ASSERT(writingNode);
onWriteImpl(writingNode, writingResource->getQueueSerial());
onWriteImpl(writingNode, writingResource->getStoredQueueSerial());
}
void CommandGraphResource::onWriteImpl(CommandGraphNode *writingNode, Serial currentSerial)
......@@ -274,7 +279,7 @@ void CommandGraphResource::onWriteImpl(CommandGraphNode *writingNode, Serial cur
void CommandGraphResource::addReadDependency(CommandGraphResource *readingResource)
{
updateQueueSerial(readingResource->getQueueSerial());
updateQueueSerial(readingResource->getStoredQueueSerial());
CommandGraphNode *readingNode = readingResource->mCurrentWritingNode;
ASSERT(readingNode);
......
......@@ -31,7 +31,8 @@ class CommandGraphResource
CommandGraphResource();
virtual ~CommandGraphResource();
Serial getQueueSerial() const;
// Returns true if the resource is in use by the renderer.
bool isResourceInUse(RendererVk *renderer) const;
// Sets up dependency relations. 'this' resource is the resource being written to.
void addWriteDependency(CommandGraphResource *writingResource);
......@@ -71,6 +72,9 @@ class CommandGraphResource
// Called when 'this' object changes, but we'd like to start a new command buffer later.
void onResourceChanged(RendererVk *renderer);
// Get the current queue serial for this resource. Only used to release resources.
Serial getStoredQueueSerial() const;
private:
void onWriteImpl(CommandGraphNode *writingNode, Serial currentSerial);
......
......@@ -76,7 +76,7 @@ void FramebufferVk::destroy(const gl::Context *context)
{
ContextVk *contextVk = vk::GetImpl(context);
RendererVk *renderer = contextVk->getRenderer();
renderer->releaseResource(*this, &mFramebuffer);
renderer->releaseObject(getStoredQueueSerial(), &mFramebuffer);
mReadPixelsBuffer.destroy(contextVk->getDevice());
}
......@@ -388,7 +388,7 @@ gl::Error FramebufferVk::syncState(const gl::Context *context,
mActiveColorComponentMasks[2].any(), mActiveColorComponentMasks[3].any());
mRenderPassDesc.reset();
renderer->releaseResource(*this, &mFramebuffer);
renderer->releaseObject(getStoredQueueSerial(), &mFramebuffer);
// Will freeze the current set of dependencies on this FBO. The next time we render we will
// create a new entry in the command graph.
......
......@@ -38,7 +38,7 @@ gl::Error RenderbufferVk::onDestroy(const gl::Context *context)
RendererVk *renderer = contextVk->getRenderer();
mImage.release(renderer->getCurrentQueueSerial(), renderer);
renderer->releaseResource(*this, &mImageView);
renderer->releaseObject(getStoredQueueSerial(), &mImageView);
onStateChange(context, angle::SubjectMessage::DEPENDENT_DIRTY_BITS);
......@@ -63,7 +63,7 @@ gl::Error RenderbufferVk::setStorage(const gl::Context *context,
static_cast<GLsizei>(height) != mState.getHeight())
{
mImage.release(renderer->getCurrentQueueSerial(), renderer);
renderer->releaseResource(*this, &mImageView);
renderer->releaseObject(getStoredQueueSerial(), &mImageView);
onStateChange(context, angle::SubjectMessage::DEPENDENT_DIRTY_BITS);
}
}
......
......@@ -22,7 +22,6 @@
#include "libANGLE/renderer/vulkan/FramebufferVk.h"
#include "libANGLE/renderer/vulkan/GlslangWrapper.h"
#include "libANGLE/renderer/vulkan/ProgramVk.h"
#include "libANGLE/renderer/vulkan/TextureVk.h"
#include "libANGLE/renderer/vulkan/VertexArrayVk.h"
#include "libANGLE/renderer/vulkan/vk_caps_utils.h"
#include "libANGLE/renderer/vulkan/vk_format_utils.h"
......@@ -795,11 +794,6 @@ Serial RendererVk::getCurrentQueueSerial() const
return mCurrentQueueSerial;
}
bool RendererVk::isResourceInUse(const vk::CommandGraphResource &resource)
{
return isSerialInUse(resource.getQueueSerial());
}
bool RendererVk::isSerialInUse(Serial serial)
{
return serial > mLastCompletedQueueSerial;
......
......@@ -74,17 +74,9 @@ class RendererVk : angle::NonCopyable
Serial getCurrentQueueSerial() const;
bool isResourceInUse(const vk::CommandGraphResource &resource);
bool isSerialInUse(Serial serial);
template <typename T>
void releaseResource(const vk::CommandGraphResource &resource, T *object)
{
Serial resourceSerial = resource.getQueueSerial();
releaseObject(resourceSerial, object);
}
template <typename T>
void releaseObject(Serial resourceSerial, T *object)
{
if (!isSerialInUse(resourceSerial))
......
......@@ -392,7 +392,7 @@ gl::Error TextureVk::onDestroy(const gl::Context *context)
RendererVk *renderer = contextVk->getRenderer();
releaseImage(context, renderer);
renderer->releaseResource(*this, &mSampler);
renderer->releaseObject(getStoredQueueSerial(), &mSampler);
mPixelBuffer.release(renderer);
return gl::NoError();
......@@ -752,7 +752,7 @@ gl::Error TextureVk::syncState(const gl::Context *context, const gl::Texture::Di
if (mSampler.valid())
{
RendererVk *renderer = contextVk->getRenderer();
renderer->releaseResource(*this, &mSampler);
renderer->releaseObject(getStoredQueueSerial(), &mSampler);
}
const gl::SamplerState &samplerState = mState.getSamplerState();
......@@ -861,8 +861,8 @@ vk::Error TextureVk::initImage(RendererVk *renderer,
void TextureVk::releaseImage(const gl::Context *context, RendererVk *renderer)
{
mImage.release(renderer->getCurrentQueueSerial(), renderer);
renderer->releaseResource(*this, &mBaseLevelImageView);
renderer->releaseResource(*this, &mMipmapImageView);
renderer->releaseObject(getStoredQueueSerial(), &mBaseLevelImageView);
renderer->releaseObject(getStoredQueueSerial(), &mMipmapImageView);
onStateChange(context, angle::SubjectMessage::DEPENDENT_DIRTY_BITS);
}
......
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