mirror of
https://github.com/KhronosGroup/Vulkan-Hpp.git
synced 2024-10-14 16:32:17 +00:00
Move aliased platform specific stuff out of the platform protection.
This commit is contained in:
parent
53805727d2
commit
f43626d8a1
@ -846,10 +846,10 @@ void VulkanHppGenerator::appendBitmasks(std::string & str) const
|
|||||||
std::string strippedEnumName = hasBits ? stripPrefix(bitmaskBits->first, "Vk") : "";
|
std::string strippedEnumName = hasBits ? stripPrefix(bitmaskBits->first, "Vk") : "";
|
||||||
|
|
||||||
str += "\n";
|
str += "\n";
|
||||||
appendPlatformEnter(str, bitmask.second.platform);
|
appendPlatformEnter(str, !bitmask.second.alias.empty(), bitmask.second.platform);
|
||||||
appendBitmask(str, strippedBitmaskName, bitmask.second.alias, strippedEnumName, hasBits ? bitmaskBits->second.values : std::vector<EnumValueData>());
|
appendBitmask(str, strippedBitmaskName, bitmask.second.alias, strippedEnumName, hasBits ? bitmaskBits->second.values : std::vector<EnumValueData>());
|
||||||
appendBitmaskToStringFunction(str, strippedBitmaskName, strippedEnumName, hasBits ? bitmaskBits->second.values : std::vector<EnumValueData>());
|
appendBitmaskToStringFunction(str, strippedBitmaskName, strippedEnumName, hasBits ? bitmaskBits->second.values : std::vector<EnumValueData>());
|
||||||
appendPlatformLeave(str, bitmask.second.platform);
|
appendPlatformLeave(str, !bitmask.second.alias.empty(), bitmask.second.platform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1186,10 +1186,15 @@ void VulkanHppGenerator::appendDispatchLoaderDynamic(std::string & str)
|
|||||||
for (auto const& command : handle.second.commands)
|
for (auto const& command : handle.second.commands)
|
||||||
{
|
{
|
||||||
std::string enter, leave;
|
std::string enter, leave;
|
||||||
appendPlatformEnter(enter, command.second.platform);
|
appendPlatformEnter(enter, !command.second.aliases.empty(), command.second.platform);
|
||||||
appendPlatformLeave(leave, command.second.platform);
|
appendPlatformLeave(leave, !command.second.aliases.empty(), command.second.platform);
|
||||||
|
|
||||||
str += enter + " PFN_" + command.first + " " + command.first + " = 0;\n" + leave;
|
str += enter + " PFN_" + command.first + " " + command.first + " = 0;\n" + leave;
|
||||||
|
for (auto const& alias : command.second.aliases)
|
||||||
|
{
|
||||||
|
assert(enter.empty() && leave.empty());
|
||||||
|
str += " PFN_" + alias + " " + alias + " = 0;\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1204,11 +1209,12 @@ void VulkanHppGenerator::appendDispatchLoaderDynamic(std::string & str)
|
|||||||
if ((command.first != "vkGetInstanceProcAddr"))
|
if ((command.first != "vkGetInstanceProcAddr"))
|
||||||
{
|
{
|
||||||
std::string enter, leave;
|
std::string enter, leave;
|
||||||
appendPlatformEnter(enter, command.second.platform);
|
appendPlatformEnter(enter, !command.second.aliases.empty(), command.second.platform);
|
||||||
appendPlatformLeave(leave, command.second.platform);
|
appendPlatformLeave(leave, !command.second.aliases.empty(), command.second.platform);
|
||||||
|
|
||||||
if (handle.first.empty())
|
if (handle.first.empty())
|
||||||
{
|
{
|
||||||
|
assert(command.second.aliases.empty());
|
||||||
emptyFunctions += enter;
|
emptyFunctions += enter;
|
||||||
emptyFunctions += " " + command.first + " = PFN_" + command.first + "( vkGetInstanceProcAddr( NULL, \"" + command.first + "\" ) );\n";
|
emptyFunctions += " " + command.first + " = PFN_" + command.first + "( vkGetInstanceProcAddr( NULL, \"" + command.first + "\" ) );\n";
|
||||||
emptyFunctions += leave;
|
emptyFunctions += leave;
|
||||||
@ -1225,12 +1231,25 @@ void VulkanHppGenerator::appendDispatchLoaderDynamic(std::string & str)
|
|||||||
strDeviceFunctionsInstance += enter;
|
strDeviceFunctionsInstance += enter;
|
||||||
strDeviceFunctionsInstance += " " + command.first + " = PFN_" + command.first + "( vkGetInstanceProcAddr( instance, \"" + command.first + "\" ) );\n";
|
strDeviceFunctionsInstance += " " + command.first + " = PFN_" + command.first + "( vkGetInstanceProcAddr( instance, \"" + command.first + "\" ) );\n";
|
||||||
strDeviceFunctionsInstance += leave;
|
strDeviceFunctionsInstance += leave;
|
||||||
|
|
||||||
|
for (auto const& alias : command.second.aliases)
|
||||||
|
{
|
||||||
|
assert(enter.empty() && leave.empty());
|
||||||
|
strDeviceFunctions += " " + alias + " = PFN_" + alias + "( vkGetDeviceProcAddr( device, \"" + alias + "\" ) );\n";
|
||||||
|
strDeviceFunctionsInstance += " " + alias + " = PFN_" + alias + "( vkGetInstanceProcAddr( instance, \"" + alias + "\" ) );\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strInstanceFunctions += enter;
|
strInstanceFunctions += enter;
|
||||||
strInstanceFunctions += " " + command.first + " = PFN_" + command.first + "( vkGetInstanceProcAddr( instance, \"" + command.first + "\" ) );\n";
|
strInstanceFunctions += " " + command.first + " = PFN_" + command.first + "( vkGetInstanceProcAddr( instance, \"" + command.first + "\" ) );\n";
|
||||||
strInstanceFunctions += leave;
|
strInstanceFunctions += leave;
|
||||||
|
|
||||||
|
for (auto const& alias : command.second.aliases)
|
||||||
|
{
|
||||||
|
assert(enter.empty() && leave.empty());
|
||||||
|
strInstanceFunctions += " " + alias + " = PFN_" + alias + "( vkGetInstanceProcAddr( instance, \"" + alias + "\" ) );\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1342,12 +1361,21 @@ void VulkanHppGenerator::appendDispatchLoaderStatic(std::string & str)
|
|||||||
std::string commandName = stripPrefix(command.first, "vk");
|
std::string commandName = stripPrefix(command.first, "vk");
|
||||||
|
|
||||||
str += "\n";
|
str += "\n";
|
||||||
appendPlatformEnter(str, command.second.platform);
|
appendPlatformEnter(str, !command.second.aliases.empty(), command.second.platform);
|
||||||
str += " " + command.second.returnType + " vk" + commandName + "( " + parameterList + " ) const VULKAN_HPP_NOEXCEPT\n"
|
str += " " + command.second.returnType + " vk" + commandName + "( " + parameterList + " ) const VULKAN_HPP_NOEXCEPT\n"
|
||||||
" {\n"
|
" {\n"
|
||||||
" return ::vk" + commandName + "( " + parameters + " );\n"
|
" return ::vk" + commandName + "( " + parameters + " );\n"
|
||||||
" }\n";
|
" }\n";
|
||||||
appendPlatformLeave(str, command.second.platform);
|
appendPlatformLeave(str, !command.second.aliases.empty(), command.second.platform);
|
||||||
|
for (auto const& alias : command.second.aliases)
|
||||||
|
{
|
||||||
|
commandName = stripPrefix(alias, "vk");
|
||||||
|
str += "\n"
|
||||||
|
" " + command.second.returnType + " vk" + commandName + "( " + parameterList + " ) const VULKAN_HPP_NOEXCEPT\n"
|
||||||
|
" {\n"
|
||||||
|
" return ::vk" + commandName + "( " + parameters + " );\n"
|
||||||
|
" }\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
str += " };\n#endif\n";
|
str += " };\n#endif\n";
|
||||||
@ -1439,10 +1467,13 @@ void VulkanHppGenerator::appendEnums(std::string & str) const
|
|||||||
for (auto const& e : m_enums)
|
for (auto const& e : m_enums)
|
||||||
{
|
{
|
||||||
str += "\n";
|
str += "\n";
|
||||||
appendPlatformEnter(str, e.second.platform);
|
appendPlatformEnter(str, !e.second.alias.empty(), e.second.platform);
|
||||||
appendEnum(str, e);
|
appendEnum(str, e);
|
||||||
appendEnumToString(str, e);
|
appendEnumToString(str, e);
|
||||||
appendPlatformLeave(str, e.second.platform);
|
if (e.second.alias.empty()) // enums with an alias are not protected anymore !
|
||||||
|
{
|
||||||
|
appendPlatformLeave(str, !e.second.alias.empty(), e.second.platform);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1480,13 +1511,13 @@ void VulkanHppGenerator::appendForwardDeclarations(std::string & str) const
|
|||||||
str += "\n";
|
str += "\n";
|
||||||
for (auto const& structure : m_structures)
|
for (auto const& structure : m_structures)
|
||||||
{
|
{
|
||||||
appendPlatformEnter(str, structure.second.platform);
|
appendPlatformEnter(str, !structure.second.aliases.empty(), structure.second.platform);
|
||||||
str += std::string(" ") + (structure.second.isUnion ? "union" : "struct") + " " + stripPrefix(structure.first, "Vk") + ";\n";
|
str += std::string(" ") + (structure.second.isUnion ? "union" : "struct") + " " + stripPrefix(structure.first, "Vk") + ";\n";
|
||||||
for (std::string const& alias : structure.second.aliases)
|
for (std::string const& alias : structure.second.aliases)
|
||||||
{
|
{
|
||||||
str += " using " + stripPrefix(alias, "Vk") + " = " + stripPrefix(structure.first, "Vk") + ";\n";
|
str += " using " + stripPrefix(alias, "Vk") + " = " + stripPrefix(structure.first, "Vk") + ";\n";
|
||||||
}
|
}
|
||||||
appendPlatformLeave(str, structure.second.platform);
|
appendPlatformLeave(str, !structure.second.aliases.empty(), structure.second.platform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2379,9 +2410,13 @@ void VulkanHppGenerator::appendHandle(std::string & str, std::pair<std::string,
|
|||||||
appendUniqueTypes(str, "", { "VkInstance" });
|
appendUniqueTypes(str, "", { "VkInstance" });
|
||||||
}
|
}
|
||||||
str += "\n";
|
str += "\n";
|
||||||
appendPlatformEnter(str, command.second.platform);
|
appendPlatformEnter(str, !command.second.aliases.empty(), command.second.platform);
|
||||||
appendCommand(str, " ", commandName, command, false);
|
appendCommand(str, " ", commandName, command, false);
|
||||||
appendPlatformLeave(str, command.second.platform);
|
appendPlatformLeave(str, !command.second.aliases.empty(), command.second.platform);
|
||||||
|
for (auto const& alias : command.second.aliases)
|
||||||
|
{
|
||||||
|
appendCommand(str, " ", determineCommandName(alias, command.second.params[0].type.type), command, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -2402,25 +2437,45 @@ void VulkanHppGenerator::appendHandle(std::string & str, std::pair<std::string,
|
|||||||
for (auto const& command : handleData.second.commands)
|
for (auto const& command : handleData.second.commands)
|
||||||
{
|
{
|
||||||
std::string enter, leave, commandString;
|
std::string enter, leave, commandString;
|
||||||
appendPlatformEnter(enter, command.second.platform);
|
appendPlatformEnter(enter, !command.second.aliases.empty(), command.second.platform);
|
||||||
appendPlatformLeave(leave, command.second.platform);
|
appendPlatformLeave(leave, !command.second.aliases.empty(), command.second.platform);
|
||||||
|
commands += "\n" + enter;
|
||||||
std::string commandName = determineCommandName(command.first, command.second.params[0].type.type);
|
std::string commandName = determineCommandName(command.first, command.second.params[0].type.type);
|
||||||
appendCommand(commandString, " ", commandName, command, false);
|
appendCommand(commands, " ", commandName, command, false);
|
||||||
commands += "\n" + enter + commandString;
|
for (auto const& alias : command.second.aliases)
|
||||||
|
|
||||||
// special handling for destroy functions which are not aliased.
|
|
||||||
if (!command.second.isAlias && (((command.first.substr(2, 7) == "Destroy") && (commandName != "destroy")) || (command.first.substr(2, 4) == "Free")))
|
|
||||||
{
|
{
|
||||||
|
assert(enter.empty() && leave.empty());
|
||||||
|
commands += "\n";
|
||||||
|
std::string aliasCommandName = determineCommandName(alias, command.second.params[0].type.type);
|
||||||
|
appendCommand(commands, " ", aliasCommandName, command, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// special handling for destroy functions
|
||||||
|
bool platformLeft = false;
|
||||||
|
if (((command.first.substr(2, 7) == "Destroy") && (commandName != "destroy")) || (command.first.substr(2, 4) == "Free"))
|
||||||
|
{
|
||||||
|
assert(1 < command.second.params.size());
|
||||||
|
auto handleIt = m_handles.find(command.second.params[1].type.type);
|
||||||
|
assert(handleIt != m_handles.end());
|
||||||
|
if (!handleIt->second.alias.empty())
|
||||||
|
{
|
||||||
|
commands += leave;
|
||||||
|
platformLeft = true;
|
||||||
|
}
|
||||||
|
|
||||||
commandName = (command.first.substr(2, 7) == "Destroy") ? "destroy" : "free";
|
commandName = (command.first.substr(2, 7) == "Destroy") ? "destroy" : "free";
|
||||||
std::string destroyCommandString;
|
std::string destroyCommandString;
|
||||||
appendCommand(destroyCommandString, " ", commandName, command, false);
|
appendCommand(destroyCommandString, " ", commandName, command, false);
|
||||||
commands += "\n" + destroyCommandString;
|
commands += "\n" + destroyCommandString;
|
||||||
}
|
}
|
||||||
commands += leave;
|
if (!platformLeft)
|
||||||
|
{
|
||||||
|
commands += leave;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const std::string templateString = R"(
|
static const std::string templateString = R"(
|
||||||
class ${className}
|
${enter} class ${className}
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using CType = Vk${className};
|
using CType = Vk${className};
|
||||||
@ -2496,16 +2551,21 @@ ${commands}
|
|||||||
};
|
};
|
||||||
)";
|
)";
|
||||||
|
|
||||||
|
std::string enter, leave;
|
||||||
|
appendPlatformEnter(enter, !handleData.second.alias.empty(), handleData.second.platform);
|
||||||
|
appendPlatformLeave(leave, !handleData.second.alias.empty(), handleData.second.platform);
|
||||||
str += replaceWithMap(templateString, {
|
str += replaceWithMap(templateString, {
|
||||||
{ "className", stripPrefix(handleData.first, "Vk") },
|
{ "className", stripPrefix(handleData.first, "Vk") },
|
||||||
{ "memberName", startLowerCase(stripPrefix(handleData.first, "Vk")) },
|
{ "commands", commands },
|
||||||
{ "commands", commands }
|
{ "enter", enter },
|
||||||
|
{ "memberName", startLowerCase(stripPrefix(handleData.first, "Vk")) }
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!handleData.second.alias.empty())
|
if (!handleData.second.alias.empty())
|
||||||
{
|
{
|
||||||
str += " using " + stripPrefix(handleData.second.alias, "Vk") + " = " + stripPrefix(handleData.first, "Vk") + ";\n";
|
str += " using " + stripPrefix(handleData.second.alias, "Vk") + " = " + stripPrefix(handleData.first, "Vk") + ";\n";
|
||||||
}
|
}
|
||||||
|
str += leave;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2530,17 +2590,35 @@ void VulkanHppGenerator::appendHandlesCommandDefintions(std::string & str) const
|
|||||||
std::string strippedName = startLowerCase(stripPrefix(command.first, "vk"));
|
std::string strippedName = startLowerCase(stripPrefix(command.first, "vk"));
|
||||||
|
|
||||||
str += "\n";
|
str += "\n";
|
||||||
appendPlatformEnter(str, command.second.platform);
|
appendPlatformEnter(str, !command.second.aliases.empty(), command.second.platform);
|
||||||
appendCommand(str, " ", commandName, command, true);
|
appendCommand(str, " ", commandName, command, true);
|
||||||
|
for (auto const& alias : command.second.aliases)
|
||||||
|
{
|
||||||
|
str += "\n";
|
||||||
|
appendCommand(str, " ", determineCommandName(alias, command.second.params[0].type.type), command, true);
|
||||||
|
}
|
||||||
|
|
||||||
// special handling for destroy functions
|
// special handling for destroy functions
|
||||||
if (!command.second.isAlias && (((command.first.substr(2, 7) == "Destroy") && (commandName != "destroy")) || (command.first.substr(2, 4) == "Free")))
|
bool platformLeft = false;
|
||||||
|
if (((command.first.substr(2, 7) == "Destroy") && (commandName != "destroy")) || (command.first.substr(2, 4) == "Free"))
|
||||||
{
|
{
|
||||||
|
assert(1 < command.second.params.size());
|
||||||
|
auto handleIt = m_handles.find(command.second.params[1].type.type);
|
||||||
|
assert(handleIt != m_handles.end());
|
||||||
|
if (!handleIt->second.alias.empty())
|
||||||
|
{
|
||||||
|
appendPlatformLeave(str, !command.second.aliases.empty(), command.second.platform);
|
||||||
|
platformLeft = true;
|
||||||
|
}
|
||||||
|
|
||||||
commandName = (command.first.substr(2, 7) == "Destroy") ? "destroy" : "free";
|
commandName = (command.first.substr(2, 7) == "Destroy") ? "destroy" : "free";
|
||||||
str += "\n";
|
str += "\n";
|
||||||
appendCommand(str, " ", commandName, command, true);
|
appendCommand(str, " ", commandName, command, true);
|
||||||
}
|
}
|
||||||
appendPlatformLeave(str, command.second.platform);
|
if (!platformLeft)
|
||||||
|
{
|
||||||
|
appendPlatformLeave(str, !command.second.aliases.empty(), command.second.platform);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
str += "\n";
|
str += "\n";
|
||||||
@ -2576,9 +2654,9 @@ void VulkanHppGenerator::appendResultExceptions(std::string & str) const
|
|||||||
str += "\n";
|
str += "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanHppGenerator::appendPlatformEnter(std::string & str, std::string const& platform) const
|
void VulkanHppGenerator::appendPlatformEnter(std::string & str, bool isAliased, std::string const& platform) const
|
||||||
{
|
{
|
||||||
if (!platform.empty())
|
if (!isAliased && !platform.empty())
|
||||||
{
|
{
|
||||||
auto it = m_platforms.find(platform);
|
auto it = m_platforms.find(platform);
|
||||||
assert((it != m_platforms.end()) && !it->second.empty());
|
assert((it != m_platforms.end()) && !it->second.empty());
|
||||||
@ -2586,9 +2664,9 @@ void VulkanHppGenerator::appendPlatformEnter(std::string & str, std::string cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanHppGenerator::appendPlatformLeave(std::string & str, std::string const& platform) const
|
void VulkanHppGenerator::appendPlatformLeave(std::string & str, bool isAliased, std::string const& platform) const
|
||||||
{
|
{
|
||||||
if (!platform.empty())
|
if (!isAliased && !platform.empty())
|
||||||
{
|
{
|
||||||
auto it = m_platforms.find(platform);
|
auto it = m_platforms.find(platform);
|
||||||
assert((it != m_platforms.end()) && !it->second.empty());
|
assert((it != m_platforms.end()) && !it->second.empty());
|
||||||
@ -3013,7 +3091,7 @@ void VulkanHppGenerator::appendStructSubConstructor(std::string &str, std::pair<
|
|||||||
void VulkanHppGenerator::appendStructure(std::string & str, std::pair<std::string, StructureData> const& structure) const
|
void VulkanHppGenerator::appendStructure(std::string & str, std::pair<std::string, StructureData> const& structure) const
|
||||||
{
|
{
|
||||||
str += "\n";
|
str += "\n";
|
||||||
appendPlatformEnter(str, structure.second.platform);
|
appendPlatformEnter(str, !structure.second.aliases.empty(), structure.second.platform);
|
||||||
|
|
||||||
std::string constructorAndSetters;
|
std::string constructorAndSetters;
|
||||||
appendStructConstructor(constructorAndSetters, structure, " ");
|
appendStructConstructor(constructorAndSetters, structure, " ");
|
||||||
@ -3042,8 +3120,7 @@ void VulkanHppGenerator::appendStructure(std::string & str, std::pair<std::strin
|
|||||||
std::string members = "\n public:\n";
|
std::string members = "\n public:\n";
|
||||||
appendStructMembers(members, structure, " ");
|
appendStructMembers(members, structure, " ");
|
||||||
|
|
||||||
static const std::string structureTemplate = R"(
|
static const std::string structureTemplate = R"( struct ${name}
|
||||||
struct ${name}
|
|
||||||
{
|
{
|
||||||
${constructorAndSetters}
|
${constructorAndSetters}
|
||||||
|
|
||||||
@ -3073,7 +3150,7 @@ ${members}
|
|||||||
{ "compareOperators", compareOperators },
|
{ "compareOperators", compareOperators },
|
||||||
{ "members", members }
|
{ "members", members }
|
||||||
});
|
});
|
||||||
appendPlatformLeave(str, structure.second.platform);
|
appendPlatformLeave(str, !structure.second.aliases.empty(), structure.second.platform);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanHppGenerator::appendStructureChainValidation(std::string & str)
|
void VulkanHppGenerator::appendStructureChainValidation(std::string & str)
|
||||||
@ -3083,7 +3160,7 @@ void VulkanHppGenerator::appendStructureChainValidation(std::string & str)
|
|||||||
{
|
{
|
||||||
if (!structure.second.structExtends.empty())
|
if (!structure.second.structExtends.empty())
|
||||||
{
|
{
|
||||||
appendPlatformEnter(str, structure.second.platform);
|
appendPlatformEnter(str, !structure.second.aliases.empty(), structure.second.platform);
|
||||||
|
|
||||||
// append out allowed structure chains
|
// append out allowed structure chains
|
||||||
for (auto extendName : structure.second.structExtends)
|
for (auto extendName : structure.second.structExtends)
|
||||||
@ -3104,17 +3181,17 @@ void VulkanHppGenerator::appendStructureChainValidation(std::string & str)
|
|||||||
}
|
}
|
||||||
if (structure.second.platform != itExtend->second.platform)
|
if (structure.second.platform != itExtend->second.platform)
|
||||||
{
|
{
|
||||||
appendPlatformEnter(str, itExtend->second.platform);
|
appendPlatformEnter(str, !itExtend->second.aliases.empty(), itExtend->second.platform);
|
||||||
}
|
}
|
||||||
|
|
||||||
str += " template <> struct isStructureChainValid<" + stripPrefix(extendName, "Vk") + ", " + stripPrefix(structure.first, "Vk") + ">{ enum { value = true }; };\n";
|
str += " template <> struct isStructureChainValid<" + stripPrefix(extendName, "Vk") + ", " + stripPrefix(structure.first, "Vk") + ">{ enum { value = true }; };\n";
|
||||||
|
|
||||||
if (structure.second.platform != itExtend->second.platform)
|
if (structure.second.platform != itExtend->second.platform)
|
||||||
{
|
{
|
||||||
appendPlatformLeave(str, itExtend->second.platform);
|
appendPlatformLeave(str, !itExtend->second.aliases.empty(), itExtend->second.platform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
appendPlatformLeave(str, structure.second.platform);
|
appendPlatformLeave(str, !structure.second.aliases.empty(), structure.second.platform);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3142,8 +3219,10 @@ void VulkanHppGenerator::appendThrowExceptions(std::string & str) const
|
|||||||
|
|
||||||
void VulkanHppGenerator::appendUnion(std::string & str, std::pair<std::string, StructureData> const& structure) const
|
void VulkanHppGenerator::appendUnion(std::string & str, std::pair<std::string, StructureData> const& structure) const
|
||||||
{
|
{
|
||||||
|
str += "\n";
|
||||||
|
appendPlatformEnter(str, !structure.second.aliases.empty(), structure.second.platform);
|
||||||
std::string unionName = stripPrefix(structure.first, "Vk");
|
std::string unionName = stripPrefix(structure.first, "Vk");
|
||||||
str += "\n"
|
str +=
|
||||||
" union " + unionName + "\n"
|
" union " + unionName + "\n"
|
||||||
" {\n"
|
" {\n"
|
||||||
" " + unionName + "( VULKAN_HPP_NAMESPACE::" + unionName + " const& rhs ) VULKAN_HPP_NOEXCEPT\n"
|
" " + unionName + "( VULKAN_HPP_NAMESPACE::" + unionName + " const& rhs ) VULKAN_HPP_NOEXCEPT\n"
|
||||||
@ -3241,16 +3320,16 @@ void VulkanHppGenerator::appendUnion(std::string & str, std::pair<std::string, S
|
|||||||
str += "#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/\n";
|
str += "#endif /*VULKAN_HPP_HAS_UNRESTRICTED_UNIONS*/\n";
|
||||||
}
|
}
|
||||||
str += " };\n";
|
str += " };\n";
|
||||||
|
appendPlatformLeave(str, !structure.second.aliases.empty(), structure.second.platform);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanHppGenerator::appendUniqueTypes(std::string & str, std::string const& parentType, std::set<std::string> const& childrenTypes) const
|
void VulkanHppGenerator::appendUniqueTypes(std::string & str, std::string const& parentType, std::set<std::string> const& childrenTypes) const
|
||||||
{
|
{
|
||||||
str += "\n"
|
str += "\n"
|
||||||
"#ifndef VULKAN_HPP_NO_SMART_HANDLE";
|
"#ifndef VULKAN_HPP_NO_SMART_HANDLE\n";
|
||||||
if (!parentType.empty())
|
if (!parentType.empty())
|
||||||
{
|
{
|
||||||
str += "\n"
|
str += " class " + stripPrefix(parentType, "Vk") + ";\n";
|
||||||
" class " + stripPrefix(parentType, "Vk") + ";";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto const& childType : childrenTypes)
|
for (auto const& childType : childrenTypes)
|
||||||
@ -3263,18 +3342,17 @@ void VulkanHppGenerator::appendUniqueTypes(std::string & str, std::string const&
|
|||||||
std::string deleterAction = (handleIt->second.deleteCommand.substr(2, 4) == "Free") ? "Free" : "Destroy";
|
std::string deleterAction = (handleIt->second.deleteCommand.substr(2, 4) == "Free") ? "Free" : "Destroy";
|
||||||
std::string deleterParent = parentType.empty() ? "NoParent" : stripPrefix(parentType, "Vk");
|
std::string deleterParent = parentType.empty() ? "NoParent" : stripPrefix(parentType, "Vk");
|
||||||
std::string deleterPool = handleIt->second.deletePool.empty() ? "" : ", " + stripPrefix(handleIt->second.deletePool, "Vk");
|
std::string deleterPool = handleIt->second.deletePool.empty() ? "" : ", " + stripPrefix(handleIt->second.deletePool, "Vk");
|
||||||
str += "\n"
|
appendPlatformEnter(str, !handleIt->second.alias.empty(), handleIt->second.platform);
|
||||||
" template <typename Dispatch> class UniqueHandleTraits<" + type + ", Dispatch> { public: using deleter = " + deleterType + deleterAction + "<" + deleterParent + deleterPool + ", Dispatch>; };\n"
|
str += " template <typename Dispatch> class UniqueHandleTraits<" + type + ", Dispatch> { public: using deleter = " + deleterType + deleterAction + "<" + deleterParent + deleterPool + ", Dispatch>; };\n"
|
||||||
" using Unique" + type + " = UniqueHandle<" + type + ", VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;";
|
" using Unique" + type + " = UniqueHandle<" + type + ", VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;\n";
|
||||||
|
|
||||||
if (!handleIt->second.alias.empty())
|
if (!handleIt->second.alias.empty())
|
||||||
{
|
{
|
||||||
str += "\n"
|
str += " using Unique" + stripPrefix(handleIt->second.alias, "Vk") + " = UniqueHandle<" + type + ", VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;\n";
|
||||||
" using Unique" + stripPrefix(handleIt->second.alias, "Vk") + " = UniqueHandle<" + type + ", VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;";
|
|
||||||
}
|
}
|
||||||
|
appendPlatformLeave(str, !handleIt->second.alias.empty(), handleIt->second.platform);
|
||||||
}
|
}
|
||||||
str += "\n"
|
str += "#endif /*VULKAN_HPP_NO_SMART_HANDLE*/\n";
|
||||||
"#endif /*VULKAN_HPP_NO_SMART_HANDLE*/\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanHppGenerator::EnumData::addEnumValue(int line, std::string const &valueName, bool bitmask, bool bitpos, std::string const& prefix, std::string const& postfix, std::string const& tag)
|
void VulkanHppGenerator::EnumData::addEnumValue(int line, std::string const &valueName, bool bitmask, bool bitpos, std::string const& prefix, std::string const& postfix, std::string const& tag)
|
||||||
@ -3828,13 +3906,7 @@ void VulkanHppGenerator::readCommandAlias(tinyxml2::XMLElement const* element, s
|
|||||||
check(handleIt != m_handles.end(), line, "missing handle <" + commandToHandleIt->second + ">");
|
check(handleIt != m_handles.end(), line, "missing handle <" + commandToHandleIt->second + ">");
|
||||||
auto commandsIt = handleIt->second.commands.find(alias);
|
auto commandsIt = handleIt->second.commands.find(alias);
|
||||||
check(commandsIt != handleIt->second.commands.end(), line, "missing command <" + alias + "> in handle <" + handleIt->first + ">");
|
check(commandsIt != handleIt->second.commands.end(), line, "missing command <" + alias + "> in handle <" + handleIt->first + ">");
|
||||||
|
check(commandsIt->second.aliases.insert(name).second, line, "alias <" + name + "> for command <" + alias + "> already specified");
|
||||||
// create a copy of the found command, mark that as an alias and link it to a handle
|
|
||||||
CommandData commandData = commandsIt->second;
|
|
||||||
commandData = commandsIt->second;
|
|
||||||
commandData.isAlias = true;
|
|
||||||
commandData.xmlLine = line;
|
|
||||||
linkCommandToHandle(line, name, commandData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VulkanHppGenerator::ParamData VulkanHppGenerator::readCommandParam(tinyxml2::XMLElement const* element, std::vector<ParamData> const& params)
|
VulkanHppGenerator::ParamData VulkanHppGenerator::readCommandParam(tinyxml2::XMLElement const* element, std::vector<ParamData> const& params)
|
||||||
@ -4438,16 +4510,25 @@ void VulkanHppGenerator::readExtensionRequireType(tinyxml2::XMLElement const* el
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto stit = m_structures.find(name);
|
auto hit = m_handles.find(name);
|
||||||
if (stit != m_structures.end())
|
if (hit != m_handles.end())
|
||||||
{
|
{
|
||||||
assert(m_handles.find(name) == m_handles.end());
|
check(hit->second.platform.empty(), line, "platform already specified for handle <" + name + ">");
|
||||||
check(stit->second.platform.empty(), line, "platform already specified for structure <" + name + ">");
|
hit->second.platform = platform;
|
||||||
stit->second.platform = platform;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
assert((m_types.find(name) != m_types.end()));
|
auto stit = m_structures.find(name);
|
||||||
|
if (stit != m_structures.end())
|
||||||
|
{
|
||||||
|
assert(m_handles.find(name) == m_handles.end());
|
||||||
|
check(stit->second.platform.empty(), line, "platform already specified for structure <" + name + ">");
|
||||||
|
stit->second.platform = platform;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert((m_types.find(name) != m_types.end()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,8 +104,7 @@ class VulkanHppGenerator
|
|||||||
struct CommandData
|
struct CommandData
|
||||||
{
|
{
|
||||||
CommandData(int line)
|
CommandData(int line)
|
||||||
: isAlias(false)
|
: xmlLine(line)
|
||||||
, xmlLine(line)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
std::vector<ParamData> params;
|
std::vector<ParamData> params;
|
||||||
@ -113,7 +112,7 @@ class VulkanHppGenerator
|
|||||||
std::string returnType;
|
std::string returnType;
|
||||||
std::vector<std::string> successCodes;
|
std::vector<std::string> successCodes;
|
||||||
std::vector<std::string> errorCodes;
|
std::vector<std::string> errorCodes;
|
||||||
bool isAlias;
|
std::set<std::string> aliases;
|
||||||
int xmlLine;
|
int xmlLine;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -177,6 +176,7 @@ class VulkanHppGenerator
|
|||||||
std::map<std::string, CommandData> commands;
|
std::map<std::string, CommandData> commands;
|
||||||
std::string deleteCommand;
|
std::string deleteCommand;
|
||||||
std::string deletePool;
|
std::string deletePool;
|
||||||
|
std::string platform;
|
||||||
std::vector<std::string> parents;
|
std::vector<std::string> parents;
|
||||||
int xmlLine;
|
int xmlLine;
|
||||||
};
|
};
|
||||||
@ -249,8 +249,8 @@ class VulkanHppGenerator
|
|||||||
void appendFunctionHeaderReturnType(std::string & str, CommandData const& commandData, size_t returnParamIndex, std::map<size_t, size_t> const& vectorParamIndices, std::string const& enhancedReturnType, bool enhanced, bool twoStep, bool singular, bool unique, bool isStructureChain) const;
|
void appendFunctionHeaderReturnType(std::string & str, CommandData const& commandData, size_t returnParamIndex, std::map<size_t, size_t> const& vectorParamIndices, std::string const& enhancedReturnType, bool enhanced, bool twoStep, bool singular, bool unique, bool isStructureChain) const;
|
||||||
void appendFunctionHeaderTemplate(std::string & str, std::string const& indentation, size_t returnParamIndex, size_t templateParamIndex, std::string const& enhancedReturnType, bool enhanced, bool singular, bool unique, bool withDefault, bool isStructureChain) const;
|
void appendFunctionHeaderTemplate(std::string & str, std::string const& indentation, size_t returnParamIndex, size_t templateParamIndex, std::string const& enhancedReturnType, bool enhanced, bool singular, bool unique, bool withDefault, bool isStructureChain) const;
|
||||||
void appendHandle(std::string & str, std::pair<std::string, HandleData> const& handle, std::set<std::string> & listedHandles) const;
|
void appendHandle(std::string & str, std::pair<std::string, HandleData> const& handle, std::set<std::string> & listedHandles) const;
|
||||||
void appendPlatformEnter(std::string & str, std::string const& platform) const;
|
void appendPlatformEnter(std::string & str, bool isAliased, std::string const& platform) const;
|
||||||
void appendPlatformLeave(std::string & str, std::string const& platform) const;
|
void appendPlatformLeave(std::string & str, bool isAliased, std::string const& platform) const;
|
||||||
void appendStruct(std::string & str, std::pair<std::string, StructureData> const& structure, std::set<std::string> & listedStructures) const;
|
void appendStruct(std::string & str, std::pair<std::string, StructureData> const& structure, std::set<std::string> & listedStructures) const;
|
||||||
void appendStructAssignmentOperator(std::string &str, std::pair<std::string, StructureData> const& structure, std::string const& prefix) const;
|
void appendStructAssignmentOperator(std::string &str, std::pair<std::string, StructureData> const& structure, std::string const& prefix) const;
|
||||||
void appendStructCompareOperators(std::string & str, std::pair<std::string, StructureData> const& structure) const;
|
void appendStructCompareOperators(std::string & str, std::pair<std::string, StructureData> const& structure) const;
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user