Browse Source

Merge pull request #2621 from DanielGavin/vulkan-flags2

Add support for vulkan FlagBits2
Jeroen van Rijn 2 years ago
parent
commit
67e0751124

+ 91 - 0
vendor/vulkan/_gen/create_vulkan_odin_wrapper.py

@@ -429,7 +429,93 @@ def parse_enums(f):
         f.write("{} :: distinct bit_set[{}; Flags]\n".format(flag.ljust(max_len), flag_name))
         f.write("{} :: distinct bit_set[{}; Flags]\n".format(flag.ljust(max_len), flag_name))
         f.write("{} :: enum u32 {{}}\n".format(flag_name.ljust(max_len)))
         f.write("{} :: enum u32 {{}}\n".format(flag_name.ljust(max_len)))
 
 
+def parse_fake_enums(f):
+    data = re.findall(r"static const Vk(\w+FlagBits2) VK_(\w+?) = (\w+);", src, re.S)
+    
+    data.sort(key=lambda x: x[0])
+
+    fake_enums = {}
+
+    for type_name, name, value in data:
+        if type_name in fake_enums:
+            fake_enums[type_name].append((name,value))
+        else:
+            fake_enums[type_name] = [(name, value)]
+
+    for name in fake_enums.keys():
+        flags_name = name.replace("FlagBits", "Flags")
+        enum_name = name.replace("FlagBits", "Flag")
+        f.write("{} :: distinct bit_set[{}; Flags64]\n".format(flags_name, enum_name))
+        f.write("{} :: enum Flags64 {{\n".format(name.replace("FlagBits", "Flag")))
+
+        prefix = to_snake_case(name).upper()
+        suffix = None
+        for ext in ext_suffixes:
+            prefix_new = remove_suffix(prefix, "_"+ext)
+            assert suffix is None
+            if prefix_new != prefix:
+                suffix = "_"+ext
+                prefix = prefix_new
+                break
+
 
 
+        prefix = prefix.replace("_FLAG_BITS2", "_2")
+        prefix += "_"
+
+        ff = []
+
+        groups = []
+        flags = {}
+
+        names_and_values = fake_enums[name]
+
+        for name, value in names_and_values:
+            value = value.replace("ULL", "")
+            n = fix_enum_name(name, prefix, suffix, True)
+            try:
+                v = fix_enum_value(value, prefix, suffix, True)
+            except FlagError as e:
+                v = int(str(e))
+                groups.append((n, v))
+                continue
+            except IgnoreFlagError as e:
+                groups.append((n, 0))
+                continue
+
+            if n == v:
+                continue
+            try:
+                flags[int(v)] = n
+            except ValueError as e:
+                pass
+
+            if v == "NONE":
+                continue
+
+            ff.append((n, v))
+        
+        max_flag_value = max([int(v) for n, v in ff if is_int(v)] + [0])
+        max_group_value = max([int(v) for n, v in groups if is_int(v)] + [0])
+        if max_flag_value < max_group_value:
+            if (1<<max_flag_value)+1 < max_group_value:
+                ff.append(('_MAX', 31))
+                flags[31] = '_MAX'
+                pass
+
+        max_len = max([len(n) for n, v in ff] + [0])
+
+        flag_names = set([n for n, v in ff])
+
+        for n, v in ff:
+            if not is_int(v) and v not in flag_names:
+                print("Ignoring", n, "=", v)
+                continue
+            f.write("\t{} = {},".format(n.ljust(max_len), v))
+            if n == "_MAX":
+                f.write(" // Needed for the *_ALL bit set")
+            f.write("\n")
+
+        f.write("}\n\n")
 
 
 def parse_structs(f):
 def parse_structs(f):
     data = re.findall(r"typedef (struct|union) Vk(\w+?) {(.+?)} \w+?;", src, re.S)
     data = re.findall(r"typedef (struct|union) Vk(\w+?) {(.+?)} \w+?;", src, re.S)
@@ -490,6 +576,10 @@ def parse_structs(f):
             continue
             continue
         name = name.replace("FlagBits", "Flag")
         name = name.replace("FlagBits", "Flag")
         _type = _type.replace("FlagBits", "Flag")
         _type = _type.replace("FlagBits", "Flag")
+
+        if name.endswith("Flag2") or name.endswith("Flags2"):
+            continue
+
         aliases.append((name, _type))
         aliases.append((name, _type))
 
 
     max_len = max([len(n) for n, _ in aliases] + [0])
     max_len = max([len(n) for n, _ in aliases] + [0])
@@ -732,6 +822,7 @@ with open("../enums.odin", 'w', encoding='utf-8') as f:
     f.write(BASE)
     f.write(BASE)
     f.write("\n")
     f.write("\n")
     parse_enums(f)
     parse_enums(f)
+    parse_fake_enums(f)
     f.write("\n\n")
     f.write("\n\n")
 with open("../structs.odin", 'w', encoding='utf-8') as f:
 with open("../structs.odin", 'w', encoding='utf-8') as f:
     f.write(BASE)
     f.write(BASE)

+ 218 - 0
vendor/vulkan/enums.odin

@@ -3825,5 +3825,223 @@ WaylandSurfaceCreateFlagsKHR                         :: distinct bit_set[Wayland
 WaylandSurfaceCreateFlagKHR                          :: enum u32 {}
 WaylandSurfaceCreateFlagKHR                          :: enum u32 {}
 Win32SurfaceCreateFlagsKHR                           :: distinct bit_set[Win32SurfaceCreateFlagKHR; Flags]
 Win32SurfaceCreateFlagsKHR                           :: distinct bit_set[Win32SurfaceCreateFlagKHR; Flags]
 Win32SurfaceCreateFlagKHR                            :: enum u32 {}
 Win32SurfaceCreateFlagKHR                            :: enum u32 {}
+AccessFlags2 :: distinct bit_set[AccessFlag2; Flags64]
+AccessFlag2 :: enum Flags64 {
+	INDIRECT_COMMAND_READ                     = 0,
+	INDIRECT_COMMAND_READ_KHR                 = 0,
+	INDEX_READ                                = 1,
+	INDEX_READ_KHR                            = 1,
+	VERTEX_ATTRIBUTE_READ                     = 2,
+	VERTEX_ATTRIBUTE_READ_KHR                 = 2,
+	UNIFORM_READ                              = 3,
+	UNIFORM_READ_KHR                          = 3,
+	INPUT_ATTACHMENT_READ                     = 4,
+	INPUT_ATTACHMENT_READ_KHR                 = 4,
+	SHADER_READ                               = 5,
+	SHADER_READ_KHR                           = 5,
+	SHADER_WRITE                              = 6,
+	SHADER_WRITE_KHR                          = 6,
+	COLOR_ATTACHMENT_READ                     = 7,
+	COLOR_ATTACHMENT_READ_KHR                 = 7,
+	COLOR_ATTACHMENT_WRITE                    = 8,
+	COLOR_ATTACHMENT_WRITE_KHR                = 8,
+	DEPTH_STENCIL_ATTACHMENT_READ             = 9,
+	DEPTH_STENCIL_ATTACHMENT_READ_KHR         = 9,
+	DEPTH_STENCIL_ATTACHMENT_WRITE            = 10,
+	DEPTH_STENCIL_ATTACHMENT_WRITE_KHR        = 10,
+	TRANSFER_READ                             = 11,
+	TRANSFER_READ_KHR                         = 11,
+	TRANSFER_WRITE                            = 12,
+	TRANSFER_WRITE_KHR                        = 12,
+	HOST_READ                                 = 13,
+	HOST_READ_KHR                             = 13,
+	HOST_WRITE                                = 14,
+	HOST_WRITE_KHR                            = 14,
+	MEMORY_READ                               = 15,
+	MEMORY_READ_KHR                           = 15,
+	MEMORY_WRITE                              = 16,
+	MEMORY_WRITE_KHR                          = 16,
+	SHADER_SAMPLED_READ                       = 32,
+	SHADER_SAMPLED_READ_KHR                   = 32,
+	SHADER_STORAGE_READ                       = 33,
+	SHADER_STORAGE_READ_KHR                   = 33,
+	SHADER_STORAGE_WRITE                      = 34,
+	SHADER_STORAGE_WRITE_KHR                  = 34,
+	VIDEO_DECODE_READ_KHR                     = 35,
+	VIDEO_DECODE_WRITE_KHR                    = 36,
+	VIDEO_ENCODE_READ_KHR                     = 37,
+	VIDEO_ENCODE_WRITE_KHR                    = 38,
+	TRANSFORM_FEEDBACK_WRITE_EXT              = 25,
+	TRANSFORM_FEEDBACK_COUNTER_READ_EXT       = 26,
+	TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT      = 27,
+	CONDITIONAL_RENDERING_READ_EXT            = 20,
+	COMMAND_PREPROCESS_READ_NV                = 17,
+	COMMAND_PREPROCESS_WRITE_NV               = 18,
+	FRAGMENT_SHADING_RATE_ATTACHMENT_READ_KHR = 23,
+	SHADING_RATE_IMAGE_READ_NV                = 23,
+	ACCELERATION_STRUCTURE_READ_KHR           = 21,
+	ACCELERATION_STRUCTURE_WRITE_KHR          = 22,
+	ACCELERATION_STRUCTURE_READ_NV            = 21,
+	ACCELERATION_STRUCTURE_WRITE_NV           = 22,
+	FRAGMENT_DENSITY_MAP_READ_EXT             = 24,
+	COLOR_ATTACHMENT_READ_NONCOHERENT_EXT     = 19,
+	DESCRIPTOR_BUFFER_READ_EXT                = 41,
+	INVOCATION_MASK_READ_HUAWEI               = 39,
+	SHADER_BINDING_TABLE_READ_KHR             = 40,
+	MICROMAP_READ_EXT                         = 44,
+	MICROMAP_WRITE_EXT                        = 45,
+	OPTICAL_FLOW_READ_NV                      = 42,
+	OPTICAL_FLOW_WRITE_NV                     = 43,
+}
+
+FormatFeatureFlags2 :: distinct bit_set[FormatFeatureFlag2; Flags64]
+FormatFeatureFlag2 :: enum Flags64 {
+	SAMPLED_IMAGE                                                               = 0,
+	SAMPLED_IMAGE_KHR                                                           = 0,
+	STORAGE_IMAGE                                                               = 1,
+	STORAGE_IMAGE_KHR                                                           = 1,
+	STORAGE_IMAGE_ATOMIC                                                        = 2,
+	STORAGE_IMAGE_ATOMIC_KHR                                                    = 2,
+	UNIFORM_TEXEL_BUFFER                                                        = 3,
+	UNIFORM_TEXEL_BUFFER_KHR                                                    = 3,
+	STORAGE_TEXEL_BUFFER                                                        = 4,
+	STORAGE_TEXEL_BUFFER_KHR                                                    = 4,
+	STORAGE_TEXEL_BUFFER_ATOMIC                                                 = 5,
+	STORAGE_TEXEL_BUFFER_ATOMIC_KHR                                             = 5,
+	VERTEX_BUFFER                                                               = 6,
+	VERTEX_BUFFER_KHR                                                           = 6,
+	COLOR_ATTACHMENT                                                            = 7,
+	COLOR_ATTACHMENT_KHR                                                        = 7,
+	COLOR_ATTACHMENT_BLEND                                                      = 8,
+	COLOR_ATTACHMENT_BLEND_KHR                                                  = 8,
+	DEPTH_STENCIL_ATTACHMENT                                                    = 9,
+	DEPTH_STENCIL_ATTACHMENT_KHR                                                = 9,
+	BLIT_SRC                                                                    = 10,
+	BLIT_SRC_KHR                                                                = 10,
+	BLIT_DST                                                                    = 11,
+	BLIT_DST_KHR                                                                = 11,
+	SAMPLED_IMAGE_FILTER_LINEAR                                                 = 12,
+	SAMPLED_IMAGE_FILTER_LINEAR_KHR                                             = 12,
+	SAMPLED_IMAGE_FILTER_CUBIC                                                  = 13,
+	SAMPLED_IMAGE_FILTER_CUBIC_EXT                                              = 13,
+	TRANSFER_SRC                                                                = 14,
+	TRANSFER_SRC_KHR                                                            = 14,
+	TRANSFER_DST                                                                = 15,
+	TRANSFER_DST_KHR                                                            = 15,
+	SAMPLED_IMAGE_FILTER_MINMAX                                                 = 16,
+	SAMPLED_IMAGE_FILTER_MINMAX_KHR                                             = 16,
+	MIDPOINT_CHROMA_SAMPLES                                                     = 17,
+	MIDPOINT_CHROMA_SAMPLES_KHR                                                 = 17,
+	SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER                                = 18,
+	SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_KHR                            = 18,
+	SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER               = 19,
+	SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_KHR           = 19,
+	SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT               = 20,
+	SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_KHR           = 20,
+	SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE     = 21,
+	SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_KHR = 21,
+	DISJOINT                                                                    = 22,
+	DISJOINT_KHR                                                                = 22,
+	COSITED_CHROMA_SAMPLES                                                      = 23,
+	COSITED_CHROMA_SAMPLES_KHR                                                  = 23,
+	STORAGE_READ_WITHOUT_FORMAT                                                 = 31,
+	STORAGE_READ_WITHOUT_FORMAT_KHR                                             = 31,
+	STORAGE_WRITE_WITHOUT_FORMAT                                                = 32,
+	STORAGE_WRITE_WITHOUT_FORMAT_KHR                                            = 32,
+	SAMPLED_IMAGE_DEPTH_COMPARISON                                              = 33,
+	SAMPLED_IMAGE_DEPTH_COMPARISON_KHR                                          = 33,
+	VIDEO_DECODE_OUTPUT_KHR                                                     = 25,
+	VIDEO_DECODE_DPB_KHR                                                        = 26,
+	ACCELERATION_STRUCTURE_VERTEX_BUFFER_KHR                                    = 29,
+	FRAGMENT_DENSITY_MAP_EXT                                                    = 24,
+	FRAGMENT_SHADING_RATE_ATTACHMENT_KHR                                        = 30,
+	VIDEO_ENCODE_INPUT_KHR                                                      = 27,
+	VIDEO_ENCODE_DPB_KHR                                                        = 28,
+	LINEAR_COLOR_ATTACHMENT_NV                                                  = 38,
+	WEIGHT_IMAGE_QCOM                                                           = 34,
+	WEIGHT_SAMPLED_IMAGE_QCOM                                                   = 35,
+	BLOCK_MATCHING_QCOM                                                         = 36,
+	BOX_FILTER_SAMPLED_QCOM                                                     = 37,
+	OPTICAL_FLOW_IMAGE_NV                                                       = 40,
+	OPTICAL_FLOW_VECTOR_NV                                                      = 41,
+	OPTICAL_FLOW_COST_NV                                                        = 42,
+}
+
+PipelineStageFlags2 :: distinct bit_set[PipelineStageFlag2; Flags64]
+PipelineStageFlag2 :: enum Flags64 {
+	TOP_OF_PIPE                          = 0,
+	TOP_OF_PIPE_KHR                      = 0,
+	DRAW_INDIRECT                        = 1,
+	DRAW_INDIRECT_KHR                    = 1,
+	VERTEX_INPUT                         = 2,
+	VERTEX_INPUT_KHR                     = 2,
+	VERTEX_SHADER                        = 3,
+	VERTEX_SHADER_KHR                    = 3,
+	TESSELLATION_CONTROL_SHADER          = 4,
+	TESSELLATION_CONTROL_SHADER_KHR      = 4,
+	TESSELLATION_EVALUATION_SHADER       = 5,
+	TESSELLATION_EVALUATION_SHADER_KHR   = 5,
+	GEOMETRY_SHADER                      = 6,
+	GEOMETRY_SHADER_KHR                  = 6,
+	FRAGMENT_SHADER                      = 7,
+	FRAGMENT_SHADER_KHR                  = 7,
+	EARLY_FRAGMENT_TESTS                 = 8,
+	EARLY_FRAGMENT_TESTS_KHR             = 8,
+	LATE_FRAGMENT_TESTS                  = 9,
+	LATE_FRAGMENT_TESTS_KHR              = 9,
+	COLOR_ATTACHMENT_OUTPUT              = 10,
+	COLOR_ATTACHMENT_OUTPUT_KHR          = 10,
+	COMPUTE_SHADER                       = 11,
+	COMPUTE_SHADER_KHR                   = 11,
+	ALL_TRANSFER                         = 12,
+	ALL_TRANSFER_KHR                     = 12,
+	TRANSFER                             = 12,
+	TRANSFER_KHR                         = 12,
+	BOTTOM_OF_PIPE                       = 13,
+	BOTTOM_OF_PIPE_KHR                   = 13,
+	HOST                                 = 14,
+	HOST_KHR                             = 14,
+	ALL_GRAPHICS                         = 15,
+	ALL_GRAPHICS_KHR                     = 15,
+	ALL_COMMANDS                         = 16,
+	ALL_COMMANDS_KHR                     = 16,
+	COPY                                 = 32,
+	COPY_KHR                             = 32,
+	RESOLVE                              = 33,
+	RESOLVE_KHR                          = 33,
+	BLIT                                 = 34,
+	BLIT_KHR                             = 34,
+	CLEAR                                = 35,
+	CLEAR_KHR                            = 35,
+	INDEX_INPUT                          = 36,
+	INDEX_INPUT_KHR                      = 36,
+	VERTEX_ATTRIBUTE_INPUT               = 37,
+	VERTEX_ATTRIBUTE_INPUT_KHR           = 37,
+	PRE_RASTERIZATION_SHADERS            = 38,
+	PRE_RASTERIZATION_SHADERS_KHR        = 38,
+	VIDEO_DECODE_KHR                     = 26,
+	VIDEO_ENCODE_KHR                     = 27,
+	TRANSFORM_FEEDBACK_EXT               = 24,
+	CONDITIONAL_RENDERING_EXT            = 18,
+	COMMAND_PREPROCESS_NV                = 17,
+	FRAGMENT_SHADING_RATE_ATTACHMENT_KHR = 22,
+	SHADING_RATE_IMAGE_NV                = 22,
+	ACCELERATION_STRUCTURE_BUILD_KHR     = 25,
+	RAY_TRACING_SHADER_KHR               = 21,
+	RAY_TRACING_SHADER_NV                = 21,
+	ACCELERATION_STRUCTURE_BUILD_NV      = 25,
+	FRAGMENT_DENSITY_PROCESS_EXT         = 23,
+	TASK_SHADER_NV                       = 19,
+	MESH_SHADER_NV                       = 20,
+	TASK_SHADER_EXT                      = 19,
+	MESH_SHADER_EXT                      = 20,
+	SUBPASS_SHADING_HUAWEI               = 39,
+	INVOCATION_MASK_HUAWEI               = 40,
+	ACCELERATION_STRUCTURE_COPY_KHR      = 28,
+	MICROMAP_BUILD_EXT                   = 30,
+	CLUSTER_CULLING_SHADER_HUAWEI        = 41,
+	OPTICAL_FLOW_NV                      = 29,
+}
+
 
 
 
 

+ 0 - 6
vendor/vulkan/structs.odin

@@ -7406,12 +7406,6 @@ IOSurfaceRef :: struct {} // Opaque struct defined by Apple’s CoreGraphics fra
 // Aliases
 // Aliases
 PhysicalDeviceVariablePointerFeatures                       :: PhysicalDeviceVariablePointersFeatures
 PhysicalDeviceVariablePointerFeatures                       :: PhysicalDeviceVariablePointersFeatures
 PhysicalDeviceShaderDrawParameterFeatures                   :: PhysicalDeviceShaderDrawParametersFeatures
 PhysicalDeviceShaderDrawParameterFeatures                   :: PhysicalDeviceShaderDrawParametersFeatures
-PipelineStageFlags2                                         :: Flags64
-PipelineStageFlag2                                          :: Flags64
-AccessFlags2                                                :: Flags64
-AccessFlag2                                                 :: Flags64
-FormatFeatureFlags2                                         :: Flags64
-FormatFeatureFlag2                                          :: Flags64
 RenderingFlagsKHR                                           :: RenderingFlags
 RenderingFlagsKHR                                           :: RenderingFlags
 RenderingFlagKHR                                            :: RenderingFlag
 RenderingFlagKHR                                            :: RenderingFlag
 RenderingInfoKHR                                            :: RenderingInfo
 RenderingInfoKHR                                            :: RenderingInfo