mirror of
https://github.com/KhronosGroup/Vulkan-Hpp.git
synced 2024-10-14 16:32:17 +00:00
Update to Vulkan 1.0.35:
- add some forward declaration support to resolve (direct) circular dependencies - check on multiple output arguments of functions, using none then - add "protect" support on handles - correct type determination on "const Type* const*"
This commit is contained in:
parent
e111c4c010
commit
ad92bc58ca
@ -1 +1 @@
|
|||||||
Subproject commit 08310a88df8c803ac916102e7a364fff912e3281
|
Subproject commit 789549ff080dd8aece944b7c5261eb42f97b55c7
|
@ -500,6 +500,7 @@ struct DependencyData
|
|||||||
Category category;
|
Category category;
|
||||||
std::string name;
|
std::string name;
|
||||||
std::set<std::string> dependencies;
|
std::set<std::string> dependencies;
|
||||||
|
std::set<std::string> forwardDependencies;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NameValue
|
struct NameValue
|
||||||
@ -527,6 +528,7 @@ struct FlagData
|
|||||||
struct HandleData
|
struct HandleData
|
||||||
{
|
{
|
||||||
std::vector<std::string> commands;
|
std::vector<std::string> commands;
|
||||||
|
std::string protect;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ScalarData
|
struct ScalarData
|
||||||
@ -789,12 +791,13 @@ size_t findReturnIndex(CommandData const& commandData, std::map<size_t,size_t> c
|
|||||||
if ((commandData.arguments[i].type.find('*') != std::string::npos) && (commandData.arguments[i].type.find("const") == std::string::npos) && !isVectorSizeParameter(vectorParameters, i)
|
if ((commandData.arguments[i].type.find('*') != std::string::npos) && (commandData.arguments[i].type.find("const") == std::string::npos) && !isVectorSizeParameter(vectorParameters, i)
|
||||||
&& ((vectorParameters.find(i) == vectorParameters.end()) || commandData.twoStep || (commandData.successCodes.size() == 1)))
|
&& ((vectorParameters.find(i) == vectorParameters.end()) || commandData.twoStep || (commandData.successCodes.size() == 1)))
|
||||||
{
|
{
|
||||||
#if !defined(NDEBUG)
|
|
||||||
for (size_t j = i + 1; j < commandData.arguments.size(); j++)
|
for (size_t j = i + 1; j < commandData.arguments.size(); j++)
|
||||||
{
|
{
|
||||||
assert((commandData.arguments[j].type.find('*') == std::string::npos) || (commandData.arguments[j].type.find("const") != std::string::npos));
|
if ((commandData.arguments[j].type.find('*') != std::string::npos) && (commandData.arguments[j].type.find("const") == std::string::npos))
|
||||||
|
{
|
||||||
|
return ~0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -914,7 +917,7 @@ bool noDependencies(std::set<std::string> const& dependencies, std::set<std::str
|
|||||||
return( ok );
|
return( ok );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool readCommandParam( tinyxml2::XMLElement * element, DependencyData & typeData, std::vector<MemberData> & arguments )
|
bool readCommandParam( tinyxml2::XMLElement * element, DependencyData & dependencyData, std::vector<MemberData> & arguments )
|
||||||
{
|
{
|
||||||
arguments.push_back( MemberData() );
|
arguments.push_back( MemberData() );
|
||||||
MemberData & arg = arguments.back();
|
MemberData & arg = arguments.back();
|
||||||
@ -938,7 +941,7 @@ bool readCommandParam( tinyxml2::XMLElement * element, DependencyData & typeData
|
|||||||
assert( child->ToElement() );
|
assert( child->ToElement() );
|
||||||
assert( ( strcmp( child->Value(), "type" ) == 0 ) && child->ToElement() && child->ToElement()->GetText() );
|
assert( ( strcmp( child->Value(), "type" ) == 0 ) && child->ToElement() && child->ToElement()->GetText() );
|
||||||
std::string type = strip( child->ToElement()->GetText(), "Vk" );
|
std::string type = strip( child->ToElement()->GetText(), "Vk" );
|
||||||
typeData.dependencies.insert( type );
|
dependencyData.dependencies.insert( type );
|
||||||
arg.type += type;
|
arg.type += type;
|
||||||
arg.pureType = type;
|
arg.pureType = type;
|
||||||
|
|
||||||
@ -1230,6 +1233,13 @@ void readExtensionRequire(tinyxml2::XMLElement * element, VkData & vkData, std::
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
std::map<std::string, HandleData>::iterator hait = vkData.handles.find(name);
|
||||||
|
if (hait != vkData.handles.end())
|
||||||
|
{
|
||||||
|
hait->second.protect = protect;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
std::map<std::string, ScalarData>::iterator scit = vkData.scalars.find(name);
|
std::map<std::string, ScalarData>::iterator scit = vkData.scalars.find(name);
|
||||||
if (scit != vkData.scalars.end())
|
if (scit != vkData.scalars.end())
|
||||||
@ -1245,6 +1255,7 @@ void readExtensionRequire(tinyxml2::XMLElement * element, VkData & vkData, std::
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if ( value == "enum")
|
else if ( value == "enum")
|
||||||
{
|
{
|
||||||
// TODO process enums which don't extend existing enums
|
// TODO process enums which don't extend existing enums
|
||||||
@ -1675,9 +1686,7 @@ void sortDependencies( std::list<DependencyData> & dependencies )
|
|||||||
|
|
||||||
while ( !dependencies.empty() )
|
while ( !dependencies.empty() )
|
||||||
{
|
{
|
||||||
#if !defined(NDEBUG)
|
bool found = false;
|
||||||
bool ok = false;
|
|
||||||
#endif
|
|
||||||
for ( std::list<DependencyData>::iterator it = dependencies.begin() ; it != dependencies.end() ; ++it )
|
for ( std::list<DependencyData>::iterator it = dependencies.begin() ; it != dependencies.end() ; ++it )
|
||||||
{
|
{
|
||||||
if ( noDependencies( it->dependencies, listedTypes ) )
|
if ( noDependencies( it->dependencies, listedTypes ) )
|
||||||
@ -1685,13 +1694,40 @@ void sortDependencies( std::list<DependencyData> & dependencies )
|
|||||||
sortedDependencies.push_back( *it );
|
sortedDependencies.push_back( *it );
|
||||||
listedTypes.insert( it->name );
|
listedTypes.insert( it->name );
|
||||||
dependencies.erase( it );
|
dependencies.erase( it );
|
||||||
#if !defined(NDEBUG)
|
found = true;
|
||||||
ok = true;
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert( ok );
|
if (!found)
|
||||||
|
{
|
||||||
|
// resolve direct circular dependencies
|
||||||
|
for (std::list<DependencyData>::iterator it = dependencies.begin(); !found && it != dependencies.end(); ++it)
|
||||||
|
{
|
||||||
|
for (std::set<std::string>::const_iterator dit = it->dependencies.begin(); dit != it->dependencies.end(); ++dit)
|
||||||
|
{
|
||||||
|
std::list<DependencyData>::const_iterator depIt = std::find_if(dependencies.begin(), dependencies.end(), [&dit](DependencyData const& dd) { return(dd.name == *dit); });
|
||||||
|
if (depIt != dependencies.end())
|
||||||
|
{
|
||||||
|
if (depIt->dependencies.find(it->name) != depIt->dependencies.end())
|
||||||
|
{
|
||||||
|
// we only have just one case, for now!
|
||||||
|
assert((it->category == DependencyData::Category::HANDLE) && (depIt->category == DependencyData::Category::STRUCT));
|
||||||
|
it->forwardDependencies.insert(*dit);
|
||||||
|
it->dependencies.erase(*dit);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if !defined(NDEBUG)
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert(std::find_if(sortedDependencies.begin(), sortedDependencies.end(), [&dit](DependencyData const& dd) { return(dd.name == *dit); }) != sortedDependencies.end());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert( found );
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies.swap(sortedDependencies);
|
dependencies.swap(sortedDependencies);
|
||||||
@ -1849,7 +1885,7 @@ void writeCall(std::ofstream & ofs, std::string const& name, size_t templateInde
|
|||||||
if ((vkit != vkTypes.end()) || (it->first == templateIndex))
|
if ((vkit != vkTypes.end()) || (it->first == templateIndex))
|
||||||
{
|
{
|
||||||
ofs << "reinterpret_cast<";
|
ofs << "reinterpret_cast<";
|
||||||
if (commandData.arguments[it->first].type.find("const") != std::string::npos)
|
if (commandData.arguments[it->first].type.find("const") == 0)
|
||||||
{
|
{
|
||||||
ofs << "const ";
|
ofs << "const ";
|
||||||
}
|
}
|
||||||
@ -1857,7 +1893,12 @@ void writeCall(std::ofstream & ofs, std::string const& name, size_t templateInde
|
|||||||
{
|
{
|
||||||
ofs << "Vk";
|
ofs << "Vk";
|
||||||
}
|
}
|
||||||
ofs << commandData.arguments[it->first].pureType << "*>( " << (singular ? "&" : "") << reduceName(commandData.arguments[it->first].name, singular) << (singular ? "" : ".data()") << " )";
|
ofs << commandData.arguments[it->first].pureType;
|
||||||
|
if (commandData.arguments[it->first].type.rfind("* const") != std::string::npos)
|
||||||
|
{
|
||||||
|
ofs << "* const";
|
||||||
|
}
|
||||||
|
ofs << "*>( " << (singular ? "&" : "") << reduceName(commandData.arguments[it->first].name, singular) << (singular ? "" : ".data()") << " )";
|
||||||
}
|
}
|
||||||
else if (commandData.arguments[it->first].pureType == "char")
|
else if (commandData.arguments[it->first].pureType == "char")
|
||||||
{
|
{
|
||||||
@ -2242,7 +2283,7 @@ void writeFunctionHeader(std::ofstream & ofs, VkData const& vkData, std::string
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::map<size_t, size_t>::const_iterator it = vectorParameters.find(i);
|
std::map<size_t, size_t>::const_iterator it = vectorParameters.find(i);
|
||||||
size_t pos = commandData.arguments[i].type.find('*');
|
size_t pos = commandData.arguments[i].type.rfind('*');
|
||||||
if (it == vectorParameters.end())
|
if (it == vectorParameters.end())
|
||||||
{
|
{
|
||||||
if (pos == std::string::npos)
|
if (pos == std::string::npos)
|
||||||
@ -2340,7 +2381,12 @@ void writeMemberData(std::ofstream & ofs, MemberData const& memberData, std::set
|
|||||||
{
|
{
|
||||||
ofs << "const ";
|
ofs << "const ";
|
||||||
}
|
}
|
||||||
ofs << "Vk" << memberData.pureType << '*';
|
ofs << "Vk" << memberData.pureType;
|
||||||
|
if (memberData.type.find("* const") != std::string::npos)
|
||||||
|
{
|
||||||
|
ofs << "* const";
|
||||||
|
}
|
||||||
|
ofs << '*';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2702,12 +2748,25 @@ void writeTypeFlags(std::ofstream & ofs, DependencyData const& dependencyData, F
|
|||||||
ofs << std::endl;
|
ofs << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void writeTypeHandle(std::ofstream & ofs, VkData const& vkData, DependencyData const& dependencyData, HandleData const& handle, std::list<DependencyData> const& dependencies)
|
void writeTypeHandle(std::ofstream & ofs, VkData const& vkData, DependencyData const& dependencyData, HandleData const& handleData, std::list<DependencyData> const& dependencies)
|
||||||
{
|
{
|
||||||
std::string memberName = dependencyData.name;
|
std::string memberName = dependencyData.name;
|
||||||
assert(isupper(memberName[0]));
|
assert(isupper(memberName[0]));
|
||||||
memberName[0] = tolower(memberName[0]);
|
memberName[0] = tolower(memberName[0]);
|
||||||
|
|
||||||
|
enterProtect(ofs, handleData.protect);
|
||||||
|
|
||||||
|
if (!dependencyData.forwardDependencies.empty())
|
||||||
|
{
|
||||||
|
ofs << " // forward declarations" << std::endl;
|
||||||
|
for (std::set<std::string>::const_iterator it = dependencyData.forwardDependencies.begin(); it != dependencyData.forwardDependencies.end(); ++it)
|
||||||
|
{
|
||||||
|
assert(vkData.structs.find(*it) != vkData.structs.end());
|
||||||
|
ofs << " struct " << *it << ";" << std::endl;
|
||||||
|
}
|
||||||
|
ofs << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
ofs << " class " << dependencyData.name << std::endl
|
ofs << " class " << dependencyData.name << std::endl
|
||||||
<< " {" << std::endl
|
<< " {" << std::endl
|
||||||
<< " public:" << std::endl
|
<< " public:" << std::endl
|
||||||
@ -2748,11 +2807,11 @@ void writeTypeHandle(std::ofstream & ofs, VkData const& vkData, DependencyData c
|
|||||||
<< " }" << std::endl
|
<< " }" << std::endl
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
if (!handle.commands.empty())
|
if (!handleData.commands.empty())
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < handle.commands.size(); i++)
|
for (size_t i = 0; i < handleData.commands.size(); i++)
|
||||||
{
|
{
|
||||||
std::string commandName = handle.commands[i];
|
std::string commandName = handleData.commands[i];
|
||||||
std::map<std::string, CommandData>::const_iterator cit = vkData.commands.find(commandName);
|
std::map<std::string, CommandData>::const_iterator cit = vkData.commands.find(commandName);
|
||||||
assert((cit != vkData.commands.end()) && cit->second.handleCommand);
|
assert((cit != vkData.commands.end()) && cit->second.handleCommand);
|
||||||
std::list<DependencyData>::const_iterator dep = std::find_if(dependencies.begin(), dependencies.end(), [commandName](DependencyData const& dd) { return dd.name == commandName; });
|
std::list<DependencyData>::const_iterator dep = std::find_if(dependencies.begin(), dependencies.end(), [commandName](DependencyData const& dd) { return dd.name == commandName; });
|
||||||
@ -2776,7 +2835,7 @@ void writeTypeHandle(std::ofstream & ofs, VkData const& vkData, DependencyData c
|
|||||||
writeTypeCommandEnhanced(ofs, vkData, " ", className, functionName, *dep, cit->second);
|
writeTypeCommandEnhanced(ofs, vkData, " ", className, functionName, *dep, cit->second);
|
||||||
ofs << "#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/" << std::endl;
|
ofs << "#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/" << std::endl;
|
||||||
|
|
||||||
if (i < handle.commands.size() - 1)
|
if (i < handleData.commands.size() - 1)
|
||||||
{
|
{
|
||||||
ofs << std::endl;
|
ofs << std::endl;
|
||||||
}
|
}
|
||||||
@ -2808,6 +2867,7 @@ void writeTypeHandle(std::ofstream & ofs, VkData const& vkData, DependencyData c
|
|||||||
<< " static_assert( sizeof( " << dependencyData.name << " ) == sizeof( Vk" << dependencyData.name << " ), \"handle and wrapper have different size!\" );" << std::endl
|
<< " static_assert( sizeof( " << dependencyData.name << " ) == sizeof( Vk" << dependencyData.name << " ), \"handle and wrapper have different size!\" );" << std::endl
|
||||||
#endif
|
#endif
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
leaveProtect(ofs, handleData.protect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void writeTypeScalar( std::ofstream & ofs, DependencyData const& dependencyData )
|
void writeTypeScalar( std::ofstream & ofs, DependencyData const& dependencyData )
|
||||||
|
4245
vulkan/vulkan.hpp
4245
vulkan/vulkan.hpp
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user