From 39fabdbc3bb1905c5fe65e648e54a2accdecf6d6 Mon Sep 17 00:00:00 2001 From: Powei Feng Date: Fri, 25 Apr 2025 16:03:47 -0700 Subject: [PATCH] vk: fix exception-escape failures (#8656) And one drive-by fix to VulkanYcbcrConversionCache.h --- filament/backend/src/vulkan/VulkanDriver.cpp | 4 ++-- filament/backend/src/vulkan/VulkanDriver.h | 6 +++--- filament/backend/src/vulkan/VulkanHandles.cpp | 2 +- filament/backend/src/vulkan/VulkanHandles.h | 5 +++-- filament/backend/src/vulkan/VulkanReadPixels.cpp | 2 +- filament/backend/src/vulkan/VulkanReadPixels.h | 2 +- filament/backend/src/vulkan/VulkanSamplerCache.cpp | 2 +- filament/backend/src/vulkan/VulkanSamplerCache.h | 2 +- filament/backend/src/vulkan/VulkanYcbcrConversionCache.cpp | 2 +- filament/backend/src/vulkan/VulkanYcbcrConversionCache.h | 5 +++-- 10 files changed, 17 insertions(+), 15 deletions(-) diff --git a/filament/backend/src/vulkan/VulkanDriver.cpp b/filament/backend/src/vulkan/VulkanDriver.cpp index 136e405e77..67de821294 100644 --- a/filament/backend/src/vulkan/VulkanDriver.cpp +++ b/filament/backend/src/vulkan/VulkanDriver.cpp @@ -197,7 +197,7 @@ Dispatcher VulkanDriver::getDispatcher() const noexcept { } VulkanDriver::VulkanDriver(VulkanPlatform* platform, VulkanContext const& context, - Platform::DriverConfig const& driverConfig) noexcept + Platform::DriverConfig const& driverConfig) : mPlatform(platform), mResourceManager(driverConfig.handleArenaSize, driverConfig.disableHandleUseAfterFreeCheck, driverConfig.disableHeapHandleTags), @@ -250,7 +250,7 @@ VulkanDriver::~VulkanDriver() noexcept = default; UTILS_NOINLINE Driver* VulkanDriver::create(VulkanPlatform* platform, VulkanContext const& context, - Platform::DriverConfig const& driverConfig) noexcept { + Platform::DriverConfig const& driverConfig) { #if 0 // this is useful for development, but too verbose even for debug builds // For reference on a 64-bits machine in Release mode: diff --git a/filament/backend/src/vulkan/VulkanDriver.h b/filament/backend/src/vulkan/VulkanDriver.h index ea29e227ac..3c75c4ae81 100644 --- a/filament/backend/src/vulkan/VulkanDriver.h +++ b/filament/backend/src/vulkan/VulkanDriver.h @@ -55,7 +55,7 @@ constexpr uint8_t MAX_RENDERTARGET_ATTACHMENT_TEXTURES = class VulkanDriver final : public DriverBase { public: static Driver* create(VulkanPlatform* platform, VulkanContext const& context, - Platform::DriverConfig const& driverConfig) noexcept; + Platform::DriverConfig const& driverConfig); #if FVK_ENABLED(FVK_DEBUG_DEBUG_UTILS) // Encapsulates the VK_EXT_debug_utils extension. In particular, we use @@ -90,8 +90,8 @@ private: void debugCommandBegin(CommandStream* cmds, bool synchronous, const char* methodName) noexcept override; - inline VulkanDriver(VulkanPlatform* platform, VulkanContext const& context, - Platform::DriverConfig const& driverConfig) noexcept; + VulkanDriver(VulkanPlatform* platform, VulkanContext const& context, + Platform::DriverConfig const& driverConfig); ~VulkanDriver() noexcept override; diff --git a/filament/backend/src/vulkan/VulkanHandles.cpp b/filament/backend/src/vulkan/VulkanHandles.cpp index cd5800b702..bca3bafc8a 100644 --- a/filament/backend/src/vulkan/VulkanHandles.cpp +++ b/filament/backend/src/vulkan/VulkanHandles.cpp @@ -160,7 +160,7 @@ VulkanDescriptorSetLayout::Bitmask VulkanDescriptorSetLayout::Bitmask::fromLayou return fromBackendLayout(layout); } -PushConstantDescription::PushConstantDescription(backend::Program const& program) noexcept { +PushConstantDescription::PushConstantDescription(backend::Program const& program) { mRangeCount = 0; for (auto stage : { ShaderStage::VERTEX, ShaderStage::FRAGMENT, ShaderStage::COMPUTE }) { auto const& constants = program.getPushConstants(stage); diff --git a/filament/backend/src/vulkan/VulkanHandles.h b/filament/backend/src/vulkan/VulkanHandles.h index 3dad0cf9ef..5ae1fd626b 100644 --- a/filament/backend/src/vulkan/VulkanHandles.h +++ b/filament/backend/src/vulkan/VulkanHandles.h @@ -165,6 +165,7 @@ public: mVkSet(vkSet), mOnRecycleFn(std::move(onRecycleFn)) {} + // NOLINTNEXTLINE(bugprone-exception-escape) ~VulkanDescriptorSet() { if (mOnRecycleFn) { mOnRecycleFn(this); @@ -182,7 +183,7 @@ public: return mExternalSamplerVkSet; } - void setExternalSamplerVkSet(VkDescriptorSet vkset, OnRecycle onRecycle) noexcept { + void setExternalSamplerVkSet(VkDescriptorSet vkset, OnRecycle onRecycle) { mExternalSamplerVkSet = vkset; if (mOnRecycleExternalSamplerFn) { mOnRecycleExternalSamplerFn(this); @@ -218,7 +219,7 @@ using PushConstantNameArray = utils::FixedCapacityVector; using PushConstantNameByStage = std::array; struct PushConstantDescription { - explicit PushConstantDescription(backend::Program const& program) noexcept; + explicit PushConstantDescription(backend::Program const& program); VkPushConstantRange const* getVkRanges() const noexcept { return mRanges; } uint32_t getVkRangeCount() const noexcept { return mRangeCount; } diff --git a/filament/backend/src/vulkan/VulkanReadPixels.cpp b/filament/backend/src/vulkan/VulkanReadPixels.cpp index 7e7008ab14..0a816bdc68 100644 --- a/filament/backend/src/vulkan/VulkanReadPixels.cpp +++ b/filament/backend/src/vulkan/VulkanReadPixels.cpp @@ -335,7 +335,7 @@ void VulkanReadPixels::run(fvkmemory::resource_ptr srcTarget mTaskHandler->post(std::move(waitFenceFunc), std::move(cleanPbdFunc)); } -void VulkanReadPixels::runUntilComplete() noexcept { +void VulkanReadPixels::runUntilComplete() { if (!mTaskHandler) { return; } diff --git a/filament/backend/src/vulkan/VulkanReadPixels.h b/filament/backend/src/vulkan/VulkanReadPixels.h index 23699537d3..08128c25e8 100644 --- a/filament/backend/src/vulkan/VulkanReadPixels.h +++ b/filament/backend/src/vulkan/VulkanReadPixels.h @@ -79,7 +79,7 @@ public: OnReadCompleteFunction const& readCompleteFunc); // This method will block until all of the in-flight requests are complete. - void runUntilComplete() noexcept; + void runUntilComplete(); private: VkDevice mDevice = VK_NULL_HANDLE; diff --git a/filament/backend/src/vulkan/VulkanSamplerCache.cpp b/filament/backend/src/vulkan/VulkanSamplerCache.cpp index aa51c29db7..8fde2e6082 100644 --- a/filament/backend/src/vulkan/VulkanSamplerCache.cpp +++ b/filament/backend/src/vulkan/VulkanSamplerCache.cpp @@ -28,7 +28,7 @@ namespace filament::backend { VulkanSamplerCache::VulkanSamplerCache(VkDevice device) : mDevice(device) {} -VkSampler VulkanSamplerCache::getSampler(Params params) noexcept { +VkSampler VulkanSamplerCache::getSampler(Params params) { auto iter = mCache.find(params); if (UTILS_LIKELY(iter != mCache.end())) { return iter->second; diff --git a/filament/backend/src/vulkan/VulkanSamplerCache.h b/filament/backend/src/vulkan/VulkanSamplerCache.h index 557fa0419d..e6c3902a6a 100644 --- a/filament/backend/src/vulkan/VulkanSamplerCache.h +++ b/filament/backend/src/vulkan/VulkanSamplerCache.h @@ -38,7 +38,7 @@ public: static_assert(sizeof(Params) == 16); explicit VulkanSamplerCache(VkDevice device); - VkSampler getSampler(Params params) noexcept; + VkSampler getSampler(Params params); void terminate() noexcept; private: VkDevice mDevice; diff --git a/filament/backend/src/vulkan/VulkanYcbcrConversionCache.cpp b/filament/backend/src/vulkan/VulkanYcbcrConversionCache.cpp index c710f299d2..bf90636a84 100644 --- a/filament/backend/src/vulkan/VulkanYcbcrConversionCache.cpp +++ b/filament/backend/src/vulkan/VulkanYcbcrConversionCache.cpp @@ -33,7 +33,7 @@ VulkanYcbcrConversionCache::VulkanYcbcrConversionCache(VkDevice device) : mDevice(device) {} VkSamplerYcbcrConversion VulkanYcbcrConversionCache::getConversion( - VulkanYcbcrConversionCache::Params params) noexcept { + VulkanYcbcrConversionCache::Params params) { auto iter = mCache.find(params); if (UTILS_LIKELY(iter != mCache.end())) { return iter->second; diff --git a/filament/backend/src/vulkan/VulkanYcbcrConversionCache.h b/filament/backend/src/vulkan/VulkanYcbcrConversionCache.h index 606410f315..d50c175d97 100644 --- a/filament/backend/src/vulkan/VulkanYcbcrConversionCache.h +++ b/filament/backend/src/vulkan/VulkanYcbcrConversionCache.h @@ -37,7 +37,7 @@ public: static_assert(sizeof(Params) == 16); explicit VulkanYcbcrConversionCache(VkDevice device); - VkSamplerYcbcrConversion getConversion(Params params) noexcept; + VkSamplerYcbcrConversion getConversion(Params params); void terminate() noexcept; private: @@ -47,7 +47,8 @@ private: bool operator()(Params lhs, Params rhs) const noexcept { SamplerYcbcrConversion::EqualTo equal; return equal(lhs.conversion, rhs.conversion) && - lhs.externalFormat == rhs.externalFormat; + lhs.externalFormat == rhs.externalFormat && + lhs.format == rhs.format; } }; using ConversionHashFn = utils::hash::MurmurHashFn;