Commit 449d9d76 by Hyunchang Kim Committed by Commit Bot

Vulkan: Refactor garbarge collection related parameter

Use RendererVk instead of VkDevice as a parameter in garbage collection functions. Bug: angleproject:2162 Change-Id: Ifd53e05223d6d603402c9b7fcfa82fe1f896458c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2131882 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 20e375eb
......@@ -397,7 +397,7 @@ angle::Result CommandQueue::checkCompletedCommands(vk::Context *context)
{
for (vk::GarbageObject &garbage : garbageList.get())
{
garbage.destroy(device);
garbage.destroy(renderer);
}
}
else
......@@ -440,13 +440,13 @@ angle::Result CommandQueue::releaseToCommandBatch(vk::Context *context,
return angle::Result::Continue;
}
void CommandQueue::clearAllGarbage(VkDevice device)
void CommandQueue::clearAllGarbage(RendererVk *renderer)
{
for (vk::GarbageAndSerial &garbageList : mGarbageQueue)
{
for (vk::GarbageObject &garbage : garbageList.get())
{
garbage.destroy(device);
garbage.destroy(renderer);
}
}
mGarbageQueue.clear();
......@@ -1857,13 +1857,12 @@ void ContextVk::flushGpuEvents(double nextSyncGpuTimestampS, double nextSyncCpuT
void ContextVk::clearAllGarbage()
{
VkDevice device = getDevice();
for (vk::GarbageObject &garbage : mCurrentGarbage)
{
garbage.destroy(device);
garbage.destroy(mRenderer);
}
mCurrentGarbage.clear();
mCommandQueue.clearAllGarbage(device);
mCommandQueue.clearAllGarbage(mRenderer);
}
void ContextVk::handleDeviceLost()
......
......@@ -81,7 +81,7 @@ class CommandQueue final : angle::NonCopyable
angle::Result releasePrimaryCommandBuffer(vk::Context *context,
vk::PrimaryCommandBuffer &&commandBuffer);
void clearAllGarbage(VkDevice device);
void clearAllGarbage(RendererVk *renderer);
angle::Result finishToSerial(vk::Context *context, Serial serial, uint64_t timeout);
......
......@@ -44,7 +44,7 @@ void DisplayVk::terminate()
mRenderer->reloadVolkIfNeeded();
ASSERT(mRenderer);
mRenderer->onDestroy(this);
mRenderer->onDestroy();
}
egl::Error DisplayVk::makeCurrent(egl::Surface * /*drawSurface*/,
......
......@@ -592,7 +592,7 @@ RendererVk::~RendererVk()
ASSERT(mSharedGarbage.empty());
}
void RendererVk::onDestroy(vk::Context *context)
void RendererVk::onDestroy()
{
// Force all commands to finish by flushing all queues.
for (VkQueue queue : mQueues)
......@@ -605,7 +605,7 @@ void RendererVk::onDestroy(vk::Context *context)
// Then assign an infinite "last completed" serial to force garbage to delete.
mLastCompletedQueueSerial = Serial::Infinite();
(void)cleanupGarbage(context, true);
(void)cleanupGarbage(true);
ASSERT(mSharedGarbage.empty());
for (PendingOneOffCommands &pending : mPendingOneOffCommands)
......@@ -1913,7 +1913,7 @@ angle::Result RendererVk::queueSubmit(vk::Context *context,
ANGLE_VK_TRY(context, vkQueueSubmit(mQueues[priority], 1, &submitInfo, handle));
}
ANGLE_TRY(cleanupGarbage(context, false));
ANGLE_TRY(cleanupGarbage(false));
*serialOut = mCurrentQueueSerial;
mLastSubmittedQueueSerial = mCurrentQueueSerial;
......@@ -1946,7 +1946,7 @@ angle::Result RendererVk::queueWaitIdle(vk::Context *context, egl::ContextPriori
ANGLE_VK_TRY(context, vkQueueWaitIdle(mQueues[priority]));
}
ANGLE_TRY(cleanupGarbage(context, false));
ANGLE_TRY(cleanupGarbage(false));
return angle::Result::Continue;
}
......@@ -1958,7 +1958,7 @@ angle::Result RendererVk::deviceWaitIdle(vk::Context *context)
ANGLE_VK_TRY(context, vkDeviceWaitIdle(mDevice));
}
ANGLE_TRY(cleanupGarbage(context, false));
ANGLE_TRY(cleanupGarbage(false));
return angle::Result::Continue;
}
......@@ -2032,7 +2032,7 @@ bool RendererVk::hasFormatFeatureBits(VkFormat format, const VkFormatFeatureFlag
return IsMaskFlagSet(getFormatFeatureBits<features>(format, featureBits), featureBits);
}
angle::Result RendererVk::cleanupGarbage(vk::Context *context, bool block)
angle::Result RendererVk::cleanupGarbage(bool block)
{
std::lock_guard<decltype(mGarbageMutex)> lock(mGarbageMutex);
......@@ -2040,7 +2040,7 @@ angle::Result RendererVk::cleanupGarbage(vk::Context *context, bool block)
{
// Possibly 'counter' should be always zero when we add the object to garbage.
vk::SharedGarbage &garbage = *garbageIter;
if (garbage.destroyIfComplete(mDevice, mLastCompletedQueueSerial))
if (garbage.destroyIfComplete(this, mLastCompletedQueueSerial))
{
garbageIter = mSharedGarbage.erase(garbageIter);
}
......
......@@ -73,7 +73,7 @@ class RendererVk : angle::NonCopyable
const char *wsiLayer);
// Reload volk vk* function ptrs if needed for an already initialized RendererVk
void reloadVolkIfNeeded() const;
void onDestroy(vk::Context *context);
void onDestroy();
void notifyDeviceLost();
bool isDeviceLost() const;
......@@ -262,7 +262,7 @@ class RendererVk : angle::NonCopyable
template <VkFormatFeatureFlags VkFormatProperties::*features>
bool hasFormatFeatureBits(VkFormat format, const VkFormatFeatureFlags featureBits);
angle::Result cleanupGarbage(vk::Context *context, bool block);
angle::Result cleanupGarbage(bool block);
egl::Display *mDisplay;
......
......@@ -52,7 +52,7 @@ SharedGarbage &SharedGarbage::operator=(SharedGarbage &&rhs)
return *this;
}
bool SharedGarbage::destroyIfComplete(VkDevice device, Serial completedSerial)
bool SharedGarbage::destroyIfComplete(RendererVk *renderer, Serial completedSerial)
{
if (mLifetime.isCurrentlyInUse(completedSerial))
return false;
......@@ -61,7 +61,7 @@ bool SharedGarbage::destroyIfComplete(VkDevice device, Serial completedSerial)
for (GarbageObject &object : mGarbage)
{
object.destroy(device);
object.destroy(renderer);
}
return true;
......
......@@ -122,7 +122,7 @@ class SharedGarbage
~SharedGarbage();
SharedGarbage &operator=(SharedGarbage &&rhs);
bool destroyIfComplete(VkDevice device, Serial completedSerial);
bool destroyIfComplete(RendererVk *renderer, Serial completedSerial);
private:
SharedResourceUse mLifetime;
......
......@@ -559,8 +559,9 @@ GarbageObject &GarbageObject::operator=(GarbageObject &&rhs)
// GarbageObject implementation
// Using c-style casts here to avoid conditional compile for MSVC 32-bit
// which fails to compile with reinterpret_cast, requiring static_cast.
void GarbageObject::destroy(VkDevice device)
void GarbageObject::destroy(RendererVk *renderer)
{
VkDevice device = renderer->getDevice();
switch (mHandleType)
{
case HandleType::Semaphore:
......
......@@ -250,7 +250,7 @@ class GarbageObject
GarbageObject &operator=(GarbageObject &&rhs);
bool valid() const { return mHandle != VK_NULL_HANDLE; }
void destroy(VkDevice device);
void destroy(RendererVk *renderer);
template <typename DerivedT, typename HandleT>
static GarbageObject Get(WrappedObject<DerivedT, HandleT> *object)
......
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