Hash :
fcd35965
Author :
Date :
2020-09-29T14:15:51
Vulkan: Make DescriptorPoolHelper a Resource Descriptor pools need to live as long as the descriptor sets that are allocated from them. Using Serials while building a command to judge a pool's lifetime is prone to errors, since a command's Serial value isn't known until the command is submitted, leading to deleting pools too early relative to when the descriptor set is actually used. This CL updates DescriptorPoolHelper to inherit from Resource, so the descriptor pools can be retain()'ed. This allows the Resource's counter to indicate that a pool is in use until the command's Serial is known and can be recorded to indicate when the command completes. This prevents descriptor pools from being destroyed before the command completes (while the descriptor sets are still in use), or even before the command has been submitted. Destroying a descriptor pool resets all of the descriptors that were allocated from it, which can trigger a variety of VVL errors depending on when it's erroneously performed. This CL also adds the necessary retain() calls for the descriptor pools. In particular, the pools need to be retained each time a cached descriptor set that was allocated from it is re-used. This is relatively simple with the current design, since we always clear the descriptor set caches whenever a new pool is allocated, so the descriptor pool binding is always accurate. Bug: angleproject:5030 Test: VulkanMultithreadingTest::MultiContextDrawSmallDescriptorPools() Change-Id: Iac9e7efef338f169a6bf8ac3b2140e03dd326641 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2504457 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
# Copyright 2014 The ANGLE Project Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
angle_white_box_tests_sources = [
"egl_tests/EGLFeatureControlTest.cpp",
"gl_tests/FormatPrintTest.cpp",
"test_utils/ANGLETest.cpp",
"test_utils/ANGLETest.h",
"util_tests/PrintSystemInfoTest.cpp",
]
angle_white_box_tests_win_sources = [
"egl_tests/EGLDirectCompositionTest.cpp",
"gl_tests/D3D11EmulatedIndexedBufferTest.cpp",
"gl_tests/D3D11FormatTablesTest.cpp",
"gl_tests/D3D11InputLayoutCacheTest.cpp",
"gl_tests/D3DTextureTest.cpp",
"gl_tests/ErrorMessages.cpp",
]
angle_white_box_tests_vulkan_sources = [
"gl_tests/VulkanDescriptorSetTest.cpp",
"gl_tests/VulkanFormatTablesTest.cpp",
"gl_tests/VulkanFramebufferTest.cpp",
"gl_tests/VulkanMultithreadingTest.cpp",
"gl_tests/VulkanPerformanceCounterTest.cpp",
"gl_tests/VulkanUniformUpdatesTest.cpp",
]