From 5117c83ad94e6f72e613060af446e73a326d927f Mon Sep 17 00:00:00 2001 From: asuessenbach Date: Thu, 22 Jul 2021 12:00:44 +0200 Subject: [PATCH] Add placeholder members to Dispatchers to keep the relative position of other members constant when compiling for different platforms --- VulkanHppGenerator.cpp | 29 ++++-- vulkan/vulkan.hpp | 84 ++++++++++++++++- vulkan/vulkan_raii.hpp | 204 +++++++++++++++++++++++++++++++---------- 3 files changed, 261 insertions(+), 56 deletions(-) diff --git a/VulkanHppGenerator.cpp b/VulkanHppGenerator.cpp index fa94571..afd095c 100644 --- a/VulkanHppGenerator.cpp +++ b/VulkanHppGenerator.cpp @@ -187,11 +187,11 @@ ${commandDefinitions} std::string VulkanHppGenerator::generateDispatchLoaderDynamic() const { const std::string dispatchLoaderDynamicTemplate = R"( + using PFN_dummy = void ( * )(); + class DispatchLoaderDynamic : public DispatchLoaderBase { public: - using PFN_dummy = void ( * )(); - ${commandMembers} public: @@ -530,6 +530,7 @@ std::string VulkanHppGenerator::generateRAIIDispatchers() const std::string contextInitializerList, deviceInitAssignments, instanceInitAssignments; std::string contextMembers, deviceMembers, instanceMembers; std::string previousEnter; + for ( auto const & command : m_commands ) { std::string enter, leave; @@ -555,7 +556,12 @@ std::string VulkanHppGenerator::generateRAIIDispatchers() const } deviceInitAssignments += leave; - deviceMembers += enter + " PFN_" + command.first + " " + command.first + " = 0;\n" + leave; + deviceMembers += enter + " PFN_" + command.first + " " + command.first + " = 0;\n"; + if ( !enter.empty() ) + { + deviceMembers += "#else\n PFN_dummy " + command.first + "_placeholder = 0;\n"; + } + deviceMembers += leave; } else { @@ -571,7 +577,12 @@ std::string VulkanHppGenerator::generateRAIIDispatchers() const } instanceInitAssignments += leave; - instanceMembers += enter + " PFN_" + command.first + " " + command.first + " = 0;\n" + leave; + instanceMembers += enter + " PFN_" + command.first + " " + command.first + " = 0;\n"; + if ( !enter.empty() ) + { + instanceMembers += "#else\n PFN_dummy " + command.first + "_placeholder = 0;\n"; + } + instanceMembers += leave; } previousEnter = enter; } @@ -908,7 +919,7 @@ void VulkanHppGenerator::appendDispatchLoaderDynamicCommands( std::vectorfirst + " " + commandIt->first + " = 0;\n"; + placeholders += " PFN_dummy " + commandIt->first + "_placeholder = 0;\n"; if ( commandIt->second.handle.empty() ) { initial += generateDispatchLoaderDynamicCommandAssignment( commandIt->first, commandIt->second, "NULL" ); @@ -941,7 +953,12 @@ void VulkanHppGenerator::appendDispatchLoaderDynamicCommands( std::vector