From f42eadae3de1c983e7cf66670e9755bfed347e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20S=C3=BC=C3=9Fenbach?= Date: Tue, 26 Aug 2025 17:03:00 +0200 Subject: [PATCH] Add "standard" implementation for raii commands returning a structure chain. (#2263) --- VulkanHppGenerator.cpp | 38 +++++++++---- vulkan/vulkan_raii.hpp | 118 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+), 11 deletions(-) diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index c087966..fd77493 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -3970,17 +3970,33 @@ std::string VulkanHppGenerator::generateCommandResultSingleSuccessWithErrors1Ret std::map vectorParams = determineVectorParams( commandData.params ); if ( vectorParams.empty() ) { - return generateCommandSetInclusive( name, - commandData, - initialSkipCount, - definition, - { returnParam }, - vectorParams, - false, - { CommandFlavourFlagBits::enhanced, CommandFlavourFlagBits::chained }, - raii, - false, - { CommandFlavourFlagBits::enhanced, CommandFlavourFlagBits::chained } ); + std::string command; + if ( raii ) + { + // raii functions returning a structure chain might need a standard implementation as well! + command = generateCommandSetInclusive( name, + commandData, + initialSkipCount, + definition, + { returnParam }, + vectorParams, + false, + { CommandFlavourFlagBits::enhanced, CommandFlavourFlagBits::chained }, + raii, + false, + {} ); + } + return command + generateCommandSetInclusive( name, + commandData, + initialSkipCount, + definition, + { returnParam }, + vectorParams, + false, + { CommandFlavourFlagBits::enhanced, CommandFlavourFlagBits::chained }, + raii, + false, + { CommandFlavourFlagBits::enhanced, CommandFlavourFlagBits::chained } ); } return ""; } diff --git a/vulkan/vulkan_raii.hpp b/vulkan/vulkan_raii.hpp index fb9aec0..037a318 100644 --- a/vulkan/vulkan_raii.hpp +++ b/vulkan/vulkan_raii.hpp @@ -3597,6 +3597,11 @@ namespace VULKAN_HPP_NAMESPACE template VULKAN_HPP_NODISCARD StructureChain getFormatProperties2( Format format ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + VULKAN_HPP_NODISCARD Result getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, + ImageFormatProperties2 * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html VULKAN_HPP_NODISCARD typename ResultValueType::type @@ -3729,6 +3734,11 @@ namespace VULKAN_HPP_NAMESPACE //=== VK_KHR_video_queue === + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + VULKAN_HPP_NODISCARD Result getVideoCapabilitiesKHR( const VideoProfileInfoKHR * pVideoProfile, + VideoCapabilitiesKHR * pCapabilities ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html VULKAN_HPP_NODISCARD typename ResultValueType::type getVideoCapabilitiesKHR( const VideoProfileInfoKHR & videoProfile ) const; @@ -3790,6 +3800,11 @@ namespace VULKAN_HPP_NAMESPACE template VULKAN_HPP_NODISCARD StructureChain getFormatProperties2KHR( Format format ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + VULKAN_HPP_NODISCARD Result getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, + ImageFormatProperties2 * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html VULKAN_HPP_NODISCARD typename ResultValueType::type @@ -3876,6 +3891,11 @@ namespace VULKAN_HPP_NAMESPACE //=== VK_KHR_get_surface_capabilities2 === + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + VULKAN_HPP_NODISCARD Result getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, + SurfaceCapabilities2KHR * pSurfaceCapabilities ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html VULKAN_HPP_NODISCARD typename ResultValueType::type @@ -3970,6 +3990,12 @@ namespace VULKAN_HPP_NAMESPACE //=== VK_KHR_video_encode_queue === + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + VULKAN_HPP_NODISCARD Result + getVideoEncodeQualityLevelPropertiesKHR( const PhysicalDeviceVideoEncodeQualityLevelInfoKHR * pQualityLevelInfo, + VideoEncodeQualityLevelPropertiesKHR * pQualityLevelProperties ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html VULKAN_HPP_NODISCARD typename ResultValueType::type @@ -4706,6 +4732,11 @@ namespace VULKAN_HPP_NAMESPACE # if defined( VK_USE_PLATFORM_ANDROID_KHR ) //=== VK_ANDROID_external_memory_android_hardware_buffer === + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + VULKAN_HPP_NODISCARD Result getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer * buffer, + AndroidHardwareBufferPropertiesANDROID * pProperties ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html VULKAN_HPP_NODISCARD typename ResultValueType::type @@ -5501,6 +5532,11 @@ namespace VULKAN_HPP_NAMESPACE # if defined( VK_USE_PLATFORM_SCREEN_QNX ) //=== VK_QNX_external_memory_screen_buffer === + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + VULKAN_HPP_NODISCARD Result getScreenBufferPropertiesQNX( const struct _screen_buffer * buffer, + ScreenBufferPropertiesQNX * pProperties ) const VULKAN_HPP_NOEXCEPT; + // wrapper function for command vkGetScreenBufferPropertiesQNX, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html VULKAN_HPP_NODISCARD typename ResultValueType::type getScreenBufferPropertiesQNX( const struct _screen_buffer & buffer ) const; @@ -16824,6 +16860,19 @@ namespace VULKAN_HPP_NAMESPACE return structureChain; } + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getImageFormatProperties2( + const PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, ImageFormatProperties2 * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2 && + "Function requires or " ); + return static_cast( + getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2( static_cast( m_physicalDevice ), + reinterpret_cast( pImageFormatInfo ), + reinterpret_cast( pImageFormatProperties ) ) ); + } + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2.html VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type @@ -18782,6 +18831,17 @@ namespace VULKAN_HPP_NAMESPACE } //=== VK_KHR_video_queue === + // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getVideoCapabilitiesKHR( const VideoProfileInfoKHR * pVideoProfile, + VideoCapabilitiesKHR * pCapabilities ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR && + "Function requires " ); + return static_cast( getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR( static_cast( m_physicalDevice ), + reinterpret_cast( pVideoProfile ), + reinterpret_cast( pCapabilities ) ) ); + } // wrapper function for command vkGetPhysicalDeviceVideoCapabilitiesKHR, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoCapabilitiesKHR.html @@ -19500,6 +19560,19 @@ namespace VULKAN_HPP_NAMESPACE return structureChain; } + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getImageFormatProperties2KHR( + const PhysicalDeviceImageFormatInfo2 * pImageFormatInfo, ImageFormatProperties2 * pImageFormatProperties ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR && + "Function requires or " ); + return static_cast( + getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( pImageFormatInfo ), + reinterpret_cast( pImageFormatProperties ) ) ); + } + // wrapper function for command vkGetPhysicalDeviceImageFormatProperties2KHR, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceImageFormatProperties2KHR.html VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType::type @@ -20487,6 +20560,18 @@ namespace VULKAN_HPP_NAMESPACE } //=== VK_KHR_get_surface_capabilities2 === + // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result PhysicalDevice::getSurfaceCapabilities2KHR( + const PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo, SurfaceCapabilities2KHR * pSurfaceCapabilities ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR && + "Function requires " ); + return static_cast( + getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR( static_cast( m_physicalDevice ), + reinterpret_cast( pSurfaceInfo ), + reinterpret_cast( pSurfaceCapabilities ) ) ); + } // wrapper function for command vkGetPhysicalDeviceSurfaceCapabilities2KHR, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceSurfaceCapabilities2KHR.html @@ -20920,6 +21005,16 @@ namespace VULKAN_HPP_NAMESPACE # if defined( VK_USE_PLATFORM_ANDROID_KHR ) //=== VK_ANDROID_external_memory_android_hardware_buffer === + // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getAndroidHardwareBufferPropertiesANDROID( + const struct AHardwareBuffer * buffer, AndroidHardwareBufferPropertiesANDROID * pProperties ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID && + "Function requires " ); + return static_cast( getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID( + static_cast( m_device ), buffer, reinterpret_cast( pProperties ) ) ); + } // wrapper function for command vkGetAndroidHardwareBufferPropertiesANDROID, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetAndroidHardwareBufferPropertiesANDROID.html @@ -23787,6 +23882,19 @@ namespace VULKAN_HPP_NAMESPACE } //=== VK_KHR_video_encode_queue === + // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result + PhysicalDevice::getVideoEncodeQualityLevelPropertiesKHR( const PhysicalDeviceVideoEncodeQualityLevelInfoKHR * pQualityLevelInfo, + VideoEncodeQualityLevelPropertiesKHR * pQualityLevelProperties ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR && + "Function requires " ); + return static_cast( getDispatcher()->vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR( + static_cast( m_physicalDevice ), + reinterpret_cast( pQualityLevelInfo ), + reinterpret_cast( pQualityLevelProperties ) ) ); + } // wrapper function for command vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR.html @@ -26824,6 +26932,16 @@ namespace VULKAN_HPP_NAMESPACE # if defined( VK_USE_PLATFORM_SCREEN_QNX ) //=== VK_QNX_external_memory_screen_buffer === + // wrapper function for command vkGetScreenBufferPropertiesQNX, see + // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html + VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::getScreenBufferPropertiesQNX( const struct _screen_buffer * buffer, + ScreenBufferPropertiesQNX * pProperties ) const VULKAN_HPP_NOEXCEPT + { + VULKAN_HPP_ASSERT( getDispatcher()->vkGetScreenBufferPropertiesQNX && + "Function requires " ); + return static_cast( getDispatcher()->vkGetScreenBufferPropertiesQNX( + static_cast( m_device ), buffer, reinterpret_cast( pProperties ) ) ); + } // wrapper function for command vkGetScreenBufferPropertiesQNX, see // https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetScreenBufferPropertiesQNX.html