From 0bb32875d2e66c356ca42c9c93f3b103dd5ceac6 Mon Sep 17 00:00:00 2001 From: Mike Schuchardt Date: Tue, 1 Nov 2022 16:37:47 -0700 Subject: vulkaninfo: Fix VkShaderStageFlagBits expansion Fix bug where SHADER_STAGE_ALL_GRAPHICS and SHADER_STAGE_ALL were showing up in the list of set bits for VkPhysicalDeviceSubgroupProperties::supportedStages. When expanding a FlagBits value we should only consider the single-bit options. --- scripts/vulkaninfo_generator.py | 13 ++++++++++--- vulkaninfo/generated/vulkaninfo.hpp | 2 -- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/scripts/vulkaninfo_generator.py b/scripts/vulkaninfo_generator.py index 4fac2cfa..0834a2ae 100644 --- a/scripts/vulkaninfo_generator.py +++ b/scripts/vulkaninfo_generator.py @@ -441,10 +441,12 @@ def PrintGetFlagStrings(name, bitmask): out += f" std::vector strings;\n" # If a bitmask contains a field whose value is zero, we want to support printing the correct bitflag # Otherwise, use "None" for when there are not bits set in the bitmask - if bitmask.options[0].value != "0": + if bitmask.options[0].value != 0: out += f' if (value == 0) {{ strings.push_back("None"); return strings; }}\n' for v in bitmask.options: - out += f' if ({v.name} & value) strings.push_back("{v.name[3:]}");\n' + # only check single-bit flags + if (v.value & (v.value - 1)) == 0: + out += f' if ({v.name} & value) strings.push_back("{v.name[3:]}");\n' out += f" return strings;\n}}\n" return out @@ -787,8 +789,13 @@ class VulkanEnum: self.name = name self.comment = comment - if value == 0 or value is None: + if bitpos is not None: value = 1 << int(bitpos) + elif type(value) is str: + if value.lower().startswith('0x'): + value = int(value, 16) + else: + value = int(value) self.value = value diff --git a/vulkaninfo/generated/vulkaninfo.hpp b/vulkaninfo/generated/vulkaninfo.hpp index 13bab86c..58162b88 100644 --- a/vulkaninfo/generated/vulkaninfo.hpp +++ b/vulkaninfo/generated/vulkaninfo.hpp @@ -986,8 +986,6 @@ std::vector VkShaderStageFlagBitsGetStrings(VkShaderStageFlagBits if (VK_SHADER_STAGE_GEOMETRY_BIT & value) strings.push_back("SHADER_STAGE_GEOMETRY_BIT"); if (VK_SHADER_STAGE_FRAGMENT_BIT & value) strings.push_back("SHADER_STAGE_FRAGMENT_BIT"); if (VK_SHADER_STAGE_COMPUTE_BIT & value) strings.push_back("SHADER_STAGE_COMPUTE_BIT"); - if (VK_SHADER_STAGE_ALL_GRAPHICS & value) strings.push_back("SHADER_STAGE_ALL_GRAPHICS"); - if (VK_SHADER_STAGE_ALL & value) strings.push_back("SHADER_STAGE_ALL"); if (VK_SHADER_STAGE_RAYGEN_BIT_KHR & value) strings.push_back("SHADER_STAGE_RAYGEN_BIT_KHR"); if (VK_SHADER_STAGE_ANY_HIT_BIT_KHR & value) strings.push_back("SHADER_STAGE_ANY_HIT_BIT_KHR"); if (VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR & value) strings.push_back("SHADER_STAGE_CLOSEST_HIT_BIT_KHR"); -- cgit v1.2.3