From 400c51216f0db7fa86645f1265de99e0837e4c26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20S=C3=BC=C3=9Fenbach?= Date: Mon, 20 Jun 2016 11:15:07 +0200 Subject: [PATCH] Introduced default for last argument of functions when that argument is a Flag whose corresponding FlagBits has no values. Currently, it's just Device::mapMemory() and Device::resetDescriptorPool() --- VkCppGenerator.cpp | 43 ++++++++++++++++++++++++++++++------------- vulkan/vk_cpp.hpp | 4 ++-- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/VkCppGenerator.cpp b/VkCppGenerator.cpp index 4a93619..9ac3d16 100644 --- a/VkCppGenerator.cpp +++ b/VkCppGenerator.cpp @@ -574,12 +574,12 @@ void writeCall(std::ofstream & ofs, std::string const& name, size_t templateInde void writeEnumsToString(std::ofstream & ofs, VkData const& vkData); void writeExceptionCheck(std::ofstream & ofs, std::string const& indentation, std::string const& className, std::string const& functionName, std::vector const& successCodes); void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std::string const& className, std::string const& functionName, std::string const& returnType, size_t templateIndex, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes, size_t returnIndex, std::map const& vectorParameters); -void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, std::string const& returnType, std::string const& name, CommandData const& commandData, size_t returnIndex, size_t templateIndex, std::map const& vectorParameters); +void writeFunctionHeader(std::ofstream & ofs, VkData const& vkData, std::string const& indentation, std::string const& returnType, std::string const& name, CommandData const& commandData, size_t returnIndex, size_t templateIndex, std::map const& vectorParameters); void writeMemberData(std::ofstream & ofs, MemberData const& memberData, std::set const& vkTypes); void writeStructConstructor( std::ofstream & ofs, std::string const& name, StructData const& structData, std::set const& vkTypes, std::map const& defaultValues ); void writeStructSetter( std::ofstream & ofs, std::string const& name, MemberData const& memberData, std::set const& vkTypes, std::map const& structs ); -void writeTypeCommand( std::ofstream & ofs, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes ); -void writeTypeCommandEnhanced(std::ofstream & ofs, std::string const& indentation, std::string const& className, std::string const& functionName, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes); +void writeTypeCommand(std::ofstream & ofs, VkData const& vkData, DependencyData const& dependencyData); +void writeTypeCommandEnhanced(std::ofstream & ofs, VkData const& vkData, std::string const& indentation, std::string const& className, std::string const& functionName, DependencyData const& dependencyData, CommandData const& commandData); void writeTypeCommandStandard(std::ofstream & ofs, std::string const& indentation, std::string const& functionName, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes); void writeTypeEnum(std::ofstream & ofs, DependencyData const& dependencyData, EnumData const& enumData); void writeTypeFlags( std::ofstream & ofs, DependencyData const& dependencyData, FlagData const& flagData ); @@ -2088,7 +2088,7 @@ void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std: ofs << indentation << "}" << std::endl; } -void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, std::string const& returnType, std::string const& name, CommandData const& commandData, size_t returnIndex, size_t templateIndex, std::map const& vectorParameters) +void writeFunctionHeader(std::ofstream & ofs, VkData const& vkData, std::string const& indentation, std::string const& returnType, std::string const& name, CommandData const& commandData, size_t returnIndex, size_t templateIndex, std::map const& vectorParameters) { std::set skippedArguments; for (std::map::const_iterator it = vectorParameters.begin(); it != vectorParameters.end(); ++it) @@ -2179,6 +2179,22 @@ void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, st { ofs << "[" << commandData.arguments[i].arraySize << "]"; } + if (lastArgument == i) + { + std::map::const_iterator flagIt = vkData.flags.find(commandData.arguments[i].pureType); + if (flagIt != vkData.flags.end()) + { + std::list::const_iterator depIt = std::find_if(vkData.dependencies.begin(), vkData.dependencies.end(), [&flagIt](DependencyData const& dd) { return(dd.name == flagIt->first); }); + assert(depIt != vkData.dependencies.end()); + assert(depIt->dependencies.size() == 1); + std::map::const_iterator enumIt = vkData.enums.find(*depIt->dependencies.begin()); + assert(enumIt != vkData.enums.end()); + if (enumIt->second.members.empty()) + { + ofs << " = " << commandData.arguments[i].pureType << "()"; + } + } + } } else { @@ -2372,21 +2388,23 @@ void writeStructSetter( std::ofstream & ofs, std::string const& name, MemberData << std::endl; } -void writeTypeCommand( std::ofstream & ofs, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes ) +void writeTypeCommand(std::ofstream & ofs, VkData const& vkData, DependencyData const& dependencyData) { + assert(vkData.commands.find(dependencyData.name) != vkData.commands.end()); + CommandData const& commandData = vkData.commands.find(dependencyData.name)->second; if (!commandData.handleCommand) { - writeTypeCommandStandard(ofs, " ", dependencyData.name, dependencyData, commandData, vkTypes); + writeTypeCommandStandard(ofs, " ", dependencyData.name, dependencyData, commandData, vkData.vkTypes); ofs << std::endl << "#ifndef VKCPP_DISABLE_ENHANCED_MODE" << std::endl; - writeTypeCommandEnhanced(ofs, " ", "", dependencyData.name, dependencyData, commandData, vkTypes); + writeTypeCommandEnhanced(ofs, vkData, " ", "", dependencyData.name, dependencyData, commandData); ofs << "#endif /*VKCPP_DISABLE_ENHANCED_MODE*/" << std::endl << std::endl; } } -void writeTypeCommandEnhanced(std::ofstream & ofs, std::string const& indentation, std::string const& className, std::string const& functionName, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes) +void writeTypeCommandEnhanced(std::ofstream & ofs, VkData const& vkData, std::string const& indentation, std::string const& className, std::string const& functionName, DependencyData const& dependencyData, CommandData const& commandData) { enterProtect(ofs, commandData.protect); std::map vectorParameters = getVectorParameters(commandData); @@ -2395,8 +2413,8 @@ void writeTypeCommandEnhanced(std::ofstream & ofs, std::string const& indentatio std::map::const_iterator returnVector = vectorParameters.find(returnIndex); std::string returnType = determineReturnType(commandData, returnIndex, returnVector != vectorParameters.end()); - writeFunctionHeader(ofs, indentation, returnType, functionName, commandData, returnIndex, templateIndex, vectorParameters); - writeFunctionBody(ofs, indentation, className, functionName, returnType, templateIndex, dependencyData, commandData, vkTypes, returnIndex, vectorParameters); + writeFunctionHeader(ofs, vkData, indentation, returnType, functionName, commandData, returnIndex, templateIndex, vectorParameters); + writeFunctionBody(ofs, indentation, className, functionName, returnType, templateIndex, dependencyData, commandData, vkData.vkTypes, returnIndex, vectorParameters); leaveProtect(ofs, commandData.protect); } @@ -2624,7 +2642,7 @@ void writeTypeHandle(std::ofstream & ofs, VkData const& vkData, DependencyData c ofs << std::endl << "#ifndef VKCPP_DISABLE_ENHANCED_MODE" << std::endl; - writeTypeCommandEnhanced(ofs, " ", className, functionName, *dep, cit->second, vkData.vkTypes); + writeTypeCommandEnhanced(ofs, vkData, " ", className, functionName, *dep, cit->second); ofs << "#endif /*VKCPP_DISABLE_ENHANCED_MODE*/" << std::endl; if (i < handle.commands.size() - 1) @@ -2842,8 +2860,7 @@ void writeTypes(std::ofstream & ofs, VkData const& vkData, std::mapcategory ) { case DependencyData::Category::COMMAND : - assert( vkData.commands.find( it->name ) != vkData.commands.end() ); - writeTypeCommand( ofs, *it, vkData.commands.find( it->name )->second, vkData.vkTypes ); + writeTypeCommand( ofs, vkData, *it ); break; case DependencyData::Category::ENUM : assert( vkData.enums.find( it->name ) != vkData.enums.end() ); diff --git a/vulkan/vk_cpp.hpp b/vulkan/vk_cpp.hpp index a31da41..86dabbf 100644 --- a/vulkan/vk_cpp.hpp +++ b/vulkan/vk_cpp.hpp @@ -13137,7 +13137,7 @@ namespace vk #endif /*!VKCPP_DISABLE_ENHANCED_MODE*/ #ifndef VKCPP_DISABLE_ENHANCED_MODE - ResultValueType::type mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags ) const + ResultValueType::type mapMemory( DeviceMemory memory, DeviceSize offset, DeviceSize size, MemoryMapFlags flags = MemoryMapFlags() ) const { void* pData; Result result = static_cast( vkMapMemory( m_device, static_cast( memory ), offset, size, static_cast( flags ), &pData ) ); @@ -13837,7 +13837,7 @@ namespace vk #endif /*!VKCPP_DISABLE_ENHANCED_MODE*/ #ifndef VKCPP_DISABLE_ENHANCED_MODE - ResultValueType::type resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags ) const + ResultValueType::type resetDescriptorPool( DescriptorPool descriptorPool, DescriptorPoolResetFlags flags = DescriptorPoolResetFlags() ) const { Result result = static_cast( vkResetDescriptorPool( m_device, static_cast( descriptorPool ), static_cast( flags ) ) ); return createResultValue( result, "vk::Device::resetDescriptorPool" );