changeset 479:16842d15319a

add: basic vertex buffer functionality
author Sam <sam@basx.dev>
date Thu, 05 Jan 2023 01:16:48 +0700
parents 871ee602bf95
children 14e5151f68d1
files Makefile config.nims src/buffer.nim src/engine.nim src/vulkan.nim
diffstat 5 files changed, 294 insertions(+), 206 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Sun Jan 01 01:00:50 2023 +0700
+++ b/Makefile	Thu Jan 05 01:16:48 2023 +0700
@@ -1,5 +1,4 @@
 SOURCES := $(shell find src -name '*.nim')
-COMPILE_OPTIONS := --path:src --mm:orc --experimental:strictEffects --threads:on --app:gui
 DEBUG_OPTIONS := --debugger:native --checks:on --assertions:on
 RELEASE_OPTIONS := -d:release --checks:off --assertions:off
 WINDOWS_DEBUG_OPTIONS := --cc:vcc --passC:'/MDd' --passL:'ucrtd.lib'
@@ -28,21 +27,15 @@
 # end of HACK-----------------------------------------------------------
 
 
-make_dirs: 
-	mkdir -p build/debug/linux
-	mkdir -p build/release/linux
-	mkdir -p build/debug/windows
-	mkdir -p build/release/windows
-
 # build hello_triangle
-build/debug/linux/hello_triangle: ${SOURCES} make_dirs
-	nim c ${COMPILE_OPTIONS} ${DEBUG_OPTIONS} -o:$@ examples/hello_triangle.nim
-build/release/linux/hello_triangle: ${SOURCES} make_dirs
-	nim c ${COMPILE_OPTIONS} ${RELEASE_OPTIONS} -o:$@ examples/hello_triangle.nim
-build/debug/windows/hello_triangle.exe:  ${SOURCES} make_dirs build/nim_windows
-	${WINE_NIM} c ${COMPILE_OPTIONS} ${DEBUG_OPTIONS} ${WINDOWS_DEBUG_OPTIONS} -o:$@ examples/hello_triangle.nim
-build/release/windows/hello_triangle.exe: ${SOURCES} make_dirs build/nim_windows
-	${WINE_NIM} c ${COMPILE_OPTIONS} ${RELEASE_OPTIONS} ${WINDOWS_RELEASE_OPTIONS} -o:$@ examples/hello_triangle.nim
+build/debug/linux/hello_triangle: ${SOURCES}
+	nim build_linux_debug ${DEBUG_OPTIONS} -o:$@ examples/hello_triangle.nim
+build/release/linux/hello_triangle: ${SOURCES}
+	nim build_linux_release c ${RELEASE_OPTIONS} -o:$@ examples/hello_triangle.nim
+build/debug/windows/hello_triangle.exe:  ${SOURCES} build/nim_windows
+	${WINE_NIM} c ${DEBUG_OPTIONS} ${WINDOWS_DEBUG_OPTIONS} -o:$@ examples/hello_triangle.nim
+build/release/windows/hello_triangle.exe: ${SOURCES} build/nim_windows
+	${WINE_NIM} c ${RELEASE_OPTIONS} ${WINDOWS_RELEASE_OPTIONS} -o:$@ examples/hello_triangle.nim
 
 build_all_linux: build/debug/linux/hello_triangle build/release/linux/hello_triangle
 build_all_windows: build/debug/windows/hello_triangle.exe build/release/windows/hello_triangle.exe
--- a/config.nims	Sun Jan 01 01:00:50 2023 +0700
+++ b/config.nims	Thu Jan 05 01:16:48 2023 +0700
@@ -1,1 +1,32 @@
-switch("path", "src")
+import os
+
+const buildbase = "build"
+
+proc compilerFlags() =
+  switch("path", "src")
+  switch("mm", "orc")
+  switch("experimental", "strictEffects")
+  switch("threads", "on")
+  switch("app", "gui")
+
+proc compilerFlagsDebug() =
+  switch("debugger", "native")
+  switch("checks", "on")
+  switch("assertions", "on")
+
+proc compilerFlagsRelease() =
+  switch("define", "release")
+  switch("checks", "off")
+  switch("assertions", "off")
+
+task build_linux_debug, "build linux debug":
+  compilerFlags()
+  compilerFlagsDebug()
+  buildbase.joinPath("debug/linux").mkDir()
+  setCommand "c"
+
+task build_linux_release, "build linux release":
+  compilerFlags()
+  compilerFlagsRelease()
+  buildbase.joinPath("release/linux").mkDir()
+  setCommand "c"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/buffer.nim	Thu Jan 05 01:16:48 2023 +0700
@@ -0,0 +1,57 @@
+import ./vulkan
+import ./vulkan_helpers
+
+type
+  BufferType* = enum
+    VertexBuffer = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT
+  Buffer* = object
+    device*: VkDevice
+    vkBuffer*: VkBuffer
+    size*: uint64
+    memoryRequirements*: VkMemoryRequirements
+    memory*: VkDeviceMemory
+
+proc findMemoryType(buffer: Buffer, physicalDevice: VkPhysicalDevice, properties: VkMemoryPropertyFlags): uint32 =
+  var physicalProperties: VkPhysicalDeviceMemoryProperties
+  vkGetPhysicalDeviceMemoryProperties(physicalDevice, addr(physicalProperties))
+
+  for i in 0'u32 ..< physicalProperties.memoryTypeCount:
+    if bool(buffer.memoryRequirements.memoryTypeBits and (1'u32 shl i)) and (uint32(physicalProperties.memoryTypes[i].propertyFlags) and uint32(properties)) == uint32(properties):
+        return i
+
+proc InitBuffer*(device: VkDevice, physicalDevice: VkPhysicalDevice, size: uint64, bufferType: BufferType): Buffer =
+  result.device = device
+  result.size = size
+  var bufferInfo = VkBufferCreateInfo(
+    sType: VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
+    size: VkDeviceSize(result.size),
+    usage: VkBufferUsageFlags(bufferType),
+    sharingMode: VK_SHARING_MODE_EXCLUSIVE,
+
+  )
+  checkVkResult vkCreateBuffer(result.device, addr(bufferInfo), nil, addr(result.vkBuffer))
+  vkGetBufferMemoryRequirements(result.device, result.vkBuffer, addr(result.memoryRequirements))
+
+  var allocInfo = VkMemoryAllocateInfo(
+    sType: VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
+    allocationSize: result.memoryRequirements.size,
+    memoryTypeIndex: result.findMemoryType(
+      physicalDevice,
+      VkMemoryPropertyFlags(uint32(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) or uint32(VK_MEMORY_PROPERTY_HOST_COHERENT_BIT))
+    )
+  )
+  checkVkResult result.device.vkAllocateMemory(addr(allocInfo), nil, addr(result.memory))
+  checkVkResult result.device.vkBindBufferMemory(result.vkBuffer, result.memory, VkDeviceSize(0))
+
+
+template withMapping*(buffer: Buffer, data: pointer, body: untyped): untyped =
+  checkVkResult buffer.device.vkMapMemory(buffer.memory, offset=VkDeviceSize(0), VkDeviceSize(buffer.size), VkMemoryMapFlags(0), addr(data));
+  body
+  buffer.device.vkUnmapMemory(buffer.memory);
+
+
+proc `=copy`(a: var Buffer, b: Buffer){.error.}
+
+proc `=destroy`*(buffer: var Buffer) =
+  vkDestroyBuffer(buffer.device, buffer.vkBuffer, nil)
+  vkFreeMemory(buffer.device, buffer.memory, nil);
--- a/src/engine.nim	Sun Jan 01 01:00:50 2023 +0700
+++ b/src/engine.nim	Thu Jan 05 01:16:48 2023 +0700
@@ -11,6 +11,7 @@
 import ./math/vector
 import ./shader
 import ./vertex
+import ./buffer
 
 import ./glslang/glslang
 
@@ -26,35 +27,26 @@
     position: VertexAttribute[Vec2[float32]]
     color: VertexAttribute[Vec3[float32]]
 
-const vertices = [
-    (Vec2([ 0.0'f32, -0.5'f32]), Vec3([1.0'f32, 0.0'f32, 0.0'f32])),
-    (Vec2([ 0.5'f32,  0.5'f32]), Vec3([0.0'f32, 1.0'f32, 0.0'f32])),
-    (Vec2([-0.5'f32,  0.5'f32]), Vec3([0.0'f32, 0.0'f32, 1.0'f32]))
-]
-
-
-proc getBindingDescription(binding: int): auto =
-  VkVertexInputBindingDescription(
-    binding: uint32(binding),
-    stride: uint32(sizeof(vertices[0])),
-    inputRate: VK_VERTEX_INPUT_RATE_VERTEX, # VK_VERTEX_INPUT_RATE_INSTANCE for instances
-  )
+var vertices = (
+  [
+    Vec2([-0.5'f32, -0.5'f32]),
+    Vec2([ 0.5'f32,  0.5'f32]),
+    Vec2([-0.5'f32,  0.5'f32]),
 
-proc getAttributeDescriptions(binding: int): auto =
+    Vec2([ 0.0'f32, -0.7'f32]),
+    Vec2([ 0.6'f32,  0.1'f32]),
+    Vec2([ 0.3'f32,  0.4'f32]),
+  ],
   [
-    VkVertexInputAttributeDescription(
-      binding: 0'u32,
-      location: 0,
-      format: VK_FORMAT_R32G32_SFLOAT,
-      offset: 0,
-    ),
-    VkVertexInputAttributeDescription(
-      binding: 0'u32,
-      location: 1,
-      format: VK_FORMAT_R32G32B32_SFLOAT,
-      offset: uint32(sizeof(Vec2)), # use offsetOf?
-    ),
+    Vec3([1.0'f32, 1.0'f32, 0.0'f32]),
+    Vec3([0.0'f32, 1.0'f32, 0.0'f32]),
+    Vec3([0.0'f32, 1.0'f32, 1.0'f32]),
+
+    Vec3([1.0'f32, 1.0'f32, 0.0'f32]),
+    Vec3([1.0'f32, 0.0'f32, 0.0'f32]),
+    Vec3([0.0'f32, 1.0'f32, 1.0'f32]),
   ]
+)
 
 var vertexShaderCode = """
 #version 450
@@ -81,10 +73,10 @@
 
 type
   Device = object
+    device: VkDevice
     physicalDevice: PhysicalDevice
     graphicsQueueFamily: uint32
     presentationQueueFamily: uint32
-    device: VkDevice
     graphicsQueue: VkQueue
     presentationQueue: VkQueue
   Swapchain = object
@@ -123,6 +115,8 @@
     imageAvailableSemaphores*: array[MAX_FRAMES_IN_FLIGHT, VkSemaphore]
     renderFinishedSemaphores*: array[MAX_FRAMES_IN_FLIGHT, VkSemaphore]
     inFlightFences*: array[MAX_FRAMES_IN_FLIGHT, VkFence]
+    bufferA*: Buffer
+    bufferB*: Buffer
   Engine* = object
     vulkan*: Vulkan
     window: NativeWindow
@@ -542,9 +536,16 @@
     result.vulkan.renderFinishedSemaphores,
     result.vulkan.inFlightFences,
   ) = result.vulkan.device.device.setupSyncPrimitives()
+  result.vulkan.bufferA = result.vulkan.device.device.InitBuffer(result.vulkan.device.physicalDevice.device, uint64(sizeof(vertices[0])), VertexBuffer)
+  result.vulkan.bufferB = result.vulkan.device.device.InitBuffer(result.vulkan.device.physicalDevice.device, uint64(sizeof(vertices[1])), VertexBuffer)
+  var d: pointer
+  result.vulkan.bufferA.withMapping(d):
+    copyMem(d, addr(vertices[0]), sizeof(vertices[0]))
+  result.vulkan.bufferB.withMapping(d):
+    copyMem(d, addr(vertices[1]), sizeof(vertices[1]))
 
 
-proc recordCommandBuffer(renderPass: VkRenderPass, pipeline: VkPipeline, commandBuffer: VkCommandBuffer, framebuffer: VkFramebuffer, frameDimension: VkExtent2D) =
+proc recordCommandBuffer(renderPass: VkRenderPass, pipeline: VkPipeline, commandBuffer: VkCommandBuffer, framebuffer: VkFramebuffer, frameDimension: VkExtent2D, engine: var Engine) =
   var
     beginInfo = VkCommandBufferBeginInfo(
       sType: VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
@@ -576,14 +577,19 @@
     )
   checkVkResult commandBuffer.vkBeginCommandBuffer(addr(beginInfo))
   commandBuffer.vkCmdBeginRenderPass(addr(renderPassInfo), VK_SUBPASS_CONTENTS_INLINE)
-  commandBuffer.vkCmdBindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline)
   commandBuffer.vkCmdSetViewport(firstViewport=0, viewportCount=1, addr(viewport))
   commandBuffer.vkCmdSetScissor(firstScissor=0, scissorCount=1, addr(scissor))
-  commandBuffer.vkCmdDraw(vertexCount=3, instanceCount=1, firstVertex=0, firstInstance=0)
+  commandBuffer.vkCmdBindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline)
+
+  var
+    vertexBuffers = [engine.vulkan.bufferA.vkBuffer, engine.vulkan.bufferB.vkBuffer]
+    offsets = [VkDeviceSize(0), VkDeviceSize(0)]
+  commandBuffer.vkCmdBindVertexBuffers(firstBinding=0'u32, bindingCount=2'u32, pBuffers=addr(vertexBuffers[0]), pOffsets=addr(offsets[0]))
+  commandBuffer.vkCmdDraw(vertexCount=uint32(vertices[0].len), instanceCount=1'u32, firstVertex=0'u32, firstInstance=0'u32)
   commandBuffer.vkCmdEndRenderPass()
   checkVkResult commandBuffer.vkEndCommandBuffer()
 
-proc drawFrame(window: NativeWindow, vulkan: var Vulkan, currentFrame: int, resized: bool) =
+proc drawFrame(window: NativeWindow, vulkan: var Vulkan, currentFrame: int, resized: bool, engine: var Engine) =
   checkVkResult vulkan.device.device.vkWaitForFences(1, addr(vulkan.inFlightFences[currentFrame]), VK_TRUE, high(uint64))
   var bufferImageIndex: uint32
   let nextImageResult = vulkan.device.device.vkAcquireNextImageKHR(
@@ -601,7 +607,7 @@
   checkVkResult vulkan.device.device.vkResetFences(1, addr(vulkan.inFlightFences[currentFrame]))
 
   checkVkResult vulkan.commandBuffers[currentFrame].vkResetCommandBuffer(VkCommandBufferResetFlags(0))
-  vulkan.renderPass.recordCommandBuffer(vulkan.pipeline.pipeline, vulkan.commandBuffers[currentFrame], vulkan.framebuffers[bufferImageIndex], vulkan.frameDimension)
+  vulkan.renderPass.recordCommandBuffer(vulkan.pipeline.pipeline, vulkan.commandBuffers[currentFrame], vulkan.framebuffers[bufferImageIndex], vulkan.frameDimension, engine)
   var
     waitSemaphores = [vulkan.imageAvailableSemaphores[currentFrame]]
     waitStages = [VkPipelineStageFlags(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)]
@@ -653,12 +659,14 @@
             killed = true
         else:
           discard
-    engine.window.drawFrame(engine.vulkan, currentFrame, resized)
+    engine.window.drawFrame(engine.vulkan, currentFrame, resized, engine)
     resized = false
     currentFrame = (currentFrame + 1) mod MAX_FRAMES_IN_FLIGHT;
   checkVkResult engine.vulkan.device.device.vkDeviceWaitIdle()
 
-proc trash*(engine: Engine) =
+proc trash*(engine: var Engine) =
+  `=destroy` engine.vulkan.bufferA
+  `=destroy` engine.vulkan.bufferB
   engine.vulkan.device.device.trash(engine.vulkan.swapchain, engine.vulkan.framebuffers)
   checkVkResult engine.vulkan.device.device.vkDeviceWaitIdle()
 
--- a/src/vulkan.nim	Sun Jan 01 01:00:50 2023 +0700
+++ b/src/vulkan.nim	Thu Jan 05 01:16:48 2023 +0700
@@ -17,7 +17,6 @@
 
 when defined(windows):
   {. emit: """#define VK_USE_PLATFORM_WIN32_KHR""" .}
-  # {.passl: gorge("pkg-config --libs vulkan").}
   const vkDLL = "vulkan-1.dll"
 elif defined(linux):
   {.passl: gorge("pkg-config --libs vulkan").}
@@ -78,7 +77,7 @@
   VK_SHADER_UNUSED_NV* = VK_SHADER_UNUSED_KHR
 
 type
-  VkImageLayout* {.size: int32.sizeof.} = enum
+  VkImageLayout* {.size: sizeof(cint).} = enum
     VK_IMAGE_LAYOUT_UNDEFINED = 0
     VK_IMAGE_LAYOUT_GENERAL = 1
     VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2
@@ -89,21 +88,21 @@
     VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7
     VK_IMAGE_LAYOUT_PREINITIALIZED = 8
     VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
-  VkAttachmentLoadOp* {.size: int32.sizeof.} = enum
+  VkAttachmentLoadOp* {.size: sizeof(cint).} = enum
     VK_ATTACHMENT_LOAD_OP_LOAD = 0
     VK_ATTACHMENT_LOAD_OP_CLEAR = 1
     VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2
-  VkAttachmentStoreOp* {.size: int32.sizeof.} = enum
+  VkAttachmentStoreOp* {.size: sizeof(cint).} = enum
     VK_ATTACHMENT_STORE_OP_STORE = 0
     VK_ATTACHMENT_STORE_OP_DONT_CARE = 1
-  VkImageType* {.size: int32.sizeof.} = enum
+  VkImageType* {.size: sizeof(cint).} = enum
     VK_IMAGE_TYPE_1D = 0
     VK_IMAGE_TYPE_2D = 1
     VK_IMAGE_TYPE_3D = 2
-  VkImageTiling* {.size: int32.sizeof.} = enum
+  VkImageTiling* {.size: sizeof(cint).} = enum
     VK_IMAGE_TILING_OPTIMAL = 0
     VK_IMAGE_TILING_LINEAR = 1
-  VkImageViewType* {.size: int32.sizeof.} = enum
+  VkImageViewType* {.size: sizeof(cint).} = enum
     VK_IMAGE_VIEW_TYPE_1D = 0
     VK_IMAGE_VIEW_TYPE_2D = 1
     VK_IMAGE_VIEW_TYPE_3D = 2
@@ -111,10 +110,10 @@
     VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4
     VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5
     VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6
-  VkCommandBufferLevel* {.size: int32.sizeof.} = enum
+  VkCommandBufferLevel* {.size: sizeof(cint).} = enum
     VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0
     VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1
-  VkComponentSwizzle* {.size: int32.sizeof.} = enum
+  VkComponentSwizzle* {.size: sizeof(cint).} = enum
     VK_COMPONENT_SWIZZLE_IDENTITY = 0
     VK_COMPONENT_SWIZZLE_ZERO = 1
     VK_COMPONENT_SWIZZLE_ONE = 2
@@ -122,7 +121,7 @@
     VK_COMPONENT_SWIZZLE_G = 4
     VK_COMPONENT_SWIZZLE_B = 5
     VK_COMPONENT_SWIZZLE_A = 6
-  VkDescriptorType* {.size: int32.sizeof.} = enum
+  VkDescriptorType* {.size: sizeof(cint).} = enum
     VK_DESCRIPTOR_TYPE_SAMPLER = 0
     VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1
     VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2
@@ -134,23 +133,23 @@
     VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8
     VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9
     VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10
-  VkQueryType* {.size: int32.sizeof.} = enum
+  VkQueryType* {.size: sizeof(cint).} = enum
     VK_QUERY_TYPE_OCCLUSION = 0
     VK_QUERY_TYPE_PIPELINE_STATISTICS = 1
     VK_QUERY_TYPE_TIMESTAMP = 2
-  VkBorderColor* {.size: int32.sizeof.} = enum
+  VkBorderColor* {.size: sizeof(cint).} = enum
     VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0
     VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1
     VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2
     VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3
     VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4
     VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5
-  VkPipelineBindPoint* {.size: int32.sizeof.} = enum
+  VkPipelineBindPoint* {.size: sizeof(cint).} = enum
     VK_PIPELINE_BIND_POINT_GRAPHICS = 0
     VK_PIPELINE_BIND_POINT_COMPUTE = 1
-  VkPipelineCacheHeaderVersion* {.size: int32.sizeof.} = enum
+  VkPipelineCacheHeaderVersion* {.size: sizeof(cint).} = enum
     VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1
-  VkPrimitiveTopology* {.size: int32.sizeof.} = enum
+  VkPrimitiveTopology* {.size: sizeof(cint).} = enum
     VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0
     VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1
     VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2
@@ -162,24 +161,24 @@
     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8
     VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9
     VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10
-  VkSharingMode* {.size: int32.sizeof.} = enum
+  VkSharingMode* {.size: sizeof(cint).} = enum
     VK_SHARING_MODE_EXCLUSIVE = 0
     VK_SHARING_MODE_CONCURRENT = 1
-  VkIndexType* {.size: int32.sizeof.} = enum
+  VkIndexType* {.size: sizeof(cint).} = enum
     VK_INDEX_TYPE_UINT16 = 0
     VK_INDEX_TYPE_UINT32 = 1
-  VkFilter* {.size: int32.sizeof.} = enum
+  VkFilter* {.size: sizeof(cint).} = enum
     VK_FILTER_NEAREST = 0
     VK_FILTER_LINEAR = 1
-  VkSamplerMipmapMode* {.size: int32.sizeof.} = enum
+  VkSamplerMipmapMode* {.size: sizeof(cint).} = enum
     VK_SAMPLER_MIPMAP_MODE_NEAREST = 0
     VK_SAMPLER_MIPMAP_MODE_LINEAR = 1
-  VkSamplerAddressMode* {.size: int32.sizeof.} = enum
+  VkSamplerAddressMode* {.size: sizeof(cint).} = enum
     VK_SAMPLER_ADDRESS_MODE_REPEAT = 0
     VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1
     VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2
     VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3
-  VkCompareOp* {.size: int32.sizeof.} = enum
+  VkCompareOp* {.size: sizeof(cint).} = enum
     VK_COMPARE_OP_NEVER = 0
     VK_COMPARE_OP_LESS = 1
     VK_COMPARE_OP_EQUAL = 2
@@ -188,19 +187,19 @@
     VK_COMPARE_OP_NOT_EQUAL = 5
     VK_COMPARE_OP_GREATER_OR_EQUAL = 6
     VK_COMPARE_OP_ALWAYS = 7
-  VkPolygonMode* {.size: int32.sizeof.} = enum
+  VkPolygonMode* {.size: sizeof(cint).} = enum
     VK_POLYGON_MODE_FILL = 0
     VK_POLYGON_MODE_LINE = 1
     VK_POLYGON_MODE_POINT = 2
-  VkCullModeFlagBits* {.size: int32.sizeof.} = enum
+  VkCullModeFlagBits* {.size: sizeof(cint).} = enum
     VK_CULL_MODE_NONE = 0
     VK_CULL_MODE_FRONT_BIT = 1
     VK_CULL_MODE_BACK_BIT = 2
     VK_CULL_MODE_FRONT_AND_BACK = 3
-  VkFrontFace* {.size: int32.sizeof.} = enum
+  VkFrontFace* {.size: sizeof(cint).} = enum
     VK_FRONT_FACE_COUNTER_CLOCKWISE = 0
     VK_FRONT_FACE_CLOCKWISE = 1
-  VkBlendFactor* {.size: int32.sizeof.} = enum
+  VkBlendFactor* {.size: sizeof(cint).} = enum
     VK_BLEND_FACTOR_ZERO = 0
     VK_BLEND_FACTOR_ONE = 1
     VK_BLEND_FACTOR_SRC_COLOR = 2
@@ -220,13 +219,13 @@
     VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16
     VK_BLEND_FACTOR_SRC1_ALPHA = 17
     VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18
-  VkBlendOp* {.size: int32.sizeof.} = enum
+  VkBlendOp* {.size: sizeof(cint).} = enum
     VK_BLEND_OP_ADD = 0
     VK_BLEND_OP_SUBTRACT = 1
     VK_BLEND_OP_REVERSE_SUBTRACT = 2
     VK_BLEND_OP_MIN = 3
     VK_BLEND_OP_MAX = 4
-  VkStencilOp* {.size: int32.sizeof.} = enum
+  VkStencilOp* {.size: sizeof(cint).} = enum
     VK_STENCIL_OP_KEEP = 0
     VK_STENCIL_OP_ZERO = 1
     VK_STENCIL_OP_REPLACE = 2
@@ -235,7 +234,7 @@
     VK_STENCIL_OP_INVERT = 5
     VK_STENCIL_OP_INCREMENT_AND_WRAP = 6
     VK_STENCIL_OP_DECREMENT_AND_WRAP = 7
-  VkLogicOp* {.size: int32.sizeof.} = enum
+  VkLogicOp* {.size: sizeof(cint).} = enum
     VK_LOGIC_OP_CLEAR = 0
     VK_LOGIC_OP_AND = 1
     VK_LOGIC_OP_AND_REVERSE = 2
@@ -252,24 +251,24 @@
     VK_LOGIC_OP_OR_INVERTED = 13
     VK_LOGIC_OP_NAND = 14
     VK_LOGIC_OP_SET = 15
-  VkInternalAllocationType* {.size: int32.sizeof.} = enum
+  VkInternalAllocationType* {.size: sizeof(cint).} = enum
     VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0
-  VkSystemAllocationScope* {.size: int32.sizeof.} = enum
+  VkSystemAllocationScope* {.size: sizeof(cint).} = enum
     VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0
     VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1
     VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2
     VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3
     VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4
-  VkPhysicalDeviceType* {.size: int32.sizeof.} = enum
+  VkPhysicalDeviceType* {.size: sizeof(cint).} = enum
     VK_PHYSICAL_DEVICE_TYPE_OTHER = 0
     VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1
     VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2
     VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3
     VK_PHYSICAL_DEVICE_TYPE_CPU = 4
-  VkVertexInputRate* {.size: int32.sizeof.} = enum
+  VkVertexInputRate* {.size: sizeof(cint).} = enum
     VK_VERTEX_INPUT_RATE_VERTEX = 0
     VK_VERTEX_INPUT_RATE_INSTANCE = 1
-  VkFormat* {.size: int32.sizeof.} = enum
+  VkFormat* {.size: sizeof(cint).} = enum
     VK_FORMAT_UNDEFINED = 0
     VK_FORMAT_R4G4_UNORM_PACK8 = 1
     VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2
@@ -455,7 +454,7 @@
     VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182
     VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183
     VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184
-  VkStructureType* {.size: int32.sizeof.} = enum
+  VkStructureType* {.size: sizeof(cint).} = enum
     VK_STRUCTURE_TYPE_APPLICATION_INFO = 0
     VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1
     VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2
@@ -510,10 +509,10 @@
     VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000 # added by sam
     VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000 # added by sam
     VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004 # added by sam
-  VkSubpassContents* {.size: int32.sizeof.} = enum
+  VkSubpassContents* {.size: sizeof(cint).} = enum
     VK_SUBPASS_CONTENTS_INLINE = 0
     VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1
-  VkResult* {.size: int32.sizeof.} = enum
+  VkResult* {.size: sizeof(cint).} = enum
     VK_ERROR_OUT_OF_DATE_KHR = -1000001004 # added by sam
     VK_ERROR_UNKNOWN = -13
     VK_ERROR_FRAGMENTED_POOL = -12
@@ -535,7 +534,7 @@
     VK_EVENT_RESET = 4
     VK_INCOMPLETE = 5
     VK_SUBOPTIMAL_KHR = 1000001003, # added by sam
-  VkDynamicState* {.size: int32.sizeof.} = enum
+  VkDynamicState* {.size: sizeof(cint).} = enum
     VK_DYNAMIC_STATE_VIEWPORT = 0
     VK_DYNAMIC_STATE_SCISSOR = 1
     VK_DYNAMIC_STATE_LINE_WIDTH = 2
@@ -545,9 +544,9 @@
     VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6
     VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7
     VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8
-  VkDescriptorUpdateTemplateType* {.size: int32.sizeof.} = enum
+  VkDescriptorUpdateTemplateType* {.size: sizeof(cint).} = enum
     VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0
-  VkObjectType* {.size: int32.sizeof.} = enum
+  VkObjectType* {.size: sizeof(cint).} = enum
     VK_OBJECT_TYPE_UNKNOWN = 0
     VK_OBJECT_TYPE_INSTANCE = 1
     VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2
@@ -574,20 +573,20 @@
     VK_OBJECT_TYPE_DESCRIPTOR_SET = 23
     VK_OBJECT_TYPE_FRAMEBUFFER = 24
     VK_OBJECT_TYPE_COMMAND_POOL = 25
-  VkQueueFlagBits* {.size: int32.sizeof.} = enum
+  VkQueueFlagBits* {.size: sizeof(cint).} = enum
     VK_QUEUE_GRAPHICS_BIT = 1
     VK_QUEUE_COMPUTE_BIT = 2
     VK_QUEUE_TRANSFER_BIT = 4
     VK_QUEUE_SPARSE_BINDING_BIT = 8
-  VkMemoryPropertyFlagBits* {.size: int32.sizeof.} = enum
+  VkMemoryPropertyFlagBits* {.size: sizeof(cint).} = enum
     VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 1
     VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 2
     VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 4
     VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 8
     VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 16
-  VkMemoryHeapFlagBits* {.size: int32.sizeof.} = enum
+  VkMemoryHeapFlagBits* {.size: sizeof(cint).} = enum
     VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 1
-  VkAccessFlagBits* {.size: int32.sizeof.} = enum
+  VkAccessFlagBits* {.size: sizeof(cint).} = enum
     VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 1
     VK_ACCESS_INDEX_READ_BIT = 2
     VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 4
@@ -605,7 +604,7 @@
     VK_ACCESS_HOST_WRITE_BIT = 16384
     VK_ACCESS_MEMORY_READ_BIT = 32768
     VK_ACCESS_MEMORY_WRITE_BIT = 65536
-  VkBufferUsageFlagBits* {.size: int32.sizeof.} = enum
+  VkBufferUsageFlagBits* {.size: sizeof(cint).} = enum
     VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 1
     VK_BUFFER_USAGE_TRANSFER_DST_BIT = 2
     VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 4
@@ -615,11 +614,11 @@
     VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 64
     VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 128
     VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 256
-  VkBufferCreateFlagBits* {.size: int32.sizeof.} = enum
+  VkBufferCreateFlagBits* {.size: sizeof(cint).} = enum
     VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 1
     VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 2
     VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 4
-  VkShaderStageFlagBits* {.size: int32.sizeof.} = enum
+  VkShaderStageFlagBits* {.size: sizeof(cint).} = enum
     VK_SHADER_STAGE_VERTEX_BIT = 1
     VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 2
     VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 4
@@ -628,7 +627,7 @@
     VK_SHADER_STAGE_ALL_GRAPHICS = 31
     VK_SHADER_STAGE_COMPUTE_BIT = 32
     VK_SHADER_STAGE_ALL = 2147483647
-  VkImageUsageFlagBits* {.size: int32.sizeof.} = enum
+  VkImageUsageFlagBits* {.size: sizeof(cint).} = enum
     VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 1
     VK_IMAGE_USAGE_TRANSFER_DST_BIT = 2
     VK_IMAGE_USAGE_SAMPLED_BIT = 4
@@ -637,24 +636,24 @@
     VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 32
     VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 64
     VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 128
-  VkImageCreateFlagBits* {.size: int32.sizeof.} = enum
+  VkImageCreateFlagBits* {.size: sizeof(cint).} = enum
     VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 1
     VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 2
     VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 4
     VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 8
     VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 16
-  VkPipelineCreateFlagBits* {.size: int32.sizeof.} = enum
+  VkPipelineCreateFlagBits* {.size: sizeof(cint).} = enum
     VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 1
     VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 2
     VK_PIPELINE_CREATE_DERIVATIVE_BIT = 4
-  VkColorComponentFlagBits* {.size: int32.sizeof.} = enum
+  VkColorComponentFlagBits* {.size: sizeof(cint).} = enum
     VK_COLOR_COMPONENT_R_BIT = 1
     VK_COLOR_COMPONENT_G_BIT = 2
     VK_COLOR_COMPONENT_B_BIT = 4
     VK_COLOR_COMPONENT_A_BIT = 8
-  VkFenceCreateFlagBits* {.size: int32.sizeof.} = enum
+  VkFenceCreateFlagBits* {.size: sizeof(cint).} = enum
     VK_FENCE_CREATE_SIGNALED_BIT = 1
-  VkFormatFeatureFlagBits* {.size: int32.sizeof.} = enum
+  VkFormatFeatureFlagBits* {.size: sizeof(cint).} = enum
     VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 1
     VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 2
     VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 4
@@ -668,18 +667,18 @@
     VK_FORMAT_FEATURE_BLIT_SRC_BIT = 1024
     VK_FORMAT_FEATURE_BLIT_DST_BIT = 2048
     VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 4096
-  VkQueryControlFlagBits* {.size: int32.sizeof.} = enum
+  VkQueryControlFlagBits* {.size: sizeof(cint).} = enum
     VK_QUERY_CONTROL_PRECISE_BIT = 1
-  VkQueryResultFlagBits* {.size: int32.sizeof.} = enum
+  VkQueryResultFlagBits* {.size: sizeof(cint).} = enum
     VK_QUERY_RESULT_64_BIT = 1
     VK_QUERY_RESULT_WAIT_BIT = 2
     VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 4
     VK_QUERY_RESULT_PARTIAL_BIT = 8
-  VkCommandBufferUsageFlagBits* {.size: int32.sizeof.} = enum
+  VkCommandBufferUsageFlagBits* {.size: sizeof(cint).} = enum
     VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 1
     VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 2
     VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 4
-  VkQueryPipelineStatisticFlagBits* {.size: int32.sizeof.} = enum
+  VkQueryPipelineStatisticFlagBits* {.size: sizeof(cint).} = enum
     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 1
     VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 2
     VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 4
@@ -691,18 +690,18 @@
     VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 256
     VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 512
     VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 1024
-  VkImageAspectFlagBits* {.size: int32.sizeof.} = enum
+  VkImageAspectFlagBits* {.size: sizeof(cint).} = enum
     VK_IMAGE_ASPECT_COLOR_BIT = 1
     VK_IMAGE_ASPECT_DEPTH_BIT = 2
     VK_IMAGE_ASPECT_STENCIL_BIT = 4
     VK_IMAGE_ASPECT_METADATA_BIT = 8
-  VkSparseImageFormatFlagBits* {.size: int32.sizeof.} = enum
+  VkSparseImageFormatFlagBits* {.size: sizeof(cint).} = enum
     VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 1
     VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 2
     VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 4
-  VkSparseMemoryBindFlagBits* {.size: int32.sizeof.} = enum
+  VkSparseMemoryBindFlagBits* {.size: sizeof(cint).} = enum
     VK_SPARSE_MEMORY_BIND_METADATA_BIT = 1
-  VkPipelineStageFlagBits* {.size: int32.sizeof.} = enum
+  VkPipelineStageFlagBits* {.size: sizeof(cint).} = enum
     VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 1
     VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 2
     VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 4
@@ -720,14 +719,14 @@
     VK_PIPELINE_STAGE_HOST_BIT = 16384
     VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 32768
     VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 65536
-  VkCommandPoolCreateFlagBits* {.size: int32.sizeof.} = enum
+  VkCommandPoolCreateFlagBits* {.size: sizeof(cint).} = enum
     VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 1
     VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 2
-  VkCommandPoolResetFlagBits* {.size: int32.sizeof.} = enum
+  VkCommandPoolResetFlagBits* {.size: sizeof(cint).} = enum
     VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 1
-  VkCommandBufferResetFlagBits* {.size: int32.sizeof.} = enum
+  VkCommandBufferResetFlagBits* {.size: sizeof(cint).} = enum
     VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 1
-  VkSampleCountFlagBits* {.size: int32.sizeof.} = enum
+  VkSampleCountFlagBits* {.size: sizeof(cint).} = enum
     VK_SAMPLE_COUNT_1_BIT = 1
     VK_SAMPLE_COUNT_2_BIT = 2
     VK_SAMPLE_COUNT_4_BIT = 4
@@ -735,39 +734,39 @@
     VK_SAMPLE_COUNT_16_BIT = 16
     VK_SAMPLE_COUNT_32_BIT = 32
     VK_SAMPLE_COUNT_64_BIT = 64
-  VkAttachmentDescriptionFlagBits* {.size: int32.sizeof.} = enum
+  VkAttachmentDescriptionFlagBits* {.size: sizeof(cint).} = enum
     VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 1
-  VkStencilFaceFlagBits* {.size: int32.sizeof.} = enum
+  VkStencilFaceFlagBits* {.size: sizeof(cint).} = enum
     VK_STENCIL_FACE_FRONT_BIT = 1
     VK_STENCIL_FACE_BACK_BIT = 2
     VK_STENCIL_FACE_FRONT_AND_BACK = 3
-  VkDescriptorPoolCreateFlagBits* {.size: int32.sizeof.} = enum
+  VkDescriptorPoolCreateFlagBits* {.size: sizeof(cint).} = enum
     VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 1
-  VkDependencyFlagBits* {.size: int32.sizeof.} = enum
+  VkDependencyFlagBits* {.size: sizeof(cint).} = enum
     VK_DEPENDENCY_BY_REGION_BIT = 1
-  VkSemaphoreType* {.size: int32.sizeof.} = enum
+  VkSemaphoreType* {.size: sizeof(cint).} = enum
     VK_SEMAPHORE_TYPE_BINARY = 0
     VK_SEMAPHORE_TYPE_TIMELINE = 1
-  VkSemaphoreWaitFlagBits* {.size: int32.sizeof.} = enum
+  VkSemaphoreWaitFlagBits* {.size: sizeof(cint).} = enum
     VK_SEMAPHORE_WAIT_ANY_BIT = 1
-  VkPresentModeKHR* {.size: int32.sizeof.} = enum
+  VkPresentModeKHR* {.size: sizeof(cint).} = enum
     VK_PRESENT_MODE_IMMEDIATE_KHR = 0
     VK_PRESENT_MODE_MAILBOX_KHR = 1
     VK_PRESENT_MODE_FIFO_KHR = 2
     VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3
-  VkColorSpaceKHR* {.size: int32.sizeof.} = enum
+  VkColorSpaceKHR* {.size: sizeof(cint).} = enum
     VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0
-  VkDisplayPlaneAlphaFlagBitsKHR* {.size: int32.sizeof.} = enum
+  VkDisplayPlaneAlphaFlagBitsKHR* {.size: sizeof(cint).} = enum
     VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 1
     VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 2
     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 4
     VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 8
-  VkCompositeAlphaFlagBitsKHR* {.size: int32.sizeof.} = enum
+  VkCompositeAlphaFlagBitsKHR* {.size: sizeof(cint).} = enum
     VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 1
     VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 2
     VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 4
     VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 8
-  VkSurfaceTransformFlagBitsKHR* {.size: int32.sizeof.} = enum
+  VkSurfaceTransformFlagBitsKHR* {.size: sizeof(cint).} = enum
     VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 1
     VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 2
     VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 4
@@ -777,20 +776,20 @@
     VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 64
     VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 128
     VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 256
-  VkSwapchainImageUsageFlagBitsANDROID* {.size: int32.sizeof.} = enum
+  VkSwapchainImageUsageFlagBitsANDROID* {.size: sizeof(cint).} = enum
     VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID = 1
-  VkTimeDomainEXT* {.size: int32.sizeof.} = enum
+  VkTimeDomainEXT* {.size: sizeof(cint).} = enum
     VK_TIME_DOMAIN_DEVICE_EXT = 0
     VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = 1
     VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = 2
     VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = 3
-  VkDebugReportFlagBitsEXT* {.size: int32.sizeof.} = enum
+  VkDebugReportFlagBitsEXT* {.size: sizeof(cint).} = enum
     VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 1
     VK_DEBUG_REPORT_WARNING_BIT_EXT = 2
     VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 4
     VK_DEBUG_REPORT_ERROR_BIT_EXT = 8
     VK_DEBUG_REPORT_DEBUG_BIT_EXT = 16
-  VkDebugReportObjectTypeEXT* {.size: int32.sizeof.} = enum
+  VkDebugReportObjectTypeEXT* {.size: sizeof(cint).} = enum
     VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0
     VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1
     VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2
@@ -823,28 +822,28 @@
     VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29
     VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30
     VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33
-  VkRasterizationOrderAMD* {.size: int32.sizeof.} = enum
+  VkRasterizationOrderAMD* {.size: sizeof(cint).} = enum
     VK_RASTERIZATION_ORDER_STRICT_AMD = 0
     VK_RASTERIZATION_ORDER_RELAXED_AMD = 1
-  VkExternalMemoryHandleTypeFlagBitsNV* {.size: int32.sizeof.} = enum
+  VkExternalMemoryHandleTypeFlagBitsNV* {.size: sizeof(cint).} = enum
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 1
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 2
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 4
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 8
-  VkExternalMemoryFeatureFlagBitsNV* {.size: int32.sizeof.} = enum
+  VkExternalMemoryFeatureFlagBitsNV* {.size: sizeof(cint).} = enum
     VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 1
     VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 2
     VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 4
-  VkValidationCheckEXT* {.size: int32.sizeof.} = enum
+  VkValidationCheckEXT* {.size: sizeof(cint).} = enum
     VK_VALIDATION_CHECK_ALL_EXT = 0
     VK_VALIDATION_CHECK_SHADERS_EXT = 1
-  VkValidationFeatureEnableEXT* {.size: int32.sizeof.} = enum
+  VkValidationFeatureEnableEXT* {.size: sizeof(cint).} = enum
     VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0
     VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1
     VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2
     VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = 3
     VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT = 4
-  VkValidationFeatureDisableEXT* {.size: int32.sizeof.} = enum
+  VkValidationFeatureDisableEXT* {.size: sizeof(cint).} = enum
     VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0
     VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1
     VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2
@@ -852,7 +851,7 @@
     VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = 4
     VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = 5
     VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = 6
-  VkSubgroupFeatureFlagBits* {.size: int32.sizeof.} = enum
+  VkSubgroupFeatureFlagBits* {.size: sizeof(cint).} = enum
     VK_SUBGROUP_FEATURE_BASIC_BIT = 1
     VK_SUBGROUP_FEATURE_VOTE_BIT = 2
     VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 4
@@ -861,13 +860,13 @@
     VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 32
     VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 64
     VK_SUBGROUP_FEATURE_QUAD_BIT = 128
-  VkIndirectCommandsLayoutUsageFlagBitsNV* {.size: int32.sizeof.} = enum
+  VkIndirectCommandsLayoutUsageFlagBitsNV* {.size: sizeof(cint).} = enum
     VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = 1
     VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = 2
     VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = 4
-  VkIndirectStateFlagBitsNV* {.size: int32.sizeof.} = enum
+  VkIndirectStateFlagBitsNV* {.size: sizeof(cint).} = enum
     VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = 1
-  VkIndirectCommandsTokenTypeNV* {.size: int32.sizeof.} = enum
+  VkIndirectCommandsTokenTypeNV* {.size: sizeof(cint).} = enum
     VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = 0
     VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = 1
     VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = 2
@@ -876,7 +875,7 @@
     VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = 5
     VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = 6
     VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = 7
-  VkExternalMemoryHandleTypeFlagBits* {.size: int32.sizeof.} = enum
+  VkExternalMemoryHandleTypeFlagBits* {.size: sizeof(cint).} = enum
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 1
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 2
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 4
@@ -884,54 +883,54 @@
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 16
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 32
     VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 64
-  VkExternalMemoryFeatureFlagBits* {.size: int32.sizeof.} = enum
+  VkExternalMemoryFeatureFlagBits* {.size: sizeof(cint).} = enum
     VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 1
     VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 2
     VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 4
-  VkExternalSemaphoreHandleTypeFlagBits* {.size: int32.sizeof.} = enum
+  VkExternalSemaphoreHandleTypeFlagBits* {.size: sizeof(cint).} = enum
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 1
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 2
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 4
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 8
     VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 16
-  VkExternalSemaphoreFeatureFlagBits* {.size: int32.sizeof.} = enum
+  VkExternalSemaphoreFeatureFlagBits* {.size: sizeof(cint).} = enum
     VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 1
     VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 2
-  VkSemaphoreImportFlagBits* {.size: int32.sizeof.} = enum
+  VkSemaphoreImportFlagBits* {.size: sizeof(cint).} = enum
     VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 1
-  VkExternalFenceHandleTypeFlagBits* {.size: int32.sizeof.} = enum
+  VkExternalFenceHandleTypeFlagBits* {.size: sizeof(cint).} = enum
     VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 1
     VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 2
     VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 4
     VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 8
-  VkExternalFenceFeatureFlagBits* {.size: int32.sizeof.} = enum
+  VkExternalFenceFeatureFlagBits* {.size: sizeof(cint).} = enum
     VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 1
     VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 2
-  VkFenceImportFlagBits* {.size: int32.sizeof.} = enum
+  VkFenceImportFlagBits* {.size: sizeof(cint).} = enum
     VK_FENCE_IMPORT_TEMPORARY_BIT = 1
-  VkSurfaceCounterFlagBitsEXT* {.size: int32.sizeof.} = enum
+  VkSurfaceCounterFlagBitsEXT* {.size: sizeof(cint).} = enum
     VK_SURFACE_COUNTER_VBLANK_EXT = 1
-  VkDisplayPowerStateEXT* {.size: int32.sizeof.} = enum
+  VkDisplayPowerStateEXT* {.size: sizeof(cint).} = enum
     VK_DISPLAY_POWER_STATE_OFF_EXT = 0
     VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1
     VK_DISPLAY_POWER_STATE_ON_EXT = 2
-  VkDeviceEventTypeEXT* {.size: int32.sizeof.} = enum
+  VkDeviceEventTypeEXT* {.size: sizeof(cint).} = enum
     VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0
-  VkDisplayEventTypeEXT* {.size: int32.sizeof.} = enum
+  VkDisplayEventTypeEXT* {.size: sizeof(cint).} = enum
     VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0
-  VkPeerMemoryFeatureFlagBits* {.size: int32.sizeof.} = enum
+  VkPeerMemoryFeatureFlagBits* {.size: sizeof(cint).} = enum
     VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = 1
     VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = 2
     VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = 4
     VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = 8
-  VkMemoryAllocateFlagBits* {.size: int32.sizeof.} = enum
+  VkMemoryAllocateFlagBits* {.size: sizeof(cint).} = enum
     VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 1
-  VkDeviceGroupPresentModeFlagBitsKHR* {.size: int32.sizeof.} = enum
+  VkDeviceGroupPresentModeFlagBitsKHR* {.size: sizeof(cint).} = enum
     VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 1
     VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 2
     VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 4
     VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 8
-  VkViewportCoordinateSwizzleNV* {.size: int32.sizeof.} = enum
+  VkViewportCoordinateSwizzleNV* {.size: sizeof(cint).} = enum
     VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0
     VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1
     VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2
@@ -940,79 +939,79 @@
     VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5
     VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6
     VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7
-  VkDiscardRectangleModeEXT* {.size: int32.sizeof.} = enum
+  VkDiscardRectangleModeEXT* {.size: sizeof(cint).} = enum
     VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0
     VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1
-  VkPointClippingBehavior* {.size: int32.sizeof.} = enum
+  VkPointClippingBehavior* {.size: sizeof(cint).} = enum
     VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0
     VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1
-  VkSamplerReductionMode* {.size: int32.sizeof.} = enum
+  VkSamplerReductionMode* {.size: sizeof(cint).} = enum
     VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = 0
     VK_SAMPLER_REDUCTION_MODE_MIN = 1
     VK_SAMPLER_REDUCTION_MODE_MAX = 2
-  VkTessellationDomainOrigin* {.size: int32.sizeof.} = enum
+  VkTessellationDomainOrigin* {.size: sizeof(cint).} = enum
     VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0
     VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1
-  VkSamplerYcbcrModelConversion* {.size: int32.sizeof.} = enum
+  VkSamplerYcbcrModelConversion* {.size: sizeof(cint).} = enum
     VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0
     VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = 1
     VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = 2
     VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = 3
     VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = 4
-  VkSamplerYcbcrRange* {.size: int32.sizeof.} = enum
+  VkSamplerYcbcrRange* {.size: sizeof(cint).} = enum
     VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0
     VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1
-  VkChromaLocation* {.size: int32.sizeof.} = enum
+  VkChromaLocation* {.size: sizeof(cint).} = enum
     VK_CHROMA_LOCATION_COSITED_EVEN = 0
     VK_CHROMA_LOCATION_MIDPOINT = 1
-  VkBlendOverlapEXT* {.size: int32.sizeof.} = enum
+  VkBlendOverlapEXT* {.size: sizeof(cint).} = enum
     VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0
     VK_BLEND_OVERLAP_DISJOINT_EXT = 1
     VK_BLEND_OVERLAP_CONJOINT_EXT = 2
-  VkCoverageModulationModeNV* {.size: int32.sizeof.} = enum
+  VkCoverageModulationModeNV* {.size: sizeof(cint).} = enum
     VK_COVERAGE_MODULATION_MODE_NONE_NV = 0
     VK_COVERAGE_MODULATION_MODE_RGB_NV = 1
     VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2
     VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3
-  VkCoverageReductionModeNV* {.size: int32.sizeof.} = enum
+  VkCoverageReductionModeNV* {.size: sizeof(cint).} = enum
     VK_COVERAGE_REDUCTION_MODE_MERGE_NV = 0
     VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV = 1
-  VkValidationCacheHeaderVersionEXT* {.size: int32.sizeof.} = enum
+  VkValidationCacheHeaderVersionEXT* {.size: sizeof(cint).} = enum
     VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1
-  VkShaderInfoTypeAMD* {.size: int32.sizeof.} = enum
+  VkShaderInfoTypeAMD* {.size: sizeof(cint).} = enum
     VK_SHADER_INFO_TYPE_STATISTICS_AMD = 0
     VK_SHADER_INFO_TYPE_BINARY_AMD = 1
     VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = 2
-  VkQueueGlobalPriorityEXT* {.size: int32.sizeof.} = enum
+  VkQueueGlobalPriorityEXT* {.size: sizeof(cint).} = enum
     VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = 128
     VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = 256
     VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = 512
     VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = 1024
-  VkDebugUtilsMessageSeverityFlagBitsEXT* {.size: int32.sizeof.} = enum
+  VkDebugUtilsMessageSeverityFlagBitsEXT* {.size: sizeof(cint).} = enum
     VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 1
     VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 16
     VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 256
     VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 4096
-  VkDebugUtilsMessageTypeFlagBitsEXT* {.size: int32.sizeof.} = enum
+  VkDebugUtilsMessageTypeFlagBitsEXT* {.size: sizeof(cint).} = enum
     VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 1
     VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 2
     VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 4
-  VkConservativeRasterizationModeEXT* {.size: int32.sizeof.} = enum
+  VkConservativeRasterizationModeEXT* {.size: sizeof(cint).} = enum
     VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0
     VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1
     VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2
-  VkDescriptorBindingFlagBits* {.size: int32.sizeof.} = enum
+  VkDescriptorBindingFlagBits* {.size: sizeof(cint).} = enum
     VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = 1
     VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = 2
     VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = 4
     VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 8
-  VkVendorId* {.size: int32.sizeof.} = enum
+  VkVendorId* {.size: sizeof(cint).} = enum
     VK_VENDOR_ID_VIV = 65537
     VK_VENDOR_ID_VSI = 65538
     VK_VENDOR_ID_KAZAN = 65539
     VK_VENDOR_ID_CODEPLAY = 65540
     VK_VENDOR_ID_MESA = 65541
-  VkDriverId* {.size: int32.sizeof.} = enum
+  VkDriverId* {.size: sizeof(cint).} = enum
     VK_DRIVER_ID_AMD_PROPRIETARY = 1
     VK_DRIVER_ID_AMD_OPEN_SOURCE = 2
     VK_DRIVER_ID_MESA_RADV = 3
@@ -1027,15 +1026,15 @@
     VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12
     VK_DRIVER_ID_MESA_LLVMPIPE = 13
     VK_DRIVER_ID_MOLTENVK = 14
-  VkConditionalRenderingFlagBitsEXT* {.size: int32.sizeof.} = enum
+  VkConditionalRenderingFlagBitsEXT* {.size: sizeof(cint).} = enum
     VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT = 1
-  VkResolveModeFlagBits* {.size: int32.sizeof.} = enum
+  VkResolveModeFlagBits* {.size: sizeof(cint).} = enum
     VK_RESOLVE_MODE_NONE = 0
     VK_RESOLVE_MODE_SAMPLE_ZERO_BIT = 1
     VK_RESOLVE_MODE_AVERAGE_BIT = 2
     VK_RESOLVE_MODE_MIN_BIT = 4
     VK_RESOLVE_MODE_MAX_BIT = 8
-  VkShadingRatePaletteEntryNV* {.size: int32.sizeof.} = enum
+  VkShadingRatePaletteEntryNV* {.size: sizeof(cint).} = enum
     VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = 0
     VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = 1
     VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = 2
@@ -1048,58 +1047,58 @@
     VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = 9
     VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = 10
     VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = 11
-  VkCoarseSampleOrderTypeNV* {.size: int32.sizeof.} = enum
+  VkCoarseSampleOrderTypeNV* {.size: sizeof(cint).} = enum
     VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = 0
     VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = 1
     VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = 2
     VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = 3
-  VkGeometryInstanceFlagBitsKHR* {.size: int32.sizeof.} = enum
+  VkGeometryInstanceFlagBitsKHR* {.size: sizeof(cint).} = enum
     VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = 1
     VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = 2
     VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = 4
     VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = 8
-  VkGeometryFlagBitsKHR* {.size: int32.sizeof.} = enum
+  VkGeometryFlagBitsKHR* {.size: sizeof(cint).} = enum
     VK_GEOMETRY_OPAQUE_BIT_KHR = 1
     VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = 2
-  VkBuildAccelerationStructureFlagBitsKHR* {.size: int32.sizeof.} = enum
+  VkBuildAccelerationStructureFlagBitsKHR* {.size: sizeof(cint).} = enum
     VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = 1
     VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = 2
     VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = 4
     VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = 8
     VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = 16
-  VkCopyAccelerationStructureModeKHR* {.size: int32.sizeof.} = enum
+  VkCopyAccelerationStructureModeKHR* {.size: sizeof(cint).} = enum
     VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = 0
     VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = 1
     VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = 2
     VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = 3
-  VkAccelerationStructureTypeKHR* {.size: int32.sizeof.} = enum
+  VkAccelerationStructureTypeKHR* {.size: sizeof(cint).} = enum
     VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = 0
     VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = 1
-  VkGeometryTypeKHR* {.size: int32.sizeof.} = enum
+  VkGeometryTypeKHR* {.size: sizeof(cint).} = enum
     VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0
     VK_GEOMETRY_TYPE_AABBS_KHR = 1
-  VkAccelerationStructureMemoryRequirementsTypeKHR* {.size: int32.sizeof.} = enum
+  VkAccelerationStructureMemoryRequirementsTypeKHR* {.size: sizeof(cint).} = enum
     VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_KHR = 0
     VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_KHR = 1
     VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_KHR = 2
-  VkAccelerationStructureBuildTypeKHR* {.size: int32.sizeof.} = enum
+  VkAccelerationStructureBuildTypeKHR* {.size: sizeof(cint).} = enum
     VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0
     VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1
     VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2
-  VkRayTracingShaderGroupTypeKHR* {.size: int32.sizeof.} = enum
+  VkRayTracingShaderGroupTypeKHR* {.size: sizeof(cint).} = enum
     VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = 0
     VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = 1
     VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = 2
-  VkMemoryOverallocationBehaviorAMD* {.size: int32.sizeof.} = enum
+  VkMemoryOverallocationBehaviorAMD* {.size: sizeof(cint).} = enum
     VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = 0
     VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = 1
     VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = 2
-  VkScopeNV* {.size: int32.sizeof.} = enum
+  VkScopeNV* {.size: sizeof(cint).} = enum
     VK_SCOPE_DEVICE_NV = 1
     VK_SCOPE_WORKGROUP_NV = 2
     VK_SCOPE_SUBGROUP_NV = 3
     VK_SCOPE_QUEUE_FAMILY_NV = 5
-  VkComponentTypeNV* {.size: int32.sizeof.} = enum
+  VkComponentTypeNV* {.size: sizeof(cint).} = enum
     VK_COMPONENT_TYPE_FLOAT16_NV = 0
     VK_COMPONENT_TYPE_FLOAT32_NV = 1
     VK_COMPONENT_TYPE_FLOAT64_NV = 2
@@ -1111,24 +1110,24 @@
     VK_COMPONENT_TYPE_UINT16_NV = 8
     VK_COMPONENT_TYPE_UINT32_NV = 9
     VK_COMPONENT_TYPE_UINT64_NV = 10
-  VkDeviceDiagnosticsConfigFlagBitsNV* {.size: int32.sizeof.} = enum
+  VkDeviceDiagnosticsConfigFlagBitsNV* {.size: sizeof(cint).} = enum
     VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = 1
     VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = 2
     VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = 4
-  VkPipelineCreationFeedbackFlagBitsEXT* {.size: int32.sizeof.} = enum
+  VkPipelineCreationFeedbackFlagBitsEXT* {.size: sizeof(cint).} = enum
     VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = 1
     VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = 2
     VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = 4
-  VkFullScreenExclusiveEXT* {.size: int32.sizeof.} = enum
+  VkFullScreenExclusiveEXT* {.size: sizeof(cint).} = enum
     VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0
     VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1
     VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2
     VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3
-  VkPerformanceCounterScopeKHR* {.size: int32.sizeof.} = enum
+  VkPerformanceCounterScopeKHR* {.size: sizeof(cint).} = enum
     VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR = 0
     VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR = 1
     VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR = 2
-  VkPerformanceCounterUnitKHR* {.size: int32.sizeof.} = enum
+  VkPerformanceCounterUnitKHR* {.size: sizeof(cint).} = enum
     VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = 0
     VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = 1
     VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = 2
@@ -1140,47 +1139,47 @@
     VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR = 8
     VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR = 9
     VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR = 10
-  VkPerformanceCounterStorageKHR* {.size: int32.sizeof.} = enum
+  VkPerformanceCounterStorageKHR* {.size: sizeof(cint).} = enum
     VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR = 0
     VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR = 1
     VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR = 2
     VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR = 3
     VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR = 4
     VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR = 5
-  VkPerformanceCounterDescriptionFlagBitsKHR* {.size: int32.sizeof.} = enum
+  VkPerformanceCounterDescriptionFlagBitsKHR* {.size: sizeof(cint).} = enum
     VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = 1
     VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = 2
-  VkPerformanceConfigurationTypeINTEL* {.size: int32.sizeof.} = enum
+  VkPerformanceConfigurationTypeINTEL* {.size: sizeof(cint).} = enum
     VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = 0
-  VkQueryPoolSamplingModeINTEL* {.size: int32.sizeof.} = enum
+  VkQueryPoolSamplingModeINTEL* {.size: sizeof(cint).} = enum
     VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = 0
-  VkPerformanceOverrideTypeINTEL* {.size: int32.sizeof.} = enum
+  VkPerformanceOverrideTypeINTEL* {.size: sizeof(cint).} = enum
     VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = 0
     VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = 1
-  VkPerformanceParameterTypeINTEL* {.size: int32.sizeof.} = enum
+  VkPerformanceParameterTypeINTEL* {.size: sizeof(cint).} = enum
     VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = 0
     VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = 1
-  VkPerformanceValueTypeINTEL* {.size: int32.sizeof.} = enum
+  VkPerformanceValueTypeINTEL* {.size: sizeof(cint).} = enum
     VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL = 0
     VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL = 1
     VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = 2
     VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL = 3
     VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL = 4
-  VkShaderFloatControlsIndependence* {.size: int32.sizeof.} = enum
+  VkShaderFloatControlsIndependence* {.size: sizeof(cint).} = enum
     VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0
     VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1
     VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2
-  VkPipelineExecutableStatisticFormatKHR* {.size: int32.sizeof.} = enum
+  VkPipelineExecutableStatisticFormatKHR* {.size: sizeof(cint).} = enum
     VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0
     VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1
     VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2
     VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3
-  VkLineRasterizationModeEXT* {.size: int32.sizeof.} = enum
+  VkLineRasterizationModeEXT* {.size: sizeof(cint).} = enum
     VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = 0
     VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = 1
     VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = 2
     VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = 3
-  VkToolPurposeFlagBitsEXT* {.size: int32.sizeof.} = enum
+  VkToolPurposeFlagBitsEXT* {.size: sizeof(cint).} = enum
     VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = 1
     VK_TOOL_PURPOSE_PROFILING_BIT_EXT = 2
     VK_TOOL_PURPOSE_TRACING_BIT_EXT = 4