From fc081256611e18a763e71dbc2961fd307f6119c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 10 Nov 2020 15:07:26 +0100 Subject: [PATCH] Vk: convenience overload for DeviceProperties::pickMemory(). --- src/Magnum/Vk/DeviceProperties.cpp | 8 ++++++++ src/Magnum/Vk/DeviceProperties.h | 16 ++++++++++++++++ src/Magnum/Vk/Test/DevicePropertiesVkTest.cpp | 6 +++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Magnum/Vk/DeviceProperties.cpp b/src/Magnum/Vk/DeviceProperties.cpp index 7db752ad3..0417e993a 100644 --- a/src/Magnum/Vk/DeviceProperties.cpp +++ b/src/Magnum/Vk/DeviceProperties.cpp @@ -244,6 +244,10 @@ UnsignedInt DeviceProperties::pickMemory(const MemoryFlags requiredFlags, const std::exit(1); /* LCOV_EXCL_LINE */ } +UnsignedInt DeviceProperties::pickMemory(const MemoryFlags requiredFlags, const UnsignedInt memories) { + return pickMemory(requiredFlags, {}, memories); +} + Containers::Optional DeviceProperties::tryPickMemory(const MemoryFlags requiredFlags, const MemoryFlags preferredFlags, const UnsignedInt memories) { const VkPhysicalDeviceMemoryProperties properties = memoryProperties().memoryProperties; @@ -277,6 +281,10 @@ Containers::Optional DeviceProperties::tryPickMemory(const MemoryFl return {}; } +Containers::Optional DeviceProperties::tryPickMemory(const MemoryFlags requiredFlags, const UnsignedInt memories) { + return tryPickMemory(requiredFlags, {}, memories); +} + Containers::Array enumerateDevices(Instance& instance) { /* Retrieve total device count */ UnsignedInt count; diff --git a/src/Magnum/Vk/DeviceProperties.h b/src/Magnum/Vk/DeviceProperties.h index a690d67dd..29b5ba869 100644 --- a/src/Magnum/Vk/DeviceProperties.h +++ b/src/Magnum/Vk/DeviceProperties.h @@ -455,6 +455,14 @@ class MAGNUM_VK_EXPORT DeviceProperties { */ UnsignedInt pickMemory(MemoryFlags requiredFlags, MemoryFlags preferredFlags = {}, UnsignedInt memories = ~UnsignedInt{}); + /** + * @overload + * + * Equivalent to calling @ref pickMemory(MemoryFlags, MemoryFlags, UnsignedInt) + * with empty @p preferredFlags. + */ + UnsignedInt pickMemory(MemoryFlags requiredFlags, UnsignedInt memories); + /** * @brief Try to pick a memory type satisfying given flags * @@ -464,6 +472,14 @@ class MAGNUM_VK_EXPORT DeviceProperties { */ Containers::Optional tryPickMemory(MemoryFlags requiredFlags, MemoryFlags preferredFlags = {}, UnsignedInt memories = ~UnsignedInt{}); + /** + * @overload + * + * Equivalent to calling @ref tryPickMemory(MemoryFlags, MemoryFlags, UnsignedInt) + * with empty @p preferredFlags. + */ + Containers::Optional tryPickMemory(MemoryFlags requiredFlags, UnsignedInt memories); + private: friend Implementation::InstanceState; diff --git a/src/Magnum/Vk/Test/DevicePropertiesVkTest.cpp b/src/Magnum/Vk/Test/DevicePropertiesVkTest.cpp index 085a09a35..624f5a433 100644 --- a/src/Magnum/Vk/Test/DevicePropertiesVkTest.cpp +++ b/src/Magnum/Vk/Test/DevicePropertiesVkTest.cpp @@ -444,8 +444,10 @@ void DevicePropertiesVkTest::memoryTypesPick() { MemoryFlag::HostVisible|MemoryFlag::HostCoherent, TestSuite::Compare::GreaterOrEqual); - /* Pick should return the same ID, and shouldn't exit */ + /* Pick should return the same ID, and shouldn't exit. Test also the + overload with no preferred flags. */ CORRADE_COMPARE(devices[0].pickMemory(MemoryFlag::HostVisible|MemoryFlag::HostCoherent), id); + CORRADE_COMPARE(devices[0].pickMemory(MemoryFlag::HostVisible|MemoryFlag::HostCoherent, ~UnsignedInt{}), id); /* If we put the same into preferred flags and leave the required empty, it should pick the same (the first one as well) */ @@ -482,8 +484,10 @@ void DevicePropertiesVkTest::memoryTypesPickFailed() { Error redirectError{&out}; CORRADE_VERIFY(!devices[0].tryPickMemory(MemoryFlag(0xc0ffeee0))); CORRADE_VERIFY(!devices[0].tryPickMemory({}, {}, 0)); + CORRADE_VERIFY(!devices[0].tryPickMemory({}, 0)); CORRADE_COMPARE(out.str(), Utility::formatString( "Vk::DeviceProperties::tryPickMemory(): no Vk::MemoryFlag(0xc0ffeee0) found among {} considered memory types\n" + "Vk::DeviceProperties::tryPickMemory(): no Vk::MemoryFlags{{}} found among 0 considered memory types\n" "Vk::DeviceProperties::tryPickMemory(): no Vk::MemoryFlags{{}} found among 0 considered memory types\n", devices[0].memoryCount())); }