Commit a30c6f35 by Jamie Madill Committed by Commit Bot

Vulkan: Pass RendererVk to BufferHelper::destroy.

Bug: angleproject:2162 Change-Id: I7c0090d48b0a5bac222b1edf4c2db280d5b32930 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2139993 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarMohan Maiya <m.maiya@samsung.com> Reviewed-by: 's avatarCourtney Goeltzenleuchter <courtneygo@google.com>
parent e4da6f15
...@@ -302,11 +302,11 @@ void ContextVk::DriverUniformsDescriptorSet::init(RendererVk *rendererVk) ...@@ -302,11 +302,11 @@ void ContextVk::DriverUniformsDescriptorSet::init(RendererVk *rendererVk)
kDriverUniformsAllocatorPageSize, true); kDriverUniformsAllocatorPageSize, true);
} }
void ContextVk::DriverUniformsDescriptorSet::destroy(VkDevice device) void ContextVk::DriverUniformsDescriptorSet::destroy(RendererVk *renderer)
{ {
descriptorSetLayout.reset(); descriptorSetLayout.reset();
descriptorPoolBinding.reset(); descriptorPoolBinding.reset();
dynamicBuffer.destroy(device); dynamicBuffer.destroy(renderer);
} }
// CommandBatch implementation. // CommandBatch implementation.
...@@ -725,14 +725,14 @@ void ContextVk::onDestroy(const gl::Context *context) ...@@ -725,14 +725,14 @@ void ContextVk::onDestroy(const gl::Context *context)
for (DriverUniformsDescriptorSet &driverUniforms : mDriverUniforms) for (DriverUniformsDescriptorSet &driverUniforms : mDriverUniforms)
{ {
driverUniforms.destroy(device); driverUniforms.destroy(mRenderer);
} }
mDriverUniformsDescriptorPool.destroy(device); mDriverUniformsDescriptorPool.destroy(device);
for (vk::DynamicBuffer &defaultBuffer : mDefaultAttribBuffers) for (vk::DynamicBuffer &defaultBuffer : mDefaultAttribBuffers)
{ {
defaultBuffer.destroy(device); defaultBuffer.destroy(mRenderer);
} }
for (vk::DynamicQueryPool &queryPool : mQueryPools) for (vk::DynamicQueryPool &queryPool : mQueryPools)
......
...@@ -703,7 +703,7 @@ class ContextVk : public ContextImpl, public vk::Context ...@@ -703,7 +703,7 @@ class ContextVk : public ContextImpl, public vk::Context
~DriverUniformsDescriptorSet(); ~DriverUniformsDescriptorSet();
void init(RendererVk *rendererVk); void init(RendererVk *rendererVk);
void destroy(VkDevice device); void destroy(RendererVk *rendererVk);
}; };
enum class PipelineType enum class PipelineType
......
...@@ -70,12 +70,13 @@ angle::Result OverlayVk::init(const gl::Context *context) ...@@ -70,12 +70,13 @@ angle::Result OverlayVk::init(const gl::Context *context)
void OverlayVk::onDestroy(const gl::Context *context) void OverlayVk::onDestroy(const gl::Context *context)
{ {
VkDevice device = vk::GetImpl(context)->getDevice(); RendererVk *renderer = vk::GetImpl(context)->getRenderer();
VkDevice device = renderer->getDevice();
mCulledWidgets.destroy(device); mCulledWidgets.destroy(renderer);
mCulledWidgetsView.destroy(device); mCulledWidgetsView.destroy(device);
mFontImage.destroy(device); mFontImage.destroy(renderer);
mFontImageView.destroy(device); mFontImageView.destroy(device);
} }
......
...@@ -1022,7 +1022,7 @@ void WindowSurfaceVk::releaseSwapchainImages(ContextVk *contextVk) ...@@ -1022,7 +1022,7 @@ void WindowSurfaceVk::releaseSwapchainImages(ContextVk *contextVk)
{ {
// We don't own the swapchain image handles, so we just remove our reference to it. // We don't own the swapchain image handles, so we just remove our reference to it.
swapchainImage.image.resetImageWeakReference(); swapchainImage.image.resetImageWeakReference();
swapchainImage.image.destroy(contextVk->getDevice()); swapchainImage.image.destroy(renderer);
swapchainImage.imageViews.release(renderer); swapchainImage.imageViews.release(renderer);
contextVk->addGarbage(&swapchainImage.framebuffer); contextVk->addGarbage(&swapchainImage.framebuffer);
...@@ -1040,11 +1040,12 @@ void WindowSurfaceVk::releaseSwapchainImages(ContextVk *contextVk) ...@@ -1040,11 +1040,12 @@ void WindowSurfaceVk::releaseSwapchainImages(ContextVk *contextVk)
void WindowSurfaceVk::destroySwapChainImages(DisplayVk *displayVk) void WindowSurfaceVk::destroySwapChainImages(DisplayVk *displayVk)
{ {
VkDevice device = displayVk->getDevice(); RendererVk *renderer = displayVk->getRenderer();
VkDevice device = displayVk->getDevice();
mDepthStencilImage.destroy(device); mDepthStencilImage.destroy(renderer);
mDepthStencilImageViews.destroy(device); mDepthStencilImageViews.destroy(device);
mColorImageMS.destroy(device); mColorImageMS.destroy(renderer);
mColorImageMSViews.destroy(device); mColorImageMSViews.destroy(device);
mFramebufferMS.destroy(device); mFramebufferMS.destroy(device);
...@@ -1052,7 +1053,7 @@ void WindowSurfaceVk::destroySwapChainImages(DisplayVk *displayVk) ...@@ -1052,7 +1053,7 @@ void WindowSurfaceVk::destroySwapChainImages(DisplayVk *displayVk)
{ {
// We don't own the swapchain image handles, so we just remove our reference to it. // We don't own the swapchain image handles, so we just remove our reference to it.
swapchainImage.image.resetImageWeakReference(); swapchainImage.image.resetImageWeakReference();
swapchainImage.image.destroy(device); swapchainImage.image.destroy(renderer);
swapchainImage.imageViews.destroy(device); swapchainImage.imageViews.destroy(device);
swapchainImage.framebuffer.destroy(device); swapchainImage.framebuffer.destroy(device);
......
...@@ -633,11 +633,11 @@ void DynamicBuffer::releaseBufferListToRenderer(RendererVk *renderer, ...@@ -633,11 +633,11 @@ void DynamicBuffer::releaseBufferListToRenderer(RendererVk *renderer,
buffers->clear(); buffers->clear();
} }
void DynamicBuffer::destroyBufferList(VkDevice device, std::vector<BufferHelper *> *buffers) void DynamicBuffer::destroyBufferList(RendererVk *renderer, std::vector<BufferHelper *> *buffers)
{ {
for (BufferHelper *toFree : *buffers) for (BufferHelper *toFree : *buffers)
{ {
toFree->destroy(device); toFree->destroy(renderer);
delete toFree; delete toFree;
} }
...@@ -676,17 +676,17 @@ void DynamicBuffer::releaseInFlightBuffers(ContextVk *contextVk) ...@@ -676,17 +676,17 @@ void DynamicBuffer::releaseInFlightBuffers(ContextVk *contextVk)
mInFlightBuffers.clear(); mInFlightBuffers.clear();
} }
void DynamicBuffer::destroy(VkDevice device) void DynamicBuffer::destroy(RendererVk *renderer)
{ {
reset(); reset();
destroyBufferList(device, &mInFlightBuffers); destroyBufferList(renderer, &mInFlightBuffers);
destroyBufferList(device, &mBufferFreeList); destroyBufferList(renderer, &mBufferFreeList);
if (mBuffer) if (mBuffer)
{ {
mBuffer->unmap(device); mBuffer->unmap(renderer->getDevice());
mBuffer->destroy(device); mBuffer->destroy(renderer);
delete mBuffer; delete mBuffer;
mBuffer = nullptr; mBuffer = nullptr;
} }
...@@ -1620,10 +1620,10 @@ void LineLoopHelper::release(ContextVk *contextVk) ...@@ -1620,10 +1620,10 @@ void LineLoopHelper::release(ContextVk *contextVk)
mDynamicIndirectBuffer.release(contextVk->getRenderer()); mDynamicIndirectBuffer.release(contextVk->getRenderer());
} }
void LineLoopHelper::destroy(VkDevice device) void LineLoopHelper::destroy(RendererVk *renderer)
{ {
mDynamicIndexBuffer.destroy(device); mDynamicIndexBuffer.destroy(renderer);
mDynamicIndirectBuffer.destroy(device); mDynamicIndirectBuffer.destroy(renderer);
} }
// static // static
...@@ -1727,8 +1727,10 @@ angle::Result BufferHelper::initializeNonZeroMemory(Context *context, VkDeviceSi ...@@ -1727,8 +1727,10 @@ angle::Result BufferHelper::initializeNonZeroMemory(Context *context, VkDeviceSi
return angle::Result::Continue; return angle::Result::Continue;
} }
void BufferHelper::destroy(VkDevice device) void BufferHelper::destroy(RendererVk *renderer)
{ {
VkDevice device = renderer->getDevice();
unmap(device); unmap(device);
mSize = 0; mSize = 0;
mViewFormat = nullptr; mViewFormat = nullptr;
...@@ -2191,11 +2193,13 @@ angle::Result ImageHelper::initLayerImageView(Context *context, ...@@ -2191,11 +2193,13 @@ angle::Result ImageHelper::initLayerImageView(Context *context,
return angle::Result::Continue; return angle::Result::Continue;
} }
void ImageHelper::destroy(VkDevice device) void ImageHelper::destroy(RendererVk *renderer)
{ {
VkDevice device = renderer->getDevice();
mImage.destroy(device); mImage.destroy(device);
mDeviceMemory.destroy(device); mDeviceMemory.destroy(device);
mStagingBuffer.destroy(device); mStagingBuffer.destroy(renderer);
mCurrentLayout = ImageLayout::Undefined; mCurrentLayout = ImageLayout::Undefined;
mLayerCount = 0; mLayerCount = 0;
mLevelCount = 0; mLevelCount = 0;
...@@ -3539,7 +3543,7 @@ angle::Result ImageHelper::readPixels(ContextVk *contextVk, ...@@ -3539,7 +3543,7 @@ angle::Result ImageHelper::readPixels(ContextVk *contextVk,
// If the source image is multisampled, we need to resolve it into a temporary image before // If the source image is multisampled, we need to resolve it into a temporary image before
// performing a readback. // performing a readback.
bool isMultisampled = mSamples > 1; bool isMultisampled = mSamples > 1;
DeviceScoped<ImageHelper> resolvedImage(contextVk->getDevice()); RendererScoped<ImageHelper> resolvedImage(contextVk->getRenderer());
ImageHelper *src = this; ImageHelper *src = this;
......
...@@ -94,7 +94,7 @@ class DynamicBuffer : angle::NonCopyable ...@@ -94,7 +94,7 @@ class DynamicBuffer : angle::NonCopyable
void releaseInFlightBuffers(ContextVk *contextVk); void releaseInFlightBuffers(ContextVk *contextVk);
// This frees resources immediately. // This frees resources immediately.
void destroy(VkDevice device); void destroy(RendererVk *renderer);
BufferHelper *getCurrentBuffer() { return mBuffer; } BufferHelper *getCurrentBuffer() { return mBuffer; }
...@@ -107,7 +107,7 @@ class DynamicBuffer : angle::NonCopyable ...@@ -107,7 +107,7 @@ class DynamicBuffer : angle::NonCopyable
void reset(); void reset();
angle::Result allocateNewBuffer(ContextVk *contextVk); angle::Result allocateNewBuffer(ContextVk *contextVk);
void releaseBufferListToRenderer(RendererVk *renderer, std::vector<BufferHelper *> *buffers); void releaseBufferListToRenderer(RendererVk *renderer, std::vector<BufferHelper *> *buffers);
void destroyBufferList(VkDevice device, std::vector<BufferHelper *> *buffers); void destroyBufferList(RendererVk *renderer, std::vector<BufferHelper *> *buffers);
VkBufferUsageFlags mUsage; VkBufferUsageFlags mUsage;
bool mHostVisible; bool mHostVisible;
...@@ -527,7 +527,7 @@ class LineLoopHelper final : angle::NonCopyable ...@@ -527,7 +527,7 @@ class LineLoopHelper final : angle::NonCopyable
VkDeviceSize *indexIndirectBufferOffsetOut); VkDeviceSize *indexIndirectBufferOffsetOut);
void release(ContextVk *contextVk); void release(ContextVk *contextVk);
void destroy(VkDevice device); void destroy(RendererVk *renderer);
static void Draw(uint32_t count, uint32_t baseVertex, CommandBuffer *commandBuffer); static void Draw(uint32_t count, uint32_t baseVertex, CommandBuffer *commandBuffer);
...@@ -547,7 +547,7 @@ class BufferHelper final : public Resource ...@@ -547,7 +547,7 @@ class BufferHelper final : public Resource
angle::Result init(ContextVk *contextVk, angle::Result init(ContextVk *contextVk,
const VkBufferCreateInfo &createInfo, const VkBufferCreateInfo &createInfo,
VkMemoryPropertyFlags memoryPropertyFlags); VkMemoryPropertyFlags memoryPropertyFlags);
void destroy(VkDevice device); void destroy(RendererVk *renderer);
void release(RendererVk *renderer); void release(RendererVk *renderer);
...@@ -790,7 +790,8 @@ class ImageHelper final : public Resource, public angle::Subject ...@@ -790,7 +790,8 @@ class ImageHelper final : public Resource, public angle::Subject
VkImageAspectFlags getAspectFlags() const; VkImageAspectFlags getAspectFlags() const;
// True if image contains both depth & stencil aspects // True if image contains both depth & stencil aspects
bool isCombinedDepthStencilFormat() const; bool isCombinedDepthStencilFormat() const;
void destroy(VkDevice device); void destroy(RendererVk *renderer);
void release(RendererVk *renderer) { destroy(renderer); }
void init2DWeakReference(VkImage handle, void init2DWeakReference(VkImage handle,
const gl::Extents &glExtents, const gl::Extents &glExtents,
......
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