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