changeset 7:a48af6ac67d6

Merge remote-tracking branch 'github/main'
author Sam <sam@basx.dev>
date Thu, 22 Dec 2022 19:33:00 +0700
parents 4ed9cb098315 (diff) 091ed9ba0594 (current diff)
children 1134f41a49e9
files
diffstat 14 files changed, 12488 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,69 @@
+SOURCES := $(shell find src -name '*.nim')
+COMPILE_OPTIONS := --path:src --mm:orc --experimental:strictEffects --threads:on
+DEBUG_OPTIONS := --debugger:native --checks:on --assertions:on
+RELEASE_OPTIONS := -d:release --checks:off --assertions:off
+
+# build
+build/debug/linux/test: ${SOURCES}
+	mkdir -p $$( dirname $@ )
+	nim c ${COMPILE_OPTIONS} ${DEBUG_OPTIONS} -o:$@ examples/test.nim
+build/release/linux/test: ${SOURCES}
+	mkdir -p $$( dirname $@ )
+	nim c ${COMPILE_OPTIONS} ${RELEASE_OPTIONS} -o:$@ examples/test.nim
+build/debug/windows/test:  ${SOURCES}
+	mkdir -p $$( dirname $@ )
+	nim c ${COMPILE_OPTIONS} ${DEBUG_OPTIONS} -o:$@ examples/test.nim
+build/release/windows/test: ${SOURCES}
+	mkdir -p $$( dirname $@ )
+	nim c ${COMPILE_OPTIONS} ${RELEASE_OPTIONS} -o:$@ examples/test.nim
+
+build_all: build/debug/linux/test build/release/linux/test build/debug/windows/test build/release/windows/test
+
+# publish
+publish_linux_debug: build/debug/linux/test
+	scp $< basx.dev:/var/www/public.basx.dev/joni/linux/debug/
+publish_linux_release: build/release/linux/test
+	scp $< basx.dev:/var/www/public.basx.dev/joni/linux/release/
+publish_windows_debug: build/debug/linux/test
+	scp $< basx.dev:/var/www/public.basx.dev/joni/windows/debug/
+publish_windows_release: build/release/linux/test
+	scp $< basx.dev:/var/www/public.basx.dev/joni/windows/release/
+
+publish_all: publish_linux_debug publish_linux_release publish_windows_debug publish_windows_release
+
+
+# download thirdparty-libraries
+
+thirdparty/lib/glslang/linux_debug:
+	mkdir -p $@
+	wget --directory-prefix=$@ https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Debug.zip
+	uzip glslang-master-linux-Debug.zip
+thirdparty/lib/glslang/linux_release:
+	mkdir -p $@
+	wget --directory-prefix=$@ https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Release.zip
+	unzip glslang-master-linux-Release.zip
+thirdparty/lib/glslang/windows_debug:
+	mkdir -p $@
+	wget --directory-prefix=$@ https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-windows-x64-Debug.zip
+	unzip glslang-master-windows-x64-Debug.zip
+thirdparty/lib/glslang/windows_release:
+	mkdir -p $@
+	wget --directory-prefix=$@ https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-windows-x64-Release.zip
+	unzip glslang-master-windows-x64-Release.zip
+
+thirdparty/lib/spirv-tools/linux_debug:
+	mkdir -p $@
+	wget --directory-prefix=$@ https://storage.googleapis.com/spirv-tools/artifacts/prod/graphics_shader_compiler/spirv-tools/linux-gcc-debug/continuous/1899/20221216-081758/install.tgz
+	tar -xf $@/install.tgz
+thirdparty/lib/spirv-tools/linux_release:
+	mkdir -p $@
+	wget --directory-prefix=$@ https://storage.googleapis.com/spirv-tools/artifacts/prod/graphics_shader_compiler/spirv-tools/linux-gcc-release/continuous/1889/20221216-081754/install.tgz
+	tar -xf $@/install.tgz
+thirdparty/lib/spirv-tools/windows_debug:
+	mkdir -p $@
+	wget --directory-prefix=$@ https://storage.googleapis.com/spirv-tools/artifacts/prod/graphics_shader_compiler/spirv-tools/windows-msvc-2017-debug/continuous/1599/20221216-081803/install.zip
+	unzip $@/install.zip
+thirdparty/lib/spirv-tools/windows_release:
+	mkdir -p $@
+	wget --directory-prefix=$@ https://storage.googleapis.com/spirv-tools/artifacts/prod/graphics_shader_compiler/spirv-tools/windows-msvc-2017-release/continuous/1885/20221216-081805/install.zip
+	unzip $@/install.zip
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/test.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,7 @@
+import engine
+
+
+when isMainModule:
+  var myengine = igniteEngine()
+  myengine.fullThrottle()
+  myengine.trash()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/engine.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,645 @@
+import std/typetraits
+import std/strformat
+import std/enumerate
+import std/logging
+
+
+import ./vulkan
+import ./vulkan_helpers
+import ./window
+import ./events
+
+import ./glslang/glslang
+
+const MAX_FRAMES_IN_FLIGHT = 2
+
+var logger = newConsoleLogger()
+addHandler(logger)
+
+
+var vertexShaderCode: string = """#version 450
+layout(location = 0) out vec3 fragColor;
+vec3 colors[3] = vec3[](
+    vec3(1.0, 0.0, 0.0),
+    vec3(0.0, 1.0, 0.0),
+    vec3(0.0, 0.0, 1.0)
+);
+vec2 positions[3] = vec2[](
+  vec2(0.0, -0.5),
+  vec2(0.5, 0.5),
+  vec2(-0.5, 0.5)
+);
+void main() {
+  gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0);
+  fragColor = colors[gl_VertexIndex];
+}"""
+
+var fragmentShaderCode: string = """#version 450
+layout(location = 0) out vec4 outColor;
+layout(location = 0) in vec3 fragColor;
+void main() {
+  outColor = vec4(fragColor, 1.0);
+}"""
+
+const VULKAN_VERSION = VK_MAKE_API_VERSION(0'u32, 1'u32, 2'u32, 0'u32)
+
+type
+  Device = object
+    physicalDevice: PhysicalDevice
+    graphicsQueueFamily: uint32
+    presentationQueueFamily: uint32
+    device: VkDevice
+    graphicsQueue: VkQueue
+    presentationQueue: VkQueue
+  Swapchain = object
+    swapchain: VkSwapchainKHR
+    images: seq[VkImage]
+    imageviews: seq[VkImageView]
+  RenderPipeline = object
+    shaderStages*: seq[VkPipelineShaderStageCreateInfo]
+    layout*: VkPipelineLayout
+    pipeline*: VkPipeline
+  QueueFamily = object
+    properties*: VkQueueFamilyProperties
+    hasSurfaceSupport*: bool
+  PhysicalDevice = object
+    device*: VkPhysicalDevice
+    extensions*: seq[string]
+    properties*: VkPhysicalDeviceProperties
+    features*: VkPhysicalDeviceFeatures
+    queueFamilies*: seq[QueueFamily]
+    formats: seq[VkSurfaceFormatKHR]
+    presentModes: seq[VkPresentModeKHR]
+  Vulkan* = object
+    debugMessenger: VkDebugUtilsMessengerEXT
+    instance*: VkInstance
+    deviceList*: seq[PhysicalDevice]
+    device*: Device
+    surface*: VkSurfaceKHR
+    surfaceFormat: VkSurfaceFormatKHR
+    frameDimension: VkExtent2D
+    swapchain: Swapchain
+    framebuffers: seq[VkFramebuffer]
+    renderPass*: VkRenderPass
+    pipeline*: RenderPipeline
+    commandPool*: VkCommandPool
+    commandBuffers*: array[MAX_FRAMES_IN_FLIGHT, VkCommandBuffer]
+    imageAvailableSemaphores*: array[MAX_FRAMES_IN_FLIGHT, VkSemaphore]
+    renderFinishedSemaphores*: array[MAX_FRAMES_IN_FLIGHT, VkSemaphore]
+    inFlightFences*: array[MAX_FRAMES_IN_FLIGHT, VkFence]
+  Engine* = object
+    vulkan*: Vulkan
+    window: NativeWindow
+
+proc getAllPhysicalDevices(instance: VkInstance, surface: VkSurfaceKHR): seq[PhysicalDevice] =
+  for vulkanPhysicalDevice in getVulkanPhysicalDevices(instance):
+    var device = PhysicalDevice(device: vulkanPhysicalDevice, extensions: getDeviceExtensions(vulkanPhysicalDevice))
+    vkGetPhysicalDeviceProperties(vulkanPhysicalDevice, addr(device.properties))
+    vkGetPhysicalDeviceFeatures(vulkanPhysicalDevice, addr(device.features))
+    device.formats = vulkanPhysicalDevice.getDeviceSurfaceFormats(surface)
+    device.presentModes = vulkanPhysicalDevice.getDeviceSurfacePresentModes(surface)
+
+    debug(&"Physical device nr {int(vulkanPhysicalDevice)} {cleanString(device.properties.deviceName)}")
+    for i, queueFamilyProperty in enumerate(getQueueFamilies(vulkanPhysicalDevice)):
+      var hasSurfaceSupport: VkBool32 = VK_FALSE
+      checkVkResult vkGetPhysicalDeviceSurfaceSupportKHR(vulkanPhysicalDevice, uint32(i), surface, addr(hasSurfaceSupport))
+      device.queueFamilies.add(QueueFamily(properties: queueFamilyProperty, hasSurfaceSupport: bool(hasSurfaceSupport)))
+      debug(&"  Queue family {i} {queueFamilyProperty}")
+
+    result.add(device)
+
+proc filterForDevice(devices: seq[PhysicalDevice]): seq[(PhysicalDevice, uint32, uint32)] =
+  for device in devices:
+    if not (device.formats.len > 0 and device.presentModes.len > 0 and "VK_KHR_swapchain" in device.extensions):
+      continue
+    var graphicsQueueFamily = high(uint32)
+    var presentationQueueFamily = high(uint32)
+    for i, queueFamily in enumerate(device.queueFamilies):
+      if queueFamily.hasSurfaceSupport:
+        presentationQueueFamily = uint32(i)
+      if bool(uint32(queueFamily.properties.queueFlags) and ord(VK_QUEUE_GRAPHICS_BIT)):
+        graphicsQueueFamily = uint32(i)
+    if graphicsQueueFamily != high(uint32) and presentationQueueFamily != high(uint32):
+      result.add((device, graphicsQueueFamily, presentationQueueFamily))
+
+  for (device, graphicsQueueFamily, presentationQueueFamily) in result:
+    debug(&"Viable device: {cleanString(device.properties.deviceName)} (graphics queue family {graphicsQueueFamily}, presentation queue family {presentationQueueFamily})")
+
+
+proc getFrameDimension(window: NativeWindow, device: VkPhysicalDevice, surface: VkSurfaceKHR): VkExtent2D =
+  let capabilities = device.getSurfaceCapabilities(surface)
+  if capabilities.currentExtent.width != high(uint32):
+    return capabilities.currentExtent
+  else:
+    let (width, height) = window.size()
+    return VkExtent2D(
+      width: min(max(uint32(width), capabilities.minImageExtent.width), capabilities.maxImageExtent.width),
+      height: min(max(uint32(height), capabilities.minImageExtent.height), capabilities.maxImageExtent.height),
+    )
+
+proc setupDebugLog(instance: VkInstance): VkDebugUtilsMessengerEXT =
+  var createInfo = VkDebugUtilsMessengerCreateInfoEXT(
+    sType: VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
+    messageSeverity: VkDebugUtilsMessageSeverityFlagsEXT(
+      ord(VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) or
+      ord(VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) or
+      ord(VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT)
+    ),
+    messageType: VkDebugUtilsMessageTypeFlagsEXT(
+      ord(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT) or
+      ord(VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) or
+      ord(VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT)
+    ),
+    pfnUserCallback: debugCallback,
+    pUserData: nil,
+  )
+  checkVkResult instance.vkCreateDebugUtilsMessengerEXT(addr(createInfo), nil, addr(result))
+
+proc setupVulkanDeviceAndQueues(instance: VkInstance, surface: VkSurfaceKHR): Device =
+  let usableDevices = instance.getAllPhysicalDevices(surface).filterForDevice()
+  if len(usableDevices) == 0:
+    raise newException(Exception, "No suitable graphics device found")
+  result.physicalDevice = usableDevices[0][0]
+  result.graphicsQueueFamily = usableDevices[0][1]
+  result.presentationQueueFamily = usableDevices[0][2]
+
+  debug(&"Chose device {cleanString(result.physicalDevice.properties.deviceName)}")
+  
+  (result.device, result.graphicsQueue, result.presentationQueue) = getVulcanDevice(
+    result.physicalDevice.device,
+    result.physicalDevice.features,
+    result.graphicsQueueFamily,
+    result.presentationQueueFamily,
+  )
+
+proc setupSwapChain(device: VkDevice, physicalDevice: PhysicalDevice, surface: VkSurfaceKHR, dimension: VkExtent2D, surfaceFormat: VkSurfaceFormatKHR): Swapchain =
+
+  let capabilities = physicalDevice.device.getSurfaceCapabilities(surface)
+  var selectedPresentationMode = getPresentMode(physicalDevice.presentModes)
+  # setup swapchain
+  var swapchainCreateInfo = VkSwapchainCreateInfoKHR(
+    sType: VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
+    surface: surface,
+    minImageCount: max(capabilities.minImageCount + 1, capabilities.maxImageCount),
+    imageFormat: surfaceFormat.format,
+    imageColorSpace: surfaceFormat.colorSpace,
+    imageExtent: dimension,
+    imageArrayLayers: 1,
+    imageUsage: VkImageUsageFlags(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT),
+    # VK_SHARING_MODE_CONCURRENT no supported (i.e cannot use different queue families for  drawing to swap surface?)
+    imageSharingMode: VK_SHARING_MODE_EXCLUSIVE,
+    preTransform: capabilities.currentTransform,
+    compositeAlpha: VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
+    presentMode: selectedPresentationMode,
+    clipped: VK_TRUE,
+    oldSwapchain: VkSwapchainKHR(0),
+  )
+  checkVkResult device.vkCreateSwapchainKHR(addr(swapchainCreateInfo), nil, addr(result.swapchain))
+  result.images = device.getSwapChainImages(result.swapchain)
+
+  # setup swapchian image views
+
+  result.imageviews = newSeq[VkImageView](result.images.len)
+  for i, image in enumerate(result.images):
+    var imageViewCreateInfo = VkImageViewCreateInfo(
+      sType: VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+      image: image,
+      viewType: VK_IMAGE_VIEW_TYPE_2D,
+      format: surfaceFormat.format,
+      components: VkComponentMapping(
+        r: VK_COMPONENT_SWIZZLE_IDENTITY,
+        g: VK_COMPONENT_SWIZZLE_IDENTITY,
+        b: VK_COMPONENT_SWIZZLE_IDENTITY,
+        a: VK_COMPONENT_SWIZZLE_IDENTITY,
+      ),
+      subresourceRange: VkImageSubresourceRange(
+        aspectMask: VkImageAspectFlags(VK_IMAGE_ASPECT_COLOR_BIT),
+        baseMipLevel: 0,
+        levelCount: 1,
+        baseArrayLayer: 0,
+        layerCount: 1,
+      ),
+    )
+    checkVkResult device.vkCreateImageView(addr(imageViewCreateInfo), nil, addr(result.imageviews[i]))
+
+proc setupRenderPass(device: VkDevice, format: VkFormat): VkRenderPass =
+  var
+    colorAttachment = VkAttachmentDescription(
+      format: format,
+      samples: VK_SAMPLE_COUNT_1_BIT,
+      loadOp: VK_ATTACHMENT_LOAD_OP_CLEAR,
+      storeOp: VK_ATTACHMENT_STORE_OP_STORE,
+      stencilLoadOp: VK_ATTACHMENT_LOAD_OP_DONT_CARE,
+      stencilStoreOp: VK_ATTACHMENT_STORE_OP_DONT_CARE,
+      initialLayout: VK_IMAGE_LAYOUT_UNDEFINED,
+      finalLayout: VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
+    )
+    colorAttachmentRef = VkAttachmentReference(
+      attachment: 0,
+      layout: VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
+    )
+    subpass = VkSubpassDescription(
+      pipelineBindPoint: VK_PIPELINE_BIND_POINT_GRAPHICS,
+      colorAttachmentCount: 1,
+      pColorAttachments: addr(colorAttachmentRef)
+    )
+    dependency = VkSubpassDependency(
+      srcSubpass: VK_SUBPASS_EXTERNAL,
+      dstSubpass: 0,
+      srcStageMask: VkPipelineStageFlags(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT),
+      srcAccessMask: VkAccessFlags(0),
+      dstStageMask: VkPipelineStageFlags(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT),
+      dstAccessMask: VkAccessFlags(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT),
+    )
+    renderPassCreateInfo = VkRenderPassCreateInfo(
+      sType: VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
+      attachmentCount: 1,
+      pAttachments: addr(colorAttachment),
+      subpassCount: 1,
+      pSubpasses: addr(subpass),
+      dependencyCount: 1,
+      pDependencies: addr(dependency),
+    )
+  checkVkResult device.vkCreateRenderPass(addr(renderPassCreateInfo), nil, addr(result))
+
+proc setupRenderPipeline(device: VkDevice, frameDimension: VkExtent2D, renderPass: VkRenderPass): RenderPipeline =
+  # (seq[VkPipelineShaderStageCreateInfo], VkViewport, VkRect2D, VkPipelineLayout, VkPipeline) =
+
+  # load shaders
+  result.shaderStages.add(device.createShaderStage(VK_SHADER_STAGE_VERTEX_BIT, vertexShaderCode))
+  result.shaderStages.add(device.createShaderStage(VK_SHADER_STAGE_FRAGMENT_BIT, fragmentShaderCode))
+
+  var
+    # define which parts can be dynamic (pipeline is fixed after setup)
+    dynamicStates = [VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR]
+    dynamicState = VkPipelineDynamicStateCreateInfo(
+      sType: VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
+      dynamicStateCount: uint32(dynamicStates.len),
+      pDynamicStates: addr(dynamicStates[0]),
+    )
+    # define input data format
+    vertexInputInfo = VkPipelineVertexInputStateCreateInfo(
+      sType: VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
+      vertexBindingDescriptionCount: 0,
+      pVertexBindingDescriptions: nil,
+      vertexAttributeDescriptionCount: 0,
+      pVertexAttributeDescriptions: nil,
+    )
+    inputAssembly = VkPipelineInputAssemblyStateCreateInfo(
+      sType: VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
+      topology: VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
+      primitiveRestartEnable: VK_FALSE,
+    )
+
+  # setup viewport
+  var viewportState = VkPipelineViewportStateCreateInfo(
+    sType: VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
+    viewportCount: 1,
+    scissorCount: 1,
+  )
+
+  # rasterizerization config
+  var
+    rasterizer = VkPipelineRasterizationStateCreateInfo(
+      sType: VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
+      depthClampEnable: VK_FALSE,
+      rasterizerDiscardEnable: VK_FALSE,
+      polygonMode: VK_POLYGON_MODE_FILL,
+      lineWidth: 1.0,
+      cullMode: VkCullModeFlags(VK_CULL_MODE_BACK_BIT),
+      frontFace: VK_FRONT_FACE_CLOCKWISE,
+      depthBiasEnable: VK_FALSE,
+      depthBiasConstantFactor: 0.0,
+      depthBiasClamp: 0.0,
+      depthBiasSlopeFactor: 0.0,
+    )
+    multisampling = VkPipelineMultisampleStateCreateInfo(
+      sType: VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
+      sampleShadingEnable: VK_FALSE,
+      rasterizationSamples: VK_SAMPLE_COUNT_1_BIT,
+      minSampleShading: 1.0,
+      pSampleMask: nil,
+      alphaToCoverageEnable: VK_FALSE,
+      alphaToOneEnable: VK_FALSE,
+    )
+    colorBlendAttachment = VkPipelineColorBlendAttachmentState(
+      colorWriteMask: VkColorComponentFlags(
+        ord(VK_COLOR_COMPONENT_R_BIT) or
+        ord(VK_COLOR_COMPONENT_G_BIT) or
+        ord(VK_COLOR_COMPONENT_B_BIT) or
+        ord(VK_COLOR_COMPONENT_A_BIT)
+      ),
+      blendEnable: VK_TRUE,
+      srcColorBlendFactor: VK_BLEND_FACTOR_SRC_ALPHA,
+      dstColorBlendFactor: VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
+      colorBlendOp: VK_BLEND_OP_ADD,
+      srcAlphaBlendFactor: VK_BLEND_FACTOR_ONE,
+      dstAlphaBlendFactor: VK_BLEND_FACTOR_ZERO,
+      alphaBlendOp: VK_BLEND_OP_ADD,
+    )
+    colorBlending = VkPipelineColorBlendStateCreateInfo(
+      sType: VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
+      logicOpEnable: VK_TRUE,
+      logicOp: VK_LOGIC_OP_COPY,
+      attachmentCount: 1,
+      pAttachments: addr(colorBlendAttachment),
+      blendConstants: [0.0'f, 0.0'f, 0.0'f, 0.0'f],
+    )
+
+    # create pipeline
+    pipelineLayoutInfo = VkPipelineLayoutCreateInfo(
+      sType: VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
+      setLayoutCount: 0,
+      pSetLayouts: nil,
+      pushConstantRangeCount: 0,
+      pPushConstantRanges: nil,
+    )
+  checkVkResult device.vkCreatePipelineLayout(addr(pipelineLayoutInfo), nil, addr(result.layout))
+
+  var pipelineInfo = VkGraphicsPipelineCreateInfo(
+    sType: VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
+    stageCount: 2,
+    pStages: addr(result.shaderStages[0]),
+    pVertexInputState: addr(vertexInputInfo),
+    pInputAssemblyState: addr(inputAssembly),
+    pViewportState: addr(viewportState),
+    pRasterizationState: addr(rasterizer),
+    pMultisampleState: addr(multisampling),
+    pDepthStencilState: nil,
+    pColorBlendState: addr(colorBlending),
+    pDynamicState: addr(dynamicState),
+    layout: result.layout,
+    renderPass: renderPass,
+    subpass: 0,
+    basePipelineHandle: VkPipeline(0),
+    basePipelineIndex: -1,
+  )
+  checkVkResult device.vkCreateGraphicsPipelines(
+    VkPipelineCache(0),
+    1,
+    addr(pipelineInfo),
+    nil,
+    addr(result.pipeline)
+  )
+
+proc setupFramebuffers(device: VkDevice, swapchain: var Swapchain, renderPass: VkRenderPass, dimension: VkExtent2D): seq[VkFramebuffer] =
+  result = newSeq[VkFramebuffer](swapchain.images.len)
+  for i, imageview in enumerate(swapchain.imageviews):
+    var framebufferInfo = VkFramebufferCreateInfo(
+      sType: VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
+      renderPass: renderPass,
+      attachmentCount: 1,
+      pAttachments: addr(swapchain.imageviews[i]),
+      width: dimension.width,
+      height: dimension.height,
+      layers: 1,
+    )
+    checkVkResult device.vkCreateFramebuffer(addr(framebufferInfo), nil, addr(result[i]))
+  
+proc trash(device: VkDevice, swapchain: Swapchain, framebuffers: seq[VkFramebuffer]) =
+  for framebuffer in framebuffers:
+    device.vkDestroyFramebuffer(framebuffer, nil)
+  for imageview in swapchain.imageviews:
+    device.vkDestroyImageView(imageview, nil)
+  device.vkDestroySwapchainKHR(swapchain.swapchain, nil)
+
+proc recreateSwapchain(vulkan: Vulkan): (Swapchain, seq[VkFramebuffer]) =
+  debug(&"Recreate swapchain with dimension {vulkan.frameDimension}")
+  checkVkResult vulkan.device.device.vkDeviceWaitIdle()
+
+  vulkan.device.device.trash(vulkan.swapchain, vulkan.framebuffers)
+
+  result[0] = vulkan.device.device.setupSwapChain(
+    vulkan.device.physicalDevice,
+    vulkan.surface,
+    vulkan.frameDimension,
+    vulkan.surfaceFormat
+  )
+  result[1] = vulkan.device.device.setupFramebuffers(
+    result[0],
+    vulkan.renderPass,
+    vulkan.frameDimension
+  )
+
+  # createFramebuffers();
+
+
+proc setupCommandBuffers(device: VkDevice, graphicsQueueFamily: uint32): (VkCommandPool, array[MAX_FRAMES_IN_FLIGHT, VkCommandBuffer]) =
+  # set up command buffer
+  var poolInfo = VkCommandPoolCreateInfo(
+    sType: VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
+    flags: VkCommandPoolCreateFlags(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT),
+    queueFamilyIndex: graphicsQueueFamily,
+  )
+  checkVkResult device.vkCreateCommandPool(addr(poolInfo), nil, addr(result[0]))
+
+  var allocInfo = VkCommandBufferAllocateInfo(
+    sType: VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
+    commandPool: result[0],
+    level: VK_COMMAND_BUFFER_LEVEL_PRIMARY,
+    commandBufferCount: result[1].len.uint32,
+  )
+  checkVkResult device.vkAllocateCommandBuffers(addr(allocInfo), addr(result[1][0]))
+
+proc setupSyncPrimitives(device: VkDevice): (
+    array[MAX_FRAMES_IN_FLIGHT, VkSemaphore],
+    array[MAX_FRAMES_IN_FLIGHT, VkSemaphore],
+    array[MAX_FRAMES_IN_FLIGHT, VkFence],
+) =
+  var semaphoreInfo = VkSemaphoreCreateInfo(sType: VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
+  var fenceInfo = VkFenceCreateInfo(
+    sType: VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
+    flags: VkFenceCreateFlags(VK_FENCE_CREATE_SIGNALED_BIT)
+  )
+  for i in 0 ..< MAX_FRAMES_IN_FLIGHT:
+    checkVkResult device.vkCreateSemaphore(addr(semaphoreInfo), nil, addr(result[0][i]))
+    checkVkResult device.vkCreateSemaphore(addr(semaphoreInfo), nil, addr(result[1][i]))
+    checkVkResult device.vkCreateFence(addr(fenceInfo), nil, addr(result[2][i]))
+
+proc igniteEngine*(): Engine =
+
+  result.window = createWindow("Hello triangle")
+
+  # setup vulkan functions
+  vkLoad1_0()
+  vkLoad1_1()
+  vkLoad1_2()
+  checkGlslangResult glslang_initialize_process()
+
+  # create vulkan instance
+  result.vulkan.instance = createVulkanInstance(VULKAN_VERSION)
+  when ENABLEVULKANVALIDATIONLAYERS:
+    result.vulkan.debugMessenger = result.vulkan.instance.setupDebugLog()
+  result.vulkan.surface = result.vulkan.instance.createVulkanSurface(result.window)
+  result.vulkan.device = result.vulkan.instance.setupVulkanDeviceAndQueues(result.vulkan.surface)
+
+  # get basic frame information
+  result.vulkan.surfaceFormat = result.vulkan.device.physicalDevice.formats.getSuitableSurfaceFormat()
+  result.vulkan.frameDimension = result.window.getFrameDimension(result.vulkan.device.physicalDevice.device, result.vulkan.surface)
+
+  # setup swapchain and render pipeline
+  result.vulkan.swapchain = result.vulkan.device.device.setupSwapChain(
+    result.vulkan.device.physicalDevice,
+    result.vulkan.surface,
+    result.vulkan.frameDimension,
+    result.vulkan.surfaceFormat
+  )
+  result.vulkan.renderPass = result.vulkan.device.device.setupRenderPass(result.vulkan.surfaceFormat.format)
+  result.vulkan.pipeline = result.vulkan.device.device.setupRenderPipeline(result.vulkan.frameDimension, result.vulkan.renderPass)
+  result.vulkan.framebuffers = result.vulkan.device.device.setupFramebuffers(
+    result.vulkan.swapchain,
+    result.vulkan.renderPass,
+    result.vulkan.frameDimension
+  )
+  
+  (
+    result.vulkan.commandPool,
+    result.vulkan.commandBuffers,
+  ) = result.vulkan.device.device.setupCommandBuffers(result.vulkan.device.graphicsQueueFamily)
+
+  (
+    result.vulkan.imageAvailableSemaphores,
+    result.vulkan.renderFinishedSemaphores,
+    result.vulkan.inFlightFences,
+  ) = result.vulkan.device.device.setupSyncPrimitives()
+
+
+proc recordCommandBuffer(renderPass: VkRenderPass, pipeline: VkPipeline, commandBuffer: VkCommandBuffer, framebuffer: VkFramebuffer, frameDimension: VkExtent2D) =
+  var
+    beginInfo = VkCommandBufferBeginInfo(
+      sType: VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+      pInheritanceInfo: nil,
+    )
+    clearColor = VkClearValue(color: VkClearColorValue(float32: [0.2'f, 0.2'f, 0.2'f, 1.0'f]))
+    renderPassInfo = VkRenderPassBeginInfo(
+      sType: VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+      renderPass: renderPass,
+      framebuffer: framebuffer,
+      renderArea: VkRect2D(
+        offset: VkOffset2D(x: 0, y: 0),
+        extent: frameDimension,
+      ),
+      clearValueCount: 1,
+      pClearValues: addr(clearColor),
+    )
+    viewport = VkViewport(
+      x: 0.0,
+      y: 0.0,
+      width: (float) frameDimension.width,
+      height: (float) frameDimension.height,
+      minDepth: 0.0,
+      maxDepth: 1.0,
+    )
+    scissor = VkRect2D(
+      offset: VkOffset2D(x: 0, y: 0),
+      extent: frameDimension
+    )
+  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.vkCmdEndRenderPass()
+  checkVkResult commandBuffer.vkEndCommandBuffer()
+
+proc drawFrame(window: NativeWindow, vulkan: var Vulkan, currentFrame: int, resized: bool) =
+  checkVkResult vulkan.device.device.vkWaitForFences(1, addr(vulkan.inFlightFences[currentFrame]), VK_TRUE, high(uint64))
+  var bufferImageIndex: uint32
+  let nextImageResult = vulkan.device.device.vkAcquireNextImageKHR(
+    vulkan.swapchain.swapchain,
+    high(uint64),
+    vulkan.imageAvailableSemaphores[currentFrame],
+    VkFence(0),
+    addr(bufferImageIndex)
+  )
+  if nextImageResult == VK_ERROR_OUT_OF_DATE_KHR:
+    vulkan.frameDimension = window.getFrameDimension(vulkan.device.physicalDevice.device, vulkan.surface)
+    (vulkan.swapchain, vulkan.framebuffers) = vulkan.recreateSwapchain()
+    return
+  elif not (nextImageResult in [VK_SUCCESS, VK_SUBOPTIMAL_KHR]):
+    raise newException(Exception, "Vulkan error: vkAcquireNextImageKHR returned " & $nextImageResult)
+  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)
+  var
+    waitSemaphores = [vulkan.imageAvailableSemaphores[currentFrame]]
+    waitStages = [VkPipelineStageFlags(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)]
+    signalSemaphores = [vulkan.renderFinishedSemaphores[currentFrame]]
+    submitInfo = VkSubmitInfo(
+      sType: VK_STRUCTURE_TYPE_SUBMIT_INFO,
+      waitSemaphoreCount: 1,
+      pWaitSemaphores: addr(waitSemaphores[0]),
+      pWaitDstStageMask: addr(waitStages[0]),
+      commandBufferCount: 1,
+      pCommandBuffers: addr(vulkan.commandBuffers[currentFrame]),
+      signalSemaphoreCount: 1,
+      pSignalSemaphores: addr(signalSemaphores[0]),
+    )
+  checkVkResult vkQueueSubmit(vulkan.device.graphicsQueue, 1, addr(submitInfo), vulkan.inFlightFences[currentFrame])
+
+  var presentInfo = VkPresentInfoKHR(
+    sType: VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
+    waitSemaphoreCount: 1,
+    pWaitSemaphores: addr(signalSemaphores[0]),
+    swapchainCount: 1,
+    pSwapchains: addr(vulkan.swapchain.swapchain),
+    pImageIndices: addr(bufferImageIndex),
+    pResults: nil,
+  )
+  let presentResult = vkQueuePresentKHR(vulkan.device.presentationQueue, addr(presentInfo))
+
+  if presentResult == VK_ERROR_OUT_OF_DATE_KHR or presentResult == VK_SUBOPTIMAL_KHR or resized:
+    vulkan.frameDimension = window.getFrameDimension(vulkan.device.physicalDevice.device, vulkan.surface)
+    (vulkan.swapchain, vulkan.framebuffers) = vulkan.recreateSwapchain()
+
+
+proc fullThrottle*(engine: var Engine) =
+  var
+    killed = false
+    currentFrame = 0
+    resized = false
+
+  while not killed:
+    for event in engine.window.pendingEvents():
+      case event.eventType:
+        of Quit:
+          killed = true
+        of ResizedWindow:
+          resized = true
+        of KeyDown:
+          echo event
+          if event.key == Escape:
+            killed = true
+        else:
+          discard
+    engine.window.drawFrame(engine.vulkan, currentFrame, resized)
+    resized = false
+    currentFrame = (currentFrame + 1) mod MAX_FRAMES_IN_FLIGHT;
+  checkVkResult engine.vulkan.device.device.vkDeviceWaitIdle()
+
+proc trash*(engine: Engine) =
+  engine.vulkan.device.device.trash(engine.vulkan.swapchain, engine.vulkan.framebuffers)
+  checkVkResult engine.vulkan.device.device.vkDeviceWaitIdle()
+
+  for i in 0 ..< MAX_FRAMES_IN_FLIGHT:
+    engine.vulkan.device.device.vkDestroySemaphore(engine.vulkan.imageAvailableSemaphores[i], nil)
+    engine.vulkan.device.device.vkDestroySemaphore(engine.vulkan.renderFinishedSemaphores[i], nil)
+    engine.vulkan.device.device.vkDestroyFence(engine.vulkan.inFlightFences[i], nil)
+
+  engine.vulkan.device.device.vkDestroyCommandPool(engine.vulkan.commandPool, nil)
+  engine.vulkan.device.device.vkDestroyPipeline(engine.vulkan.pipeline.pipeline, nil)
+  engine.vulkan.device.device.vkDestroyPipelineLayout(engine.vulkan.pipeline.layout, nil)
+  engine.vulkan.device.device.vkDestroyRenderPass(engine.vulkan.renderPass, nil)
+
+  for shaderStage in engine.vulkan.pipeline.shaderStages:
+    engine.vulkan.device.device.vkDestroyShaderModule(shaderStage.module, nil)
+
+  engine.vulkan.instance.vkDestroySurfaceKHR(engine.vulkan.surface, nil)
+  engine.vulkan.device.device.vkDestroyDevice(nil)
+  when ENABLEVULKANVALIDATIONLAYERS:
+    engine.vulkan.instance.vkDestroyDebugUtilsMessengerEXT(engine.vulkan.debugMessenger, nil)
+  glslang_finalize_process()
+  engine.vulkan.instance.vkDestroyInstance(nil)
+  engine.window.trash()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/events.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,20 @@
+type
+  EventType* = enum
+    Quit
+    ResizedWindow
+    KeyDown
+    KeyUp
+  Key* = enum
+    UNKNOWN
+    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
+    a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
+    `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `0`
+    Minus, Plus, Underscore, Equals, Space, Enter, Backspace, Tab
+    Comma, Period, Semicolon, Colon,
+    Escape, CtrlL, ShirtL, AltL, CtrlR, ShirtR, AltR
+  Event* = object
+    case eventType*: EventType
+    of KeyDown, KeyUp:
+      key*: Key
+    else:
+      discard
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/glslang/glslang.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,75 @@
+import glslang_c_interface
+import glslang_c_shader_types
+
+export
+  glslang_stage_t,
+  glslang_initialize_process,
+  glslang_finalize_process
+
+type
+  ShaderVersion = enum
+    ES_VERSION = 100
+    DESKTOP_VERSION = 110
+
+proc compileGLSLToSPIRV*(stage: glslang_stage_t, shaderSource: string, fileName: string): seq[uint32] =
+  var input = glslang_input_t(
+    stage: stage,
+    language: GLSLANG_SOURCE_GLSL,
+    client: GLSLANG_CLIENT_VULKAN,
+    client_version: GLSLANG_TARGET_VULKAN_1_2,
+    target_language: GLSLANG_TARGET_SPV,
+    target_language_version: GLSLANG_TARGET_SPV_1_5,
+    code: cstring(shaderSource),
+    default_version: ord(DESKTOP_VERSION),
+    default_profile: GLSLANG_CORE_PROFILE,
+    force_default_version_and_profile: false.cint,
+    forward_compatible: false.cint,
+    messages: GLSLANG_MSG_DEBUG_INFO_BIT,
+    resource: glslang_default_resource(),
+  )
+
+  var shader = glslang_shader_create(addr(input))
+
+  if not bool(glslang_shader_preprocess(shader, addr(input))):
+      echo "GLSL preprocessing failed " & fileName
+      echo glslang_shader_get_info_log(shader)
+      echo glslang_shader_get_info_debug_log(shader)
+      echo input.code
+      glslang_shader_delete(shader)
+      return
+
+  if not bool(glslang_shader_parse(shader, addr(input))):
+      echo "GLSL parsing failed " & fileName
+      echo glslang_shader_get_info_log(shader)
+      echo glslang_shader_get_info_debug_log(shader)
+      echo glslang_shader_get_preprocessed_code(shader)
+      glslang_shader_delete(shader)
+      return
+
+  var program: ptr glslang_program_t = glslang_program_create()
+  glslang_program_add_shader(program, shader)
+
+  if not bool(glslang_program_link(program, ord(GLSLANG_MSG_SPV_RULES_BIT) or ord(GLSLANG_MSG_VULKAN_RULES_BIT))):
+      echo "GLSL linking failed " & fileName
+      echo glslang_program_get_info_log(program)
+      echo glslang_program_get_info_debug_log(program)
+      glslang_program_delete(program)
+      glslang_shader_delete(shader)
+      return
+
+  glslang_program_SPIRV_generate(program, stage)
+
+  result = newSeq[uint32](glslang_program_SPIRV_get_size(program))
+  glslang_program_SPIRV_get(program, addr(result[0]))
+
+  var spirv_messages: cstring = glslang_program_SPIRV_get_messages(program)
+  if spirv_messages != nil:
+      echo "(%s) %s\b", fileName, spirv_messages
+
+  glslang_program_delete(program)
+  glslang_shader_delete(shader)
+
+template checkGlslangResult*(call: untyped) =
+  let value = call
+  if value != 1:
+    raise newException(Exception, "glgslang error: " & astToStr(call) & " returned " & $value)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/glslang/glslang_c_interface.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,230 @@
+import std/strformat
+
+when defined(linux):
+  const platform = "linux"
+when defined(windows):
+  const platform = "windows"
+
+
+when defined(release):
+  const libversion = "release"
+else:
+  const libversion = "debug"
+
+
+# required to link the GLSL compiler
+{.passl: &"-Lthirdparty/lib/glslang/{platform}_{libversion}" .}
+{.passl: &"-Lthirdparty/lib/spirv-tools/{platform}_{libversion}" .}
+
+{.passl: "-lglslang" .}
+{.passl: "-lglslang-default-resource-limits" .}
+{.passl: "-lHLSL" .}
+{.passl: "-lMachineIndependent" .}
+{.passl: "-lGenericCodeGen" .}
+{.passl: "-lOSDependent" .}
+{.passl: "-lOGLCompiler" .}
+{.passl: "-lSPIRV" .}
+{.passl: "-lSPIRV-Tools-opt" .}
+{.passl: "-lSPIRV-Tools" .}
+{.passl: "-lSPIRV-Tools-diff" .}
+{.passl: "-lSPIRV-Tools-fuzz" .}
+{.passl: "-lSPIRV-Tools-link" .}
+{.passl: "-lSPIRV-Tools-lint" .}
+{.passl: "-lSPIRV-Tools-opt" .}
+{.passl: "-lSPIRV-Tools-reduce" .}
+
+{.passl: "-lstdc++" .}
+{.passl: "-lm" .}
+
+import
+  glslang_c_shader_types
+
+type 
+  glslang_shader_t* {.nodecl incompleteStruct.} = object
+  glslang_program_t* {.nodecl incompleteStruct.} = object
+  glslang_limits_t* {.bycopy.} = object
+    non_inductive_for_loops*: bool
+    while_loops*: bool
+    do_while_loops*: bool
+    general_uniform_indexing*: bool
+    general_attribute_matrix_vector_indexing*: bool
+    general_varying_indexing*: bool
+    general_sampler_indexing*: bool
+    general_variable_indexing*: bool
+    general_constant_matrix_vector_indexing*: bool
+  glslang_resource_t* {.bycopy.} = object
+    max_lights*: cint
+    max_clip_planes*: cint
+    max_texture_units*: cint
+    max_texture_coords*: cint
+    max_vertex_attribs*: cint
+    max_vertex_uniform_components*: cint
+    max_varying_floats*: cint
+    max_vertex_texture_image_units*: cint
+    max_combined_texture_image_units*: cint
+    max_texture_image_units*: cint
+    max_fragment_uniform_components*: cint
+    max_draw_buffers*: cint
+    max_vertex_uniform_vectors*: cint
+    max_varying_vectors*: cint
+    max_fragment_uniform_vectors*: cint
+    max_vertex_output_vectors*: cint
+    max_fragment_input_vectors*: cint
+    min_program_texel_offset*: cint
+    max_program_texel_offset*: cint
+    max_clip_distances*: cint
+    max_compute_work_group_count_x*: cint
+    max_compute_work_group_count_y*: cint
+    max_compute_work_group_count_z*: cint
+    max_compute_work_group_size_x*: cint
+    max_compute_work_group_size_y*: cint
+    max_compute_work_group_size_z*: cint
+    max_compute_uniform_components*: cint
+    max_compute_texture_image_units*: cint
+    max_compute_image_uniforms*: cint
+    max_compute_atomic_counters*: cint
+    max_compute_atomic_counter_buffers*: cint
+    max_varying_components*: cint
+    max_vertex_output_components*: cint
+    max_geometry_input_components*: cint
+    max_geometry_output_components*: cint
+    max_fragment_input_components*: cint
+    max_image_units*: cint
+    max_combined_image_units_and_fragment_outputs*: cint
+    max_combined_shader_output_resources*: cint
+    max_image_samples*: cint
+    max_vertex_image_uniforms*: cint
+    max_tess_control_image_uniforms*: cint
+    max_tess_evaluation_image_uniforms*: cint
+    max_geometry_image_uniforms*: cint
+    max_fragment_image_uniforms*: cint
+    max_combined_image_uniforms*: cint
+    max_geometry_texture_image_units*: cint
+    max_geometry_output_vertices*: cint
+    max_geometry_total_output_components*: cint
+    max_geometry_uniform_components*: cint
+    max_geometry_varying_components*: cint
+    max_tess_control_input_components*: cint
+    max_tess_control_output_components*: cint
+    max_tess_control_texture_image_units*: cint
+    max_tess_control_uniform_components*: cint
+    max_tess_control_total_output_components*: cint
+    max_tess_evaluation_input_components*: cint
+    max_tess_evaluation_output_components*: cint
+    max_tess_evaluation_texture_image_units*: cint
+    max_tess_evaluation_uniform_components*: cint
+    max_tess_patch_components*: cint
+    max_patch_vertices*: cint
+    max_tess_gen_level*: cint
+    max_viewports*: cint
+    max_vertex_atomic_counters*: cint
+    max_tess_control_atomic_counters*: cint
+    max_tess_evaluation_atomic_counters*: cint
+    max_geometry_atomic_counters*: cint
+    max_fragment_atomic_counters*: cint
+    max_combined_atomic_counters*: cint
+    max_atomic_counter_bindings*: cint
+    max_vertex_atomic_counter_buffers*: cint
+    max_tess_control_atomic_counter_buffers*: cint
+    max_tess_evaluation_atomic_counter_buffers*: cint
+    max_geometry_atomic_counter_buffers*: cint
+    max_fragment_atomic_counter_buffers*: cint
+    max_combined_atomic_counter_buffers*: cint
+    max_atomic_counter_buffer_size*: cint
+    max_transform_feedback_buffers*: cint
+    max_transform_feedback_interleaved_components*: cint
+    max_cull_distances*: cint
+    max_combined_clip_and_cull_distances*: cint
+    max_samples*: cint
+    max_mesh_output_vertices_nv*: cint
+    max_mesh_output_primitives_nv*: cint
+    max_mesh_work_group_size_x_nv*: cint
+    max_mesh_work_group_size_y_nv*: cint
+    max_mesh_work_group_size_z_nv*: cint
+    max_task_work_group_size_x_nv*: cint
+    max_task_work_group_size_y_nv*: cint
+    max_task_work_group_size_z_nv*: cint
+    max_mesh_view_count_nv*: cint
+    max_mesh_output_vertices_ext*: cint
+    max_mesh_output_primitives_ext*: cint
+    max_mesh_work_group_size_x_ext*: cint
+    max_mesh_work_group_size_y_ext*: cint
+    max_mesh_work_group_size_z_ext*: cint
+    max_task_work_group_size_x_ext*: cint
+    max_task_work_group_size_y_ext*: cint
+    max_task_work_group_size_z_ext*: cint
+    max_mesh_view_count_ext*: cint
+    maxDualSourceDrawBuffersEXT*: cint
+    limits*: glslang_limits_t
+  glslang_input_t* {.bycopy.} = object
+    language*: glslang_source_t
+    stage*: glslang_stage_t
+    client*: glslang_client_t
+    client_version*: glslang_target_client_version_t
+    target_language*: glslang_target_language_t
+    target_language_version*: glslang_target_language_version_t
+    code*: cstring
+    default_version*: cint
+    default_profile*: glslang_profile_t
+    force_default_version_and_profile*: cint
+    forward_compatible*: cint
+    messages*: glslang_messages_t
+    resource*: ptr glslang_resource_t
+  glsl_include_result_t* {.bycopy.} = object
+    ##  Header file name or NULL if inclusion failed
+    header_name*: cstring
+    ##  Header contents or NULL
+    header_data*: cstring
+    header_length*: csize_t
+  glsl_include_local_func* = proc (ctx: pointer; header_name: cstring; includer_name: cstring; include_depth: csize_t): ptr glsl_include_result_t
+  glsl_include_system_func* = proc (ctx: pointer; header_name: cstring; includer_name: cstring; include_depth: csize_t): ptr glsl_include_result_t
+  glsl_free_include_result_func* = proc (ctx: pointer; result: ptr glsl_include_result_t): cint
+  glsl_include_callbacks_t* {.bycopy.} = object
+    include_system*: glsl_include_system_func
+    include_local*: glsl_include_local_func
+    free_include_result*: glsl_free_include_result_func
+  glslang_spv_options_t* {.bycopy.} = object
+    generate_debug_info*: bool
+    strip_debug_info*: bool
+    disable_optimizer*: bool
+    optimize_size*: bool
+    disassemble*: bool
+    validate*: bool
+    emit_nonsemantic_shader_debug_info*: bool
+    emit_nonsemantic_shader_debug_source*: bool
+
+proc glslang_initialize_process*(): cint {.importc.}
+proc glslang_finalize_process*() {.importc.}
+proc glslang_shader_create*(input: ptr glslang_input_t): ptr glslang_shader_t {.importc.}
+proc glslang_shader_delete*(shader: ptr glslang_shader_t) {.importc.}
+proc glslang_shader_set_preamble*(shader: ptr glslang_shader_t; s: cstring) {.importc.}
+proc glslang_shader_shift_binding*(shader: ptr glslang_shader_t; res: glslang_resource_type_t; base: cuint) {.importc.}
+proc glslang_shader_shift_binding_for_set*(shader: ptr glslang_shader_t; res: glslang_resource_type_t; base: cuint; set: cuint) {.importc.}
+proc glslang_shader_set_options*(shader: ptr glslang_shader_t; options: cint) {.importc.}
+
+proc glslang_shader_set_glsl_version*(shader: ptr glslang_shader_t; version: cint) {.importc.}
+proc glslang_shader_preprocess*(shader: ptr glslang_shader_t; input: ptr glslang_input_t): cint {.importc.}
+proc glslang_shader_parse*(shader: ptr glslang_shader_t; input: ptr glslang_input_t): cint {.importc.}
+proc glslang_shader_get_preprocessed_code*(shader: ptr glslang_shader_t): cstring {.importc.}
+proc glslang_shader_get_info_log*(shader: ptr glslang_shader_t): cstring {.importc.}
+proc glslang_shader_get_info_debug_log*(shader: ptr glslang_shader_t): cstring {.importc.}
+proc glslang_program_create*(): ptr glslang_program_t {.importc.}
+proc glslang_program_delete*(program: ptr glslang_program_t) {.importc.}
+proc glslang_program_add_shader*(program: ptr glslang_program_t; shader: ptr glslang_shader_t) {.importc.}
+proc glslang_program_link*(program: ptr glslang_program_t; messages: cint): cint {.importc.}
+
+proc glslang_program_add_source_text*(program: ptr glslang_program_t; stage: glslang_stage_t; text: cstring; len: csize_t) {.importc.}
+proc glslang_program_set_source_file*(program: ptr glslang_program_t; stage: glslang_stage_t; file: cstring) {.importc.}
+proc glslang_program_map_io*(program: ptr glslang_program_t): cint {.importc.}
+proc glslang_program_SPIRV_generate*(program: ptr glslang_program_t; stage: glslang_stage_t) {.importc.}
+proc glslang_program_SPIRV_generate_with_options*(program: ptr glslang_program_t; stage: glslang_stage_t; spv_options: ptr glslang_spv_options_t) {.importc.}
+proc glslang_program_SPIRV_get_size*(program: ptr glslang_program_t): csize_t {.importc.}
+proc glslang_program_SPIRV_get*(program: ptr glslang_program_t; a2: ptr cuint) {.importc.}
+proc glslang_program_SPIRV_get_ptr*(program: ptr glslang_program_t): ptr cuint {.importc.}
+proc glslang_program_SPIRV_get_messages*(program: ptr glslang_program_t): cstring {.importc.}
+proc glslang_program_get_info_log*(program: ptr glslang_program_t): cstring {.importc.}
+proc glslang_program_get_info_debug_log*(program: ptr glslang_program_t): cstring {.importc.}
+
+proc glslang_default_resource*(): ptr glslang_resource_t {.importc.}
+proc glslang_default_resource_string*(): cstring {.importc.}
+proc glslang_decode_resource_limits*(resources: ptr glslang_resource_t , config: cstring) {.importc.}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/glslang/glslang_c_shader_types.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,161 @@
+type
+
+  # EShLanguage counterpart
+  glslang_stage_t* {.size: sizeof(cint).} = enum
+    GLSLANG_STAGE_VERTEX
+    GLSLANG_STAGE_TESSCONTROL
+    GLSLANG_STAGE_TESSEVALUATION
+    GLSLANG_STAGE_GEOMETRY
+    GLSLANG_STAGE_FRAGMENT
+    GLSLANG_STAGE_COMPUTE
+    GLSLANG_STAGE_RAYGEN
+    GLSLANG_STAGE_INTERSECT
+    GLSLANG_STAGE_ANYHIT
+    GLSLANG_STAGE_CLOSESTHIT
+    GLSLANG_STAGE_MISS
+    GLSLANG_STAGE_CALLABLE
+    GLSLANG_STAGE_TASK
+    GLSLANG_STAGE_MESH
+    GLSLANG_STAGE_COUNT
+
+  # EShLanguageMask counterpart
+  glslang_stage_mask_t* {.size: sizeof(cint).} = enum
+    GLSLANG_STAGE_VERTEX_MASK = (1 shl ord(GLSLANG_STAGE_VERTEX))
+    GLSLANG_STAGE_TESSCONTROL_MASK = (1 shl ord(GLSLANG_STAGE_TESSCONTROL))
+    GLSLANG_STAGE_TESSEVALUATION_MASK = (1 shl ord(GLSLANG_STAGE_TESSEVALUATION))
+    GLSLANG_STAGE_GEOMETRY_MASK = (1 shl ord(GLSLANG_STAGE_GEOMETRY))
+    GLSLANG_STAGE_FRAGMENT_MASK = (1 shl ord(GLSLANG_STAGE_FRAGMENT))
+    GLSLANG_STAGE_COMPUTE_MASK = (1 shl ord(GLSLANG_STAGE_COMPUTE))
+    GLSLANG_STAGE_RAYGEN_MASK = (1 shl ord(GLSLANG_STAGE_RAYGEN))
+    GLSLANG_STAGE_INTERSECT_MASK = (1 shl ord(GLSLANG_STAGE_INTERSECT))
+    GLSLANG_STAGE_ANYHIT_MASK = (1 shl ord(GLSLANG_STAGE_ANYHIT))
+    GLSLANG_STAGE_CLOSESTHIT_MASK = (1 shl ord(GLSLANG_STAGE_CLOSESTHIT))
+    GLSLANG_STAGE_MISS_MASK = (1 shl ord(GLSLANG_STAGE_MISS))
+    GLSLANG_STAGE_CALLABLE_MASK = (1 shl ord(GLSLANG_STAGE_CALLABLE))
+    GLSLANG_STAGE_TASK_MASK = (1 shl ord(GLSLANG_STAGE_TASK))
+    GLSLANG_STAGE_MESH_MASK = (1 shl ord(GLSLANG_STAGE_MESH))
+    GLSLANG_STAGE_MASK_COUNT
+
+  # EShSource counterpart
+  glslang_source_t* {.size: sizeof(cint).} = enum
+    GLSLANG_SOURCE_NONE
+    GLSLANG_SOURCE_GLSL
+    GLSLANG_SOURCE_HLSL
+    GLSLANG_SOURCE_COUNT
+
+  # EShClient counterpart
+  glslang_client_t* {.size: sizeof(cint).} = enum
+    GLSLANG_CLIENT_NONE
+    GLSLANG_CLIENT_VULKAN
+    GLSLANG_CLIENT_OPENGL
+    GLSLANG_CLIENT_COUNT
+
+  # EShTargetLanguage counterpart
+  glslang_target_language_t* {.size: sizeof(cint).} = enum
+    GLSLANG_TARGET_NONE
+    GLSLANG_TARGET_SPV
+    GLSLANG_TARGET_COUNT
+
+  # SH_TARGET_ClientVersion counterpart
+  glslang_target_client_version_t* {.size: sizeof(cint).} = enum
+    GLSLANG_TARGET_CLIENT_VERSION_COUNT = 5
+    GLSLANG_TARGET_OPENGL_450 = 450
+    GLSLANG_TARGET_VULKAN_1_0 = (1 shl 22)
+    GLSLANG_TARGET_VULKAN_1_1 = (1 shl 22) or (1 shl 12)
+    GLSLANG_TARGET_VULKAN_1_2 = (1 shl 22) or (2 shl 12)
+    GLSLANG_TARGET_VULKAN_1_3 = (1 shl 22) or (3 shl 12)
+
+  # SH_TARGET_LanguageVersion counterpart
+  glslang_target_language_version_t* {.size: sizeof(cint).} = enum
+      GLSLANG_TARGET_LANGUAGE_VERSION_COUNT = 7
+      GLSLANG_TARGET_SPV_1_0 = (1 shl 16)
+      GLSLANG_TARGET_SPV_1_1 = (1 shl 16) or (1 shl 8)
+      GLSLANG_TARGET_SPV_1_2 = (1 shl 16) or (2 shl 8)
+      GLSLANG_TARGET_SPV_1_3 = (1 shl 16) or (3 shl 8)
+      GLSLANG_TARGET_SPV_1_4 = (1 shl 16) or (4 shl 8)
+      GLSLANG_TARGET_SPV_1_5 = (1 shl 16) or (5 shl 8)
+      GLSLANG_TARGET_SPV_1_6 = (1 shl 16) or (6 shl 8)
+
+  # EShExecutable counterpart
+  glslang_executable_t* {.size: sizeof(cint).} = enum
+    GLSLANG_EX_VERTEX_FRAGMENT
+    GLSLANG_EX_FRAGMENT
+
+  # EShOptimizationLevel counterpart
+  # This enum is not used in the current C interface, but could be added at a later date.
+  # GLSLANG_OPT_NONE is the current default.
+  glslang_optimization_level_t* {.size: sizeof(cint).} = enum
+    GLSLANG_OPT_NO_GENERATION
+    GLSLANG_OPT_NONE
+    GLSLANG_OPT_SIMPLE
+    GLSLANG_OPT_FULL
+    GLSLANG_OPT_LEVEL_COUNT
+
+  # EShTextureSamplerTransformMode counterpart
+  glslang_texture_sampler_transform_mode_t* {.size: sizeof(cint).} = enum
+    GLSLANG_TEX_SAMP_TRANS_KEEP
+    GLSLANG_TEX_SAMP_TRANS_UPGRADE_TEXTURE_REMOVE_SAMPLER
+    GLSLANG_TEX_SAMP_TRANS_COUNT
+
+  # EShMessages counterpart
+  glslang_messages_t* {.size: sizeof(cint).} = enum
+    GLSLANG_MSG_DEFAULT_BIT = 0
+    GLSLANG_MSG_RELAXED_ERRORS_BIT = (1 shl 0)
+    GLSLANG_MSG_SUPPRESS_WARNINGS_BIT = (1 shl 1)
+    GLSLANG_MSG_AST_BIT = (1 shl 2)
+    GLSLANG_MSG_SPV_RULES_BIT = (1 shl 3)
+    GLSLANG_MSG_VULKAN_RULES_BIT = (1 shl 4)
+    GLSLANG_MSG_ONLY_PREPROCESSOR_BIT = (1 shl 5)
+    GLSLANG_MSG_READ_HLSL_BIT = (1 shl 6)
+    GLSLANG_MSG_CASCADING_ERRORS_BIT = (1 shl 7)
+    GLSLANG_MSG_KEEP_UNCALLED_BIT = (1 shl 8)
+    GLSLANG_MSG_HLSL_OFFSETS_BIT = (1 shl 9)
+    GLSLANG_MSG_DEBUG_INFO_BIT = (1 shl 10)
+    GLSLANG_MSG_HLSL_ENABLE_16BIT_TYPES_BIT = (1 shl 11)
+    GLSLANG_MSG_HLSL_LEGALIZATION_BIT = (1 shl 12)
+    GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT = (1 shl 13)
+    GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT = (1 shl 14)
+    GLSLANG_MSG_ENHANCED = (1 shl 15)
+    GLSLANG_MSG_COUNT
+
+  # EShReflectionOptions counterpart
+  glslang_reflection_options_t* {.size: sizeof(cint).} = enum
+    GLSLANG_REFLECTION_DEFAULT_BIT = 0
+    GLSLANG_REFLECTION_STRICT_ARRAY_SUFFIX_BIT = (1 shl 0)
+    GLSLANG_REFLECTION_BASIC_ARRAY_SUFFIX_BIT = (1 shl 1)
+    GLSLANG_REFLECTION_INTERMEDIATE_IOO_BIT = (1 shl 2)
+    GLSLANG_REFLECTION_SEPARATE_BUFFERS_BIT = (1 shl 3)
+    GLSLANG_REFLECTION_ALL_BLOCK_VARIABLES_BIT = (1 shl 4)
+    GLSLANG_REFLECTION_UNWRAP_IO_BLOCKS_BIT = (1 shl 5)
+    GLSLANG_REFLECTION_ALL_IO_VARIABLES_BIT = (1 shl 6)
+    GLSLANG_REFLECTION_SHARED_STD140_SSBO_BIT = (1 shl 7)
+    GLSLANG_REFLECTION_SHARED_STD140_UBO_BIT = (1 shl 8)
+    GLSLANG_REFLECTION_COUNT
+
+  # EProfile counterpart (from Versions.h)
+  glslang_profile_t* {.size: sizeof(cint).} = enum
+    GLSLANG_BAD_PROFILE = 0
+    GLSLANG_NO_PROFILE = (1 shl 0)
+    GLSLANG_CORE_PROFILE = (1 shl 1)
+    GLSLANG_COMPATIBILITY_PROFILE = (1 shl 2)
+    GLSLANG_ES_PROFILE = (1 shl 3)
+    GLSLANG_PROFILE_COUNT
+
+  # Shader options
+  glslang_shader_options_t* {.size: sizeof(cint).} = enum
+    GLSLANG_SHADER_DEFAULT_BIT = 0
+    GLSLANG_SHADER_AUTO_MAP_BINDINGS = (1 shl 0)
+    GLSLANG_SHADER_AUTO_MAP_LOCATIONS = (1 shl 1)
+    GLSLANG_SHADER_VULKAN_RULES_RELAXED = (1 shl 2)
+    GLSLANG_SHADER_COUNT
+
+  # TResourceType counterpart
+  glslang_resource_type_t* {.size: sizeof(cint).} = enum
+    GLSLANG_RESOURCE_TYPE_SAMPLER
+    GLSLANG_RESOURCE_TYPE_TEXTURE
+    GLSLANG_RESOURCE_TYPE_IMAGE
+    GLSLANG_RESOURCE_TYPE_UBO
+    GLSLANG_RESOURCE_TYPE_SSBO
+    GLSLANG_RESOURCE_TYPE_UAV
+    GLSLANG_RESOURCE_TYPE_COUNT
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/notes	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,2 @@
+For implementation of font rendering:
+https://developer.apple.com/fonts/TrueType-Reference-Manual/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/platform/linux/symkey_map.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,16 @@
+import std/tables
+export tables
+
+import x11/keysym
+import x11/x
+
+import ../../events
+
+const KeyTypeMap* = {
+  XK_A: A, XK_B: B, XK_C: C, XK_D: D, XK_E: E, XK_F: F, XK_G: G, XK_H: H, XK_I: I, XK_J: J, XK_K: K, XK_L: L, XK_M: M, XK_N: N, XK_O: O, XK_P: P, XK_Q: Q, XK_R: R, XK_S: S, XK_T: T, XK_U: U, XK_V: V, XK_W: W, XK_X: X, XK_Y: Y, XK_Z: Z,
+  XK_a: a, XK_b: b, XK_c: c, XK_d: d, XK_e: e, XK_f: f, XK_g: g, XK_h: h, XK_i: i, XK_j: j, XK_k: k, XK_l: l, XK_m: m, XK_n: n, XK_o: o, XK_p: p, XK_q: q, XK_r: r, XK_s: s, XK_t: t, XK_u: u, XK_v: v, XK_w: w, XK_x: Key.x, XK_y: y, XK_z: z,
+  XK_1: `1`, XK_2: `2`, XK_3: `3`, XK_4: `4`, XK_5: `5`, XK_6: `6`, XK_7: `7`, XK_8: `8`, XK_9: `9`, XK_0: `0`,
+  XK_minus: Minus, XK_plus: Plus, XK_underscore: Underscore, XK_equal: Equals, XK_space: Space, XK_Return: Enter, XK_BackSpace: Backspace, XK_Tab: Tab,
+  XK_comma: Comma, XK_period: Period, XK_semicolon: Semicolon, XK_colon: Colon,
+  XK_Escape: Escape, XK_Control_L: CtrlL, XK_Shift_L: ShirtL, XK_Alt_L: AltL, XK_Control_R: CtrlR, XK_Shift_R: ShirtR, XK_Alt_R: AltR
+}.toTable
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/platform/linux/xlib.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,73 @@
+import
+  x11/xlib,
+  x11/xutil,
+  x11/keysym
+import x11/x
+
+import ../../events
+
+import ./symkey_map
+
+export keysym
+
+var deleteMessage*: Atom
+
+type
+  NativeWindow* = object
+    display*: PDisplay
+    window*: Window
+
+template checkXlibResult*(call: untyped) =
+  let value = call
+  if value == 0:
+    raise newException(Exception, "Xlib error: " & astToStr(call) & " returned " & $value)
+
+proc createWindow*(title: string): NativeWindow =
+  checkXlibResult XInitThreads()
+  let display = XOpenDisplay(nil)
+  if display == nil:
+    quit "Failed to open display"
+
+  let
+    screen = XDefaultScreen(display)
+    rootWindow = XRootWindow(display, screen)
+    foregroundColor = XBlackPixel(display, screen)
+    backgroundColor = XWhitePixel(display, screen)
+
+  let window = XCreateSimpleWindow(display, rootWindow, -1, -1, 800, 600, 0, foregroundColor, backgroundColor)
+  checkXlibResult XSetStandardProperties(display, window, title, "window", 0, nil, 0, nil)
+  checkXlibResult XSelectInput(display, window, ButtonPressMask or KeyPressMask or ExposureMask)
+  checkXlibResult XMapWindow(display, window)
+
+  deleteMessage = XInternAtom(display, "WM_DELETE_WINDOW", XBool(false))
+  checkXlibResult XSetWMProtocols(display, window, addr(deleteMessage), 1)
+
+  return NativeWindow(display: display, window: window)
+
+proc trash*(window: NativeWindow) =
+  checkXlibResult window.display.XDestroyWindow(window.window)
+  discard window.display.XCloseDisplay() # always returns 0
+
+proc size*(window: NativeWindow): (int, int) =
+  var attribs: XWindowAttributes
+  checkXlibResult XGetWindowAttributes(window.display, window.window, addr(attribs))
+  return (int(attribs.width), int(attribs.height))
+
+proc pendingEvents*(window: NativeWindow): seq[Event] =
+  var event: XEvent
+  while window.display.XPending() > 0:
+    discard window.display.XNextEvent(addr(event))
+    case event.theType
+    of ClientMessage:
+      if cast[Atom](event.xclient.data.l[0]) == deleteMessage:
+        result.add(Event(eventType: Quit))
+    of KeyPress:
+      let xkey: KeySym = XLookupKeysym(cast[PXKeyEvent](addr(event)), 0)
+      result.add(Event(eventType: KeyDown, key: KeyTypeMap.getOrDefault(xkey, UNKNOWN)))
+    of KeyRelease:
+      let xkey: KeySym = XLookupKeysym(cast[PXKeyEvent](addr(event)), 0)
+      result.add(Event(eventType: KeyUp, key: KeyTypeMap.getOrDefault(xkey, UNKNOWN)))
+    of ConfigureNotify:
+      result.add(Event(eventType: ResizedWindow))
+    else:
+      discard
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/platform/windows/win32.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,58 @@
+import winim
+
+import ../../events
+
+type
+  NativeWindow* = object
+    hinstance*: HINSTANCE
+    hwnd*: HWND
+
+template checkWin32Result*(call: untyped) =
+  let value = call
+  if value != 0:
+    raise newException(Exception, "Win32 error: " & astToStr(call) & " returned " & $value)
+
+proc WindowHandler(hwnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM): LRESULT {.stdcall.} =
+  case uMsg
+  of WM_DESTROY:
+    discard
+  else:
+    return DefWindowProc(hwnd, uMsg, wParam, lParam)
+
+
+proc createWindow*(title: string): NativeWindow =
+  result.hInstance = HINSTANCE(GetModuleHandle(nil))
+  var
+    windowClassName = T"EngineWindowClass"
+    windowName = T(title)
+    windowClass = WNDCLASS(
+      lpfnWndProc: WindowHandler,
+      hInstance: result.hInstance,
+      lpszClassName: windowClassName,
+    )
+  RegisterClass(addr(windowClass))
+
+  result.hwnd = CreateWindowEx(
+      DWORD(0),
+      windowClassName,
+      windowName,
+      DWORD(WS_OVERLAPPEDWINDOW),
+      CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+      HMENU(0),
+      HINSTANCE(0),
+      result.hInstance,
+      nil
+    )
+
+  discard ShowWindow(result.hwnd, 0)
+
+proc trash*(window: NativeWindow) =
+  PostQuitMessage(0)
+
+proc size*(window: NativeWindow): (int, int) =
+  var rect: RECT
+  checkWin32Result GetWindowRect(window.hwnd, addr(rect))
+  (int(rect.right - rect.left), int(rect.bottom - rect.top))
+
+proc pendingEvents*(window: NativeWindow): seq[Event] =
+  result
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/vulkan.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,10867 @@
+# Written by Leonardo Mariscal <leo@ldmd.mx>, 2019
+
+## Vulkan Bindings
+## ====
+## WARNING: This is a generated file. Do not edit
+## Any edits will be overwritten by the generator.
+
+when defined(linux):
+  import x11/x
+  import x11/xlib
+when defined(windows):
+  import winim
+
+var vkGetProc: proc(procName: cstring): pointer {.cdecl.}
+
+import dynlib
+
+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").}
+  {. emit: """#define VK_USE_PLATFORM_X11_KHR""" .}
+  const vkDLL = "libvulkan.so.1"
+else:
+  raise quit("Unsupported platform")
+
+let vkHandleDLL = loadLib(vkDLL)
+if isNil(vkHandleDLL):
+  quit("could not load: " & vkDLL)
+
+let vkGetProcAddress = cast[proc(s: cstring): pointer {.stdcall.}](symAddr(vkHandleDLL, "vkGetInstanceProcAddr"))
+if vkGetProcAddress == nil:
+  quit("failed to load `vkGetInstanceProcAddr` from " & vkDLL)
+
+vkGetProc = proc(procName: cstring): pointer {.cdecl.} =
+  when defined(windows):
+    result = vkGetProcAddress(procName)
+    if result != nil:
+      return
+  result = symAddr(vkHandleDLL, procName)
+  if result == nil:
+    raiseInvalidLibrary(procName)
+
+proc setVKGetProc*(getProc: proc(procName: cstring): pointer {.cdecl.}) =
+  vkGetProc = getProc
+
+type
+  VkHandle* = int64
+  VkNonDispatchableHandle* = int64
+  ANativeWindow = ptr object
+  CAMetalLayer = ptr object
+  AHardwareBuffer = ptr object
+  VkBool32* = distinct uint32
+
+# Enums
+const
+  VK_MAX_PHYSICAL_DEVICE_NAME_SIZE* = 256
+  VK_UUID_SIZE* = 16
+  VK_LUID_SIZE* = 8
+  VK_LUID_SIZE_KHR* = VK_LUID_SIZE
+  VK_MAX_EXTENSION_NAME_SIZE* = 256
+  VK_MAX_DESCRIPTION_SIZE* = 256
+  VK_MAX_MEMORY_TYPES* = 32
+  VK_MAX_MEMORY_HEAPS* = 16
+  VK_LOD_CLAMP_NONE* = 1000.0f
+  VK_REMAINING_MIP_LEVELS* = (not 0'u32)
+  VK_REMAINING_ARRAY_LAYERS* = (not 0'u32)
+  VK_WHOLE_SIZE* = (not 0'u64)
+  VK_ATTACHMENT_UNUSED* = (not 0'u32)
+  VK_TRUE* = VkBool32(1)
+  VK_FALSE* = VkBool32(0)
+  VK_QUEUE_FAMILY_IGNORED* = (not 0'u32)
+  VK_QUEUE_FAMILY_EXTERNAL* = (not 0'u32) - 1
+  VK_QUEUE_FAMILY_EXTERNAL_KHR* = VK_QUEUE_FAMILY_EXTERNAL
+  VK_QUEUE_FAMILY_FOREIGN_EXT* = (not 0'u32) - 2
+  VK_SUBPASS_EXTERNAL* = (not 0'u32)
+  VK_MAX_DEVICE_GROUP_SIZE* = 32
+  VK_MAX_DEVICE_GROUP_SIZE_KHR* = VK_MAX_DEVICE_GROUP_SIZE
+  VK_MAX_DRIVER_NAME_SIZE* = 256
+  VK_MAX_DRIVER_NAME_SIZE_KHR* = VK_MAX_DRIVER_NAME_SIZE
+  VK_MAX_DRIVER_INFO_SIZE* = 256
+  VK_MAX_DRIVER_INFO_SIZE_KHR* = VK_MAX_DRIVER_INFO_SIZE
+  VK_SHADER_UNUSED_KHR* = (not 0'u32)
+  VK_SHADER_UNUSED_NV* = VK_SHADER_UNUSED_KHR
+
+type
+  VkImageLayout* {.size: int32.sizeof.} = enum
+    VK_IMAGE_LAYOUT_UNDEFINED = 0
+    VK_IMAGE_LAYOUT_GENERAL = 1
+    VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3
+    VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4
+    VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5
+    VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6
+    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7
+    VK_IMAGE_LAYOUT_PREINITIALIZED = 8
+    VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
+  VkAttachmentLoadOp* {.size: int32.sizeof.} = 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
+    VK_ATTACHMENT_STORE_OP_STORE = 0
+    VK_ATTACHMENT_STORE_OP_DONT_CARE = 1
+  VkImageType* {.size: int32.sizeof.} = enum
+    VK_IMAGE_TYPE_1D = 0
+    VK_IMAGE_TYPE_2D = 1
+    VK_IMAGE_TYPE_3D = 2
+  VkImageTiling* {.size: int32.sizeof.} = enum
+    VK_IMAGE_TILING_OPTIMAL = 0
+    VK_IMAGE_TILING_LINEAR = 1
+  VkImageViewType* {.size: int32.sizeof.} = enum
+    VK_IMAGE_VIEW_TYPE_1D = 0
+    VK_IMAGE_VIEW_TYPE_2D = 1
+    VK_IMAGE_VIEW_TYPE_3D = 2
+    VK_IMAGE_VIEW_TYPE_CUBE = 3
+    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
+    VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0
+    VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1
+  VkComponentSwizzle* {.size: int32.sizeof.} = enum
+    VK_COMPONENT_SWIZZLE_IDENTITY = 0
+    VK_COMPONENT_SWIZZLE_ZERO = 1
+    VK_COMPONENT_SWIZZLE_ONE = 2
+    VK_COMPONENT_SWIZZLE_R = 3
+    VK_COMPONENT_SWIZZLE_G = 4
+    VK_COMPONENT_SWIZZLE_B = 5
+    VK_COMPONENT_SWIZZLE_A = 6
+  VkDescriptorType* {.size: int32.sizeof.} = enum
+    VK_DESCRIPTOR_TYPE_SAMPLER = 0
+    VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1
+    VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2
+    VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3
+    VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4
+    VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5
+    VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6
+    VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7
+    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
+    VK_QUERY_TYPE_OCCLUSION = 0
+    VK_QUERY_TYPE_PIPELINE_STATISTICS = 1
+    VK_QUERY_TYPE_TIMESTAMP = 2
+  VkBorderColor* {.size: int32.sizeof.} = 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
+    VK_PIPELINE_BIND_POINT_GRAPHICS = 0
+    VK_PIPELINE_BIND_POINT_COMPUTE = 1
+  VkPipelineCacheHeaderVersion* {.size: int32.sizeof.} = enum
+    VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1
+  VkPrimitiveTopology* {.size: int32.sizeof.} = enum
+    VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0
+    VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1
+    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4
+    VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5
+    VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6
+    VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7
+    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
+    VK_SHARING_MODE_EXCLUSIVE = 0
+    VK_SHARING_MODE_CONCURRENT = 1
+  VkIndexType* {.size: int32.sizeof.} = enum
+    VK_INDEX_TYPE_UINT16 = 0
+    VK_INDEX_TYPE_UINT32 = 1
+  VkFilter* {.size: int32.sizeof.} = enum
+    VK_FILTER_NEAREST = 0
+    VK_FILTER_LINEAR = 1
+  VkSamplerMipmapMode* {.size: int32.sizeof.} = enum
+    VK_SAMPLER_MIPMAP_MODE_NEAREST = 0
+    VK_SAMPLER_MIPMAP_MODE_LINEAR = 1
+  VkSamplerAddressMode* {.size: int32.sizeof.} = 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
+    VK_COMPARE_OP_NEVER = 0
+    VK_COMPARE_OP_LESS = 1
+    VK_COMPARE_OP_EQUAL = 2
+    VK_COMPARE_OP_LESS_OR_EQUAL = 3
+    VK_COMPARE_OP_GREATER = 4
+    VK_COMPARE_OP_NOT_EQUAL = 5
+    VK_COMPARE_OP_GREATER_OR_EQUAL = 6
+    VK_COMPARE_OP_ALWAYS = 7
+  VkPolygonMode* {.size: int32.sizeof.} = enum
+    VK_POLYGON_MODE_FILL = 0
+    VK_POLYGON_MODE_LINE = 1
+    VK_POLYGON_MODE_POINT = 2
+  VkCullModeFlagBits* {.size: int32.sizeof.} = 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
+    VK_FRONT_FACE_COUNTER_CLOCKWISE = 0
+    VK_FRONT_FACE_CLOCKWISE = 1
+  VkBlendFactor* {.size: int32.sizeof.} = enum
+    VK_BLEND_FACTOR_ZERO = 0
+    VK_BLEND_FACTOR_ONE = 1
+    VK_BLEND_FACTOR_SRC_COLOR = 2
+    VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3
+    VK_BLEND_FACTOR_DST_COLOR = 4
+    VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5
+    VK_BLEND_FACTOR_SRC_ALPHA = 6
+    VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7
+    VK_BLEND_FACTOR_DST_ALPHA = 8
+    VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9
+    VK_BLEND_FACTOR_CONSTANT_COLOR = 10
+    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11
+    VK_BLEND_FACTOR_CONSTANT_ALPHA = 12
+    VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13
+    VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14
+    VK_BLEND_FACTOR_SRC1_COLOR = 15
+    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
+    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
+    VK_STENCIL_OP_KEEP = 0
+    VK_STENCIL_OP_ZERO = 1
+    VK_STENCIL_OP_REPLACE = 2
+    VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3
+    VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4
+    VK_STENCIL_OP_INVERT = 5
+    VK_STENCIL_OP_INCREMENT_AND_WRAP = 6
+    VK_STENCIL_OP_DECREMENT_AND_WRAP = 7
+  VkLogicOp* {.size: int32.sizeof.} = enum
+    VK_LOGIC_OP_CLEAR = 0
+    VK_LOGIC_OP_AND = 1
+    VK_LOGIC_OP_AND_REVERSE = 2
+    VK_LOGIC_OP_COPY = 3
+    VK_LOGIC_OP_AND_INVERTED = 4
+    VK_LOGIC_OP_NO_OP = 5
+    VK_LOGIC_OP_XOR = 6
+    VK_LOGIC_OP_OR = 7
+    VK_LOGIC_OP_NOR = 8
+    VK_LOGIC_OP_EQUIVALENT = 9
+    VK_LOGIC_OP_INVERT = 10
+    VK_LOGIC_OP_OR_REVERSE = 11
+    VK_LOGIC_OP_COPY_INVERTED = 12
+    VK_LOGIC_OP_OR_INVERTED = 13
+    VK_LOGIC_OP_NAND = 14
+    VK_LOGIC_OP_SET = 15
+  VkInternalAllocationType* {.size: int32.sizeof.} = enum
+    VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0
+  VkSystemAllocationScope* {.size: int32.sizeof.} = 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
+    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
+    VK_VERTEX_INPUT_RATE_VERTEX = 0
+    VK_VERTEX_INPUT_RATE_INSTANCE = 1
+  VkFormat* {.size: int32.sizeof.} = enum
+    VK_FORMAT_UNDEFINED = 0
+    VK_FORMAT_R4G4_UNORM_PACK8 = 1
+    VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2
+    VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3
+    VK_FORMAT_R5G6B5_UNORM_PACK16 = 4
+    VK_FORMAT_B5G6R5_UNORM_PACK16 = 5
+    VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6
+    VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7
+    VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8
+    VK_FORMAT_R8_UNORM = 9
+    VK_FORMAT_R8_SNORM = 10
+    VK_FORMAT_R8_USCALED = 11
+    VK_FORMAT_R8_SSCALED = 12
+    VK_FORMAT_R8_UINT = 13
+    VK_FORMAT_R8_SINT = 14
+    VK_FORMAT_R8_SRGB = 15
+    VK_FORMAT_R8G8_UNORM = 16
+    VK_FORMAT_R8G8_SNORM = 17
+    VK_FORMAT_R8G8_USCALED = 18
+    VK_FORMAT_R8G8_SSCALED = 19
+    VK_FORMAT_R8G8_UINT = 20
+    VK_FORMAT_R8G8_SINT = 21
+    VK_FORMAT_R8G8_SRGB = 22
+    VK_FORMAT_R8G8B8_UNORM = 23
+    VK_FORMAT_R8G8B8_SNORM = 24
+    VK_FORMAT_R8G8B8_USCALED = 25
+    VK_FORMAT_R8G8B8_SSCALED = 26
+    VK_FORMAT_R8G8B8_UINT = 27
+    VK_FORMAT_R8G8B8_SINT = 28
+    VK_FORMAT_R8G8B8_SRGB = 29
+    VK_FORMAT_B8G8R8_UNORM = 30
+    VK_FORMAT_B8G8R8_SNORM = 31
+    VK_FORMAT_B8G8R8_USCALED = 32
+    VK_FORMAT_B8G8R8_SSCALED = 33
+    VK_FORMAT_B8G8R8_UINT = 34
+    VK_FORMAT_B8G8R8_SINT = 35
+    VK_FORMAT_B8G8R8_SRGB = 36
+    VK_FORMAT_R8G8B8A8_UNORM = 37
+    VK_FORMAT_R8G8B8A8_SNORM = 38
+    VK_FORMAT_R8G8B8A8_USCALED = 39
+    VK_FORMAT_R8G8B8A8_SSCALED = 40
+    VK_FORMAT_R8G8B8A8_UINT = 41
+    VK_FORMAT_R8G8B8A8_SINT = 42
+    VK_FORMAT_R8G8B8A8_SRGB = 43
+    VK_FORMAT_B8G8R8A8_UNORM = 44
+    VK_FORMAT_B8G8R8A8_SNORM = 45
+    VK_FORMAT_B8G8R8A8_USCALED = 46
+    VK_FORMAT_B8G8R8A8_SSCALED = 47
+    VK_FORMAT_B8G8R8A8_UINT = 48
+    VK_FORMAT_B8G8R8A8_SINT = 49
+    VK_FORMAT_B8G8R8A8_SRGB = 50
+    VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51
+    VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52
+    VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53
+    VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54
+    VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55
+    VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56
+    VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57
+    VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58
+    VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59
+    VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60
+    VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61
+    VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62
+    VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63
+    VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64
+    VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65
+    VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66
+    VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67
+    VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68
+    VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69
+    VK_FORMAT_R16_UNORM = 70
+    VK_FORMAT_R16_SNORM = 71
+    VK_FORMAT_R16_USCALED = 72
+    VK_FORMAT_R16_SSCALED = 73
+    VK_FORMAT_R16_UINT = 74
+    VK_FORMAT_R16_SINT = 75
+    VK_FORMAT_R16_SFLOAT = 76
+    VK_FORMAT_R16G16_UNORM = 77
+    VK_FORMAT_R16G16_SNORM = 78
+    VK_FORMAT_R16G16_USCALED = 79
+    VK_FORMAT_R16G16_SSCALED = 80
+    VK_FORMAT_R16G16_UINT = 81
+    VK_FORMAT_R16G16_SINT = 82
+    VK_FORMAT_R16G16_SFLOAT = 83
+    VK_FORMAT_R16G16B16_UNORM = 84
+    VK_FORMAT_R16G16B16_SNORM = 85
+    VK_FORMAT_R16G16B16_USCALED = 86
+    VK_FORMAT_R16G16B16_SSCALED = 87
+    VK_FORMAT_R16G16B16_UINT = 88
+    VK_FORMAT_R16G16B16_SINT = 89
+    VK_FORMAT_R16G16B16_SFLOAT = 90
+    VK_FORMAT_R16G16B16A16_UNORM = 91
+    VK_FORMAT_R16G16B16A16_SNORM = 92
+    VK_FORMAT_R16G16B16A16_USCALED = 93
+    VK_FORMAT_R16G16B16A16_SSCALED = 94
+    VK_FORMAT_R16G16B16A16_UINT = 95
+    VK_FORMAT_R16G16B16A16_SINT = 96
+    VK_FORMAT_R16G16B16A16_SFLOAT = 97
+    VK_FORMAT_R32_UINT = 98
+    VK_FORMAT_R32_SINT = 99
+    VK_FORMAT_R32_SFLOAT = 100
+    VK_FORMAT_R32G32_UINT = 101
+    VK_FORMAT_R32G32_SINT = 102
+    VK_FORMAT_R32G32_SFLOAT = 103
+    VK_FORMAT_R32G32B32_UINT = 104
+    VK_FORMAT_R32G32B32_SINT = 105
+    VK_FORMAT_R32G32B32_SFLOAT = 106
+    VK_FORMAT_R32G32B32A32_UINT = 107
+    VK_FORMAT_R32G32B32A32_SINT = 108
+    VK_FORMAT_R32G32B32A32_SFLOAT = 109
+    VK_FORMAT_R64_UINT = 110
+    VK_FORMAT_R64_SINT = 111
+    VK_FORMAT_R64_SFLOAT = 112
+    VK_FORMAT_R64G64_UINT = 113
+    VK_FORMAT_R64G64_SINT = 114
+    VK_FORMAT_R64G64_SFLOAT = 115
+    VK_FORMAT_R64G64B64_UINT = 116
+    VK_FORMAT_R64G64B64_SINT = 117
+    VK_FORMAT_R64G64B64_SFLOAT = 118
+    VK_FORMAT_R64G64B64A64_UINT = 119
+    VK_FORMAT_R64G64B64A64_SINT = 120
+    VK_FORMAT_R64G64B64A64_SFLOAT = 121
+    VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122
+    VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123
+    VK_FORMAT_D16_UNORM = 124
+    VK_FORMAT_X8_D24_UNORM_PACK32 = 125
+    VK_FORMAT_D32_SFLOAT = 126
+    VK_FORMAT_S8_UINT = 127
+    VK_FORMAT_D16_UNORM_S8_UINT = 128
+    VK_FORMAT_D24_UNORM_S8_UINT = 129
+    VK_FORMAT_D32_SFLOAT_S8_UINT = 130
+    VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131
+    VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132
+    VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133
+    VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134
+    VK_FORMAT_BC2_UNORM_BLOCK = 135
+    VK_FORMAT_BC2_SRGB_BLOCK = 136
+    VK_FORMAT_BC3_UNORM_BLOCK = 137
+    VK_FORMAT_BC3_SRGB_BLOCK = 138
+    VK_FORMAT_BC4_UNORM_BLOCK = 139
+    VK_FORMAT_BC4_SNORM_BLOCK = 140
+    VK_FORMAT_BC5_UNORM_BLOCK = 141
+    VK_FORMAT_BC5_SNORM_BLOCK = 142
+    VK_FORMAT_BC6H_UFLOAT_BLOCK = 143
+    VK_FORMAT_BC6H_SFLOAT_BLOCK = 144
+    VK_FORMAT_BC7_UNORM_BLOCK = 145
+    VK_FORMAT_BC7_SRGB_BLOCK = 146
+    VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147
+    VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148
+    VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149
+    VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150
+    VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151
+    VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152
+    VK_FORMAT_EAC_R11_UNORM_BLOCK = 153
+    VK_FORMAT_EAC_R11_SNORM_BLOCK = 154
+    VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155
+    VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156
+    VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157
+    VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158
+    VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159
+    VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160
+    VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161
+    VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162
+    VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163
+    VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164
+    VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165
+    VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166
+    VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167
+    VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168
+    VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169
+    VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170
+    VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171
+    VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172
+    VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173
+    VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174
+    VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175
+    VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176
+    VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177
+    VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178
+    VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179
+    VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180
+    VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181
+    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
+    VK_STRUCTURE_TYPE_APPLICATION_INFO = 0
+    VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1
+    VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2
+    VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3
+    VK_STRUCTURE_TYPE_SUBMIT_INFO = 4
+    VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5
+    VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6
+    VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7
+    VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8
+    VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9
+    VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10
+    VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11
+    VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12
+    VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13
+    VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14
+    VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15
+    VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16
+    VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17
+    VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18
+    VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19
+    VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20
+    VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21
+    VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22
+    VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23
+    VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24
+    VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25
+    VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26
+    VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27
+    VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28
+    VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29
+    VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30
+    VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32
+    VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33
+    VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34
+    VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35
+    VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36
+    VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37
+    VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38
+    VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39
+    VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40
+    VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41
+    VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42
+    VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43
+    VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44
+    VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45
+    VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46
+    VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47
+    VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48
+    VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000 # added by sam
+    VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001 # added by sam
+    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
+    VK_SUBPASS_CONTENTS_INLINE = 0
+    VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1
+  VkResult* {.size: int32.sizeof.} = enum
+    VK_ERROR_OUT_OF_DATE_KHR = -1000001004 # added by sam
+    VK_ERROR_UNKNOWN = -13
+    VK_ERROR_FRAGMENTED_POOL = -12
+    VK_ERROR_FORMAT_NOT_SUPPORTED = -11
+    VK_ERROR_TOO_MANY_OBJECTS = -10
+    VK_ERROR_INCOMPATIBLE_DRIVER = -9
+    VK_ERROR_FEATURE_NOT_PRESENT = -8
+    VK_ERROR_EXTENSION_NOT_PRESENT = -7
+    VK_ERROR_LAYER_NOT_PRESENT = -6
+    VK_ERROR_MEMORY_MAP_FAILED = -5
+    VK_ERROR_DEVICE_LOST = -4
+    VK_ERROR_INITIALIZATION_FAILED = -3
+    VK_ERROR_OUT_OF_DEVICE_MEMORY = -2
+    VK_ERROR_OUT_OF_HOST_MEMORY = -1
+    VK_SUCCESS = 0
+    VK_NOT_READY = 1
+    VK_TIMEOUT = 2
+    VK_EVENT_SET = 3
+    VK_EVENT_RESET = 4
+    VK_INCOMPLETE = 5
+    VK_SUBOPTIMAL_KHR = 1000001003, # added by sam
+  VkDynamicState* {.size: int32.sizeof.} = enum
+    VK_DYNAMIC_STATE_VIEWPORT = 0
+    VK_DYNAMIC_STATE_SCISSOR = 1
+    VK_DYNAMIC_STATE_LINE_WIDTH = 2
+    VK_DYNAMIC_STATE_DEPTH_BIAS = 3
+    VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4
+    VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5
+    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
+    VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0
+  VkObjectType* {.size: int32.sizeof.} = enum
+    VK_OBJECT_TYPE_UNKNOWN = 0
+    VK_OBJECT_TYPE_INSTANCE = 1
+    VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2
+    VK_OBJECT_TYPE_DEVICE = 3
+    VK_OBJECT_TYPE_QUEUE = 4
+    VK_OBJECT_TYPE_SEMAPHORE = 5
+    VK_OBJECT_TYPE_COMMAND_BUFFER = 6
+    VK_OBJECT_TYPE_FENCE = 7
+    VK_OBJECT_TYPE_DEVICE_MEMORY = 8
+    VK_OBJECT_TYPE_BUFFER = 9
+    VK_OBJECT_TYPE_IMAGE = 10
+    VK_OBJECT_TYPE_EVENT = 11
+    VK_OBJECT_TYPE_QUERY_POOL = 12
+    VK_OBJECT_TYPE_BUFFER_VIEW = 13
+    VK_OBJECT_TYPE_IMAGE_VIEW = 14
+    VK_OBJECT_TYPE_SHADER_MODULE = 15
+    VK_OBJECT_TYPE_PIPELINE_CACHE = 16
+    VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17
+    VK_OBJECT_TYPE_RENDER_PASS = 18
+    VK_OBJECT_TYPE_PIPELINE = 19
+    VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20
+    VK_OBJECT_TYPE_SAMPLER = 21
+    VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22
+    VK_OBJECT_TYPE_DESCRIPTOR_SET = 23
+    VK_OBJECT_TYPE_FRAMEBUFFER = 24
+    VK_OBJECT_TYPE_COMMAND_POOL = 25
+  VkQueueFlagBits* {.size: int32.sizeof.} = 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
+    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
+    VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 1
+  VkAccessFlagBits* {.size: int32.sizeof.} = enum
+    VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 1
+    VK_ACCESS_INDEX_READ_BIT = 2
+    VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 4
+    VK_ACCESS_UNIFORM_READ_BIT = 8
+    VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 16
+    VK_ACCESS_SHADER_READ_BIT = 32
+    VK_ACCESS_SHADER_WRITE_BIT = 64
+    VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 128
+    VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 256
+    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 512
+    VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 1024
+    VK_ACCESS_TRANSFER_READ_BIT = 2048
+    VK_ACCESS_TRANSFER_WRITE_BIT = 4096
+    VK_ACCESS_HOST_READ_BIT = 8192
+    VK_ACCESS_HOST_WRITE_BIT = 16384
+    VK_ACCESS_MEMORY_READ_BIT = 32768
+    VK_ACCESS_MEMORY_WRITE_BIT = 65536
+  VkBufferUsageFlagBits* {.size: int32.sizeof.} = enum
+    VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 1
+    VK_BUFFER_USAGE_TRANSFER_DST_BIT = 2
+    VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 4
+    VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 8
+    VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 16
+    VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 32
+    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
+    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
+    VK_SHADER_STAGE_VERTEX_BIT = 1
+    VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 2
+    VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 4
+    VK_SHADER_STAGE_GEOMETRY_BIT = 8
+    VK_SHADER_STAGE_FRAGMENT_BIT = 16
+    VK_SHADER_STAGE_ALL_GRAPHICS = 31
+    VK_SHADER_STAGE_COMPUTE_BIT = 32
+    VK_SHADER_STAGE_ALL = 2147483647
+  VkImageUsageFlagBits* {.size: int32.sizeof.} = enum
+    VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 1
+    VK_IMAGE_USAGE_TRANSFER_DST_BIT = 2
+    VK_IMAGE_USAGE_SAMPLED_BIT = 4
+    VK_IMAGE_USAGE_STORAGE_BIT = 8
+    VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 16
+    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
+    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
+    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
+    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
+    VK_FENCE_CREATE_SIGNALED_BIT = 1
+  VkFormatFeatureFlagBits* {.size: int32.sizeof.} = enum
+    VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 1
+    VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 2
+    VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 4
+    VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 8
+    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 16
+    VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 32
+    VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 64
+    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 128
+    VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 256
+    VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 512
+    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
+    VK_QUERY_CONTROL_PRECISE_BIT = 1
+  VkQueryResultFlagBits* {.size: int32.sizeof.} = 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
+    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
+    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
+    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 8
+    VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 16
+    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 32
+    VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 64
+    VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 128
+    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
+    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
+    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
+    VK_SPARSE_MEMORY_BIND_METADATA_BIT = 1
+  VkPipelineStageFlagBits* {.size: int32.sizeof.} = enum
+    VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 1
+    VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 2
+    VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 4
+    VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 8
+    VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 16
+    VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 32
+    VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 64
+    VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 128
+    VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 256
+    VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 512
+    VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 1024
+    VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 2048
+    VK_PIPELINE_STAGE_TRANSFER_BIT = 4096
+    VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 8192
+    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
+    VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 1
+    VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 2
+  VkCommandPoolResetFlagBits* {.size: int32.sizeof.} = enum
+    VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 1
+  VkCommandBufferResetFlagBits* {.size: int32.sizeof.} = enum
+    VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 1
+  VkSampleCountFlagBits* {.size: int32.sizeof.} = enum
+    VK_SAMPLE_COUNT_1_BIT = 1
+    VK_SAMPLE_COUNT_2_BIT = 2
+    VK_SAMPLE_COUNT_4_BIT = 4
+    VK_SAMPLE_COUNT_8_BIT = 8
+    VK_SAMPLE_COUNT_16_BIT = 16
+    VK_SAMPLE_COUNT_32_BIT = 32
+    VK_SAMPLE_COUNT_64_BIT = 64
+  VkAttachmentDescriptionFlagBits* {.size: int32.sizeof.} = enum
+    VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 1
+  VkStencilFaceFlagBits* {.size: int32.sizeof.} = 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
+    VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 1
+  VkDependencyFlagBits* {.size: int32.sizeof.} = enum
+    VK_DEPENDENCY_BY_REGION_BIT = 1
+  VkSemaphoreType* {.size: int32.sizeof.} = enum
+    VK_SEMAPHORE_TYPE_BINARY = 0
+    VK_SEMAPHORE_TYPE_TIMELINE = 1
+  VkSemaphoreWaitFlagBits* {.size: int32.sizeof.} = enum
+    VK_SEMAPHORE_WAIT_ANY_BIT = 1
+  VkPresentModeKHR* {.size: int32.sizeof.} = 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
+    VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0
+  VkDisplayPlaneAlphaFlagBitsKHR* {.size: int32.sizeof.} = 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
+    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
+    VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 1
+    VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 2
+    VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 4
+    VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 8
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 16
+    VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 32
+    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
+    VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID = 1
+  VkTimeDomainEXT* {.size: int32.sizeof.} = 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
+    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
+    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
+    VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3
+    VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4
+    VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5
+    VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6
+    VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7
+    VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8
+    VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9
+    VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10
+    VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11
+    VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12
+    VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13
+    VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14
+    VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15
+    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16
+    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17
+    VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18
+    VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19
+    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20
+    VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21
+    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22
+    VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23
+    VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24
+    VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25
+    VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26
+    VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27
+    VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 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
+    VK_RASTERIZATION_ORDER_STRICT_AMD = 0
+    VK_RASTERIZATION_ORDER_RELAXED_AMD = 1
+  VkExternalMemoryHandleTypeFlagBitsNV* {.size: int32.sizeof.} = 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
+    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
+    VK_VALIDATION_CHECK_ALL_EXT = 0
+    VK_VALIDATION_CHECK_SHADERS_EXT = 1
+  VkValidationFeatureEnableEXT* {.size: int32.sizeof.} = 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
+    VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0
+    VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1
+    VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2
+    VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = 3
+    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
+    VK_SUBGROUP_FEATURE_BASIC_BIT = 1
+    VK_SUBGROUP_FEATURE_VOTE_BIT = 2
+    VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 4
+    VK_SUBGROUP_FEATURE_BALLOT_BIT = 8
+    VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 16
+    VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 32
+    VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 64
+    VK_SUBGROUP_FEATURE_QUAD_BIT = 128
+  VkIndirectCommandsLayoutUsageFlagBitsNV* {.size: int32.sizeof.} = 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
+    VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = 1
+  VkIndirectCommandsTokenTypeNV* {.size: int32.sizeof.} = 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
+    VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = 3
+    VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = 4
+    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
+    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
+    VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 8
+    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
+    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
+    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
+    VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 1
+    VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 2
+  VkSemaphoreImportFlagBits* {.size: int32.sizeof.} = enum
+    VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 1
+  VkExternalFenceHandleTypeFlagBits* {.size: int32.sizeof.} = 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
+    VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 1
+    VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 2
+  VkFenceImportFlagBits* {.size: int32.sizeof.} = enum
+    VK_FENCE_IMPORT_TEMPORARY_BIT = 1
+  VkSurfaceCounterFlagBitsEXT* {.size: int32.sizeof.} = enum
+    VK_SURFACE_COUNTER_VBLANK_EXT = 1
+  VkDisplayPowerStateEXT* {.size: int32.sizeof.} = 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
+    VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0
+  VkDisplayEventTypeEXT* {.size: int32.sizeof.} = enum
+    VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0
+  VkPeerMemoryFeatureFlagBits* {.size: int32.sizeof.} = 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
+    VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 1
+  VkDeviceGroupPresentModeFlagBitsKHR* {.size: int32.sizeof.} = 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
+    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0
+    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1
+    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2
+    VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3
+    VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4
+    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
+    VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0
+    VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1
+  VkPointClippingBehavior* {.size: int32.sizeof.} = enum
+    VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0
+    VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1
+  VkSamplerReductionMode* {.size: int32.sizeof.} = 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
+    VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0
+    VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1
+  VkSamplerYcbcrModelConversion* {.size: int32.sizeof.} = 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
+    VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0
+    VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1
+  VkChromaLocation* {.size: int32.sizeof.} = enum
+    VK_CHROMA_LOCATION_COSITED_EVEN = 0
+    VK_CHROMA_LOCATION_MIDPOINT = 1
+  VkBlendOverlapEXT* {.size: int32.sizeof.} = enum
+    VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0
+    VK_BLEND_OVERLAP_DISJOINT_EXT = 1
+    VK_BLEND_OVERLAP_CONJOINT_EXT = 2
+  VkCoverageModulationModeNV* {.size: int32.sizeof.} = 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
+    VK_COVERAGE_REDUCTION_MODE_MERGE_NV = 0
+    VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV = 1
+  VkValidationCacheHeaderVersionEXT* {.size: int32.sizeof.} = enum
+    VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1
+  VkShaderInfoTypeAMD* {.size: int32.sizeof.} = 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
+    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
+    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
+    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
+    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
+    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
+    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
+    VK_DRIVER_ID_AMD_PROPRIETARY = 1
+    VK_DRIVER_ID_AMD_OPEN_SOURCE = 2
+    VK_DRIVER_ID_MESA_RADV = 3
+    VK_DRIVER_ID_NVIDIA_PROPRIETARY = 4
+    VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = 5
+    VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA = 6
+    VK_DRIVER_ID_IMAGINATION_PROPRIETARY = 7
+    VK_DRIVER_ID_QUALCOMM_PROPRIETARY = 8
+    VK_DRIVER_ID_ARM_PROPRIETARY = 9
+    VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10
+    VK_DRIVER_ID_GGP_PROPRIETARY = 11
+    VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12
+    VK_DRIVER_ID_MESA_LLVMPIPE = 13
+    VK_DRIVER_ID_MOLTENVK = 14
+  VkConditionalRenderingFlagBitsEXT* {.size: int32.sizeof.} = enum
+    VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT = 1
+  VkResolveModeFlagBits* {.size: int32.sizeof.} = 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
+    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
+    VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = 3
+    VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = 4
+    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = 5
+    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = 6
+    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = 7
+    VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = 8
+    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
+    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
+    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
+    VK_GEOMETRY_OPAQUE_BIT_KHR = 1
+    VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = 2
+  VkBuildAccelerationStructureFlagBitsKHR* {.size: int32.sizeof.} = 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
+    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
+    VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = 0
+    VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = 1
+  VkGeometryTypeKHR* {.size: int32.sizeof.} = enum
+    VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0
+    VK_GEOMETRY_TYPE_AABBS_KHR = 1
+  VkAccelerationStructureMemoryRequirementsTypeKHR* {.size: int32.sizeof.} = 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
+    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
+    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
+    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
+    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
+    VK_COMPONENT_TYPE_FLOAT16_NV = 0
+    VK_COMPONENT_TYPE_FLOAT32_NV = 1
+    VK_COMPONENT_TYPE_FLOAT64_NV = 2
+    VK_COMPONENT_TYPE_SINT8_NV = 3
+    VK_COMPONENT_TYPE_SINT16_NV = 4
+    VK_COMPONENT_TYPE_SINT32_NV = 5
+    VK_COMPONENT_TYPE_SINT64_NV = 6
+    VK_COMPONENT_TYPE_UINT8_NV = 7
+    VK_COMPONENT_TYPE_UINT16_NV = 8
+    VK_COMPONENT_TYPE_UINT32_NV = 9
+    VK_COMPONENT_TYPE_UINT64_NV = 10
+  VkDeviceDiagnosticsConfigFlagBitsNV* {.size: int32.sizeof.} = 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
+    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
+    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
+    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
+    VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = 0
+    VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = 1
+    VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = 2
+    VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR = 3
+    VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR = 4
+    VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR = 5
+    VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR = 6
+    VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR = 7
+    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
+    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
+    VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = 1
+    VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = 2
+  VkPerformanceConfigurationTypeINTEL* {.size: int32.sizeof.} = enum
+    VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = 0
+  VkQueryPoolSamplingModeINTEL* {.size: int32.sizeof.} = enum
+    VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = 0
+  VkPerformanceOverrideTypeINTEL* {.size: int32.sizeof.} = enum
+    VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = 0
+    VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = 1
+  VkPerformanceParameterTypeINTEL* {.size: int32.sizeof.} = 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
+    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
+    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
+    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
+    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
+    VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = 1
+    VK_TOOL_PURPOSE_PROFILING_BIT_EXT = 2
+    VK_TOOL_PURPOSE_TRACING_BIT_EXT = 4
+    VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = 8
+    VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = 16
+
+# Types
+
+# stub types if we are on the wrong platform, so we don't need to "when" all platform functions
+when not defined(linux):
+  type
+    Display* = ptr object
+    VisualID* = ptr object
+    Window* = ptr object
+when not defined(windows):
+  type
+    HINSTANCE* = ptr object
+    HWND* = ptr object
+    HMONITOR* = ptr object
+    HANDLE* = ptr object
+    SECURITY_ATTRIBUTES* = ptr object
+    DWORD* = ptr object
+    LPCWSTR* = ptr object
+
+type
+  RROutput* = ptr object
+  wl_display* = ptr object
+  wl_surface* = ptr object
+  xcb_connection_t* = ptr object
+  xcb_visualid_t* = ptr object
+  xcb_window_t* = ptr object
+  IDirectFB* = ptr object
+  IDirectFBSurface* = ptr object
+  zx_handle_t* = ptr object
+  GgpStreamDescriptor* = ptr object
+  GgpFrameToken* = ptr object
+
+template vkMakeVersion*(major, minor, patch: untyped): untyped =
+  (((major) shl 22) or ((minor) shl 12) or (patch))
+
+template vkVersionMajor*(version: untyped): untyped =
+  ((uint32)(version) shr 22)
+
+template vkVersionMinor*(version: untyped): untyped =
+  (((uint32)(version) shr 12) and 0x000003FF)
+
+template vkVersionPatch*(version: untyped): untyped =
+  ((uint32)(version) and 0x00000FFF)
+
+const vkApiVersion1_0* = vkMakeVersion(1, 0, 0)
+const vkApiVersion1_1* = vkMakeVersion(1, 1, 0)
+const vkApiVersion1_2* = vkMakeVersion(1, 2, 0)
+
+type
+  VkSampleMask* = distinct uint32
+  VkFlags* = distinct uint32
+  VkDeviceSize* = distinct uint64
+  VkDeviceAddress* = distinct uint64
+  VkFramebufferCreateFlags* = distinct VkFlags
+  VkQueryPoolCreateFlags* = distinct VkFlags
+  VkRenderPassCreateFlags* = distinct VkFlags
+  VkSamplerCreateFlags* = distinct VkFlags
+  VkPipelineLayoutCreateFlags* = distinct VkFlags
+  VkPipelineCacheCreateFlags* = distinct VkFlags
+  VkPipelineDepthStencilStateCreateFlags* = distinct VkFlags
+  VkPipelineDynamicStateCreateFlags* = distinct VkFlags
+  VkPipelineColorBlendStateCreateFlags* = distinct VkFlags
+  VkPipelineMultisampleStateCreateFlags* = distinct VkFlags
+  VkPipelineRasterizationStateCreateFlags* = distinct VkFlags
+  VkPipelineViewportStateCreateFlags* = distinct VkFlags
+  VkPipelineTessellationStateCreateFlags* = distinct VkFlags
+  VkPipelineInputAssemblyStateCreateFlags* = distinct VkFlags
+  VkPipelineVertexInputStateCreateFlags* = distinct VkFlags
+  VkPipelineShaderStageCreateFlags* = distinct VkFlags
+  VkDescriptorSetLayoutCreateFlags* = distinct VkFlags
+  VkBufferViewCreateFlags* = distinct VkFlags
+  VkInstanceCreateFlags* = distinct VkFlags
+  VkDeviceCreateFlags* = distinct VkFlags
+  VkDeviceQueueCreateFlags* = distinct VkFlags
+  VkQueueFlags* = distinct VkFlags
+  VkMemoryPropertyFlags* = distinct VkFlags
+  VkMemoryHeapFlags* = distinct VkFlags
+  VkAccessFlags* = distinct VkFlags
+  VkBufferUsageFlags* = distinct VkFlags
+  VkBufferCreateFlags* = distinct VkFlags
+  VkShaderStageFlags* = distinct VkFlags
+  VkImageUsageFlags* = distinct VkFlags
+  VkImageCreateFlags* = distinct VkFlags
+  VkImageViewCreateFlags* = distinct VkFlags
+  VkPipelineCreateFlags* = distinct VkFlags
+  VkColorComponentFlags* = distinct VkFlags
+  VkFenceCreateFlags* = distinct VkFlags
+  VkSemaphoreCreateFlags* = distinct VkFlags
+  VkFormatFeatureFlags* = distinct VkFlags
+  VkQueryControlFlags* = distinct VkFlags
+  VkQueryResultFlags* = distinct VkFlags
+  VkShaderModuleCreateFlags* = distinct VkFlags
+  VkEventCreateFlags* = distinct VkFlags
+  VkCommandPoolCreateFlags* = distinct VkFlags
+  VkCommandPoolResetFlags* = distinct VkFlags
+  VkCommandBufferResetFlags* = distinct VkFlags
+  VkCommandBufferUsageFlags* = distinct VkFlags
+  VkQueryPipelineStatisticFlags* = distinct VkFlags
+  VkMemoryMapFlags* = distinct VkFlags
+  VkImageAspectFlags* = distinct VkFlags
+  VkSparseMemoryBindFlags* = distinct VkFlags
+  VkSparseImageFormatFlags* = distinct VkFlags
+  VkSubpassDescriptionFlags* = distinct VkFlags
+  VkPipelineStageFlags* = distinct VkFlags
+  VkSampleCountFlags* = distinct VkFlags
+  VkAttachmentDescriptionFlags* = distinct VkFlags
+  VkStencilFaceFlags* = distinct VkFlags
+  VkCullModeFlags* = distinct VkFlags
+  VkDescriptorPoolCreateFlags* = distinct VkFlags
+  VkDescriptorPoolResetFlags* = distinct VkFlags
+  VkDependencyFlags* = distinct VkFlags
+  VkSubgroupFeatureFlags* = distinct VkFlags
+  VkIndirectCommandsLayoutUsageFlagsNV* = distinct VkFlags
+  VkIndirectStateFlagsNV* = distinct VkFlags
+  VkGeometryFlagsKHR* = distinct VkFlags
+  VkGeometryFlagsNV* = VkGeometryFlagsKHR
+  VkGeometryInstanceFlagsKHR* = distinct VkFlags
+  VkGeometryInstanceFlagsNV* = VkGeometryInstanceFlagsKHR
+  VkBuildAccelerationStructureFlagsKHR* = distinct VkFlags
+  VkBuildAccelerationStructureFlagsNV* = VkBuildAccelerationStructureFlagsKHR
+  VkPrivateDataSlotCreateFlagsEXT* = distinct VkFlags
+  VkDescriptorUpdateTemplateCreateFlags* = distinct VkFlags
+  VkDescriptorUpdateTemplateCreateFlagsKHR* = VkDescriptorUpdateTemplateCreateFlags
+  VkPipelineCreationFeedbackFlagsEXT* = distinct VkFlags
+  VkPerformanceCounterDescriptionFlagsKHR* = distinct VkFlags
+  VkAcquireProfilingLockFlagsKHR* = distinct VkFlags
+  VkSemaphoreWaitFlags* = distinct VkFlags
+  VkSemaphoreWaitFlagsKHR* = VkSemaphoreWaitFlags
+  VkPipelineCompilerControlFlagsAMD* = distinct VkFlags
+  VkShaderCorePropertiesFlagsAMD* = distinct VkFlags
+  VkDeviceDiagnosticsConfigFlagsNV* = distinct VkFlags
+  VkCompositeAlphaFlagsKHR* = distinct VkFlags
+  VkDisplayPlaneAlphaFlagsKHR* = distinct VkFlags
+  VkSurfaceTransformFlagsKHR* = distinct VkFlags
+  VkSwapchainCreateFlagsKHR* = distinct VkFlags
+  VkDisplayModeCreateFlagsKHR* = distinct VkFlags
+  VkDisplaySurfaceCreateFlagsKHR* = distinct VkFlags
+  VkAndroidSurfaceCreateFlagsKHR* = distinct VkFlags
+  VkViSurfaceCreateFlagsNN* = distinct VkFlags
+  VkWaylandSurfaceCreateFlagsKHR* = distinct VkFlags
+  VkWin32SurfaceCreateFlagsKHR* = distinct VkFlags
+  VkXlibSurfaceCreateFlagsKHR* = distinct VkFlags
+  VkXcbSurfaceCreateFlagsKHR* = distinct VkFlags
+  VkDirectFBSurfaceCreateFlagsEXT* = distinct VkFlags
+  VkIOSSurfaceCreateFlagsMVK* = distinct VkFlags
+  VkMacOSSurfaceCreateFlagsMVK* = distinct VkFlags
+  VkMetalSurfaceCreateFlagsEXT* = distinct VkFlags
+  VkImagePipeSurfaceCreateFlagsFUCHSIA* = distinct VkFlags
+  VkStreamDescriptorSurfaceCreateFlagsGGP* = distinct VkFlags
+  VkHeadlessSurfaceCreateFlagsEXT* = distinct VkFlags
+  VkPeerMemoryFeatureFlags* = distinct VkFlags
+  VkPeerMemoryFeatureFlagsKHR* = VkPeerMemoryFeatureFlags
+  VkMemoryAllocateFlags* = distinct VkFlags
+  VkMemoryAllocateFlagsKHR* = VkMemoryAllocateFlags
+  VkDeviceGroupPresentModeFlagsKHR* = distinct VkFlags
+  VkDebugReportFlagsEXT* = distinct VkFlags
+  VkCommandPoolTrimFlags* = distinct VkFlags
+  VkCommandPoolTrimFlagsKHR* = VkCommandPoolTrimFlags
+  VkExternalMemoryHandleTypeFlagsNV* = distinct VkFlags
+  VkExternalMemoryFeatureFlagsNV* = distinct VkFlags
+  VkExternalMemoryHandleTypeFlags* = distinct VkFlags
+  VkExternalMemoryHandleTypeFlagsKHR* = VkExternalMemoryHandleTypeFlags
+  VkExternalMemoryFeatureFlags* = distinct VkFlags
+  VkExternalMemoryFeatureFlagsKHR* = VkExternalMemoryFeatureFlags
+  VkExternalSemaphoreHandleTypeFlags* = distinct VkFlags
+  VkExternalSemaphoreHandleTypeFlagsKHR* = VkExternalSemaphoreHandleTypeFlags
+  VkExternalSemaphoreFeatureFlags* = distinct VkFlags
+  VkExternalSemaphoreFeatureFlagsKHR* = VkExternalSemaphoreFeatureFlags
+  VkSemaphoreImportFlags* = distinct VkFlags
+  VkSemaphoreImportFlagsKHR* = VkSemaphoreImportFlags
+  VkExternalFenceHandleTypeFlags* = distinct VkFlags
+  VkExternalFenceHandleTypeFlagsKHR* = VkExternalFenceHandleTypeFlags
+  VkExternalFenceFeatureFlags* = distinct VkFlags
+  VkExternalFenceFeatureFlagsKHR* = VkExternalFenceFeatureFlags
+  VkFenceImportFlags* = distinct VkFlags
+  VkFenceImportFlagsKHR* = VkFenceImportFlags
+  VkSurfaceCounterFlagsEXT* = distinct VkFlags
+  VkPipelineViewportSwizzleStateCreateFlagsNV* = distinct VkFlags
+  VkPipelineDiscardRectangleStateCreateFlagsEXT* = distinct VkFlags
+  VkPipelineCoverageToColorStateCreateFlagsNV* = distinct VkFlags
+  VkPipelineCoverageModulationStateCreateFlagsNV* = distinct VkFlags
+  VkPipelineCoverageReductionStateCreateFlagsNV* = distinct VkFlags
+  VkValidationCacheCreateFlagsEXT* = distinct VkFlags
+  VkDebugUtilsMessageSeverityFlagsEXT* = distinct VkFlags
+  VkDebugUtilsMessageTypeFlagsEXT* = distinct VkFlags
+  VkDebugUtilsMessengerCreateFlagsEXT* = distinct VkFlags
+  VkDebugUtilsMessengerCallbackDataFlagsEXT* = distinct VkFlags
+  VkPipelineRasterizationConservativeStateCreateFlagsEXT* = distinct VkFlags
+  VkDescriptorBindingFlags* = distinct VkFlags
+  VkDescriptorBindingFlagsEXT* = VkDescriptorBindingFlags
+  VkConditionalRenderingFlagsEXT* = distinct VkFlags
+  VkResolveModeFlags* = distinct VkFlags
+  VkResolveModeFlagsKHR* = VkResolveModeFlags
+  VkPipelineRasterizationStateStreamCreateFlagsEXT* = distinct VkFlags
+  VkPipelineRasterizationDepthClipStateCreateFlagsEXT* = distinct VkFlags
+  VkSwapchainImageUsageFlagsANDROID* = distinct VkFlags
+  VkToolPurposeFlagsEXT* = distinct VkFlags
+  VkInstance* = distinct VkHandle
+  VkPhysicalDevice* = distinct VkHandle
+  VkDevice* = distinct VkHandle
+  VkQueue* = distinct VkHandle
+  VkCommandBuffer* = distinct VkHandle
+  VkDeviceMemory* = distinct VkNonDispatchableHandle
+  VkCommandPool* = distinct VkNonDispatchableHandle
+  VkBuffer* = distinct VkNonDispatchableHandle
+  VkBufferView* = distinct VkNonDispatchableHandle
+  VkImage* = distinct VkNonDispatchableHandle
+  VkImageView* = distinct VkNonDispatchableHandle
+  VkShaderModule* = distinct VkNonDispatchableHandle
+  VkPipeline* = distinct VkNonDispatchableHandle
+  VkPipelineLayout* = distinct VkNonDispatchableHandle
+  VkSampler* = distinct VkNonDispatchableHandle
+  VkDescriptorSet* = distinct VkNonDispatchableHandle
+  VkDescriptorSetLayout* = distinct VkNonDispatchableHandle
+  VkDescriptorPool* = distinct VkNonDispatchableHandle
+  VkFence* = distinct VkNonDispatchableHandle
+  VkSemaphore* = distinct VkNonDispatchableHandle
+  VkEvent* = distinct VkNonDispatchableHandle
+  VkQueryPool* = distinct VkNonDispatchableHandle
+  VkFramebuffer* = distinct VkNonDispatchableHandle
+  VkRenderPass* = distinct VkNonDispatchableHandle
+  VkPipelineCache* = distinct VkNonDispatchableHandle
+  VkIndirectCommandsLayoutNV* = distinct VkNonDispatchableHandle
+  VkDescriptorUpdateTemplate* = distinct VkNonDispatchableHandle
+  VkDescriptorUpdateTemplateKHR* = VkDescriptorUpdateTemplate
+  VkSamplerYcbcrConversion* = distinct VkNonDispatchableHandle
+  VkSamplerYcbcrConversionKHR* = VkSamplerYcbcrConversion
+  VkValidationCacheEXT* = distinct VkNonDispatchableHandle
+  VkAccelerationStructureKHR* = distinct VkNonDispatchableHandle
+  VkAccelerationStructureNV* = VkAccelerationStructureKHR
+  VkPerformanceConfigurationINTEL* = distinct VkNonDispatchableHandle
+  VkDeferredOperationKHR* = distinct VkNonDispatchableHandle
+  VkPrivateDataSlotEXT* = distinct VkNonDispatchableHandle
+  VkDisplayKHR* = distinct VkNonDispatchableHandle
+  VkDisplayModeKHR* = distinct VkNonDispatchableHandle
+  VkSurfaceKHR* = distinct VkNonDispatchableHandle
+  VkSwapchainKHR* = distinct VkNonDispatchableHandle
+  VkDebugReportCallbackEXT* = distinct VkNonDispatchableHandle
+  VkDebugUtilsMessengerEXT* = distinct VkNonDispatchableHandle
+  VkDescriptorUpdateTemplateTypeKHR* = VkDescriptorUpdateTemplateType
+  VkPointClippingBehaviorKHR* = VkPointClippingBehavior
+  VkResolveModeFlagBitsKHR* = VkResolveModeFlagBits
+  VkDescriptorBindingFlagBitsEXT* = VkDescriptorBindingFlagBits
+  VkSemaphoreTypeKHR* = VkSemaphoreType
+  VkGeometryFlagBitsNV* = VkGeometryFlagBitsKHR
+  VkGeometryInstanceFlagBitsNV* = VkGeometryInstanceFlagBitsKHR
+  VkBuildAccelerationStructureFlagBitsNV* = VkBuildAccelerationStructureFlagBitsKHR
+  VkCopyAccelerationStructureModeNV* = VkCopyAccelerationStructureModeKHR
+  VkAccelerationStructureTypeNV* = VkAccelerationStructureTypeKHR
+  VkGeometryTypeNV* = VkGeometryTypeKHR
+  VkRayTracingShaderGroupTypeNV* = VkRayTracingShaderGroupTypeKHR
+  VkAccelerationStructureMemoryRequirementsTypeNV* = VkAccelerationStructureMemoryRequirementsTypeKHR
+  VkSemaphoreWaitFlagBitsKHR* = VkSemaphoreWaitFlagBits
+  VkExternalMemoryHandleTypeFlagBitsKHR* = VkExternalMemoryHandleTypeFlagBits
+  VkExternalMemoryFeatureFlagBitsKHR* = VkExternalMemoryFeatureFlagBits
+  VkExternalSemaphoreHandleTypeFlagBitsKHR* = VkExternalSemaphoreHandleTypeFlagBits
+  VkExternalSemaphoreFeatureFlagBitsKHR* = VkExternalSemaphoreFeatureFlagBits
+  VkSemaphoreImportFlagBitsKHR* = VkSemaphoreImportFlagBits
+  VkExternalFenceHandleTypeFlagBitsKHR* = VkExternalFenceHandleTypeFlagBits
+  VkExternalFenceFeatureFlagBitsKHR* = VkExternalFenceFeatureFlagBits
+  VkFenceImportFlagBitsKHR* = VkFenceImportFlagBits
+  VkPeerMemoryFeatureFlagBitsKHR* = VkPeerMemoryFeatureFlagBits
+  VkMemoryAllocateFlagBitsKHR* = VkMemoryAllocateFlagBits
+  VkTessellationDomainOriginKHR* = VkTessellationDomainOrigin
+  VkSamplerYcbcrModelConversionKHR* = VkSamplerYcbcrModelConversion
+  VkSamplerYcbcrRangeKHR* = VkSamplerYcbcrRange
+  VkChromaLocationKHR* = VkChromaLocation
+  VkSamplerReductionModeEXT* = VkSamplerReductionMode
+  VkShaderFloatControlsIndependenceKHR* = VkShaderFloatControlsIndependence
+  VkDriverIdKHR* = VkDriverId
+  PFN_vkInternalAllocationNotification* = proc(pUserData: pointer; size: csize_t; allocationType: VkInternalAllocationType; allocationScope: VkSystemAllocationScope) {.cdecl.}
+  PFN_vkInternalFreeNotification* = proc(pUserData: pointer; size: csize_t; allocationType: VkInternalAllocationType; allocationScope: VkSystemAllocationScope) {.cdecl.}
+  PFN_vkReallocationFunction* = proc(pUserData: pointer; pOriginal: pointer; size: csize_t; alignment: csize_t; allocationScope: VkSystemAllocationScope): pointer {.cdecl.}
+  PFN_vkAllocationFunction* = proc(pUserData: pointer; size: csize_t; alignment: csize_t; allocationScope: VkSystemAllocationScope): pointer {.cdecl.}
+  PFN_vkFreeFunction* = proc(pUserData: pointer; pMemory: pointer) {.cdecl.}
+  PFN_vkVoidFunction* = proc() {.cdecl.}
+  PFN_vkDebugReportCallbackEXT* = proc(flags: VkDebugReportFlagsEXT; objectType: VkDebugReportObjectTypeEXT; cbObject: uint64; location: csize_t; messageCode:  int32; pLayerPrefix: cstring; pMessage: cstring; pUserData: pointer): VkBool32 {.cdecl.}
+  PFN_vkDebugUtilsMessengerCallbackEXT* = proc(messageSeverity: VkDebugUtilsMessageSeverityFlagBitsEXT, messageTypes: VkDebugUtilsMessageTypeFlagsEXT, pCallbackData: VkDebugUtilsMessengerCallbackDataEXT, userData: pointer): VkBool32 {.cdecl.}
+
+  VkOffset2D* = object
+    x*: int32
+    y*: int32
+
+  VkOffset3D* = object
+    x*: int32
+    y*: int32
+    z*: int32
+
+  VkExtent2D* = object
+    width*: uint32
+    height*: uint32
+
+  VkExtent3D* = object
+    width*: uint32
+    height*: uint32
+    depth*: uint32
+
+  VkViewport* = object
+    x*: float32
+    y*: float32
+    width*: float32
+    height*: float32
+    minDepth*: float32
+    maxDepth*: float32
+
+  VkRect2D* = object
+    offset*: VkOffset2D
+    extent*: VkExtent2D
+
+  VkClearRect* = object
+    rect*: VkRect2D
+    baseArrayLayer*: uint32
+    layerCount*: uint32
+
+  VkComponentMapping* = object
+    r*: VkComponentSwizzle
+    g*: VkComponentSwizzle
+    b*: VkComponentSwizzle
+    a*: VkComponentSwizzle
+
+  VkPhysicalDeviceProperties* = object
+    apiVersion*: uint32
+    driverVersion*: uint32
+    vendorID*: uint32
+    deviceID*: uint32
+    deviceType*: VkPhysicalDeviceType
+    deviceName*: array[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, char]
+    pipelineCacheUUID*: array[VK_UUID_SIZE, uint8]
+    limits*: VkPhysicalDeviceLimits
+    sparseProperties*: VkPhysicalDeviceSparseProperties
+
+  VkExtensionProperties* = object
+    extensionName*: array[VK_MAX_EXTENSION_NAME_SIZE, char]
+    specVersion*: uint32
+
+  VkLayerProperties* = object
+    layerName*: array[VK_MAX_EXTENSION_NAME_SIZE, char]
+    specVersion*: uint32
+    implementationVersion*: uint32
+    description*: array[VK_MAX_DESCRIPTION_SIZE, char]
+
+  VkApplicationInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pApplicationName*: cstring
+    applicationVersion*: uint32
+    pEngineName*: cstring
+    engineVersion*: uint32
+    apiVersion*: uint32
+
+  VkAllocationCallbacks* = object
+    pUserData*: pointer
+    pfnAllocation*: PFN_vkAllocationFunction
+    pfnReallocation*: PFN_vkReallocationFunction
+    pfnFree*: PFN_vkFreeFunction
+    pfnInternalAllocation*: PFN_vkInternalAllocationNotification
+    pfnInternalFree*: PFN_vkInternalFreeNotification
+
+  VkDeviceQueueCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDeviceQueueCreateFlags
+    queueFamilyIndex*: uint32
+    queueCount*: uint32
+    pQueuePriorities*: ptr float32
+
+  VkDeviceCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDeviceCreateFlags
+    queueCreateInfoCount*: uint32
+    pQueueCreateInfos*: ptr VkDeviceQueueCreateInfo
+    enabledLayerCount*: uint32
+    ppEnabledLayerNames*: cstringArray
+    enabledExtensionCount*: uint32
+    ppEnabledExtensionNames*: cstringArray
+    pEnabledFeatures*: ptr VkPhysicalDeviceFeatures
+
+  VkInstanceCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkInstanceCreateFlags
+    pApplicationInfo*: ptr VkApplicationInfo
+    enabledLayerCount*: uint32
+    ppEnabledLayerNames*: cstringArray
+    enabledExtensionCount*: uint32
+    ppEnabledExtensionNames*: cstringArray
+
+  VkQueueFamilyProperties* = object
+    queueFlags*: VkQueueFlags
+    queueCount*: uint32
+    timestampValidBits*: uint32
+    minImageTransferGranularity*: VkExtent3D
+
+  VkPhysicalDeviceMemoryProperties* = object
+    memoryTypeCount*: uint32
+    memoryTypes*: array[VK_MAX_MEMORY_TYPES, VkMemoryType]
+    memoryHeapCount*: uint32
+    memoryHeaps*: array[VK_MAX_MEMORY_HEAPS, VkMemoryHeap]
+
+  VkMemoryAllocateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    allocationSize*: VkDeviceSize
+    memoryTypeIndex*: uint32
+
+  VkMemoryRequirements* = object
+    size*: VkDeviceSize
+    alignment*: VkDeviceSize
+    memoryTypeBits*: uint32
+
+  VkSparseImageFormatProperties* = object
+    aspectMask*: VkImageAspectFlags
+    imageGranularity*: VkExtent3D
+    flags*: VkSparseImageFormatFlags
+
+  VkSparseImageMemoryRequirements* = object
+    formatProperties*: VkSparseImageFormatProperties
+    imageMipTailFirstLod*: uint32
+    imageMipTailSize*: VkDeviceSize
+    imageMipTailOffset*: VkDeviceSize
+    imageMipTailStride*: VkDeviceSize
+
+  VkMemoryType* = object
+    propertyFlags*: VkMemoryPropertyFlags
+    heapIndex*: uint32
+
+  VkMemoryHeap* = object
+    size*: VkDeviceSize
+    flags*: VkMemoryHeapFlags
+
+  VkMappedMemoryRange* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memory*: VkDeviceMemory
+    offset*: VkDeviceSize
+    size*: VkDeviceSize
+
+  VkFormatProperties* = object
+    linearTilingFeatures*: VkFormatFeatureFlags
+    optimalTilingFeatures*: VkFormatFeatureFlags
+    bufferFeatures*: VkFormatFeatureFlags
+
+  VkImageFormatProperties* = object
+    maxExtent*: VkExtent3D
+    maxMipLevels*: uint32
+    maxArrayLayers*: uint32
+    sampleCounts*: VkSampleCountFlags
+    maxResourceSize*: VkDeviceSize
+
+  VkDescriptorBufferInfo* = object
+    buffer*: VkBuffer
+    offset*: VkDeviceSize
+    range*: VkDeviceSize
+
+  VkDescriptorImageInfo* = object
+    sampler*: VkSampler
+    imageView*: VkImageView
+    imageLayout*: VkImageLayout
+
+  VkWriteDescriptorSet* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    dstSet*: VkDescriptorSet
+    dstBinding*: uint32
+    dstArrayElement*: uint32
+    descriptorCount*: uint32
+    descriptorType*: VkDescriptorType
+    pImageInfo*: ptr VkDescriptorImageInfo
+    pBufferInfo*: ptr ptr VkDescriptorBufferInfo
+    pTexelBufferView*: ptr VkBufferView
+
+  VkCopyDescriptorSet* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    srcSet*: VkDescriptorSet
+    srcBinding*: uint32
+    srcArrayElement*: uint32
+    dstSet*: VkDescriptorSet
+    dstBinding*: uint32
+    dstArrayElement*: uint32
+    descriptorCount*: uint32
+
+  VkBufferCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkBufferCreateFlags
+    size*: VkDeviceSize
+    usage*: VkBufferUsageFlags
+    sharingMode*: VkSharingMode
+    queueFamilyIndexCount*: uint32
+    pQueueFamilyIndices*: ptr uint32
+
+  VkBufferViewCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkBufferViewCreateFlags
+    buffer*: VkBuffer
+    format*: VkFormat
+    offset*: VkDeviceSize
+    range*: VkDeviceSize
+
+  VkImageSubresource* = object
+    aspectMask*: VkImageAspectFlags
+    mipLevel*: uint32
+    arrayLayer*: uint32
+
+  VkImageSubresourceLayers* = object
+    aspectMask*: VkImageAspectFlags
+    mipLevel*: uint32
+    baseArrayLayer*: uint32
+    layerCount*: uint32
+
+  VkImageSubresourceRange* = object
+    aspectMask*: VkImageAspectFlags
+    baseMipLevel*: uint32
+    levelCount*: uint32
+    baseArrayLayer*: uint32
+    layerCount*: uint32
+
+  VkMemoryBarrier* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    srcAccessMask*: VkAccessFlags
+    dstAccessMask*: VkAccessFlags
+
+  VkBufferMemoryBarrier* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    srcAccessMask*: VkAccessFlags
+    dstAccessMask*: VkAccessFlags
+    srcQueueFamilyIndex*: uint32
+    dstQueueFamilyIndex*: uint32
+    buffer*: VkBuffer
+    offset*: VkDeviceSize
+    size*: VkDeviceSize
+
+  VkImageMemoryBarrier* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    srcAccessMask*: VkAccessFlags
+    dstAccessMask*: VkAccessFlags
+    oldLayout*: VkImageLayout
+    newLayout*: VkImageLayout
+    srcQueueFamilyIndex*: uint32
+    dstQueueFamilyIndex*: uint32
+    image*: VkImage
+    subresourceRange*: VkImageSubresourceRange
+
+  VkImageCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkImageCreateFlags
+    imageType*: VkImageType
+    format*: VkFormat
+    extent*: VkExtent3D
+    mipLevels*: uint32
+    arrayLayers*: uint32
+    samples*: VkSampleCountFlagBits
+    tiling*: VkImageTiling
+    usage*: VkImageUsageFlags
+    sharingMode*: VkSharingMode
+    queueFamilyIndexCount*: uint32
+    pQueueFamilyIndices*: ptr uint32
+    initialLayout*: VkImageLayout
+
+  VkSubresourceLayout* = object
+    offset*: VkDeviceSize
+    size*: VkDeviceSize
+    rowPitch*: VkDeviceSize
+    arrayPitch*: VkDeviceSize
+    depthPitch*: VkDeviceSize
+
+  VkImageViewCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkImageViewCreateFlags
+    image*: VkImage
+    viewType*: VkImageViewType
+    format*: VkFormat
+    components*: VkComponentMapping
+    subresourceRange*: VkImageSubresourceRange
+
+  VkBufferCopy* = object
+    srcOffset*: VkDeviceSize
+    dstOffset*: VkDeviceSize
+    size*: VkDeviceSize
+
+  VkSparseMemoryBind* = object
+    resourceOffset*: VkDeviceSize
+    size*: VkDeviceSize
+    memory*: VkDeviceMemory
+    memoryOffset*: VkDeviceSize
+    flags*: VkSparseMemoryBindFlags
+
+  VkSparseImageMemoryBind* = object
+    subresource*: VkImageSubresource
+    offset*: VkOffset3D
+    extent*: VkExtent3D
+    memory*: VkDeviceMemory
+    memoryOffset*: VkDeviceSize
+    flags*: VkSparseMemoryBindFlags
+
+  VkSparseBufferMemoryBindInfo* = object
+    buffer*: VkBuffer
+    bindCount*: uint32
+    pBinds*: ptr VkSparseMemoryBind
+
+  VkSparseImageOpaqueMemoryBindInfo* = object
+    image*: VkImage
+    bindCount*: uint32
+    pBinds*: ptr VkSparseMemoryBind
+
+  VkSparseImageMemoryBindInfo* = object
+    image*: VkImage
+    bindCount*: uint32
+    pBinds*: ptr VkSparseImageMemoryBind
+
+  VkBindSparseInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    waitSemaphoreCount*: uint32
+    pWaitSemaphores*: ptr VkSemaphore
+    bufferBindCount*: uint32
+    pBufferBinds*: ptr VkSparseBufferMemoryBindInfo
+    imageOpaqueBindCount*: uint32
+    pImageOpaqueBinds*: ptr VkSparseImageOpaqueMemoryBindInfo
+    imageBindCount*: uint32
+    pImageBinds*: ptr VkSparseImageMemoryBindInfo
+    signalSemaphoreCount*: uint32
+    pSignalSemaphores*: ptr VkSemaphore
+
+  VkImageCopy* = object
+    srcSubresource*: VkImageSubresourceLayers
+    srcOffset*: VkOffset3D
+    dstSubresource*: VkImageSubresourceLayers
+    dstOffset*: VkOffset3D
+    extent*: VkExtent3D
+
+  VkImageBlit* = object
+    srcSubresource*: VkImageSubresourceLayers
+    srcOffsets*: array[2, VkOffset3D]
+    dstSubresource*: VkImageSubresourceLayers
+    dstOffsets*: array[2, VkOffset3D]
+
+  VkBufferImageCopy* = object
+    bufferOffset*: VkDeviceSize
+    bufferRowLength*: uint32
+    bufferImageHeight*: uint32
+    imageSubresource*: VkImageSubresourceLayers
+    imageOffset*: VkOffset3D
+    imageExtent*: VkExtent3D
+
+  VkImageResolve* = object
+    srcSubresource*: VkImageSubresourceLayers
+    srcOffset*: VkOffset3D
+    dstSubresource*: VkImageSubresourceLayers
+    dstOffset*: VkOffset3D
+    extent*: VkExtent3D
+
+  VkShaderModuleCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkShaderModuleCreateFlags
+    codeSize*: uint
+    pCode*: ptr uint32
+
+  VkDescriptorSetLayoutBinding* = object
+    binding*: uint32
+    descriptorType*: VkDescriptorType
+    descriptorCount*: uint32
+    stageFlags*: VkShaderStageFlags
+    pImmutableSamplers*: ptr VkSampler
+
+  VkDescriptorSetLayoutCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDescriptorSetLayoutCreateFlags
+    bindingCount*: uint32
+    pBindings*: ptr VkDescriptorSetLayoutBinding
+
+  VkDescriptorPoolSize* = object
+    `type`*: VkDescriptorType
+    descriptorCount*: uint32
+
+  VkDescriptorPoolCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDescriptorPoolCreateFlags
+    maxSets*: uint32
+    poolSizeCount*: uint32
+    pPoolSizes*: ptr VkDescriptorPoolSize
+
+  VkDescriptorSetAllocateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    descriptorPool*: VkDescriptorPool
+    descriptorSetCount*: uint32
+    pSetLayouts*: ptr VkDescriptorSetLayout
+
+  VkSpecializationMapEntry* = object
+    constantID*: uint32
+    offset*: uint32
+    size*: uint
+
+  VkSpecializationInfo* = object
+    mapEntryCount*: uint32
+    pMapEntries*: ptr VkSpecializationMapEntry
+    dataSize*: uint
+    pData*: pointer
+
+  VkPipelineShaderStageCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineShaderStageCreateFlags
+    stage*: VkShaderStageFlagBits
+    module*: VkShaderModule
+    pName*: cstring
+    pSpecializationInfo*: ptr VkSpecializationInfo
+
+  VkComputePipelineCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineCreateFlags
+    stage*: VkPipelineShaderStageCreateInfo
+    layout*: VkPipelineLayout
+    basePipelineHandle*: VkPipeline
+    basePipelineIndex*: int32
+
+  VkVertexInputBindingDescription* = object
+    binding*: uint32
+    stride*: uint32
+    inputRate*: VkVertexInputRate
+
+  VkVertexInputAttributeDescription* = object
+    location*: uint32
+    binding*: uint32
+    format*: VkFormat
+    offset*: uint32
+
+  VkPipelineVertexInputStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineVertexInputStateCreateFlags
+    vertexBindingDescriptionCount*: uint32
+    pVertexBindingDescriptions*: ptr VkVertexInputBindingDescription
+    vertexAttributeDescriptionCount*: uint32
+    pVertexAttributeDescriptions*: ptr VkVertexInputAttributeDescription
+
+  VkPipelineInputAssemblyStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineInputAssemblyStateCreateFlags
+    topology*: VkPrimitiveTopology
+    primitiveRestartEnable*: VkBool32
+
+  VkPipelineTessellationStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineTessellationStateCreateFlags
+    patchControlPoints*: uint32
+
+  VkPipelineViewportStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineViewportStateCreateFlags
+    viewportCount*: uint32
+    pViewports*: ptr VkViewport
+    scissorCount*: uint32
+    pScissors*: ptr VkRect2D
+
+  VkPipelineRasterizationStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineRasterizationStateCreateFlags
+    depthClampEnable*: VkBool32
+    rasterizerDiscardEnable*: VkBool32
+    polygonMode*: VkPolygonMode
+    cullMode*: VkCullModeFlags
+    frontFace*: VkFrontFace
+    depthBiasEnable*: VkBool32
+    depthBiasConstantFactor*: float32
+    depthBiasClamp*: float32
+    depthBiasSlopeFactor*: float32
+    lineWidth*: float32
+
+  VkPipelineMultisampleStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineMultisampleStateCreateFlags
+    rasterizationSamples*: VkSampleCountFlagBits
+    sampleShadingEnable*: VkBool32
+    minSampleShading*: float32
+    pSampleMask*: ptr VkSampleMask
+    alphaToCoverageEnable*: VkBool32
+    alphaToOneEnable*: VkBool32
+
+  VkPipelineColorBlendAttachmentState* = object
+    blendEnable*: VkBool32
+    srcColorBlendFactor*: VkBlendFactor
+    dstColorBlendFactor*: VkBlendFactor
+    colorBlendOp*: VkBlendOp
+    srcAlphaBlendFactor*: VkBlendFactor
+    dstAlphaBlendFactor*: VkBlendFactor
+    alphaBlendOp*: VkBlendOp
+    colorWriteMask*: VkColorComponentFlags
+
+  VkPipelineColorBlendStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineColorBlendStateCreateFlags
+    logicOpEnable*: VkBool32
+    logicOp*: VkLogicOp
+    attachmentCount*: uint32
+    pAttachments*: ptr VkPipelineColorBlendAttachmentState
+    blendConstants*: array[4, float32]
+
+  VkPipelineDynamicStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineDynamicStateCreateFlags
+    dynamicStateCount*: uint32
+    pDynamicStates*: ptr VkDynamicState
+
+  VkStencilOpState* = object
+    failOp*: VkStencilOp
+    passOp*: VkStencilOp
+    depthFailOp*: VkStencilOp
+    compareOp*: VkCompareOp
+    compareMask*: uint32
+    writeMask*: uint32
+    reference*: uint32
+
+  VkPipelineDepthStencilStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineDepthStencilStateCreateFlags
+    depthTestEnable*: VkBool32
+    depthWriteEnable*: VkBool32
+    depthCompareOp*: VkCompareOp
+    depthBoundsTestEnable*: VkBool32
+    stencilTestEnable*: VkBool32
+    front*: VkStencilOpState
+    back*: VkStencilOpState
+    minDepthBounds*: float32
+    maxDepthBounds*: float32
+
+  VkGraphicsPipelineCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineCreateFlags
+    stageCount*: uint32
+    pStages*: ptr VkPipelineShaderStageCreateInfo
+    pVertexInputState*: ptr VkPipelineVertexInputStateCreateInfo
+    pInputAssemblyState*: ptr VkPipelineInputAssemblyStateCreateInfo
+    pTessellationState*: ptr VkPipelineTessellationStateCreateInfo
+    pViewportState*: ptr VkPipelineViewportStateCreateInfo
+    pRasterizationState*: ptr VkPipelineRasterizationStateCreateInfo
+    pMultisampleState*: ptr VkPipelineMultisampleStateCreateInfo
+    pDepthStencilState*: ptr VkPipelineDepthStencilStateCreateInfo
+    pColorBlendState*: ptr VkPipelineColorBlendStateCreateInfo
+    pDynamicState*: ptr VkPipelineDynamicStateCreateInfo
+    layout*: VkPipelineLayout
+    renderPass*: VkRenderPass
+    subpass*: uint32
+    basePipelineHandle*: VkPipeline
+    basePipelineIndex*: int32
+
+  VkPipelineCacheCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineCacheCreateFlags
+    initialDataSize*: uint
+    pInitialData*: pointer
+
+  VkPushConstantRange* = object
+    stageFlags*: VkShaderStageFlags
+    offset*: uint32
+    size*: uint32
+
+  VkPipelineLayoutCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineLayoutCreateFlags
+    setLayoutCount*: uint32
+    pSetLayouts*: ptr VkDescriptorSetLayout
+    pushConstantRangeCount*: uint32
+    pPushConstantRanges*: ptr VkPushConstantRange
+
+  VkSamplerCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkSamplerCreateFlags
+    magFilter*: VkFilter
+    minFilter*: VkFilter
+    mipmapMode*: VkSamplerMipmapMode
+    addressModeU*: VkSamplerAddressMode
+    addressModeV*: VkSamplerAddressMode
+    addressModeW*: VkSamplerAddressMode
+    mipLodBias*: float32
+    anisotropyEnable*: VkBool32
+    maxAnisotropy*: float32
+    compareEnable*: VkBool32
+    compareOp*: VkCompareOp
+    minLod*: float32
+    maxLod*: float32
+    borderColor*: VkBorderColor
+    unnormalizedCoordinates*: VkBool32
+
+  VkCommandPoolCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkCommandPoolCreateFlags
+    queueFamilyIndex*: uint32
+
+  VkCommandBufferAllocateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    commandPool*: VkCommandPool
+    level*: VkCommandBufferLevel
+    commandBufferCount*: uint32
+
+  VkCommandBufferInheritanceInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    renderPass*: VkRenderPass
+    subpass*: uint32
+    framebuffer*: VkFramebuffer
+    occlusionQueryEnable*: VkBool32
+    queryFlags*: VkQueryControlFlags
+    pipelineStatistics*: VkQueryPipelineStatisticFlags
+
+  VkCommandBufferBeginInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkCommandBufferUsageFlags
+    pInheritanceInfo*: ptr VkCommandBufferInheritanceInfo
+
+  VkRenderPassBeginInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    renderPass*: VkRenderPass
+    framebuffer*: VkFramebuffer
+    renderArea*: VkRect2D
+    clearValueCount*: uint32
+    pClearValues*: ptr VkClearValue
+
+  VkClearColorValue* {.union.} = object
+    float32*: array[4, float32]
+    int32*: array[4, int32]
+    uint32*: array[4, uint32]
+
+  VkClearDepthStencilValue* = object
+    depth*: float32
+    stencil*: uint32
+
+  VkClearValue* {.union.} = object
+    color*: VkClearColorValue
+    depthStencil*: VkClearDepthStencilValue
+
+  VkClearAttachment* = object
+    aspectMask*: VkImageAspectFlags
+    colorAttachment*: uint32
+    clearValue*: VkClearValue
+
+  VkAttachmentDescription* = object
+    flags*: VkAttachmentDescriptionFlags
+    format*: VkFormat
+    samples*: VkSampleCountFlagBits
+    loadOp*: VkAttachmentLoadOp
+    storeOp*: VkAttachmentStoreOp
+    stencilLoadOp*: VkAttachmentLoadOp
+    stencilStoreOp*: VkAttachmentStoreOp
+    initialLayout*: VkImageLayout
+    finalLayout*: VkImageLayout
+
+  VkAttachmentReference* = object
+    attachment*: uint32
+    layout*: VkImageLayout
+
+  VkSubpassDescription* = object
+    flags*: VkSubpassDescriptionFlags
+    pipelineBindPoint*: VkPipelineBindPoint
+    inputAttachmentCount*: uint32
+    pInputAttachments*: ptr VkAttachmentReference
+    colorAttachmentCount*: uint32
+    pColorAttachments*: ptr VkAttachmentReference
+    pResolveAttachments*: ptr VkAttachmentReference
+    pDepthStencilAttachment*: ptr VkAttachmentReference
+    preserveAttachmentCount*: uint32
+    pPreserveAttachments*: ptr uint32
+
+  VkSubpassDependency* = object
+    srcSubpass*: uint32
+    dstSubpass*: uint32
+    srcStageMask*: VkPipelineStageFlags
+    dstStageMask*: VkPipelineStageFlags
+    srcAccessMask*: VkAccessFlags
+    dstAccessMask*: VkAccessFlags
+    dependencyFlags*: VkDependencyFlags
+
+  VkRenderPassCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkRenderPassCreateFlags
+    attachmentCount*: uint32
+    pAttachments*: ptr VkAttachmentDescription
+    subpassCount*: uint32
+    pSubpasses*: ptr VkSubpassDescription
+    dependencyCount*: uint32
+    pDependencies*: ptr VkSubpassDependency
+
+  VkEventCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkEventCreateFlags
+
+  VkFenceCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkFenceCreateFlags
+
+  VkPhysicalDeviceFeatures* = object
+    robustBufferAccess*: VkBool32
+    fullDrawIndexUint32*: VkBool32
+    imageCubeArray*: VkBool32
+    independentBlend*: VkBool32
+    geometryShader*: VkBool32
+    tessellationShader*: VkBool32
+    sampleRateShading*: VkBool32
+    dualSrcBlend*: VkBool32
+    logicOp*: VkBool32
+    multiDrawIndirect*: VkBool32
+    drawIndirectFirstInstance*: VkBool32
+    depthClamp*: VkBool32
+    depthBiasClamp*: VkBool32
+    fillModeNonSolid*: VkBool32
+    depthBounds*: VkBool32
+    wideLines*: VkBool32
+    largePoints*: VkBool32
+    alphaToOne*: VkBool32
+    multiViewport*: VkBool32
+    samplerAnisotropy*: VkBool32
+    textureCompressionETC2*: VkBool32
+    textureCompressionASTC_LDR*: VkBool32
+    textureCompressionBC*: VkBool32
+    occlusionQueryPrecise*: VkBool32
+    pipelineStatisticsQuery*: VkBool32
+    vertexPipelineStoresAndAtomics*: VkBool32
+    fragmentStoresAndAtomics*: VkBool32
+    shaderTessellationAndGeometryPointSize*: VkBool32
+    shaderImageGatherExtended*: VkBool32
+    shaderStorageImageExtendedFormats*: VkBool32
+    shaderStorageImageMultisample*: VkBool32
+    shaderStorageImageReadWithoutFormat*: VkBool32
+    shaderStorageImageWriteWithoutFormat*: VkBool32
+    shaderUniformBufferArrayDynamicIndexing*: VkBool32
+    shaderSampledImageArrayDynamicIndexing*: VkBool32
+    shaderStorageBufferArrayDynamicIndexing*: VkBool32
+    shaderStorageImageArrayDynamicIndexing*: VkBool32
+    shaderClipDistance*: VkBool32
+    shaderCullDistance*: VkBool32
+    shaderFloat64*: VkBool32
+    shaderInt64*: VkBool32
+    shaderInt16*: VkBool32
+    shaderResourceResidency*: VkBool32
+    shaderResourceMinLod*: VkBool32
+    sparseBinding*: VkBool32
+    sparseResidencyBuffer*: VkBool32
+    sparseResidencyImage2D*: VkBool32
+    sparseResidencyImage3D*: VkBool32
+    sparseResidency2Samples*: VkBool32
+    sparseResidency4Samples*: VkBool32
+    sparseResidency8Samples*: VkBool32
+    sparseResidency16Samples*: VkBool32
+    sparseResidencyAliased*: VkBool32
+    variableMultisampleRate*: VkBool32
+    inheritedQueries*: VkBool32
+
+  VkPhysicalDeviceSparseProperties* = object
+    residencyStandard2DBlockShape*: VkBool32
+    residencyStandard2DMultisampleBlockShape*: VkBool32
+    residencyStandard3DBlockShape*: VkBool32
+    residencyAlignedMipSize*: VkBool32
+    residencyNonResidentStrict*: VkBool32
+
+  VkPhysicalDeviceLimits* = object
+    maxImageDimension1D*: uint32
+    maxImageDimension2D*: uint32
+    maxImageDimension3D*: uint32
+    maxImageDimensionCube*: uint32
+    maxImageArrayLayers*: uint32
+    maxTexelBufferElements*: uint32
+    maxUniformBufferRange*: uint32
+    maxStorageBufferRange*: uint32
+    maxPushConstantsSize*: uint32
+    maxMemoryAllocationCount*: uint32
+    maxSamplerAllocationCount*: uint32
+    bufferImageGranularity*: VkDeviceSize
+    sparseAddressSpaceSize*: VkDeviceSize
+    maxBoundDescriptorSets*: uint32
+    maxPerStageDescriptorSamplers*: uint32
+    maxPerStageDescriptorUniformBuffers*: uint32
+    maxPerStageDescriptorStorageBuffers*: uint32
+    maxPerStageDescriptorSampledImages*: uint32
+    maxPerStageDescriptorStorageImages*: uint32
+    maxPerStageDescriptorInputAttachments*: uint32
+    maxPerStageResources*: uint32
+    maxDescriptorSetSamplers*: uint32
+    maxDescriptorSetUniformBuffers*: uint32
+    maxDescriptorSetUniformBuffersDynamic*: uint32
+    maxDescriptorSetStorageBuffers*: uint32
+    maxDescriptorSetStorageBuffersDynamic*: uint32
+    maxDescriptorSetSampledImages*: uint32
+    maxDescriptorSetStorageImages*: uint32
+    maxDescriptorSetInputAttachments*: uint32
+    maxVertexInputAttributes*: uint32
+    maxVertexInputBindings*: uint32
+    maxVertexInputAttributeOffset*: uint32
+    maxVertexInputBindingStride*: uint32
+    maxVertexOutputComponents*: uint32
+    maxTessellationGenerationLevel*: uint32
+    maxTessellationPatchSize*: uint32
+    maxTessellationControlPerVertexInputComponents*: uint32
+    maxTessellationControlPerVertexOutputComponents*: uint32
+    maxTessellationControlPerPatchOutputComponents*: uint32
+    maxTessellationControlTotalOutputComponents*: uint32
+    maxTessellationEvaluationInputComponents*: uint32
+    maxTessellationEvaluationOutputComponents*: uint32
+    maxGeometryShaderInvocations*: uint32
+    maxGeometryInputComponents*: uint32
+    maxGeometryOutputComponents*: uint32
+    maxGeometryOutputVertices*: uint32
+    maxGeometryTotalOutputComponents*: uint32
+    maxFragmentInputComponents*: uint32
+    maxFragmentOutputAttachments*: uint32
+    maxFragmentDualSrcAttachments*: uint32
+    maxFragmentCombinedOutputResources*: uint32
+    maxComputeSharedMemorySize*: uint32
+    maxComputeWorkGroupCount*: array[3, uint32]
+    maxComputeWorkGroupInvocations*: uint32
+    maxComputeWorkGroupSize*: array[3, uint32]
+    subPixelPrecisionBits*: uint32
+    subTexelPrecisionBits*: uint32
+    mipmapPrecisionBits*: uint32
+    maxDrawIndexedIndexValue*: uint32
+    maxDrawIndirectCount*: uint32
+    maxSamplerLodBias*: float32
+    maxSamplerAnisotropy*: float32
+    maxViewports*: uint32
+    maxViewportDimensions*: array[2, uint32]
+    viewportBoundsRange*: array[2, float32]
+    viewportSubPixelBits*: uint32
+    minMemoryMapAlignment*: uint
+    minTexelBufferOffsetAlignment*: VkDeviceSize
+    minUniformBufferOffsetAlignment*: VkDeviceSize
+    minStorageBufferOffsetAlignment*: VkDeviceSize
+    minTexelOffset*: int32
+    maxTexelOffset*: uint32
+    minTexelGatherOffset*: int32
+    maxTexelGatherOffset*: uint32
+    minInterpolationOffset*: float32
+    maxInterpolationOffset*: float32
+    subPixelInterpolationOffsetBits*: uint32
+    maxFramebufferWidth*: uint32
+    maxFramebufferHeight*: uint32
+    maxFramebufferLayers*: uint32
+    framebufferColorSampleCounts*: VkSampleCountFlags
+    framebufferDepthSampleCounts*: VkSampleCountFlags
+    framebufferStencilSampleCounts*: VkSampleCountFlags
+    framebufferNoAttachmentsSampleCounts*: VkSampleCountFlags
+    maxColorAttachments*: uint32
+    sampledImageColorSampleCounts*: VkSampleCountFlags
+    sampledImageIntegerSampleCounts*: VkSampleCountFlags
+    sampledImageDepthSampleCounts*: VkSampleCountFlags
+    sampledImageStencilSampleCounts*: VkSampleCountFlags
+    storageImageSampleCounts*: VkSampleCountFlags
+    maxSampleMaskWords*: uint32
+    timestampComputeAndGraphics*: VkBool32
+    timestampPeriod*: float32
+    maxClipDistances*: uint32
+    maxCullDistances*: uint32
+    maxCombinedClipAndCullDistances*: uint32
+    discreteQueuePriorities*: uint32
+    pointSizeRange*: array[2, float32]
+    lineWidthRange*: array[2, float32]
+    pointSizeGranularity*: float32
+    lineWidthGranularity*: float32
+    strictLines*: VkBool32
+    standardSampleLocations*: VkBool32
+    optimalBufferCopyOffsetAlignment*: VkDeviceSize
+    optimalBufferCopyRowPitchAlignment*: VkDeviceSize
+    nonCoherentAtomSize*: VkDeviceSize
+
+  VkSemaphoreCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkSemaphoreCreateFlags
+
+  VkQueryPoolCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkQueryPoolCreateFlags
+    queryType*: VkQueryType
+    queryCount*: uint32
+    pipelineStatistics*: VkQueryPipelineStatisticFlags
+
+  VkFramebufferCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkFramebufferCreateFlags
+    renderPass*: VkRenderPass
+    attachmentCount*: uint32
+    pAttachments*: ptr VkImageView
+    width*: uint32
+    height*: uint32
+    layers*: uint32
+
+  VkDrawIndirectCommand* = object
+    vertexCount*: uint32
+    instanceCount*: uint32
+    firstVertex*: uint32
+    firstInstance*: uint32
+
+  VkDrawIndexedIndirectCommand* = object
+    indexCount*: uint32
+    instanceCount*: uint32
+    firstIndex*: uint32
+    vertexOffset*: int32
+    firstInstance*: uint32
+
+  VkDispatchIndirectCommand* = object
+    x*: uint32
+    y*: uint32
+    z*: uint32
+
+  VkSubmitInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    waitSemaphoreCount*: uint32
+    pWaitSemaphores*: ptr VkSemaphore
+    pWaitDstStageMask*: ptr VkPipelineStageFlags
+    commandBufferCount*: uint32
+    pCommandBuffers*: ptr VkCommandBuffer
+    signalSemaphoreCount*: uint32
+    pSignalSemaphores*: ptr VkSemaphore
+
+  VkDisplayPropertiesKHR* = object
+    display*: VkDisplayKHR
+    displayName*: cstring
+    physicalDimensions*: VkExtent2D
+    physicalResolution*: VkExtent2D
+    supportedTransforms*: VkSurfaceTransformFlagsKHR
+    planeReorderPossible*: VkBool32
+    persistentContent*: VkBool32
+
+  VkDisplayPlanePropertiesKHR* = object
+    currentDisplay*: VkDisplayKHR
+    currentStackIndex*: uint32
+
+  VkDisplayModeParametersKHR* = object
+    visibleRegion*: VkExtent2D
+    refreshRate*: uint32
+
+  VkDisplayModePropertiesKHR* = object
+    displayMode*: VkDisplayModeKHR
+    parameters*: VkDisplayModeParametersKHR
+
+  VkDisplayModeCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDisplayModeCreateFlagsKHR
+    parameters*: VkDisplayModeParametersKHR
+
+  VkDisplayPlaneCapabilitiesKHR* = object
+    supportedAlpha*: VkDisplayPlaneAlphaFlagsKHR
+    minSrcPosition*: VkOffset2D
+    maxSrcPosition*: VkOffset2D
+    minSrcExtent*: VkExtent2D
+    maxSrcExtent*: VkExtent2D
+    minDstPosition*: VkOffset2D
+    maxDstPosition*: VkOffset2D
+    minDstExtent*: VkExtent2D
+    maxDstExtent*: VkExtent2D
+
+  VkDisplaySurfaceCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDisplaySurfaceCreateFlagsKHR
+    displayMode*: VkDisplayModeKHR
+    planeIndex*: uint32
+    planeStackIndex*: uint32
+    transform*: VkSurfaceTransformFlagBitsKHR
+    globalAlpha*: float32
+    alphaMode*: VkDisplayPlaneAlphaFlagBitsKHR
+    imageExtent*: VkExtent2D
+
+  VkDisplayPresentInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    srcRect*: VkRect2D
+    dstRect*: VkRect2D
+    persistent*: VkBool32
+
+  VkSurfaceCapabilitiesKHR* = object
+    minImageCount*: uint32
+    maxImageCount*: uint32
+    currentExtent*: VkExtent2D
+    minImageExtent*: VkExtent2D
+    maxImageExtent*: VkExtent2D
+    maxImageArrayLayers*: uint32
+    supportedTransforms*: VkSurfaceTransformFlagsKHR
+    currentTransform*: VkSurfaceTransformFlagBitsKHR
+    supportedCompositeAlpha*: VkCompositeAlphaFlagsKHR
+    supportedUsageFlags*: VkImageUsageFlags
+
+  VkAndroidSurfaceCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkAndroidSurfaceCreateFlagsKHR
+    window*: ptr ANativeWindow
+
+  VkViSurfaceCreateInfoNN* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkViSurfaceCreateFlagsNN
+    window*: pointer
+
+  VkWaylandSurfaceCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkWaylandSurfaceCreateFlagsKHR
+    display*: ptr wl_display
+    surface*: ptr wl_surface
+
+  VkWin32SurfaceCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkWin32SurfaceCreateFlagsKHR
+    hinstance*: HINSTANCE
+    hwnd*: HWND
+
+  VkXlibSurfaceCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkXlibSurfaceCreateFlagsKHR
+    dpy*: ptr Display
+    window*: Window
+
+  VkXcbSurfaceCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkXcbSurfaceCreateFlagsKHR
+    connection*: ptr xcb_connection_t
+    window*: xcb_window_t
+
+  VkDirectFBSurfaceCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDirectFBSurfaceCreateFlagsEXT
+    dfb*: ptr IDirectFB
+    surface*: ptr IDirectFBSurface
+
+  VkImagePipeSurfaceCreateInfoFUCHSIA* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkImagePipeSurfaceCreateFlagsFUCHSIA
+    imagePipeHandle*: zx_handle_t
+
+  VkStreamDescriptorSurfaceCreateInfoGGP* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkStreamDescriptorSurfaceCreateFlagsGGP
+    streamDescriptor*: GgpStreamDescriptor
+
+  VkSurfaceFormatKHR* = object
+    format*: VkFormat
+    colorSpace*: VkColorSpaceKHR
+
+  VkSwapchainCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkSwapchainCreateFlagsKHR
+    surface*: VkSurfaceKHR
+    minImageCount*: uint32
+    imageFormat*: VkFormat
+    imageColorSpace*: VkColorSpaceKHR
+    imageExtent*: VkExtent2D
+    imageArrayLayers*: uint32
+    imageUsage*: VkImageUsageFlags
+    imageSharingMode*: VkSharingMode
+    queueFamilyIndexCount*: uint32
+    pQueueFamilyIndices*: ptr uint32
+    preTransform*: VkSurfaceTransformFlagBitsKHR
+    compositeAlpha*: VkCompositeAlphaFlagBitsKHR
+    presentMode*: VkPresentModeKHR
+    clipped*: VkBool32
+    oldSwapchain*: VkSwapchainKHR
+
+  VkPresentInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    waitSemaphoreCount*: uint32
+    pWaitSemaphores*: ptr VkSemaphore
+    swapchainCount*: uint32
+    pSwapchains*: ptr VkSwapchainKHR
+    pImageIndices*: ptr uint32
+    pResults*: ptr VkResult
+
+  VkDebugReportCallbackCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDebugReportFlagsEXT
+    pfnCallback*: PFN_vkDebugReportCallbackEXT
+    pUserData*: pointer
+
+  VkValidationFlagsEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    disabledValidationCheckCount*: uint32
+    pDisabledValidationChecks*: ptr VkValidationCheckEXT
+
+  VkValidationFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    enabledValidationFeatureCount*: uint32
+    pEnabledValidationFeatures*: ptr VkValidationFeatureEnableEXT
+    disabledValidationFeatureCount*: uint32
+    pDisabledValidationFeatures*: ptr VkValidationFeatureDisableEXT
+
+  VkPipelineRasterizationStateRasterizationOrderAMD* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    rasterizationOrder*: VkRasterizationOrderAMD
+
+  VkDebugMarkerObjectNameInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    objectType*: VkDebugReportObjectTypeEXT
+    `object`*: uint64
+    pObjectName*: cstring
+
+  VkDebugMarkerObjectTagInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    objectType*: VkDebugReportObjectTypeEXT
+    `object`*: uint64
+    tagName*: uint64
+    tagSize*: uint
+    pTag*: pointer
+
+  VkDebugMarkerMarkerInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pMarkerName*: cstring
+    color*: array[4, float32]
+
+  VkDedicatedAllocationImageCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    dedicatedAllocation*: VkBool32
+
+  VkDedicatedAllocationBufferCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    dedicatedAllocation*: VkBool32
+
+  VkDedicatedAllocationMemoryAllocateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    image*: VkImage
+    buffer*: VkBuffer
+
+  VkExternalImageFormatPropertiesNV* = object
+    imageFormatProperties*: VkImageFormatProperties
+    externalMemoryFeatures*: VkExternalMemoryFeatureFlagsNV
+    exportFromImportedHandleTypes*: VkExternalMemoryHandleTypeFlagsNV
+    compatibleHandleTypes*: VkExternalMemoryHandleTypeFlagsNV
+
+  VkExternalMemoryImageCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleTypes*: VkExternalMemoryHandleTypeFlagsNV
+
+  VkExportMemoryAllocateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleTypes*: VkExternalMemoryHandleTypeFlagsNV
+
+  VkImportMemoryWin32HandleInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleType*: VkExternalMemoryHandleTypeFlagsNV
+    handle*: HANDLE
+
+  VkExportMemoryWin32HandleInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pAttributes*: ptr SECURITY_ATTRIBUTES
+    dwAccess*: DWORD
+
+  VkWin32KeyedMutexAcquireReleaseInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    acquireCount*: uint32
+    pAcquireSyncs*: ptr VkDeviceMemory
+    pAcquireKeys*: ptr uint64
+    pAcquireTimeoutMilliseconds*: ptr uint32
+    releaseCount*: uint32
+    pReleaseSyncs*: ptr VkDeviceMemory
+    pReleaseKeys*: ptr uint64
+
+  VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceGeneratedCommands*: VkBool32
+
+  VkDevicePrivateDataCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    privateDataSlotRequestCount*: uint32
+
+  VkPrivateDataSlotCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPrivateDataSlotCreateFlagsEXT
+
+  VkPhysicalDevicePrivateDataFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    privateData*: VkBool32
+
+  VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxGraphicsShaderGroupCount*: uint32
+    maxIndirectSequenceCount*: uint32
+    maxIndirectCommandsTokenCount*: uint32
+    maxIndirectCommandsStreamCount*: uint32
+    maxIndirectCommandsTokenOffset*: uint32
+    maxIndirectCommandsStreamStride*: uint32
+    minSequencesCountBufferOffsetAlignment*: uint32
+    minSequencesIndexBufferOffsetAlignment*: uint32
+    minIndirectCommandsBufferOffsetAlignment*: uint32
+
+  VkGraphicsShaderGroupCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    stageCount*: uint32
+    pStages*: ptr VkPipelineShaderStageCreateInfo
+    pVertexInputState*: ptr VkPipelineVertexInputStateCreateInfo
+    pTessellationState*: ptr VkPipelineTessellationStateCreateInfo
+
+  VkGraphicsPipelineShaderGroupsCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    groupCount*: uint32
+    pGroups*: ptr VkGraphicsShaderGroupCreateInfoNV
+    pipelineCount*: uint32
+    pPipelines*: ptr VkPipeline
+
+  VkBindShaderGroupIndirectCommandNV* = object
+    groupIndex*: uint32
+
+  VkBindIndexBufferIndirectCommandNV* = object
+    bufferAddress*: VkDeviceAddress
+    size*: uint32
+    indexType*: VkIndexType
+
+  VkBindVertexBufferIndirectCommandNV* = object
+    bufferAddress*: VkDeviceAddress
+    size*: uint32
+    stride*: uint32
+
+  VkSetStateFlagsIndirectCommandNV* = object
+    data*: uint32
+
+  VkIndirectCommandsStreamNV* = object
+    buffer*: VkBuffer
+    offset*: VkDeviceSize
+
+  VkIndirectCommandsLayoutTokenNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    tokenType*: VkIndirectCommandsTokenTypeNV
+    stream*: uint32
+    offset*: uint32
+    vertexBindingUnit*: uint32
+    vertexDynamicStride*: VkBool32
+    pushconstantPipelineLayout*: VkPipelineLayout
+    pushconstantShaderStageFlags*: VkShaderStageFlags
+    pushconstantOffset*: uint32
+    pushconstantSize*: uint32
+    indirectStateFlags*: VkIndirectStateFlagsNV
+    indexTypeCount*: uint32
+    pIndexTypes*: ptr VkIndexType
+    pIndexTypeValues*: ptr uint32
+
+  VkIndirectCommandsLayoutCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkIndirectCommandsLayoutUsageFlagsNV
+    pipelineBindPoint*: VkPipelineBindPoint
+    tokenCount*: uint32
+    pTokens*: ptr VkIndirectCommandsLayoutTokenNV
+    streamCount*: uint32
+    pStreamStrides*: ptr uint32
+
+  VkGeneratedCommandsInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pipelineBindPoint*: VkPipelineBindPoint
+    pipeline*: VkPipeline
+    indirectCommandsLayout*: VkIndirectCommandsLayoutNV
+    streamCount*: uint32
+    pStreams*: ptr VkIndirectCommandsStreamNV
+    sequencesCount*: uint32
+    preprocessBuffer*: VkBuffer
+    preprocessOffset*: VkDeviceSize
+    preprocessSize*: VkDeviceSize
+    sequencesCountBuffer*: VkBuffer
+    sequencesCountOffset*: VkDeviceSize
+    sequencesIndexBuffer*: VkBuffer
+    sequencesIndexOffset*: VkDeviceSize
+
+  VkGeneratedCommandsMemoryRequirementsInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pipelineBindPoint*: VkPipelineBindPoint
+    pipeline*: VkPipeline
+    indirectCommandsLayout*: VkIndirectCommandsLayoutNV
+    maxSequencesCount*: uint32
+
+  VkPhysicalDeviceFeatures2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    features*: VkPhysicalDeviceFeatures
+
+  VkPhysicalDeviceFeatures2KHR* = object
+
+  VkPhysicalDeviceProperties2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    properties*: VkPhysicalDeviceProperties
+
+  VkPhysicalDeviceProperties2KHR* = object
+
+  VkFormatProperties2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    formatProperties*: VkFormatProperties
+
+  VkFormatProperties2KHR* = object
+
+  VkImageFormatProperties2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    imageFormatProperties*: VkImageFormatProperties
+
+  VkImageFormatProperties2KHR* = object
+
+  VkPhysicalDeviceImageFormatInfo2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    format*: VkFormat
+    `type`*: VkImageType
+    tiling*: VkImageTiling
+    usage*: VkImageUsageFlags
+    flags*: VkImageCreateFlags
+
+  VkPhysicalDeviceImageFormatInfo2KHR* = object
+
+  VkQueueFamilyProperties2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    queueFamilyProperties*: VkQueueFamilyProperties
+
+  VkQueueFamilyProperties2KHR* = object
+
+  VkPhysicalDeviceMemoryProperties2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memoryProperties*: VkPhysicalDeviceMemoryProperties
+
+  VkPhysicalDeviceMemoryProperties2KHR* = object
+
+  VkSparseImageFormatProperties2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    properties*: VkSparseImageFormatProperties
+
+  VkSparseImageFormatProperties2KHR* = object
+
+  VkPhysicalDeviceSparseImageFormatInfo2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    format*: VkFormat
+    `type`*: VkImageType
+    samples*: VkSampleCountFlagBits
+    usage*: VkImageUsageFlags
+    tiling*: VkImageTiling
+
+  VkPhysicalDeviceSparseImageFormatInfo2KHR* = object
+
+  VkPhysicalDevicePushDescriptorPropertiesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxPushDescriptors*: uint32
+
+  VkConformanceVersion* = object
+    major*: uint8
+    minor*: uint8
+    subminor*: uint8
+    patch*: uint8
+
+  VkConformanceVersionKHR* = object
+
+  VkPhysicalDeviceDriverProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    driverID*: VkDriverId
+    driverName*: array[VK_MAX_DRIVER_NAME_SIZE, char]
+    driverInfo*: array[VK_MAX_DRIVER_INFO_SIZE, char]
+    conformanceVersion*: VkConformanceVersion
+
+  VkPhysicalDeviceDriverPropertiesKHR* = object
+
+  VkPresentRegionsKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    swapchainCount*: uint32
+    pRegions*: ptr VkPresentRegionKHR
+
+  VkPresentRegionKHR* = object
+    rectangleCount*: uint32
+    pRectangles*: ptr VkRectLayerKHR
+
+  VkRectLayerKHR* = object
+    offset*: VkOffset2D
+    extent*: VkExtent2D
+    layer*: uint32
+
+  VkPhysicalDeviceVariablePointersFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    variablePointersStorageBuffer*: VkBool32
+    variablePointers*: VkBool32
+
+  VkPhysicalDeviceVariablePointersFeaturesKHR* = object
+
+  VkPhysicalDeviceVariablePointerFeaturesKHR* = object
+
+  VkPhysicalDeviceVariablePointerFeatures* = object
+
+  VkExternalMemoryProperties* = object
+    externalMemoryFeatures*: VkExternalMemoryFeatureFlags
+    exportFromImportedHandleTypes*: VkExternalMemoryHandleTypeFlags
+    compatibleHandleTypes*: VkExternalMemoryHandleTypeFlags
+
+  VkExternalMemoryPropertiesKHR* = object
+
+  VkPhysicalDeviceExternalImageFormatInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleType*: VkExternalMemoryHandleTypeFlagBits
+
+  VkPhysicalDeviceExternalImageFormatInfoKHR* = object
+
+  VkExternalImageFormatProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    externalMemoryProperties*: VkExternalMemoryProperties
+
+  VkExternalImageFormatPropertiesKHR* = object
+
+  VkPhysicalDeviceExternalBufferInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkBufferCreateFlags
+    usage*: VkBufferUsageFlags
+    handleType*: VkExternalMemoryHandleTypeFlagBits
+
+  VkPhysicalDeviceExternalBufferInfoKHR* = object
+
+  VkExternalBufferProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    externalMemoryProperties*: VkExternalMemoryProperties
+
+  VkExternalBufferPropertiesKHR* = object
+
+  VkPhysicalDeviceIDProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceUUID*: array[VK_UUID_SIZE, uint8]
+    driverUUID*: array[VK_UUID_SIZE, uint8]
+    deviceLUID*: array[VK_LUID_SIZE, uint8]
+    deviceNodeMask*: uint32
+    deviceLUIDValid*: VkBool32
+
+  VkPhysicalDeviceIDPropertiesKHR* = object
+
+  VkExternalMemoryImageCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleTypes*: VkExternalMemoryHandleTypeFlags
+
+  VkExternalMemoryImageCreateInfoKHR* = object
+
+  VkExternalMemoryBufferCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleTypes*: VkExternalMemoryHandleTypeFlags
+
+  VkExternalMemoryBufferCreateInfoKHR* = object
+
+  VkExportMemoryAllocateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleTypes*: VkExternalMemoryHandleTypeFlags
+
+  VkExportMemoryAllocateInfoKHR* = object
+
+  VkImportMemoryWin32HandleInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleType*: VkExternalMemoryHandleTypeFlagBits
+    handle*: HANDLE
+    name*: LPCWSTR
+
+  VkExportMemoryWin32HandleInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pAttributes*: ptr SECURITY_ATTRIBUTES
+    dwAccess*: DWORD
+    name*: LPCWSTR
+
+  VkMemoryWin32HandlePropertiesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memoryTypeBits*: uint32
+
+  VkMemoryGetWin32HandleInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memory*: VkDeviceMemory
+    handleType*: VkExternalMemoryHandleTypeFlagBits
+
+  VkImportMemoryFdInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleType*: VkExternalMemoryHandleTypeFlagBits
+    fd*: int
+
+  VkMemoryFdPropertiesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memoryTypeBits*: uint32
+
+  VkMemoryGetFdInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memory*: VkDeviceMemory
+    handleType*: VkExternalMemoryHandleTypeFlagBits
+
+  VkWin32KeyedMutexAcquireReleaseInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    acquireCount*: uint32
+    pAcquireSyncs*: ptr VkDeviceMemory
+    pAcquireKeys*: ptr uint64
+    pAcquireTimeouts*: ptr uint32
+    releaseCount*: uint32
+    pReleaseSyncs*: ptr VkDeviceMemory
+    pReleaseKeys*: ptr uint64
+
+  VkPhysicalDeviceExternalSemaphoreInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleType*: VkExternalSemaphoreHandleTypeFlagBits
+
+  VkPhysicalDeviceExternalSemaphoreInfoKHR* = object
+
+  VkExternalSemaphoreProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    exportFromImportedHandleTypes*: VkExternalSemaphoreHandleTypeFlags
+    compatibleHandleTypes*: VkExternalSemaphoreHandleTypeFlags
+    externalSemaphoreFeatures*: VkExternalSemaphoreFeatureFlags
+
+  VkExternalSemaphorePropertiesKHR* = object
+
+  VkExportSemaphoreCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleTypes*: VkExternalSemaphoreHandleTypeFlags
+
+  VkExportSemaphoreCreateInfoKHR* = object
+
+  VkImportSemaphoreWin32HandleInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    semaphore*: VkSemaphore
+    flags*: VkSemaphoreImportFlags
+    handleType*: VkExternalSemaphoreHandleTypeFlagBits
+    handle*: HANDLE
+    name*: LPCWSTR
+
+  VkExportSemaphoreWin32HandleInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pAttributes*: ptr SECURITY_ATTRIBUTES
+    dwAccess*: DWORD
+    name*: LPCWSTR
+
+  VkD3D12FenceSubmitInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    waitSemaphoreValuesCount*: uint32
+    pWaitSemaphoreValues*: ptr uint64
+    signalSemaphoreValuesCount*: uint32
+    pSignalSemaphoreValues*: ptr uint64
+
+  VkSemaphoreGetWin32HandleInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    semaphore*: VkSemaphore
+    handleType*: VkExternalSemaphoreHandleTypeFlagBits
+
+  VkImportSemaphoreFdInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    semaphore*: VkSemaphore
+    flags*: VkSemaphoreImportFlags
+    handleType*: VkExternalSemaphoreHandleTypeFlagBits
+    fd*: int
+
+  VkSemaphoreGetFdInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    semaphore*: VkSemaphore
+    handleType*: VkExternalSemaphoreHandleTypeFlagBits
+
+  VkPhysicalDeviceExternalFenceInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleType*: VkExternalFenceHandleTypeFlagBits
+
+  VkPhysicalDeviceExternalFenceInfoKHR* = object
+
+  VkExternalFenceProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    exportFromImportedHandleTypes*: VkExternalFenceHandleTypeFlags
+    compatibleHandleTypes*: VkExternalFenceHandleTypeFlags
+    externalFenceFeatures*: VkExternalFenceFeatureFlags
+
+  VkExternalFencePropertiesKHR* = object
+
+  VkExportFenceCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleTypes*: VkExternalFenceHandleTypeFlags
+
+  VkExportFenceCreateInfoKHR* = object
+
+  VkImportFenceWin32HandleInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fence*: VkFence
+    flags*: VkFenceImportFlags
+    handleType*: VkExternalFenceHandleTypeFlagBits
+    handle*: HANDLE
+    name*: LPCWSTR
+
+  VkExportFenceWin32HandleInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pAttributes*: ptr SECURITY_ATTRIBUTES
+    dwAccess*: DWORD
+    name*: LPCWSTR
+
+  VkFenceGetWin32HandleInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fence*: VkFence
+    handleType*: VkExternalFenceHandleTypeFlagBits
+
+  VkImportFenceFdInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fence*: VkFence
+    flags*: VkFenceImportFlags
+    handleType*: VkExternalFenceHandleTypeFlagBits
+    fd*: int
+
+  VkFenceGetFdInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fence*: VkFence
+    handleType*: VkExternalFenceHandleTypeFlagBits
+
+  VkPhysicalDeviceMultiviewFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    multiview*: VkBool32
+    multiviewGeometryShader*: VkBool32
+    multiviewTessellationShader*: VkBool32
+
+  VkPhysicalDeviceMultiviewFeaturesKHR* = object
+
+  VkPhysicalDeviceMultiviewProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxMultiviewViewCount*: uint32
+    maxMultiviewInstanceIndex*: uint32
+
+  VkPhysicalDeviceMultiviewPropertiesKHR* = object
+
+  VkRenderPassMultiviewCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    subpassCount*: uint32
+    pViewMasks*: ptr uint32
+    dependencyCount*: uint32
+    pViewOffsets*: ptr int32
+    correlationMaskCount*: uint32
+    pCorrelationMasks*: ptr uint32
+
+  VkRenderPassMultiviewCreateInfoKHR* = object
+
+  VkSurfaceCapabilities2EXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    minImageCount*: uint32
+    maxImageCount*: uint32
+    currentExtent*: VkExtent2D
+    minImageExtent*: VkExtent2D
+    maxImageExtent*: VkExtent2D
+    maxImageArrayLayers*: uint32
+    supportedTransforms*: VkSurfaceTransformFlagsKHR
+    currentTransform*: VkSurfaceTransformFlagBitsKHR
+    supportedCompositeAlpha*: VkCompositeAlphaFlagsKHR
+    supportedUsageFlags*: VkImageUsageFlags
+    supportedSurfaceCounters*: VkSurfaceCounterFlagsEXT
+
+  VkDisplayPowerInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    powerState*: VkDisplayPowerStateEXT
+
+  VkDeviceEventInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceEvent*: VkDeviceEventTypeEXT
+
+  VkDisplayEventInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    displayEvent*: VkDisplayEventTypeEXT
+
+  VkSwapchainCounterCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    surfaceCounters*: VkSurfaceCounterFlagsEXT
+
+  VkPhysicalDeviceGroupProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    physicalDeviceCount*: uint32
+    physicalDevices*: array[VK_MAX_DEVICE_GROUP_SIZE, VkPhysicalDevice]
+    subsetAllocation*: VkBool32
+
+  VkPhysicalDeviceGroupPropertiesKHR* = object
+
+  VkMemoryAllocateFlagsInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkMemoryAllocateFlags
+    deviceMask*: uint32
+
+  VkMemoryAllocateFlagsInfoKHR* = object
+
+  VkBindBufferMemoryInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    buffer*: VkBuffer
+    memory*: VkDeviceMemory
+    memoryOffset*: VkDeviceSize
+
+  VkBindBufferMemoryInfoKHR* = object
+
+  VkBindBufferMemoryDeviceGroupInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceIndexCount*: uint32
+    pDeviceIndices*: ptr uint32
+
+  VkBindBufferMemoryDeviceGroupInfoKHR* = object
+
+  VkBindImageMemoryInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    image*: VkImage
+    memory*: VkDeviceMemory
+    memoryOffset*: VkDeviceSize
+
+  VkBindImageMemoryInfoKHR* = object
+
+  VkBindImageMemoryDeviceGroupInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceIndexCount*: uint32
+    pDeviceIndices*: ptr uint32
+    splitInstanceBindRegionCount*: uint32
+    pSplitInstanceBindRegions*: ptr VkRect2D
+
+  VkBindImageMemoryDeviceGroupInfoKHR* = object
+
+  VkDeviceGroupRenderPassBeginInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceMask*: uint32
+    deviceRenderAreaCount*: uint32
+    pDeviceRenderAreas*: ptr VkRect2D
+
+  VkDeviceGroupRenderPassBeginInfoKHR* = object
+
+  VkDeviceGroupCommandBufferBeginInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceMask*: uint32
+
+  VkDeviceGroupCommandBufferBeginInfoKHR* = object
+
+  VkDeviceGroupSubmitInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    waitSemaphoreCount*: uint32
+    pWaitSemaphoreDeviceIndices*: ptr uint32
+    commandBufferCount*: uint32
+    pCommandBufferDeviceMasks*: ptr uint32
+    signalSemaphoreCount*: uint32
+    pSignalSemaphoreDeviceIndices*: ptr uint32
+
+  VkDeviceGroupSubmitInfoKHR* = object
+
+  VkDeviceGroupBindSparseInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    resourceDeviceIndex*: uint32
+    memoryDeviceIndex*: uint32
+
+  VkDeviceGroupBindSparseInfoKHR* = object
+
+  VkDeviceGroupPresentCapabilitiesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    presentMask*: array[VK_MAX_DEVICE_GROUP_SIZE, uint32]
+    modes*: VkDeviceGroupPresentModeFlagsKHR
+
+  VkImageSwapchainCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    swapchain*: VkSwapchainKHR
+
+  VkBindImageMemorySwapchainInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    swapchain*: VkSwapchainKHR
+    imageIndex*: uint32
+
+  VkAcquireNextImageInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    swapchain*: VkSwapchainKHR
+    timeout*: uint64
+    semaphore*: VkSemaphore
+    fence*: VkFence
+    deviceMask*: uint32
+
+  VkDeviceGroupPresentInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    swapchainCount*: uint32
+    pDeviceMasks*: ptr uint32
+    mode*: VkDeviceGroupPresentModeFlagBitsKHR
+
+  VkDeviceGroupDeviceCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    physicalDeviceCount*: uint32
+    pPhysicalDevices*: ptr VkPhysicalDevice
+
+  VkDeviceGroupDeviceCreateInfoKHR* = object
+
+  VkDeviceGroupSwapchainCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    modes*: VkDeviceGroupPresentModeFlagsKHR
+
+  VkDescriptorUpdateTemplateEntry* = object
+    dstBinding*: uint32
+    dstArrayElement*: uint32
+    descriptorCount*: uint32
+    descriptorType*: VkDescriptorType
+    offset*: uint
+    stride*: uint
+
+  VkDescriptorUpdateTemplateEntryKHR* = object
+
+  VkDescriptorUpdateTemplateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDescriptorUpdateTemplateCreateFlags
+    descriptorUpdateEntryCount*: uint32
+    pDescriptorUpdateEntries*: ptr VkDescriptorUpdateTemplateEntry
+    templateType*: VkDescriptorUpdateTemplateType
+    descriptorSetLayout*: VkDescriptorSetLayout
+    pipelineBindPoint*: VkPipelineBindPoint
+    pipelineLayout*: VkPipelineLayout
+    set*: uint32
+
+  VkDescriptorUpdateTemplateCreateInfoKHR* = object
+
+  VkXYColorEXT* = object
+    x*: float32
+    y*: float32
+
+  VkHdrMetadataEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    displayPrimaryRed*: VkXYColorEXT
+    displayPrimaryGreen*: VkXYColorEXT
+    displayPrimaryBlue*: VkXYColorEXT
+    whitePoint*: VkXYColorEXT
+    maxLuminance*: float32
+    minLuminance*: float32
+    maxContentLightLevel*: float32
+    maxFrameAverageLightLevel*: float32
+
+  VkDisplayNativeHdrSurfaceCapabilitiesAMD* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    localDimmingSupport*: VkBool32
+
+  VkSwapchainDisplayNativeHdrCreateInfoAMD* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    localDimmingEnable*: VkBool32
+
+  VkRefreshCycleDurationGOOGLE* = object
+    refreshDuration*: uint64
+
+  VkPastPresentationTimingGOOGLE* = object
+    presentID*: uint32
+    desiredPresentTime*: uint64
+    actualPresentTime*: uint64
+    earliestPresentTime*: uint64
+    presentMargin*: uint64
+
+  VkPresentTimesInfoGOOGLE* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    swapchainCount*: uint32
+    pTimes*: ptr VkPresentTimeGOOGLE
+
+  VkPresentTimeGOOGLE* = object
+    presentID*: uint32
+    desiredPresentTime*: uint64
+
+  VkIOSSurfaceCreateInfoMVK* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkIOSSurfaceCreateFlagsMVK
+    pView*: pointer
+
+  VkMacOSSurfaceCreateInfoMVK* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkMacOSSurfaceCreateFlagsMVK
+    pView*: pointer
+
+  VkMetalSurfaceCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkMetalSurfaceCreateFlagsEXT
+    pLayer*: ptr CAMetalLayer
+
+  VkViewportWScalingNV* = object
+    xcoeff*: float32
+    ycoeff*: float32
+
+  VkPipelineViewportWScalingStateCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    viewportWScalingEnable*: VkBool32
+    viewportCount*: uint32
+    pViewportWScalings*: ptr VkViewportWScalingNV
+
+  VkViewportSwizzleNV* = object
+    x*: VkViewportCoordinateSwizzleNV
+    y*: VkViewportCoordinateSwizzleNV
+    z*: VkViewportCoordinateSwizzleNV
+    w*: VkViewportCoordinateSwizzleNV
+
+  VkPipelineViewportSwizzleStateCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineViewportSwizzleStateCreateFlagsNV
+    viewportCount*: uint32
+    pViewportSwizzles*: ptr VkViewportSwizzleNV
+
+  VkPhysicalDeviceDiscardRectanglePropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxDiscardRectangles*: uint32
+
+  VkPipelineDiscardRectangleStateCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineDiscardRectangleStateCreateFlagsEXT
+    discardRectangleMode*: VkDiscardRectangleModeEXT
+    discardRectangleCount*: uint32
+    pDiscardRectangles*: ptr VkRect2D
+
+  VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    perViewPositionAllComponents*: VkBool32
+
+  VkInputAttachmentAspectReference* = object
+    subpass*: uint32
+    inputAttachmentIndex*: uint32
+    aspectMask*: VkImageAspectFlags
+
+  VkInputAttachmentAspectReferenceKHR* = object
+
+  VkRenderPassInputAttachmentAspectCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    aspectReferenceCount*: uint32
+    pAspectReferences*: ptr VkInputAttachmentAspectReference
+
+  VkRenderPassInputAttachmentAspectCreateInfoKHR* = object
+
+  VkPhysicalDeviceSurfaceInfo2KHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    surface*: VkSurfaceKHR
+
+  VkSurfaceCapabilities2KHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    surfaceCapabilities*: VkSurfaceCapabilitiesKHR
+
+  VkSurfaceFormat2KHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    surfaceFormat*: VkSurfaceFormatKHR
+
+  VkDisplayProperties2KHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    displayProperties*: VkDisplayPropertiesKHR
+
+  VkDisplayPlaneProperties2KHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    displayPlaneProperties*: VkDisplayPlanePropertiesKHR
+
+  VkDisplayModeProperties2KHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    displayModeProperties*: VkDisplayModePropertiesKHR
+
+  VkDisplayPlaneInfo2KHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    mode*: VkDisplayModeKHR
+    planeIndex*: uint32
+
+  VkDisplayPlaneCapabilities2KHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    capabilities*: VkDisplayPlaneCapabilitiesKHR
+
+  VkSharedPresentSurfaceCapabilitiesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    sharedPresentSupportedUsageFlags*: VkImageUsageFlags
+
+  VkPhysicalDevice16BitStorageFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    storageBuffer16BitAccess*: VkBool32
+    uniformAndStorageBuffer16BitAccess*: VkBool32
+    storagePushConstant16*: VkBool32
+    storageInputOutput16*: VkBool32
+
+  VkPhysicalDevice16BitStorageFeaturesKHR* = object
+
+  VkPhysicalDeviceSubgroupProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    subgroupSize*: uint32
+    supportedStages*: VkShaderStageFlags
+    supportedOperations*: VkSubgroupFeatureFlags
+    quadOperationsInAllStages*: VkBool32
+
+  VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderSubgroupExtendedTypes*: VkBool32
+
+  VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR* = object
+
+  VkBufferMemoryRequirementsInfo2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    buffer*: VkBuffer
+
+  VkBufferMemoryRequirementsInfo2KHR* = object
+
+  VkImageMemoryRequirementsInfo2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    image*: VkImage
+
+  VkImageMemoryRequirementsInfo2KHR* = object
+
+  VkImageSparseMemoryRequirementsInfo2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    image*: VkImage
+
+  VkImageSparseMemoryRequirementsInfo2KHR* = object
+
+  VkMemoryRequirements2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memoryRequirements*: VkMemoryRequirements
+
+  VkMemoryRequirements2KHR* = object
+
+  VkSparseImageMemoryRequirements2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memoryRequirements*: VkSparseImageMemoryRequirements
+
+  VkSparseImageMemoryRequirements2KHR* = object
+
+  VkPhysicalDevicePointClippingProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pointClippingBehavior*: VkPointClippingBehavior
+
+  VkPhysicalDevicePointClippingPropertiesKHR* = object
+
+  VkMemoryDedicatedRequirements* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    prefersDedicatedAllocation*: VkBool32
+    requiresDedicatedAllocation*: VkBool32
+
+  VkMemoryDedicatedRequirementsKHR* = object
+
+  VkMemoryDedicatedAllocateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    image*: VkImage
+    buffer*: VkBuffer
+
+  VkMemoryDedicatedAllocateInfoKHR* = object
+
+  VkImageViewUsageCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    usage*: VkImageUsageFlags
+
+  VkImageViewUsageCreateInfoKHR* = object
+
+  VkPipelineTessellationDomainOriginStateCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    domainOrigin*: VkTessellationDomainOrigin
+
+  VkPipelineTessellationDomainOriginStateCreateInfoKHR* = object
+
+  VkSamplerYcbcrConversionInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    conversion*: VkSamplerYcbcrConversion
+
+  VkSamplerYcbcrConversionInfoKHR* = object
+
+  VkSamplerYcbcrConversionCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    format*: VkFormat
+    ycbcrModel*: VkSamplerYcbcrModelConversion
+    ycbcrRange*: VkSamplerYcbcrRange
+    components*: VkComponentMapping
+    xChromaOffset*: VkChromaLocation
+    yChromaOffset*: VkChromaLocation
+    chromaFilter*: VkFilter
+    forceExplicitReconstruction*: VkBool32
+
+  VkSamplerYcbcrConversionCreateInfoKHR* = object
+
+  VkBindImagePlaneMemoryInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    planeAspect*: VkImageAspectFlagBits
+
+  VkBindImagePlaneMemoryInfoKHR* = object
+
+  VkImagePlaneMemoryRequirementsInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    planeAspect*: VkImageAspectFlagBits
+
+  VkImagePlaneMemoryRequirementsInfoKHR* = object
+
+  VkPhysicalDeviceSamplerYcbcrConversionFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    samplerYcbcrConversion*: VkBool32
+
+  VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR* = object
+
+  VkSamplerYcbcrConversionImageFormatProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    combinedImageSamplerDescriptorCount*: uint32
+
+  VkSamplerYcbcrConversionImageFormatPropertiesKHR* = object
+
+  VkTextureLODGatherFormatPropertiesAMD* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    supportsTextureGatherLODBiasAMD*: VkBool32
+
+  VkConditionalRenderingBeginInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    buffer*: VkBuffer
+    offset*: VkDeviceSize
+    flags*: VkConditionalRenderingFlagsEXT
+
+  VkProtectedSubmitInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    protectedSubmit*: VkBool32
+
+  VkPhysicalDeviceProtectedMemoryFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    protectedMemory*: VkBool32
+
+  VkPhysicalDeviceProtectedMemoryProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    protectedNoFault*: VkBool32
+
+  VkDeviceQueueInfo2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDeviceQueueCreateFlags
+    queueFamilyIndex*: uint32
+    queueIndex*: uint32
+
+  VkPipelineCoverageToColorStateCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineCoverageToColorStateCreateFlagsNV
+    coverageToColorEnable*: VkBool32
+    coverageToColorLocation*: uint32
+
+  VkPhysicalDeviceSamplerFilterMinmaxProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    filterMinmaxSingleComponentFormats*: VkBool32
+    filterMinmaxImageComponentMapping*: VkBool32
+
+  VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT* = object
+
+  VkSampleLocationEXT* = object
+    x*: float32
+    y*: float32
+
+  VkSampleLocationsInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    sampleLocationsPerPixel*: VkSampleCountFlagBits
+    sampleLocationGridSize*: VkExtent2D
+    sampleLocationsCount*: uint32
+    pSampleLocations*: ptr VkSampleLocationEXT
+
+  VkAttachmentSampleLocationsEXT* = object
+    attachmentIndex*: uint32
+    sampleLocationsInfo*: VkSampleLocationsInfoEXT
+
+  VkSubpassSampleLocationsEXT* = object
+    subpassIndex*: uint32
+    sampleLocationsInfo*: VkSampleLocationsInfoEXT
+
+  VkRenderPassSampleLocationsBeginInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    attachmentInitialSampleLocationsCount*: uint32
+    pAttachmentInitialSampleLocations*: ptr VkAttachmentSampleLocationsEXT
+    postSubpassSampleLocationsCount*: uint32
+    pPostSubpassSampleLocations*: ptr VkSubpassSampleLocationsEXT
+
+  VkPipelineSampleLocationsStateCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    sampleLocationsEnable*: VkBool32
+    sampleLocationsInfo*: VkSampleLocationsInfoEXT
+
+  VkPhysicalDeviceSampleLocationsPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    sampleLocationSampleCounts*: VkSampleCountFlags
+    maxSampleLocationGridSize*: VkExtent2D
+    sampleLocationCoordinateRange*: array[2, float32]
+    sampleLocationSubPixelBits*: uint32
+    variableSampleLocations*: VkBool32
+
+  VkMultisamplePropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxSampleLocationGridSize*: VkExtent2D
+
+  VkSamplerReductionModeCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    reductionMode*: VkSamplerReductionMode
+
+  VkSamplerReductionModeCreateInfoEXT* = object
+
+  VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    advancedBlendCoherentOperations*: VkBool32
+
+  VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    advancedBlendMaxColorAttachments*: uint32
+    advancedBlendIndependentBlend*: VkBool32
+    advancedBlendNonPremultipliedSrcColor*: VkBool32
+    advancedBlendNonPremultipliedDstColor*: VkBool32
+    advancedBlendCorrelatedOverlap*: VkBool32
+    advancedBlendAllOperations*: VkBool32
+
+  VkPipelineColorBlendAdvancedStateCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    srcPremultiplied*: VkBool32
+    dstPremultiplied*: VkBool32
+    blendOverlap*: VkBlendOverlapEXT
+
+  VkPhysicalDeviceInlineUniformBlockFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    inlineUniformBlock*: VkBool32
+    descriptorBindingInlineUniformBlockUpdateAfterBind*: VkBool32
+
+  VkPhysicalDeviceInlineUniformBlockPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxInlineUniformBlockSize*: uint32
+    maxPerStageDescriptorInlineUniformBlocks*: uint32
+    maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks*: uint32
+    maxDescriptorSetInlineUniformBlocks*: uint32
+    maxDescriptorSetUpdateAfterBindInlineUniformBlocks*: uint32
+
+  VkWriteDescriptorSetInlineUniformBlockEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    dataSize*: uint32
+    pData*: pointer
+
+  VkDescriptorPoolInlineUniformBlockCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxInlineUniformBlockBindings*: uint32
+
+  VkPipelineCoverageModulationStateCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineCoverageModulationStateCreateFlagsNV
+    coverageModulationMode*: VkCoverageModulationModeNV
+    coverageModulationTableEnable*: VkBool32
+    coverageModulationTableCount*: uint32
+    pCoverageModulationTable*: ptr float32
+
+  VkImageFormatListCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    viewFormatCount*: uint32
+    pViewFormats*: ptr VkFormat
+
+  VkImageFormatListCreateInfoKHR* = object
+
+  VkValidationCacheCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkValidationCacheCreateFlagsEXT
+    initialDataSize*: uint
+    pInitialData*: pointer
+
+  VkShaderModuleValidationCacheCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    validationCache*: VkValidationCacheEXT
+
+  VkPhysicalDeviceMaintenance3Properties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxPerSetDescriptors*: uint32
+    maxMemoryAllocationSize*: VkDeviceSize
+
+  VkPhysicalDeviceMaintenance3PropertiesKHR* = object
+
+  VkDescriptorSetLayoutSupport* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    supported*: VkBool32
+
+  VkDescriptorSetLayoutSupportKHR* = object
+
+  VkPhysicalDeviceShaderDrawParametersFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderDrawParameters*: VkBool32
+
+  VkPhysicalDeviceShaderDrawParameterFeatures* = object
+
+  VkPhysicalDeviceShaderFloat16Int8Features* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderFloat16*: VkBool32
+    shaderInt8*: VkBool32
+
+  VkPhysicalDeviceShaderFloat16Int8FeaturesKHR* = object
+
+  VkPhysicalDeviceFloat16Int8FeaturesKHR* = object
+
+  VkPhysicalDeviceFloatControlsProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    denormBehaviorIndependence*: VkShaderFloatControlsIndependence
+    roundingModeIndependence*: VkShaderFloatControlsIndependence
+    shaderSignedZeroInfNanPreserveFloat16*: VkBool32
+    shaderSignedZeroInfNanPreserveFloat32*: VkBool32
+    shaderSignedZeroInfNanPreserveFloat64*: VkBool32
+    shaderDenormPreserveFloat16*: VkBool32
+    shaderDenormPreserveFloat32*: VkBool32
+    shaderDenormPreserveFloat64*: VkBool32
+    shaderDenormFlushToZeroFloat16*: VkBool32
+    shaderDenormFlushToZeroFloat32*: VkBool32
+    shaderDenormFlushToZeroFloat64*: VkBool32
+    shaderRoundingModeRTEFloat16*: VkBool32
+    shaderRoundingModeRTEFloat32*: VkBool32
+    shaderRoundingModeRTEFloat64*: VkBool32
+    shaderRoundingModeRTZFloat16*: VkBool32
+    shaderRoundingModeRTZFloat32*: VkBool32
+    shaderRoundingModeRTZFloat64*: VkBool32
+
+  VkPhysicalDeviceFloatControlsPropertiesKHR* = object
+
+  VkPhysicalDeviceHostQueryResetFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    hostQueryReset*: VkBool32
+
+  VkPhysicalDeviceHostQueryResetFeaturesEXT* = object
+
+  VkNativeBufferUsage2ANDROID* = object
+    consumer*: uint64
+    producer*: uint64
+
+  VkNativeBufferANDROID* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handle*: pointer
+    stride*: int
+    format*: int
+    usage*: int
+    usage2*: VkNativeBufferUsage2ANDROID
+
+  VkSwapchainImageCreateInfoANDROID* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    usage*: VkSwapchainImageUsageFlagsANDROID
+
+  VkPhysicalDevicePresentationPropertiesANDROID* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    sharedImage*: VkBool32
+
+  VkShaderResourceUsageAMD* = object
+    numUsedVgprs*: uint32
+    numUsedSgprs*: uint32
+    ldsSizePerLocalWorkGroup*: uint32
+    ldsUsageSizeInBytes*: uint
+    scratchMemUsageInBytes*: uint
+
+  VkShaderStatisticsInfoAMD* = object
+    shaderStageMask*: VkShaderStageFlags
+    resourceUsage*: VkShaderResourceUsageAMD
+    numPhysicalVgprs*: uint32
+    numPhysicalSgprs*: uint32
+    numAvailableVgprs*: uint32
+    numAvailableSgprs*: uint32
+    computeWorkGroupSize*: array[3, uint32]
+
+  VkDeviceQueueGlobalPriorityCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    globalPriority*: VkQueueGlobalPriorityEXT
+
+  VkDebugUtilsObjectNameInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    objectType*: VkObjectType
+    objectHandle*: uint64
+    pObjectName*: cstring
+
+  VkDebugUtilsObjectTagInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    objectType*: VkObjectType
+    objectHandle*: uint64
+    tagName*: uint64
+    tagSize*: uint
+    pTag*: pointer
+
+  VkDebugUtilsLabelEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pLabelName*: cstring
+    color*: array[4, float32]
+
+  VkDebugUtilsMessengerCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDebugUtilsMessengerCreateFlagsEXT
+    messageSeverity*: VkDebugUtilsMessageSeverityFlagsEXT
+    messageType*: VkDebugUtilsMessageTypeFlagsEXT
+    pfnUserCallback*: PFN_vkDebugUtilsMessengerCallbackEXT
+    pUserData*: pointer
+
+  VkDebugUtilsMessengerCallbackDataEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDebugUtilsMessengerCallbackDataFlagsEXT
+    pMessageIdName*: cstring
+    messageIdNumber*: int32
+    pMessage*: cstring
+    queueLabelCount*: uint32
+    pQueueLabels*: ptr VkDebugUtilsLabelEXT
+    cmdBufLabelCount*: uint32
+    pCmdBufLabels*: ptr VkDebugUtilsLabelEXT
+    objectCount*: uint32
+    pObjects*: ptr VkDebugUtilsObjectNameInfoEXT
+
+  VkImportMemoryHostPointerInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    handleType*: VkExternalMemoryHandleTypeFlagBits
+    pHostPointer*: pointer
+
+  VkMemoryHostPointerPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memoryTypeBits*: uint32
+
+  VkPhysicalDeviceExternalMemoryHostPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    minImportedHostPointerAlignment*: VkDeviceSize
+
+  VkPhysicalDeviceConservativeRasterizationPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    primitiveOverestimationSize*: float32
+    maxExtraPrimitiveOverestimationSize*: float32
+    extraPrimitiveOverestimationSizeGranularity*: float32
+    primitiveUnderestimation*: VkBool32
+    conservativePointAndLineRasterization*: VkBool32
+    degenerateTrianglesRasterized*: VkBool32
+    degenerateLinesRasterized*: VkBool32
+    fullyCoveredFragmentShaderInputVariable*: VkBool32
+    conservativeRasterizationPostDepthCoverage*: VkBool32
+
+  VkCalibratedTimestampInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    timeDomain*: VkTimeDomainEXT
+
+  VkPhysicalDeviceShaderCorePropertiesAMD* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderEngineCount*: uint32
+    shaderArraysPerEngineCount*: uint32
+    computeUnitsPerShaderArray*: uint32
+    simdPerComputeUnit*: uint32
+    wavefrontsPerSimd*: uint32
+    wavefrontSize*: uint32
+    sgprsPerSimd*: uint32
+    minSgprAllocation*: uint32
+    maxSgprAllocation*: uint32
+    sgprAllocationGranularity*: uint32
+    vgprsPerSimd*: uint32
+    minVgprAllocation*: uint32
+    maxVgprAllocation*: uint32
+    vgprAllocationGranularity*: uint32
+
+  VkPhysicalDeviceShaderCoreProperties2AMD* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderCoreFeatures*: VkShaderCorePropertiesFlagsAMD
+    activeComputeUnitCount*: uint32
+
+  VkPipelineRasterizationConservativeStateCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineRasterizationConservativeStateCreateFlagsEXT
+    conservativeRasterizationMode*: VkConservativeRasterizationModeEXT
+    extraPrimitiveOverestimationSize*: float32
+
+  VkPhysicalDeviceDescriptorIndexingFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderInputAttachmentArrayDynamicIndexing*: VkBool32
+    shaderUniformTexelBufferArrayDynamicIndexing*: VkBool32
+    shaderStorageTexelBufferArrayDynamicIndexing*: VkBool32
+    shaderUniformBufferArrayNonUniformIndexing*: VkBool32
+    shaderSampledImageArrayNonUniformIndexing*: VkBool32
+    shaderStorageBufferArrayNonUniformIndexing*: VkBool32
+    shaderStorageImageArrayNonUniformIndexing*: VkBool32
+    shaderInputAttachmentArrayNonUniformIndexing*: VkBool32
+    shaderUniformTexelBufferArrayNonUniformIndexing*: VkBool32
+    shaderStorageTexelBufferArrayNonUniformIndexing*: VkBool32
+    descriptorBindingUniformBufferUpdateAfterBind*: VkBool32
+    descriptorBindingSampledImageUpdateAfterBind*: VkBool32
+    descriptorBindingStorageImageUpdateAfterBind*: VkBool32
+    descriptorBindingStorageBufferUpdateAfterBind*: VkBool32
+    descriptorBindingUniformTexelBufferUpdateAfterBind*: VkBool32
+    descriptorBindingStorageTexelBufferUpdateAfterBind*: VkBool32
+    descriptorBindingUpdateUnusedWhilePending*: VkBool32
+    descriptorBindingPartiallyBound*: VkBool32
+    descriptorBindingVariableDescriptorCount*: VkBool32
+    runtimeDescriptorArray*: VkBool32
+
+  VkPhysicalDeviceDescriptorIndexingFeaturesEXT* = object
+
+  VkPhysicalDeviceDescriptorIndexingProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxUpdateAfterBindDescriptorsInAllPools*: uint32
+    shaderUniformBufferArrayNonUniformIndexingNative*: VkBool32
+    shaderSampledImageArrayNonUniformIndexingNative*: VkBool32
+    shaderStorageBufferArrayNonUniformIndexingNative*: VkBool32
+    shaderStorageImageArrayNonUniformIndexingNative*: VkBool32
+    shaderInputAttachmentArrayNonUniformIndexingNative*: VkBool32
+    robustBufferAccessUpdateAfterBind*: VkBool32
+    quadDivergentImplicitLod*: VkBool32
+    maxPerStageDescriptorUpdateAfterBindSamplers*: uint32
+    maxPerStageDescriptorUpdateAfterBindUniformBuffers*: uint32
+    maxPerStageDescriptorUpdateAfterBindStorageBuffers*: uint32
+    maxPerStageDescriptorUpdateAfterBindSampledImages*: uint32
+    maxPerStageDescriptorUpdateAfterBindStorageImages*: uint32
+    maxPerStageDescriptorUpdateAfterBindInputAttachments*: uint32
+    maxPerStageUpdateAfterBindResources*: uint32
+    maxDescriptorSetUpdateAfterBindSamplers*: uint32
+    maxDescriptorSetUpdateAfterBindUniformBuffers*: uint32
+    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic*: uint32
+    maxDescriptorSetUpdateAfterBindStorageBuffers*: uint32
+    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic*: uint32
+    maxDescriptorSetUpdateAfterBindSampledImages*: uint32
+    maxDescriptorSetUpdateAfterBindStorageImages*: uint32
+    maxDescriptorSetUpdateAfterBindInputAttachments*: uint32
+
+  VkPhysicalDeviceDescriptorIndexingPropertiesEXT* = object
+
+  VkDescriptorSetLayoutBindingFlagsCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    bindingCount*: uint32
+    pBindingFlags*: ptr VkDescriptorBindingFlags
+
+  VkDescriptorSetLayoutBindingFlagsCreateInfoEXT* = object
+
+  VkDescriptorSetVariableDescriptorCountAllocateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    descriptorSetCount*: uint32
+    pDescriptorCounts*: ptr uint32
+
+  VkDescriptorSetVariableDescriptorCountAllocateInfoEXT* = object
+
+  VkDescriptorSetVariableDescriptorCountLayoutSupport* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxVariableDescriptorCount*: uint32
+
+  VkDescriptorSetVariableDescriptorCountLayoutSupportEXT* = object
+
+  VkAttachmentDescription2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkAttachmentDescriptionFlags
+    format*: VkFormat
+    samples*: VkSampleCountFlagBits
+    loadOp*: VkAttachmentLoadOp
+    storeOp*: VkAttachmentStoreOp
+    stencilLoadOp*: VkAttachmentLoadOp
+    stencilStoreOp*: VkAttachmentStoreOp
+    initialLayout*: VkImageLayout
+    finalLayout*: VkImageLayout
+
+  VkAttachmentDescription2KHR* = object
+
+  VkAttachmentReference2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    attachment*: uint32
+    layout*: VkImageLayout
+    aspectMask*: VkImageAspectFlags
+
+  VkAttachmentReference2KHR* = object
+
+  VkSubpassDescription2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkSubpassDescriptionFlags
+    pipelineBindPoint*: VkPipelineBindPoint
+    viewMask*: uint32
+    inputAttachmentCount*: uint32
+    pInputAttachments*: ptr VkAttachmentReference2
+    colorAttachmentCount*: uint32
+    pColorAttachments*: ptr VkAttachmentReference2
+    pResolveAttachments*: ptr VkAttachmentReference2
+    pDepthStencilAttachment*: ptr VkAttachmentReference2
+    preserveAttachmentCount*: uint32
+    pPreserveAttachments*: ptr uint32
+
+  VkSubpassDescription2KHR* = object
+
+  VkSubpassDependency2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    srcSubpass*: uint32
+    dstSubpass*: uint32
+    srcStageMask*: VkPipelineStageFlags
+    dstStageMask*: VkPipelineStageFlags
+    srcAccessMask*: VkAccessFlags
+    dstAccessMask*: VkAccessFlags
+    dependencyFlags*: VkDependencyFlags
+    viewOffset*: int32
+
+  VkSubpassDependency2KHR* = object
+
+  VkRenderPassCreateInfo2* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkRenderPassCreateFlags
+    attachmentCount*: uint32
+    pAttachments*: ptr VkAttachmentDescription2
+    subpassCount*: uint32
+    pSubpasses*: ptr VkSubpassDescription2
+    dependencyCount*: uint32
+    pDependencies*: ptr VkSubpassDependency2
+    correlatedViewMaskCount*: uint32
+    pCorrelatedViewMasks*: ptr uint32
+
+  VkRenderPassCreateInfo2KHR* = object
+
+  VkSubpassBeginInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    contents*: VkSubpassContents
+
+  VkSubpassBeginInfoKHR* = object
+
+  VkSubpassEndInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+
+  VkSubpassEndInfoKHR* = object
+
+  VkPhysicalDeviceTimelineSemaphoreFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    timelineSemaphore*: VkBool32
+
+  VkPhysicalDeviceTimelineSemaphoreFeaturesKHR* = object
+
+  VkPhysicalDeviceTimelineSemaphoreProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxTimelineSemaphoreValueDifference*: uint64
+
+  VkPhysicalDeviceTimelineSemaphorePropertiesKHR* = object
+
+  VkSemaphoreTypeCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    semaphoreType*: VkSemaphoreType
+    initialValue*: uint64
+
+  VkSemaphoreTypeCreateInfoKHR* = object
+
+  VkTimelineSemaphoreSubmitInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    waitSemaphoreValueCount*: uint32
+    pWaitSemaphoreValues*: ptr uint64
+    signalSemaphoreValueCount*: uint32
+    pSignalSemaphoreValues*: ptr uint64
+
+  VkTimelineSemaphoreSubmitInfoKHR* = object
+
+  VkSemaphoreWaitInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkSemaphoreWaitFlags
+    semaphoreCount*: uint32
+    pSemaphores*: ptr VkSemaphore
+    pValues*: ptr uint64
+
+  VkSemaphoreWaitInfoKHR* = object
+
+  VkSemaphoreSignalInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    semaphore*: VkSemaphore
+    value*: uint64
+
+  VkSemaphoreSignalInfoKHR* = object
+
+  VkVertexInputBindingDivisorDescriptionEXT* = object
+    binding*: uint32
+    divisor*: uint32
+
+  VkPipelineVertexInputDivisorStateCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    vertexBindingDivisorCount*: uint32
+    pVertexBindingDivisors*: ptr VkVertexInputBindingDivisorDescriptionEXT
+
+  VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxVertexAttribDivisor*: uint32
+
+  VkPhysicalDevicePCIBusInfoPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pciDomain*: uint32
+    pciBus*: uint32
+    pciDevice*: uint32
+    pciFunction*: uint32
+
+  VkImportAndroidHardwareBufferInfoANDROID* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    buffer*: ptr AHardwareBuffer
+
+  VkAndroidHardwareBufferUsageANDROID* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    androidHardwareBufferUsage*: uint64
+
+  VkAndroidHardwareBufferPropertiesANDROID* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    allocationSize*: VkDeviceSize
+    memoryTypeBits*: uint32
+
+  VkMemoryGetAndroidHardwareBufferInfoANDROID* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memory*: VkDeviceMemory
+
+  VkAndroidHardwareBufferFormatPropertiesANDROID* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    format*: VkFormat
+    externalFormat*: uint64
+    formatFeatures*: VkFormatFeatureFlags
+    samplerYcbcrConversionComponents*: VkComponentMapping
+    suggestedYcbcrModel*: VkSamplerYcbcrModelConversion
+    suggestedYcbcrRange*: VkSamplerYcbcrRange
+    suggestedXChromaOffset*: VkChromaLocation
+    suggestedYChromaOffset*: VkChromaLocation
+
+  VkCommandBufferInheritanceConditionalRenderingInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    conditionalRenderingEnable*: VkBool32
+
+  VkExternalFormatANDROID* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    externalFormat*: uint64
+
+  VkPhysicalDevice8BitStorageFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    storageBuffer8BitAccess*: VkBool32
+    uniformAndStorageBuffer8BitAccess*: VkBool32
+    storagePushConstant8*: VkBool32
+
+  VkPhysicalDevice8BitStorageFeaturesKHR* = object
+
+  VkPhysicalDeviceConditionalRenderingFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    conditionalRendering*: VkBool32
+    inheritedConditionalRendering*: VkBool32
+
+  VkPhysicalDeviceVulkanMemoryModelFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    vulkanMemoryModel*: VkBool32
+    vulkanMemoryModelDeviceScope*: VkBool32
+    vulkanMemoryModelAvailabilityVisibilityChains*: VkBool32
+
+  VkPhysicalDeviceVulkanMemoryModelFeaturesKHR* = object
+
+  VkPhysicalDeviceShaderAtomicInt64Features* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderBufferInt64Atomics*: VkBool32
+    shaderSharedInt64Atomics*: VkBool32
+
+  VkPhysicalDeviceShaderAtomicInt64FeaturesKHR* = object
+
+  VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderBufferFloat32Atomics*: VkBool32
+    shaderBufferFloat32AtomicAdd*: VkBool32
+    shaderBufferFloat64Atomics*: VkBool32
+    shaderBufferFloat64AtomicAdd*: VkBool32
+    shaderSharedFloat32Atomics*: VkBool32
+    shaderSharedFloat32AtomicAdd*: VkBool32
+    shaderSharedFloat64Atomics*: VkBool32
+    shaderSharedFloat64AtomicAdd*: VkBool32
+    shaderImageFloat32Atomics*: VkBool32
+    shaderImageFloat32AtomicAdd*: VkBool32
+    sparseImageFloat32Atomics*: VkBool32
+    sparseImageFloat32AtomicAdd*: VkBool32
+
+  VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    vertexAttributeInstanceRateDivisor*: VkBool32
+    vertexAttributeInstanceRateZeroDivisor*: VkBool32
+
+  VkQueueFamilyCheckpointPropertiesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    checkpointExecutionStageMask*: VkPipelineStageFlags
+
+  VkCheckpointDataNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    stage*: VkPipelineStageFlagBits
+    pCheckpointMarker*: pointer
+
+  VkPhysicalDeviceDepthStencilResolveProperties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    supportedDepthResolveModes*: VkResolveModeFlags
+    supportedStencilResolveModes*: VkResolveModeFlags
+    independentResolveNone*: VkBool32
+    independentResolve*: VkBool32
+
+  VkPhysicalDeviceDepthStencilResolvePropertiesKHR* = object
+
+  VkSubpassDescriptionDepthStencilResolve* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    depthResolveMode*: VkResolveModeFlagBits
+    stencilResolveMode*: VkResolveModeFlagBits
+    pDepthStencilResolveAttachment*: ptr VkAttachmentReference2
+
+  VkSubpassDescriptionDepthStencilResolveKHR* = object
+
+  VkImageViewASTCDecodeModeEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    decodeMode*: VkFormat
+
+  VkPhysicalDeviceASTCDecodeFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    decodeModeSharedExponent*: VkBool32
+
+  VkPhysicalDeviceTransformFeedbackFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    transformFeedback*: VkBool32
+    geometryStreams*: VkBool32
+
+  VkPhysicalDeviceTransformFeedbackPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxTransformFeedbackStreams*: uint32
+    maxTransformFeedbackBuffers*: uint32
+    maxTransformFeedbackBufferSize*: VkDeviceSize
+    maxTransformFeedbackStreamDataSize*: uint32
+    maxTransformFeedbackBufferDataSize*: uint32
+    maxTransformFeedbackBufferDataStride*: uint32
+    transformFeedbackQueries*: VkBool32
+    transformFeedbackStreamsLinesTriangles*: VkBool32
+    transformFeedbackRasterizationStreamSelect*: VkBool32
+    transformFeedbackDraw*: VkBool32
+
+  VkPipelineRasterizationStateStreamCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineRasterizationStateStreamCreateFlagsEXT
+    rasterizationStream*: uint32
+
+  VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    representativeFragmentTest*: VkBool32
+
+  VkPipelineRepresentativeFragmentTestStateCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    representativeFragmentTestEnable*: VkBool32
+
+  VkPhysicalDeviceExclusiveScissorFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    exclusiveScissor*: VkBool32
+
+  VkPipelineViewportExclusiveScissorStateCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    exclusiveScissorCount*: uint32
+    pExclusiveScissors*: ptr VkRect2D
+
+  VkPhysicalDeviceCornerSampledImageFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    cornerSampledImage*: VkBool32
+
+  VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    computeDerivativeGroupQuads*: VkBool32
+    computeDerivativeGroupLinear*: VkBool32
+
+  VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fragmentShaderBarycentric*: VkBool32
+
+  VkPhysicalDeviceShaderImageFootprintFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    imageFootprint*: VkBool32
+
+  VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    dedicatedAllocationImageAliasing*: VkBool32
+
+  VkShadingRatePaletteNV* = object
+    shadingRatePaletteEntryCount*: uint32
+    pShadingRatePaletteEntries*: ptr VkShadingRatePaletteEntryNV
+
+  VkPipelineViewportShadingRateImageStateCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shadingRateImageEnable*: VkBool32
+    viewportCount*: uint32
+    pShadingRatePalettes*: ptr VkShadingRatePaletteNV
+
+  VkPhysicalDeviceShadingRateImageFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shadingRateImage*: VkBool32
+    shadingRateCoarseSampleOrder*: VkBool32
+
+  VkPhysicalDeviceShadingRateImagePropertiesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shadingRateTexelSize*: VkExtent2D
+    shadingRatePaletteSize*: uint32
+    shadingRateMaxCoarseSamples*: uint32
+
+  VkCoarseSampleLocationNV* = object
+    pixelX*: uint32
+    pixelY*: uint32
+    sample*: uint32
+
+  VkCoarseSampleOrderCustomNV* = object
+    shadingRate*: VkShadingRatePaletteEntryNV
+    sampleCount*: uint32
+    sampleLocationCount*: uint32
+    pSampleLocations*: ptr VkCoarseSampleLocationNV
+
+  VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    sampleOrderType*: VkCoarseSampleOrderTypeNV
+    customSampleOrderCount*: uint32
+    pCustomSampleOrders*: ptr VkCoarseSampleOrderCustomNV
+
+  VkPhysicalDeviceMeshShaderFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    taskShader*: VkBool32
+    meshShader*: VkBool32
+
+  VkPhysicalDeviceMeshShaderPropertiesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxDrawMeshTasksCount*: uint32
+    maxTaskWorkGroupInvocations*: uint32
+    maxTaskWorkGroupSize*: array[3, uint32]
+    maxTaskTotalMemorySize*: uint32
+    maxTaskOutputCount*: uint32
+    maxMeshWorkGroupInvocations*: uint32
+    maxMeshWorkGroupSize*: array[3, uint32]
+    maxMeshTotalMemorySize*: uint32
+    maxMeshOutputVertices*: uint32
+    maxMeshOutputPrimitives*: uint32
+    maxMeshMultiviewViewCount*: uint32
+    meshOutputPerVertexGranularity*: uint32
+    meshOutputPerPrimitiveGranularity*: uint32
+
+  VkDrawMeshTasksIndirectCommandNV* = object
+    taskCount*: uint32
+    firstTask*: uint32
+
+  VkRayTracingShaderGroupCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    `type`*: VkRayTracingShaderGroupTypeKHR
+    generalShader*: uint32
+    closestHitShader*: uint32
+    anyHitShader*: uint32
+    intersectionShader*: uint32
+
+  VkRayTracingShaderGroupCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    `type`*: VkRayTracingShaderGroupTypeKHR
+    generalShader*: uint32
+    closestHitShader*: uint32
+    anyHitShader*: uint32
+    intersectionShader*: uint32
+    pShaderGroupCaptureReplayHandle*: pointer
+
+  VkRayTracingPipelineCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineCreateFlags
+    stageCount*: uint32
+    pStages*: ptr VkPipelineShaderStageCreateInfo
+    groupCount*: uint32
+    pGroups*: ptr VkRayTracingShaderGroupCreateInfoNV
+    maxRecursionDepth*: uint32
+    layout*: VkPipelineLayout
+    basePipelineHandle*: VkPipeline
+    basePipelineIndex*: int32
+
+  VkRayTracingPipelineCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineCreateFlags
+    stageCount*: uint32
+    pStages*: ptr VkPipelineShaderStageCreateInfo
+    groupCount*: uint32
+    pGroups*: ptr VkRayTracingShaderGroupCreateInfoKHR
+    maxRecursionDepth*: uint32
+    libraries*: VkPipelineLibraryCreateInfoKHR
+    pLibraryInterface*: ptr VkRayTracingPipelineInterfaceCreateInfoKHR
+    layout*: VkPipelineLayout
+    basePipelineHandle*: VkPipeline
+    basePipelineIndex*: int32
+
+  VkGeometryTrianglesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    vertexData*: VkBuffer
+    vertexOffset*: VkDeviceSize
+    vertexCount*: uint32
+    vertexStride*: VkDeviceSize
+    vertexFormat*: VkFormat
+    indexData*: VkBuffer
+    indexOffset*: VkDeviceSize
+    indexCount*: uint32
+    indexType*: VkIndexType
+    transformData*: VkBuffer
+    transformOffset*: VkDeviceSize
+
+  VkGeometryAABBNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    aabbData*: VkBuffer
+    numAABBs*: uint32
+    stride*: uint32
+    offset*: VkDeviceSize
+
+  VkGeometryDataNV* = object
+    triangles*: VkGeometryTrianglesNV
+    aabbs*: VkGeometryAABBNV
+
+  VkGeometryNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    geometryType*: VkGeometryTypeKHR
+    geometry*: VkGeometryDataNV
+    flags*: VkGeometryFlagsKHR
+
+  VkAccelerationStructureInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    `type`*: VkAccelerationStructureTypeNV
+    flags*: VkBuildAccelerationStructureFlagsNV
+    instanceCount*: uint32
+    geometryCount*: uint32
+    pGeometries*: ptr VkGeometryNV
+
+  VkAccelerationStructureCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    compactedSize*: VkDeviceSize
+    info*: VkAccelerationStructureInfoNV
+
+  VkBindAccelerationStructureMemoryInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    accelerationStructure*: VkAccelerationStructureKHR
+    memory*: VkDeviceMemory
+    memoryOffset*: VkDeviceSize
+    deviceIndexCount*: uint32
+    pDeviceIndices*: ptr uint32
+
+  VkBindAccelerationStructureMemoryInfoNV* = object
+
+  VkWriteDescriptorSetAccelerationStructureKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    accelerationStructureCount*: uint32
+    pAccelerationStructures*: ptr VkAccelerationStructureKHR
+
+  VkWriteDescriptorSetAccelerationStructureNV* = object
+
+  VkAccelerationStructureMemoryRequirementsInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    `type`*: VkAccelerationStructureMemoryRequirementsTypeKHR
+    buildType*: VkAccelerationStructureBuildTypeKHR
+    accelerationStructure*: VkAccelerationStructureKHR
+
+  VkAccelerationStructureMemoryRequirementsInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    `type`*: VkAccelerationStructureMemoryRequirementsTypeNV
+    accelerationStructure*: VkAccelerationStructureNV
+
+  VkPhysicalDeviceRayTracingFeaturesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    rayTracing*: VkBool32
+    rayTracingShaderGroupHandleCaptureReplay*: VkBool32
+    rayTracingShaderGroupHandleCaptureReplayMixed*: VkBool32
+    rayTracingAccelerationStructureCaptureReplay*: VkBool32
+    rayTracingIndirectTraceRays*: VkBool32
+    rayTracingIndirectAccelerationStructureBuild*: VkBool32
+    rayTracingHostAccelerationStructureCommands*: VkBool32
+    rayQuery*: VkBool32
+    rayTracingPrimitiveCulling*: VkBool32
+
+  VkPhysicalDeviceRayTracingPropertiesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderGroupHandleSize*: uint32
+    maxRecursionDepth*: uint32
+    maxShaderGroupStride*: uint32
+    shaderGroupBaseAlignment*: uint32
+    maxGeometryCount*: uint64
+    maxInstanceCount*: uint64
+    maxPrimitiveCount*: uint64
+    maxDescriptorSetAccelerationStructures*: uint32
+    shaderGroupHandleCaptureReplaySize*: uint32
+
+  VkPhysicalDeviceRayTracingPropertiesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderGroupHandleSize*: uint32
+    maxRecursionDepth*: uint32
+    maxShaderGroupStride*: uint32
+    shaderGroupBaseAlignment*: uint32
+    maxGeometryCount*: uint64
+    maxInstanceCount*: uint64
+    maxTriangleCount*: uint64
+    maxDescriptorSetAccelerationStructures*: uint32
+
+  VkStridedBufferRegionKHR* = object
+    buffer*: VkBuffer
+    offset*: VkDeviceSize
+    stride*: VkDeviceSize
+    size*: VkDeviceSize
+
+  VkTraceRaysIndirectCommandKHR* = object
+    width*: uint32
+    height*: uint32
+    depth*: uint32
+
+  VkDrmFormatModifierPropertiesListEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    drmFormatModifierCount*: uint32
+    pDrmFormatModifierProperties*: ptr VkDrmFormatModifierPropertiesEXT
+
+  VkDrmFormatModifierPropertiesEXT* = object
+    drmFormatModifier*: uint64
+    drmFormatModifierPlaneCount*: uint32
+    drmFormatModifierTilingFeatures*: VkFormatFeatureFlags
+
+  VkPhysicalDeviceImageDrmFormatModifierInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    drmFormatModifier*: uint64
+    sharingMode*: VkSharingMode
+    queueFamilyIndexCount*: uint32
+    pQueueFamilyIndices*: ptr uint32
+
+  VkImageDrmFormatModifierListCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    drmFormatModifierCount*: uint32
+    pDrmFormatModifiers*: ptr uint64
+
+  VkImageDrmFormatModifierExplicitCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    drmFormatModifier*: uint64
+    drmFormatModifierPlaneCount*: uint32
+    pPlaneLayouts*: ptr VkSubresourceLayout
+
+  VkImageDrmFormatModifierPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    drmFormatModifier*: uint64
+
+  VkImageStencilUsageCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    stencilUsage*: VkImageUsageFlags
+
+  VkImageStencilUsageCreateInfoEXT* = object
+
+  VkDeviceMemoryOverallocationCreateInfoAMD* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    overallocationBehavior*: VkMemoryOverallocationBehaviorAMD
+
+  VkPhysicalDeviceFragmentDensityMapFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fragmentDensityMap*: VkBool32
+    fragmentDensityMapDynamic*: VkBool32
+    fragmentDensityMapNonSubsampledImages*: VkBool32
+
+  VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fragmentDensityMapDeferred*: VkBool32
+
+  VkPhysicalDeviceFragmentDensityMapPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    minFragmentDensityTexelSize*: VkExtent2D
+    maxFragmentDensityTexelSize*: VkExtent2D
+    fragmentDensityInvocations*: VkBool32
+
+  VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    subsampledLoads*: VkBool32
+    subsampledCoarseReconstructionEarlyAccess*: VkBool32
+    maxSubsampledArrayLayers*: uint32
+    maxDescriptorSetSubsampledSamplers*: uint32
+
+  VkRenderPassFragmentDensityMapCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fragmentDensityMapAttachment*: VkAttachmentReference
+
+  VkPhysicalDeviceScalarBlockLayoutFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    scalarBlockLayout*: VkBool32
+
+  VkPhysicalDeviceScalarBlockLayoutFeaturesEXT* = object
+
+  VkSurfaceProtectedCapabilitiesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    supportsProtected*: VkBool32
+
+  VkPhysicalDeviceUniformBufferStandardLayoutFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    uniformBufferStandardLayout*: VkBool32
+
+  VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR* = object
+
+  VkPhysicalDeviceDepthClipEnableFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    depthClipEnable*: VkBool32
+
+  VkPipelineRasterizationDepthClipStateCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineRasterizationDepthClipStateCreateFlagsEXT
+    depthClipEnable*: VkBool32
+
+  VkPhysicalDeviceMemoryBudgetPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    heapBudget*: array[VK_MAX_MEMORY_HEAPS, VkDeviceSize]
+    heapUsage*: array[VK_MAX_MEMORY_HEAPS, VkDeviceSize]
+
+  VkPhysicalDeviceMemoryPriorityFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memoryPriority*: VkBool32
+
+  VkMemoryPriorityAllocateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    priority*: float32
+
+  VkPhysicalDeviceBufferDeviceAddressFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    bufferDeviceAddress*: VkBool32
+    bufferDeviceAddressCaptureReplay*: VkBool32
+    bufferDeviceAddressMultiDevice*: VkBool32
+
+  VkPhysicalDeviceBufferDeviceAddressFeaturesKHR* = object
+
+  VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    bufferDeviceAddress*: VkBool32
+    bufferDeviceAddressCaptureReplay*: VkBool32
+    bufferDeviceAddressMultiDevice*: VkBool32
+
+  VkPhysicalDeviceBufferAddressFeaturesEXT* = object
+
+  VkBufferDeviceAddressInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    buffer*: VkBuffer
+
+  VkBufferDeviceAddressInfoKHR* = object
+
+  VkBufferDeviceAddressInfoEXT* = object
+
+  VkBufferOpaqueCaptureAddressCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    opaqueCaptureAddress*: uint64
+
+  VkBufferOpaqueCaptureAddressCreateInfoKHR* = object
+
+  VkBufferDeviceAddressCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceAddress*: VkDeviceAddress
+
+  VkPhysicalDeviceImageViewImageFormatInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    imageViewType*: VkImageViewType
+
+  VkFilterCubicImageViewImageFormatPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    filterCubic*: VkBool32
+    filterCubicMinmax*: VkBool32
+
+  VkPhysicalDeviceImagelessFramebufferFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    imagelessFramebuffer*: VkBool32
+
+  VkPhysicalDeviceImagelessFramebufferFeaturesKHR* = object
+
+  VkFramebufferAttachmentsCreateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    attachmentImageInfoCount*: uint32
+    pAttachmentImageInfos*: ptr VkFramebufferAttachmentImageInfo
+
+  VkFramebufferAttachmentsCreateInfoKHR* = object
+
+  VkFramebufferAttachmentImageInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkImageCreateFlags
+    usage*: VkImageUsageFlags
+    width*: uint32
+    height*: uint32
+    layerCount*: uint32
+    viewFormatCount*: uint32
+    pViewFormats*: ptr VkFormat
+
+  VkFramebufferAttachmentImageInfoKHR* = object
+
+  VkRenderPassAttachmentBeginInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    attachmentCount*: uint32
+    pAttachments*: ptr VkImageView
+
+  VkRenderPassAttachmentBeginInfoKHR* = object
+
+  VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    textureCompressionASTC_HDR*: VkBool32
+
+  VkPhysicalDeviceCooperativeMatrixFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    cooperativeMatrix*: VkBool32
+    cooperativeMatrixRobustBufferAccess*: VkBool32
+
+  VkPhysicalDeviceCooperativeMatrixPropertiesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    cooperativeMatrixSupportedStages*: VkShaderStageFlags
+
+  VkCooperativeMatrixPropertiesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    MSize*: uint32
+    NSize*: uint32
+    KSize*: uint32
+    AType*: VkComponentTypeNV
+    BType*: VkComponentTypeNV
+    CType*: VkComponentTypeNV
+    DType*: VkComponentTypeNV
+    scope*: VkScopeNV
+
+  VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    ycbcrImageArrays*: VkBool32
+
+  VkImageViewHandleInfoNVX* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    imageView*: VkImageView
+    descriptorType*: VkDescriptorType
+    sampler*: VkSampler
+
+  VkImageViewAddressPropertiesNVX* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceAddress*: VkDeviceAddress
+    size*: VkDeviceSize
+
+  VkPresentFrameTokenGGP* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    frameToken*: GgpFrameToken
+
+  VkPipelineCreationFeedbackEXT* = object
+    flags*: VkPipelineCreationFeedbackFlagsEXT
+    duration*: uint64
+
+  VkPipelineCreationFeedbackCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pPipelineCreationFeedback*: ptr VkPipelineCreationFeedbackEXT
+    pipelineStageCreationFeedbackCount*: uint32
+    pPipelineStageCreationFeedbacks*: ptr ptr VkPipelineCreationFeedbackEXT
+
+  VkSurfaceFullScreenExclusiveInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fullScreenExclusive*: VkFullScreenExclusiveEXT
+
+  VkSurfaceFullScreenExclusiveWin32InfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    hmonitor*: HMONITOR
+
+  VkSurfaceCapabilitiesFullScreenExclusiveEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fullScreenExclusiveSupported*: VkBool32
+
+  VkPhysicalDevicePerformanceQueryFeaturesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    performanceCounterQueryPools*: VkBool32
+    performanceCounterMultipleQueryPools*: VkBool32
+
+  VkPhysicalDevicePerformanceQueryPropertiesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    allowCommandBufferQueryCopies*: VkBool32
+
+  VkPerformanceCounterKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    unit*: VkPerformanceCounterUnitKHR
+    scope*: VkPerformanceCounterScopeKHR
+    storage*: VkPerformanceCounterStorageKHR
+    uuid*: array[VK_UUID_SIZE, uint8]
+
+  VkPerformanceCounterDescriptionKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPerformanceCounterDescriptionFlagsKHR
+    name*: array[VK_MAX_DESCRIPTION_SIZE, char]
+    category*: array[VK_MAX_DESCRIPTION_SIZE, char]
+    description*: array[VK_MAX_DESCRIPTION_SIZE, char]
+
+  VkQueryPoolPerformanceCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    queueFamilyIndex*: uint32
+    counterIndexCount*: uint32
+    pCounterIndices*: ptr uint32
+
+  VkPerformanceCounterResultKHR* {.union.} = object
+    int32*: int32
+    int64*: int64
+    uint32*: uint32
+    uint64*: uint64
+    float32*: float32
+    float64*: float64
+
+  VkAcquireProfilingLockInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkAcquireProfilingLockFlagsKHR
+    timeout*: uint64
+
+  VkPerformanceQuerySubmitInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    counterPassIndex*: uint32
+
+  VkHeadlessSurfaceCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkHeadlessSurfaceCreateFlagsEXT
+
+  VkPhysicalDeviceCoverageReductionModeFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    coverageReductionMode*: VkBool32
+
+  VkPipelineCoverageReductionStateCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkPipelineCoverageReductionStateCreateFlagsNV
+    coverageReductionMode*: VkCoverageReductionModeNV
+
+  VkFramebufferMixedSamplesCombinationNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    coverageReductionMode*: VkCoverageReductionModeNV
+    rasterizationSamples*: VkSampleCountFlagBits
+    depthStencilSamples*: VkSampleCountFlags
+    colorSamples*: VkSampleCountFlags
+
+  VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderIntegerFunctions2*: VkBool32
+
+  VkPerformanceValueDataINTEL* {.union.} = object
+    value32*: uint32
+    value64*: uint64
+    valueFloat*: float32
+    valueBool*: VkBool32
+    valueString*: cstring
+
+  VkPerformanceValueINTEL* = object
+    `type`*: VkPerformanceValueTypeINTEL
+    data*: VkPerformanceValueDataINTEL
+
+  VkInitializePerformanceApiInfoINTEL* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pUserData*: pointer
+
+  VkQueryPoolPerformanceQueryCreateInfoINTEL* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    performanceCountersSampling*: VkQueryPoolSamplingModeINTEL
+
+  VkQueryPoolCreateInfoINTEL* = object
+
+  VkPerformanceMarkerInfoINTEL* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    marker*: uint64
+
+  VkPerformanceStreamMarkerInfoINTEL* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    marker*: uint32
+
+  VkPerformanceOverrideInfoINTEL* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    `type`*: VkPerformanceOverrideTypeINTEL
+    enable*: VkBool32
+    parameter*: uint64
+
+  VkPerformanceConfigurationAcquireInfoINTEL* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    `type`*: VkPerformanceConfigurationTypeINTEL
+
+  VkPhysicalDeviceShaderClockFeaturesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderSubgroupClock*: VkBool32
+    shaderDeviceClock*: VkBool32
+
+  VkPhysicalDeviceIndexTypeUint8FeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    indexTypeUint8*: VkBool32
+
+  VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderSMCount*: uint32
+    shaderWarpsPerSM*: uint32
+
+  VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderSMBuiltins*: VkBool32
+
+  VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    fragmentShaderSampleInterlock*: VkBool32
+    fragmentShaderPixelInterlock*: VkBool32
+    fragmentShaderShadingRateInterlock*: VkBool32
+
+  VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    separateDepthStencilLayouts*: VkBool32
+
+  VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR* = object
+
+  VkAttachmentReferenceStencilLayout* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    stencilLayout*: VkImageLayout
+
+  VkAttachmentReferenceStencilLayoutKHR* = object
+
+  VkAttachmentDescriptionStencilLayout* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    stencilInitialLayout*: VkImageLayout
+    stencilFinalLayout*: VkImageLayout
+
+  VkAttachmentDescriptionStencilLayoutKHR* = object
+
+  VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pipelineExecutableInfo*: VkBool32
+
+  VkPipelineInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pipeline*: VkPipeline
+
+  VkPipelineExecutablePropertiesKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    stages*: VkShaderStageFlags
+    name*: array[VK_MAX_DESCRIPTION_SIZE, char]
+    description*: array[VK_MAX_DESCRIPTION_SIZE, char]
+    subgroupSize*: uint32
+
+  VkPipelineExecutableInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pipeline*: VkPipeline
+    executableIndex*: uint32
+
+  VkPipelineExecutableStatisticValueKHR* {.union.} = object
+    b32*: VkBool32
+    i64*: int64
+    u64*: uint64
+    f64*: float64
+
+  VkPipelineExecutableStatisticKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    name*: array[VK_MAX_DESCRIPTION_SIZE, char]
+    description*: array[VK_MAX_DESCRIPTION_SIZE, char]
+    format*: VkPipelineExecutableStatisticFormatKHR
+    value*: VkPipelineExecutableStatisticValueKHR
+
+  VkPipelineExecutableInternalRepresentationKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    name*: array[VK_MAX_DESCRIPTION_SIZE, char]
+    description*: array[VK_MAX_DESCRIPTION_SIZE, char]
+    isText*: VkBool32
+    dataSize*: uint
+    pData*: pointer
+
+  VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    shaderDemoteToHelperInvocation*: VkBool32
+
+  VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    texelBufferAlignment*: VkBool32
+
+  VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    storageTexelBufferOffsetAlignmentBytes*: VkDeviceSize
+    storageTexelBufferOffsetSingleTexelAlignment*: VkBool32
+    uniformTexelBufferOffsetAlignmentBytes*: VkDeviceSize
+    uniformTexelBufferOffsetSingleTexelAlignment*: VkBool32
+
+  VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    subgroupSizeControl*: VkBool32
+    computeFullSubgroups*: VkBool32
+
+  VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    minSubgroupSize*: uint32
+    maxSubgroupSize*: uint32
+    maxComputeWorkgroupSubgroups*: uint32
+    requiredSubgroupSizeStages*: VkShaderStageFlags
+
+  VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    requiredSubgroupSize*: uint32
+
+  VkMemoryOpaqueCaptureAddressAllocateInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    opaqueCaptureAddress*: uint64
+
+  VkMemoryOpaqueCaptureAddressAllocateInfoKHR* = object
+
+  VkDeviceMemoryOpaqueCaptureAddressInfo* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    memory*: VkDeviceMemory
+
+  VkDeviceMemoryOpaqueCaptureAddressInfoKHR* = object
+
+  VkPhysicalDeviceLineRasterizationFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    rectangularLines*: VkBool32
+    bresenhamLines*: VkBool32
+    smoothLines*: VkBool32
+    stippledRectangularLines*: VkBool32
+    stippledBresenhamLines*: VkBool32
+    stippledSmoothLines*: VkBool32
+
+  VkPhysicalDeviceLineRasterizationPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    lineSubPixelPrecisionBits*: uint32
+
+  VkPipelineRasterizationLineStateCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    lineRasterizationMode*: VkLineRasterizationModeEXT
+    stippledLineEnable*: VkBool32
+    lineStippleFactor*: uint32
+    lineStipplePattern*: uint16
+
+  VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    pipelineCreationCacheControl*: VkBool32
+
+  VkPhysicalDeviceVulkan11Features* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    storageBuffer16BitAccess*: VkBool32
+    uniformAndStorageBuffer16BitAccess*: VkBool32
+    storagePushConstant16*: VkBool32
+    storageInputOutput16*: VkBool32
+    multiview*: VkBool32
+    multiviewGeometryShader*: VkBool32
+    multiviewTessellationShader*: VkBool32
+    variablePointersStorageBuffer*: VkBool32
+    variablePointers*: VkBool32
+    protectedMemory*: VkBool32
+    samplerYcbcrConversion*: VkBool32
+    shaderDrawParameters*: VkBool32
+
+  VkPhysicalDeviceVulkan11Properties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceUUID*: array[VK_UUID_SIZE, uint8]
+    driverUUID*: array[VK_UUID_SIZE, uint8]
+    deviceLUID*: array[VK_LUID_SIZE, uint8]
+    deviceNodeMask*: uint32
+    deviceLUIDValid*: VkBool32
+    subgroupSize*: uint32
+    subgroupSupportedStages*: VkShaderStageFlags
+    subgroupSupportedOperations*: VkSubgroupFeatureFlags
+    subgroupQuadOperationsInAllStages*: VkBool32
+    pointClippingBehavior*: VkPointClippingBehavior
+    maxMultiviewViewCount*: uint32
+    maxMultiviewInstanceIndex*: uint32
+    protectedNoFault*: VkBool32
+    maxPerSetDescriptors*: uint32
+    maxMemoryAllocationSize*: VkDeviceSize
+
+  VkPhysicalDeviceVulkan12Features* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    samplerMirrorClampToEdge*: VkBool32
+    drawIndirectCount*: VkBool32
+    storageBuffer8BitAccess*: VkBool32
+    uniformAndStorageBuffer8BitAccess*: VkBool32
+    storagePushConstant8*: VkBool32
+    shaderBufferInt64Atomics*: VkBool32
+    shaderSharedInt64Atomics*: VkBool32
+    shaderFloat16*: VkBool32
+    shaderInt8*: VkBool32
+    descriptorIndexing*: VkBool32
+    shaderInputAttachmentArrayDynamicIndexing*: VkBool32
+    shaderUniformTexelBufferArrayDynamicIndexing*: VkBool32
+    shaderStorageTexelBufferArrayDynamicIndexing*: VkBool32
+    shaderUniformBufferArrayNonUniformIndexing*: VkBool32
+    shaderSampledImageArrayNonUniformIndexing*: VkBool32
+    shaderStorageBufferArrayNonUniformIndexing*: VkBool32
+    shaderStorageImageArrayNonUniformIndexing*: VkBool32
+    shaderInputAttachmentArrayNonUniformIndexing*: VkBool32
+    shaderUniformTexelBufferArrayNonUniformIndexing*: VkBool32
+    shaderStorageTexelBufferArrayNonUniformIndexing*: VkBool32
+    descriptorBindingUniformBufferUpdateAfterBind*: VkBool32
+    descriptorBindingSampledImageUpdateAfterBind*: VkBool32
+    descriptorBindingStorageImageUpdateAfterBind*: VkBool32
+    descriptorBindingStorageBufferUpdateAfterBind*: VkBool32
+    descriptorBindingUniformTexelBufferUpdateAfterBind*: VkBool32
+    descriptorBindingStorageTexelBufferUpdateAfterBind*: VkBool32
+    descriptorBindingUpdateUnusedWhilePending*: VkBool32
+    descriptorBindingPartiallyBound*: VkBool32
+    descriptorBindingVariableDescriptorCount*: VkBool32
+    runtimeDescriptorArray*: VkBool32
+    samplerFilterMinmax*: VkBool32
+    scalarBlockLayout*: VkBool32
+    imagelessFramebuffer*: VkBool32
+    uniformBufferStandardLayout*: VkBool32
+    shaderSubgroupExtendedTypes*: VkBool32
+    separateDepthStencilLayouts*: VkBool32
+    hostQueryReset*: VkBool32
+    timelineSemaphore*: VkBool32
+    bufferDeviceAddress*: VkBool32
+    bufferDeviceAddressCaptureReplay*: VkBool32
+    bufferDeviceAddressMultiDevice*: VkBool32
+    vulkanMemoryModel*: VkBool32
+    vulkanMemoryModelDeviceScope*: VkBool32
+    vulkanMemoryModelAvailabilityVisibilityChains*: VkBool32
+    shaderOutputViewportIndex*: VkBool32
+    shaderOutputLayer*: VkBool32
+    subgroupBroadcastDynamicId*: VkBool32
+
+  VkPhysicalDeviceVulkan12Properties* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    driverID*: VkDriverId
+    driverName*: array[VK_MAX_DRIVER_NAME_SIZE, char]
+    driverInfo*: array[VK_MAX_DRIVER_INFO_SIZE, char]
+    conformanceVersion*: VkConformanceVersion
+    denormBehaviorIndependence*: VkShaderFloatControlsIndependence
+    roundingModeIndependence*: VkShaderFloatControlsIndependence
+    shaderSignedZeroInfNanPreserveFloat16*: VkBool32
+    shaderSignedZeroInfNanPreserveFloat32*: VkBool32
+    shaderSignedZeroInfNanPreserveFloat64*: VkBool32
+    shaderDenormPreserveFloat16*: VkBool32
+    shaderDenormPreserveFloat32*: VkBool32
+    shaderDenormPreserveFloat64*: VkBool32
+    shaderDenormFlushToZeroFloat16*: VkBool32
+    shaderDenormFlushToZeroFloat32*: VkBool32
+    shaderDenormFlushToZeroFloat64*: VkBool32
+    shaderRoundingModeRTEFloat16*: VkBool32
+    shaderRoundingModeRTEFloat32*: VkBool32
+    shaderRoundingModeRTEFloat64*: VkBool32
+    shaderRoundingModeRTZFloat16*: VkBool32
+    shaderRoundingModeRTZFloat32*: VkBool32
+    shaderRoundingModeRTZFloat64*: VkBool32
+    maxUpdateAfterBindDescriptorsInAllPools*: uint32
+    shaderUniformBufferArrayNonUniformIndexingNative*: VkBool32
+    shaderSampledImageArrayNonUniformIndexingNative*: VkBool32
+    shaderStorageBufferArrayNonUniformIndexingNative*: VkBool32
+    shaderStorageImageArrayNonUniformIndexingNative*: VkBool32
+    shaderInputAttachmentArrayNonUniformIndexingNative*: VkBool32
+    robustBufferAccessUpdateAfterBind*: VkBool32
+    quadDivergentImplicitLod*: VkBool32
+    maxPerStageDescriptorUpdateAfterBindSamplers*: uint32
+    maxPerStageDescriptorUpdateAfterBindUniformBuffers*: uint32
+    maxPerStageDescriptorUpdateAfterBindStorageBuffers*: uint32
+    maxPerStageDescriptorUpdateAfterBindSampledImages*: uint32
+    maxPerStageDescriptorUpdateAfterBindStorageImages*: uint32
+    maxPerStageDescriptorUpdateAfterBindInputAttachments*: uint32
+    maxPerStageUpdateAfterBindResources*: uint32
+    maxDescriptorSetUpdateAfterBindSamplers*: uint32
+    maxDescriptorSetUpdateAfterBindUniformBuffers*: uint32
+    maxDescriptorSetUpdateAfterBindUniformBuffersDynamic*: uint32
+    maxDescriptorSetUpdateAfterBindStorageBuffers*: uint32
+    maxDescriptorSetUpdateAfterBindStorageBuffersDynamic*: uint32
+    maxDescriptorSetUpdateAfterBindSampledImages*: uint32
+    maxDescriptorSetUpdateAfterBindStorageImages*: uint32
+    maxDescriptorSetUpdateAfterBindInputAttachments*: uint32
+    supportedDepthResolveModes*: VkResolveModeFlags
+    supportedStencilResolveModes*: VkResolveModeFlags
+    independentResolveNone*: VkBool32
+    independentResolve*: VkBool32
+    filterMinmaxSingleComponentFormats*: VkBool32
+    filterMinmaxImageComponentMapping*: VkBool32
+    maxTimelineSemaphoreValueDifference*: uint64
+    framebufferIntegerColorSampleCounts*: VkSampleCountFlags
+
+  VkPipelineCompilerControlCreateInfoAMD* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    compilerControlFlags*: VkPipelineCompilerControlFlagsAMD
+
+  VkPhysicalDeviceCoherentMemoryFeaturesAMD* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    deviceCoherentMemory*: VkBool32
+
+  VkPhysicalDeviceToolPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    name*: array[VK_MAX_EXTENSION_NAME_SIZE, char]
+    version*: array[VK_MAX_EXTENSION_NAME_SIZE, char]
+    purposes*: VkToolPurposeFlagsEXT
+    description*: array[VK_MAX_DESCRIPTION_SIZE, char]
+    layer*: array[VK_MAX_EXTENSION_NAME_SIZE, char]
+
+  VkSamplerCustomBorderColorCreateInfoEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    customBorderColor*: VkClearColorValue
+    format*: VkFormat
+
+  VkPhysicalDeviceCustomBorderColorPropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxCustomBorderColorSamplers*: uint32
+
+  VkPhysicalDeviceCustomBorderColorFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    customBorderColors*: VkBool32
+    customBorderColorWithoutFormat*: VkBool32
+
+  VkDeviceOrHostAddressKHR* {.union.} = object
+    deviceAddress*: VkDeviceAddress
+    hostAddress*: pointer
+
+  VkDeviceOrHostAddressConstKHR* {.union.} = object
+    deviceAddress*: VkDeviceAddress
+    hostAddress*: pointer
+
+  VkAccelerationStructureGeometryTrianglesDataKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    vertexFormat*: VkFormat
+    vertexData*: VkDeviceOrHostAddressConstKHR
+    vertexStride*: VkDeviceSize
+    indexType*: VkIndexType
+    indexData*: VkDeviceOrHostAddressConstKHR
+    transformData*: VkDeviceOrHostAddressConstKHR
+
+  VkAccelerationStructureGeometryAabbsDataKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    data*: VkDeviceOrHostAddressConstKHR
+    stride*: VkDeviceSize
+
+  VkAccelerationStructureGeometryInstancesDataKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    arrayOfPointers*: VkBool32
+    data*: VkDeviceOrHostAddressConstKHR
+
+  VkAccelerationStructureGeometryDataKHR* {.union.} = object
+    triangles*: VkAccelerationStructureGeometryTrianglesDataKHR
+    aabbs*: VkAccelerationStructureGeometryAabbsDataKHR
+    instances*: VkAccelerationStructureGeometryInstancesDataKHR
+
+  VkAccelerationStructureGeometryKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    geometryType*: VkGeometryTypeKHR
+    geometry*: VkAccelerationStructureGeometryDataKHR
+    flags*: VkGeometryFlagsKHR
+
+  VkAccelerationStructureBuildGeometryInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    `type`*: VkAccelerationStructureTypeKHR
+    flags*: VkBuildAccelerationStructureFlagsKHR
+    update*: VkBool32
+    srcAccelerationStructure*: VkAccelerationStructureKHR
+    dstAccelerationStructure*: VkAccelerationStructureKHR
+    geometryArrayOfPointers*: VkBool32
+    geometryCount*: uint32
+    ppGeometries*: ptr ptr VkAccelerationStructureGeometryKHR
+    scratchData*: VkDeviceOrHostAddressKHR
+
+  VkAccelerationStructureBuildOffsetInfoKHR* = object
+    primitiveCount*: uint32
+    primitiveOffset*: uint32
+    firstVertex*: uint32
+    transformOffset*: uint32
+
+  VkAccelerationStructureCreateGeometryTypeInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    geometryType*: VkGeometryTypeKHR
+    maxPrimitiveCount*: uint32
+    indexType*: VkIndexType
+    maxVertexCount*: uint32
+    vertexFormat*: VkFormat
+    allowsTransforms*: VkBool32
+
+  VkAccelerationStructureCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    compactedSize*: VkDeviceSize
+    `type`*: VkAccelerationStructureTypeKHR
+    flags*: VkBuildAccelerationStructureFlagsKHR
+    maxGeometryCount*: uint32
+    pGeometryInfos*: ptr VkAccelerationStructureCreateGeometryTypeInfoKHR
+    deviceAddress*: VkDeviceAddress
+
+  VkAabbPositionsKHR* = object
+    minX*: float32
+    minY*: float32
+    minZ*: float32
+    maxX*: float32
+    maxY*: float32
+    maxZ*: float32
+
+  VkAabbPositionsNV* = object
+
+  VkTransformMatrixKHR* = object
+    matrix*: array[3, float32]
+
+  VkTransformMatrixNV* = object
+
+  VkAccelerationStructureInstanceKHR* = object
+    transform*: VkTransformMatrixKHR
+    instanceCustomIndex*: uint32
+    mask*: uint32
+    instanceShaderBindingTableRecordOffset*: uint32
+    flags*: VkGeometryInstanceFlagsKHR
+    accelerationStructureReference*: uint64
+
+  VkAccelerationStructureInstanceNV* = object
+
+  VkAccelerationStructureDeviceAddressInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    accelerationStructure*: VkAccelerationStructureKHR
+
+  VkAccelerationStructureVersionKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    versionData*: ptr uint8
+
+  VkCopyAccelerationStructureInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    src*: VkAccelerationStructureKHR
+    dst*: VkAccelerationStructureKHR
+    mode*: VkCopyAccelerationStructureModeKHR
+
+  VkCopyAccelerationStructureToMemoryInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    src*: VkAccelerationStructureKHR
+    dst*: VkDeviceOrHostAddressKHR
+    mode*: VkCopyAccelerationStructureModeKHR
+
+  VkCopyMemoryToAccelerationStructureInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    src*: VkDeviceOrHostAddressConstKHR
+    dst*: VkAccelerationStructureKHR
+    mode*: VkCopyAccelerationStructureModeKHR
+
+  VkRayTracingPipelineInterfaceCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    maxPayloadSize*: uint32
+    maxAttributeSize*: uint32
+    maxCallableSize*: uint32
+
+  VkDeferredOperationInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    operationHandle*: VkDeferredOperationKHR
+
+  VkPipelineLibraryCreateInfoKHR* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    libraryCount*: uint32
+    pLibraries*: ptr VkPipeline
+
+  VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    extendedDynamicState*: VkBool32
+
+  VkRenderPassTransformBeginInfoQCOM* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    transform*: VkSurfaceTransformFlagBitsKHR
+
+  VkCommandBufferInheritanceRenderPassTransformInfoQCOM* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    transform*: VkSurfaceTransformFlagBitsKHR
+    renderArea*: VkRect2D
+
+  VkPhysicalDeviceDiagnosticsConfigFeaturesNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    diagnosticsConfig*: VkBool32
+
+  VkDeviceDiagnosticsConfigCreateInfoNV* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    flags*: VkDeviceDiagnosticsConfigFlagsNV
+
+  VkPhysicalDeviceRobustness2FeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    robustBufferAccess2*: VkBool32
+    robustImageAccess2*: VkBool32
+    nullDescriptor*: VkBool32
+
+  VkPhysicalDeviceRobustness2PropertiesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    robustStorageBufferAccessSizeAlignment*: VkDeviceSize
+    robustUniformBufferAccessSizeAlignment*: VkDeviceSize
+
+  VkPhysicalDeviceImageRobustnessFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    robustImageAccess*: VkBool32
+
+  VkPhysicalDevice4444FormatsFeaturesEXT* = object
+    sType*: VkStructureType
+    pNext*: pointer
+    formatA4R4G4B4*: VkBool32
+    formatA4B4G4R4*: VkBool32
+
+# Constructors
+
+proc newVkOffset2D*(x: int32, y: int32): VkOffset2D =
+  result.x = x
+  result.y = y
+
+proc newVkOffset3D*(x: int32, y: int32, z: int32): VkOffset3D =
+  result.x = x
+  result.y = y
+  result.z = z
+
+proc newVkExtent2D*(width: uint32, height: uint32): VkExtent2D =
+  result.width = width
+  result.height = height
+
+proc newVkExtent3D*(width: uint32, height: uint32, depth: uint32): VkExtent3D =
+  result.width = width
+  result.height = height
+  result.depth = depth
+
+proc newVkViewport*(x: float32, y: float32, width: float32, height: float32, minDepth: float32, maxDepth: float32): VkViewport =
+  result.x = x
+  result.y = y
+  result.width = width
+  result.height = height
+  result.minDepth = minDepth
+  result.maxDepth = maxDepth
+
+proc newVkRect2D*(offset: VkOffset2D, extent: VkExtent2D): VkRect2D =
+  result.offset = offset
+  result.extent = extent
+
+proc newVkClearRect*(rect: VkRect2D, baseArrayLayer: uint32, layerCount: uint32): VkClearRect =
+  result.rect = rect
+  result.baseArrayLayer = baseArrayLayer
+  result.layerCount = layerCount
+
+proc newVkComponentMapping*(r: VkComponentSwizzle, g: VkComponentSwizzle, b: VkComponentSwizzle, a: VkComponentSwizzle): VkComponentMapping =
+  result.r = r
+  result.g = g
+  result.b = b
+  result.a = a
+
+proc newVkPhysicalDeviceProperties*(apiVersion: uint32, driverVersion: uint32, vendorID: uint32, deviceID: uint32, deviceType: VkPhysicalDeviceType, deviceName: array[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE, char], pipelineCacheUUID: array[VK_UUID_SIZE, uint8], limits: VkPhysicalDeviceLimits, sparseProperties: VkPhysicalDeviceSparseProperties): VkPhysicalDeviceProperties =
+  result.apiVersion = apiVersion
+  result.driverVersion = driverVersion
+  result.vendorID = vendorID
+  result.deviceID = deviceID
+  result.deviceType = deviceType
+  result.deviceName = deviceName
+  result.pipelineCacheUUID = pipelineCacheUUID
+  result.limits = limits
+  result.sparseProperties = sparseProperties
+
+proc newVkExtensionProperties*(extensionName: array[VK_MAX_EXTENSION_NAME_SIZE, char], specVersion: uint32): VkExtensionProperties =
+  result.extensionName = extensionName
+  result.specVersion = specVersion
+
+proc newVkLayerProperties*(layerName: array[VK_MAX_EXTENSION_NAME_SIZE, char], specVersion: uint32, implementationVersion: uint32, description: array[VK_MAX_DESCRIPTION_SIZE, char]): VkLayerProperties =
+  result.layerName = layerName
+  result.specVersion = specVersion
+  result.implementationVersion = implementationVersion
+  result.description = description
+
+proc newVkApplicationInfo*(sType: VkStructureType = VkStructureTypeApplicationInfo, pNext: pointer = nil, pApplicationName: cstring, applicationVersion: uint32, pEngineName: cstring, engineVersion: uint32, apiVersion: uint32): VkApplicationInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.pApplicationName = pApplicationName
+  result.applicationVersion = applicationVersion
+  result.pEngineName = pEngineName
+  result.engineVersion = engineVersion
+  result.apiVersion = apiVersion
+
+proc newVkAllocationCallbacks*(pUserData: pointer = nil, pfnAllocation: PFN_vkAllocationFunction, pfnReallocation: PFN_vkReallocationFunction, pfnFree: PFN_vkFreeFunction, pfnInternalAllocation: PFN_vkInternalAllocationNotification, pfnInternalFree: PFN_vkInternalFreeNotification): VkAllocationCallbacks =
+  result.pUserData = pUserData
+  result.pfnAllocation = pfnAllocation
+  result.pfnReallocation = pfnReallocation
+  result.pfnFree = pfnFree
+  result.pfnInternalAllocation = pfnInternalAllocation
+  result.pfnInternalFree = pfnInternalFree
+
+proc newVkDeviceQueueCreateInfo*(sType: VkStructureType = VkStructureTypeDeviceQueueCreateInfo, pNext: pointer = nil, flags: VkDeviceQueueCreateFlags = 0.VkDeviceQueueCreateFlags, queueFamilyIndex: uint32, queueCount: uint32, pQueuePriorities: ptr float32): VkDeviceQueueCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.queueFamilyIndex = queueFamilyIndex
+  result.queueCount = queueCount
+  result.pQueuePriorities = pQueuePriorities
+
+proc newVkDeviceCreateInfo*(sType: VkStructureType = VkStructureTypeDeviceCreateInfo, pNext: pointer = nil, flags: VkDeviceCreateFlags = 0.VkDeviceCreateFlags, queueCreateInfoCount: uint32, pQueueCreateInfos: ptr VkDeviceQueueCreateInfo, enabledLayerCount: uint32, ppEnabledLayerNames: cstringArray, enabledExtensionCount: uint32, ppEnabledExtensionNames: cstringArray, pEnabledFeatures: ptr VkPhysicalDeviceFeatures): VkDeviceCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.queueCreateInfoCount = queueCreateInfoCount
+  result.pQueueCreateInfos = pQueueCreateInfos
+  result.enabledLayerCount = enabledLayerCount
+  result.ppEnabledLayerNames = ppEnabledLayerNames
+  result.enabledExtensionCount = enabledExtensionCount
+  result.ppEnabledExtensionNames = ppEnabledExtensionNames
+  result.pEnabledFeatures = pEnabledFeatures
+
+proc newVkInstanceCreateInfo*(sType: VkStructureType = VkStructureTypeInstanceCreateInfo, pNext: pointer = nil, flags: VkInstanceCreateFlags = 0.VkInstanceCreateFlags, pApplicationInfo: ptr VkApplicationInfo, enabledLayerCount: uint32, ppEnabledLayerNames: cstringArray, enabledExtensionCount: uint32, ppEnabledExtensionNames: cstringArray): VkInstanceCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.pApplicationInfo = pApplicationInfo
+  result.enabledLayerCount = enabledLayerCount
+  result.ppEnabledLayerNames = ppEnabledLayerNames
+  result.enabledExtensionCount = enabledExtensionCount
+  result.ppEnabledExtensionNames = ppEnabledExtensionNames
+
+proc newVkQueueFamilyProperties*(queueFlags: VkQueueFlags, queueCount: uint32, timestampValidBits: uint32, minImageTransferGranularity: VkExtent3D): VkQueueFamilyProperties =
+  result.queueFlags = queueFlags
+  result.queueCount = queueCount
+  result.timestampValidBits = timestampValidBits
+  result.minImageTransferGranularity = minImageTransferGranularity
+
+proc newVkPhysicalDeviceMemoryProperties*(memoryTypeCount: uint32, memoryTypes: array[VK_MAX_MEMORY_TYPES, VkMemoryType], memoryHeapCount: uint32, memoryHeaps: array[VK_MAX_MEMORY_HEAPS, VkMemoryHeap]): VkPhysicalDeviceMemoryProperties =
+  result.memoryTypeCount = memoryTypeCount
+  result.memoryTypes = memoryTypes
+  result.memoryHeapCount = memoryHeapCount
+  result.memoryHeaps = memoryHeaps
+
+proc newVkMemoryAllocateInfo*(sType: VkStructureType = VkStructureTypeMemoryAllocateInfo, pNext: pointer = nil, allocationSize: VkDeviceSize, memoryTypeIndex: uint32): VkMemoryAllocateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.allocationSize = allocationSize
+  result.memoryTypeIndex = memoryTypeIndex
+
+proc newVkMemoryRequirements*(size: VkDeviceSize, alignment: VkDeviceSize, memoryTypeBits: uint32): VkMemoryRequirements =
+  result.size = size
+  result.alignment = alignment
+  result.memoryTypeBits = memoryTypeBits
+
+proc newVkSparseImageFormatProperties*(aspectMask: VkImageAspectFlags, imageGranularity: VkExtent3D, flags: VkSparseImageFormatFlags = 0.VkSparseImageFormatFlags): VkSparseImageFormatProperties =
+  result.aspectMask = aspectMask
+  result.imageGranularity = imageGranularity
+  result.flags = flags
+
+proc newVkSparseImageMemoryRequirements*(formatProperties: VkSparseImageFormatProperties, imageMipTailFirstLod: uint32, imageMipTailSize: VkDeviceSize, imageMipTailOffset: VkDeviceSize, imageMipTailStride: VkDeviceSize): VkSparseImageMemoryRequirements =
+  result.formatProperties = formatProperties
+  result.imageMipTailFirstLod = imageMipTailFirstLod
+  result.imageMipTailSize = imageMipTailSize
+  result.imageMipTailOffset = imageMipTailOffset
+  result.imageMipTailStride = imageMipTailStride
+
+proc newVkMemoryType*(propertyFlags: VkMemoryPropertyFlags, heapIndex: uint32): VkMemoryType =
+  result.propertyFlags = propertyFlags
+  result.heapIndex = heapIndex
+
+proc newVkMemoryHeap*(size: VkDeviceSize, flags: VkMemoryHeapFlags = 0.VkMemoryHeapFlags): VkMemoryHeap =
+  result.size = size
+  result.flags = flags
+
+proc newVkMappedMemoryRange*(sType: VkStructureType = VkStructureTypeMappedMemoryRange, pNext: pointer = nil, memory: VkDeviceMemory, offset: VkDeviceSize, size: VkDeviceSize): VkMappedMemoryRange =
+  result.sType = sType
+  result.pNext = pNext
+  result.memory = memory
+  result.offset = offset
+  result.size = size
+
+proc newVkFormatProperties*(linearTilingFeatures: VkFormatFeatureFlags, optimalTilingFeatures: VkFormatFeatureFlags, bufferFeatures: VkFormatFeatureFlags): VkFormatProperties =
+  result.linearTilingFeatures = linearTilingFeatures
+  result.optimalTilingFeatures = optimalTilingFeatures
+  result.bufferFeatures = bufferFeatures
+
+proc newVkImageFormatProperties*(maxExtent: VkExtent3D, maxMipLevels: uint32, maxArrayLayers: uint32, sampleCounts: VkSampleCountFlags, maxResourceSize: VkDeviceSize): VkImageFormatProperties =
+  result.maxExtent = maxExtent
+  result.maxMipLevels = maxMipLevels
+  result.maxArrayLayers = maxArrayLayers
+  result.sampleCounts = sampleCounts
+  result.maxResourceSize = maxResourceSize
+
+proc newVkDescriptorBufferInfo*(buffer: VkBuffer, offset: VkDeviceSize, range: VkDeviceSize): VkDescriptorBufferInfo =
+  result.buffer = buffer
+  result.offset = offset
+  result.range = range
+
+proc newVkDescriptorImageInfo*(sampler: VkSampler, imageView: VkImageView, imageLayout: VkImageLayout): VkDescriptorImageInfo =
+  result.sampler = sampler
+  result.imageView = imageView
+  result.imageLayout = imageLayout
+
+proc newVkWriteDescriptorSet*(sType: VkStructureType = VkStructureTypeWriteDescriptorSet, pNext: pointer = nil, dstSet: VkDescriptorSet, dstBinding: uint32, dstArrayElement: uint32, descriptorCount: uint32, descriptorType: VkDescriptorType, pImageInfo: ptr VkDescriptorImageInfo, pBufferInfo: ptr ptr VkDescriptorBufferInfo, pTexelBufferView: ptr VkBufferView): VkWriteDescriptorSet =
+  result.sType = sType
+  result.pNext = pNext
+  result.dstSet = dstSet
+  result.dstBinding = dstBinding
+  result.dstArrayElement = dstArrayElement
+  result.descriptorCount = descriptorCount
+  result.descriptorType = descriptorType
+  result.pImageInfo = pImageInfo
+  result.pBufferInfo = pBufferInfo
+  result.pTexelBufferView = pTexelBufferView
+
+proc newVkCopyDescriptorSet*(sType: VkStructureType = VkStructureTypeCopyDescriptorSet, pNext: pointer = nil, srcSet: VkDescriptorSet, srcBinding: uint32, srcArrayElement: uint32, dstSet: VkDescriptorSet, dstBinding: uint32, dstArrayElement: uint32, descriptorCount: uint32): VkCopyDescriptorSet =
+  result.sType = sType
+  result.pNext = pNext
+  result.srcSet = srcSet
+  result.srcBinding = srcBinding
+  result.srcArrayElement = srcArrayElement
+  result.dstSet = dstSet
+  result.dstBinding = dstBinding
+  result.dstArrayElement = dstArrayElement
+  result.descriptorCount = descriptorCount
+
+proc newVkBufferCreateInfo*(sType: VkStructureType = VkStructureTypeBufferCreateInfo, pNext: pointer = nil, flags: VkBufferCreateFlags = 0.VkBufferCreateFlags, size: VkDeviceSize, usage: VkBufferUsageFlags, sharingMode: VkSharingMode, queueFamilyIndexCount: uint32, pQueueFamilyIndices: ptr uint32): VkBufferCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.size = size
+  result.usage = usage
+  result.sharingMode = sharingMode
+  result.queueFamilyIndexCount = queueFamilyIndexCount
+  result.pQueueFamilyIndices = pQueueFamilyIndices
+
+proc newVkBufferViewCreateInfo*(sType: VkStructureType = VkStructureTypeBufferViewCreateInfo, pNext: pointer = nil, flags: VkBufferViewCreateFlags = 0.VkBufferViewCreateFlags, buffer: VkBuffer, format: VkFormat, offset: VkDeviceSize, range: VkDeviceSize): VkBufferViewCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.buffer = buffer
+  result.format = format
+  result.offset = offset
+  result.range = range
+
+proc newVkImageSubresource*(aspectMask: VkImageAspectFlags, mipLevel: uint32, arrayLayer: uint32): VkImageSubresource =
+  result.aspectMask = aspectMask
+  result.mipLevel = mipLevel
+  result.arrayLayer = arrayLayer
+
+proc newVkImageSubresourceLayers*(aspectMask: VkImageAspectFlags, mipLevel: uint32, baseArrayLayer: uint32, layerCount: uint32): VkImageSubresourceLayers =
+  result.aspectMask = aspectMask
+  result.mipLevel = mipLevel
+  result.baseArrayLayer = baseArrayLayer
+  result.layerCount = layerCount
+
+proc newVkImageSubresourceRange*(aspectMask: VkImageAspectFlags, baseMipLevel: uint32, levelCount: uint32, baseArrayLayer: uint32, layerCount: uint32): VkImageSubresourceRange =
+  result.aspectMask = aspectMask
+  result.baseMipLevel = baseMipLevel
+  result.levelCount = levelCount
+  result.baseArrayLayer = baseArrayLayer
+  result.layerCount = layerCount
+
+proc newVkMemoryBarrier*(sType: VkStructureType = VkStructureTypeMemoryBarrier, pNext: pointer = nil, srcAccessMask: VkAccessFlags, dstAccessMask: VkAccessFlags): VkMemoryBarrier =
+  result.sType = sType
+  result.pNext = pNext
+  result.srcAccessMask = srcAccessMask
+  result.dstAccessMask = dstAccessMask
+
+proc newVkBufferMemoryBarrier*(sType: VkStructureType = VkStructureTypeBufferMemoryBarrier, pNext: pointer = nil, srcAccessMask: VkAccessFlags, dstAccessMask: VkAccessFlags, srcQueueFamilyIndex: uint32, dstQueueFamilyIndex: uint32, buffer: VkBuffer, offset: VkDeviceSize, size: VkDeviceSize): VkBufferMemoryBarrier =
+  result.sType = sType
+  result.pNext = pNext
+  result.srcAccessMask = srcAccessMask
+  result.dstAccessMask = dstAccessMask
+  result.srcQueueFamilyIndex = srcQueueFamilyIndex
+  result.dstQueueFamilyIndex = dstQueueFamilyIndex
+  result.buffer = buffer
+  result.offset = offset
+  result.size = size
+
+proc newVkImageMemoryBarrier*(sType: VkStructureType = VkStructureTypeImageMemoryBarrier, pNext: pointer = nil, srcAccessMask: VkAccessFlags, dstAccessMask: VkAccessFlags, oldLayout: VkImageLayout, newLayout: VkImageLayout, srcQueueFamilyIndex: uint32, dstQueueFamilyIndex: uint32, image: VkImage, subresourceRange: VkImageSubresourceRange): VkImageMemoryBarrier =
+  result.sType = sType
+  result.pNext = pNext
+  result.srcAccessMask = srcAccessMask
+  result.dstAccessMask = dstAccessMask
+  result.oldLayout = oldLayout
+  result.newLayout = newLayout
+  result.srcQueueFamilyIndex = srcQueueFamilyIndex
+  result.dstQueueFamilyIndex = dstQueueFamilyIndex
+  result.image = image
+  result.subresourceRange = subresourceRange
+
+proc newVkImageCreateInfo*(sType: VkStructureType = VkStructureTypeImageCreateInfo, pNext: pointer = nil, flags: VkImageCreateFlags = 0.VkImageCreateFlags, imageType: VkImageType, format: VkFormat, extent: VkExtent3D, mipLevels: uint32, arrayLayers: uint32, samples: VkSampleCountFlagBits, tiling: VkImageTiling, usage: VkImageUsageFlags, sharingMode: VkSharingMode, queueFamilyIndexCount: uint32, pQueueFamilyIndices: ptr uint32, initialLayout: VkImageLayout): VkImageCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.imageType = imageType
+  result.format = format
+  result.extent = extent
+  result.mipLevels = mipLevels
+  result.arrayLayers = arrayLayers
+  result.samples = samples
+  result.tiling = tiling
+  result.usage = usage
+  result.sharingMode = sharingMode
+  result.queueFamilyIndexCount = queueFamilyIndexCount
+  result.pQueueFamilyIndices = pQueueFamilyIndices
+  result.initialLayout = initialLayout
+
+proc newVkSubresourceLayout*(offset: VkDeviceSize, size: VkDeviceSize, rowPitch: VkDeviceSize, arrayPitch: VkDeviceSize, depthPitch: VkDeviceSize): VkSubresourceLayout =
+  result.offset = offset
+  result.size = size
+  result.rowPitch = rowPitch
+  result.arrayPitch = arrayPitch
+  result.depthPitch = depthPitch
+
+proc newVkImageViewCreateInfo*(sType: VkStructureType = VkStructureTypeImageViewCreateInfo, pNext: pointer = nil, flags: VkImageViewCreateFlags = 0.VkImageViewCreateFlags, image: VkImage, viewType: VkImageViewType, format: VkFormat, components: VkComponentMapping, subresourceRange: VkImageSubresourceRange): VkImageViewCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.image = image
+  result.viewType = viewType
+  result.format = format
+  result.components = components
+  result.subresourceRange = subresourceRange
+
+proc newVkBufferCopy*(srcOffset: VkDeviceSize, dstOffset: VkDeviceSize, size: VkDeviceSize): VkBufferCopy =
+  result.srcOffset = srcOffset
+  result.dstOffset = dstOffset
+  result.size = size
+
+proc newVkSparseMemoryBind*(resourceOffset: VkDeviceSize, size: VkDeviceSize, memory: VkDeviceMemory, memoryOffset: VkDeviceSize, flags: VkSparseMemoryBindFlags = 0.VkSparseMemoryBindFlags): VkSparseMemoryBind =
+  result.resourceOffset = resourceOffset
+  result.size = size
+  result.memory = memory
+  result.memoryOffset = memoryOffset
+  result.flags = flags
+
+proc newVkSparseImageMemoryBind*(subresource: VkImageSubresource, offset: VkOffset3D, extent: VkExtent3D, memory: VkDeviceMemory, memoryOffset: VkDeviceSize, flags: VkSparseMemoryBindFlags = 0.VkSparseMemoryBindFlags): VkSparseImageMemoryBind =
+  result.subresource = subresource
+  result.offset = offset
+  result.extent = extent
+  result.memory = memory
+  result.memoryOffset = memoryOffset
+  result.flags = flags
+
+proc newVkSparseBufferMemoryBindInfo*(buffer: VkBuffer, bindCount: uint32, pBinds: ptr VkSparseMemoryBind): VkSparseBufferMemoryBindInfo =
+  result.buffer = buffer
+  result.bindCount = bindCount
+  result.pBinds = pBinds
+
+proc newVkSparseImageOpaqueMemoryBindInfo*(image: VkImage, bindCount: uint32, pBinds: ptr VkSparseMemoryBind): VkSparseImageOpaqueMemoryBindInfo =
+  result.image = image
+  result.bindCount = bindCount
+  result.pBinds = pBinds
+
+proc newVkSparseImageMemoryBindInfo*(image: VkImage, bindCount: uint32, pBinds: ptr VkSparseImageMemoryBind): VkSparseImageMemoryBindInfo =
+  result.image = image
+  result.bindCount = bindCount
+  result.pBinds = pBinds
+
+proc newVkBindSparseInfo*(sType: VkStructureType = VkStructureTypeBindSparseInfo, pNext: pointer = nil, waitSemaphoreCount: uint32, pWaitSemaphores: ptr VkSemaphore, bufferBindCount: uint32, pBufferBinds: ptr VkSparseBufferMemoryBindInfo, imageOpaqueBindCount: uint32, pImageOpaqueBinds: ptr VkSparseImageOpaqueMemoryBindInfo, imageBindCount: uint32, pImageBinds: ptr VkSparseImageMemoryBindInfo, signalSemaphoreCount: uint32, pSignalSemaphores: ptr VkSemaphore): VkBindSparseInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.waitSemaphoreCount = waitSemaphoreCount
+  result.pWaitSemaphores = pWaitSemaphores
+  result.bufferBindCount = bufferBindCount
+  result.pBufferBinds = pBufferBinds
+  result.imageOpaqueBindCount = imageOpaqueBindCount
+  result.pImageOpaqueBinds = pImageOpaqueBinds
+  result.imageBindCount = imageBindCount
+  result.pImageBinds = pImageBinds
+  result.signalSemaphoreCount = signalSemaphoreCount
+  result.pSignalSemaphores = pSignalSemaphores
+
+proc newVkImageCopy*(srcSubresource: VkImageSubresourceLayers, srcOffset: VkOffset3D, dstSubresource: VkImageSubresourceLayers, dstOffset: VkOffset3D, extent: VkExtent3D): VkImageCopy =
+  result.srcSubresource = srcSubresource
+  result.srcOffset = srcOffset
+  result.dstSubresource = dstSubresource
+  result.dstOffset = dstOffset
+  result.extent = extent
+
+proc newVkImageBlit*(srcSubresource: VkImageSubresourceLayers, srcOffsets: array[2, VkOffset3D], dstSubresource: VkImageSubresourceLayers, dstOffsets: array[2, VkOffset3D]): VkImageBlit =
+  result.srcSubresource = srcSubresource
+  result.srcOffsets = srcOffsets
+  result.dstSubresource = dstSubresource
+  result.dstOffsets = dstOffsets
+
+proc newVkBufferImageCopy*(bufferOffset: VkDeviceSize, bufferRowLength: uint32, bufferImageHeight: uint32, imageSubresource: VkImageSubresourceLayers, imageOffset: VkOffset3D, imageExtent: VkExtent3D): VkBufferImageCopy =
+  result.bufferOffset = bufferOffset
+  result.bufferRowLength = bufferRowLength
+  result.bufferImageHeight = bufferImageHeight
+  result.imageSubresource = imageSubresource
+  result.imageOffset = imageOffset
+  result.imageExtent = imageExtent
+
+proc newVkImageResolve*(srcSubresource: VkImageSubresourceLayers, srcOffset: VkOffset3D, dstSubresource: VkImageSubresourceLayers, dstOffset: VkOffset3D, extent: VkExtent3D): VkImageResolve =
+  result.srcSubresource = srcSubresource
+  result.srcOffset = srcOffset
+  result.dstSubresource = dstSubresource
+  result.dstOffset = dstOffset
+  result.extent = extent
+
+proc newVkShaderModuleCreateInfo*(sType: VkStructureType = VkStructureTypeShaderModuleCreateInfo, pNext: pointer = nil, flags: VkShaderModuleCreateFlags = 0.VkShaderModuleCreateFlags, codeSize: uint, pCode: ptr uint32): VkShaderModuleCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.codeSize = codeSize
+  result.pCode = pCode
+
+proc newVkDescriptorSetLayoutBinding*(binding: uint32, descriptorType: VkDescriptorType, descriptorCount: uint32, stageFlags: VkShaderStageFlags, pImmutableSamplers: ptr VkSampler): VkDescriptorSetLayoutBinding =
+  result.binding = binding
+  result.descriptorType = descriptorType
+  result.descriptorCount = descriptorCount
+  result.stageFlags = stageFlags
+  result.pImmutableSamplers = pImmutableSamplers
+
+proc newVkDescriptorSetLayoutCreateInfo*(sType: VkStructureType = VkStructureTypeDescriptorSetLayoutCreateInfo, pNext: pointer = nil, flags: VkDescriptorSetLayoutCreateFlags = 0.VkDescriptorSetLayoutCreateFlags, bindingCount: uint32, pBindings: ptr VkDescriptorSetLayoutBinding): VkDescriptorSetLayoutCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.bindingCount = bindingCount
+  result.pBindings = pBindings
+
+proc newVkDescriptorPoolSize*(`type`: VkDescriptorType, descriptorCount: uint32): VkDescriptorPoolSize =
+  result.`type` = `type`
+  result.descriptorCount = descriptorCount
+
+proc newVkDescriptorPoolCreateInfo*(sType: VkStructureType = VkStructureTypeDescriptorPoolCreateInfo, pNext: pointer = nil, flags: VkDescriptorPoolCreateFlags = 0.VkDescriptorPoolCreateFlags, maxSets: uint32, poolSizeCount: uint32, pPoolSizes: ptr VkDescriptorPoolSize): VkDescriptorPoolCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.maxSets = maxSets
+  result.poolSizeCount = poolSizeCount
+  result.pPoolSizes = pPoolSizes
+
+proc newVkDescriptorSetAllocateInfo*(sType: VkStructureType = VkStructureTypeDescriptorSetAllocateInfo, pNext: pointer = nil, descriptorPool: VkDescriptorPool, descriptorSetCount: uint32, pSetLayouts: ptr VkDescriptorSetLayout): VkDescriptorSetAllocateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.descriptorPool = descriptorPool
+  result.descriptorSetCount = descriptorSetCount
+  result.pSetLayouts = pSetLayouts
+
+proc newVkSpecializationMapEntry*(constantID: uint32, offset: uint32, size: uint): VkSpecializationMapEntry =
+  result.constantID = constantID
+  result.offset = offset
+  result.size = size
+
+proc newVkSpecializationInfo*(mapEntryCount: uint32, pMapEntries: ptr VkSpecializationMapEntry, dataSize: uint, pData: pointer = nil): VkSpecializationInfo =
+  result.mapEntryCount = mapEntryCount
+  result.pMapEntries = pMapEntries
+  result.dataSize = dataSize
+  result.pData = pData
+
+proc newVkPipelineShaderStageCreateInfo*(sType: VkStructureType = VkStructureTypePipelineShaderStageCreateInfo, pNext: pointer = nil, flags: VkPipelineShaderStageCreateFlags = 0.VkPipelineShaderStageCreateFlags, stage: VkShaderStageFlagBits, module: VkShaderModule, pName: cstring, pSpecializationInfo: ptr VkSpecializationInfo): VkPipelineShaderStageCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.stage = stage
+  result.module = module
+  result.pName = pName
+  result.pSpecializationInfo = pSpecializationInfo
+
+proc newVkComputePipelineCreateInfo*(sType: VkStructureType = VkStructureTypeComputePipelineCreateInfo, pNext: pointer = nil, flags: VkPipelineCreateFlags = 0.VkPipelineCreateFlags, stage: VkPipelineShaderStageCreateInfo, layout: VkPipelineLayout, basePipelineHandle: VkPipeline, basePipelineIndex: int32): VkComputePipelineCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.stage = stage
+  result.layout = layout
+  result.basePipelineHandle = basePipelineHandle
+  result.basePipelineIndex = basePipelineIndex
+
+proc newVkVertexInputBindingDescription*(binding: uint32, stride: uint32, inputRate: VkVertexInputRate): VkVertexInputBindingDescription =
+  result.binding = binding
+  result.stride = stride
+  result.inputRate = inputRate
+
+proc newVkVertexInputAttributeDescription*(location: uint32, binding: uint32, format: VkFormat, offset: uint32): VkVertexInputAttributeDescription =
+  result.location = location
+  result.binding = binding
+  result.format = format
+  result.offset = offset
+
+proc newVkPipelineVertexInputStateCreateInfo*(sType: VkStructureType = VkStructureTypePipelineVertexInputStateCreateInfo, pNext: pointer = nil, flags: VkPipelineVertexInputStateCreateFlags = 0.VkPipelineVertexInputStateCreateFlags, vertexBindingDescriptionCount: uint32, pVertexBindingDescriptions: ptr VkVertexInputBindingDescription, vertexAttributeDescriptionCount: uint32, pVertexAttributeDescriptions: ptr VkVertexInputAttributeDescription): VkPipelineVertexInputStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.vertexBindingDescriptionCount = vertexBindingDescriptionCount
+  result.pVertexBindingDescriptions = pVertexBindingDescriptions
+  result.vertexAttributeDescriptionCount = vertexAttributeDescriptionCount
+  result.pVertexAttributeDescriptions = pVertexAttributeDescriptions
+
+proc newVkPipelineInputAssemblyStateCreateInfo*(sType: VkStructureType = VkStructureTypePipelineInputAssemblyStateCreateInfo, pNext: pointer = nil, flags: VkPipelineInputAssemblyStateCreateFlags = 0.VkPipelineInputAssemblyStateCreateFlags, topology: VkPrimitiveTopology, primitiveRestartEnable: VkBool32): VkPipelineInputAssemblyStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.topology = topology
+  result.primitiveRestartEnable = primitiveRestartEnable
+
+proc newVkPipelineTessellationStateCreateInfo*(sType: VkStructureType = VkStructureTypePipelineTessellationStateCreateInfo, pNext: pointer = nil, flags: VkPipelineTessellationStateCreateFlags = 0.VkPipelineTessellationStateCreateFlags, patchControlPoints: uint32): VkPipelineTessellationStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.patchControlPoints = patchControlPoints
+
+proc newVkPipelineViewportStateCreateInfo*(sType: VkStructureType = VkStructureTypePipelineViewportStateCreateInfo, pNext: pointer = nil, flags: VkPipelineViewportStateCreateFlags = 0.VkPipelineViewportStateCreateFlags, viewportCount: uint32, pViewports: ptr VkViewport, scissorCount: uint32, pScissors: ptr VkRect2D): VkPipelineViewportStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.viewportCount = viewportCount
+  result.pViewports = pViewports
+  result.scissorCount = scissorCount
+  result.pScissors = pScissors
+
+proc newVkPipelineRasterizationStateCreateInfo*(sType: VkStructureType = VkStructureTypePipelineRasterizationStateCreateInfo, pNext: pointer = nil, flags: VkPipelineRasterizationStateCreateFlags = 0.VkPipelineRasterizationStateCreateFlags, depthClampEnable: VkBool32, rasterizerDiscardEnable: VkBool32, polygonMode: VkPolygonMode, cullMode: VkCullModeFlags, frontFace: VkFrontFace, depthBiasEnable: VkBool32, depthBiasConstantFactor: float32, depthBiasClamp: float32, depthBiasSlopeFactor: float32, lineWidth: float32): VkPipelineRasterizationStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.depthClampEnable = depthClampEnable
+  result.rasterizerDiscardEnable = rasterizerDiscardEnable
+  result.polygonMode = polygonMode
+  result.cullMode = cullMode
+  result.frontFace = frontFace
+  result.depthBiasEnable = depthBiasEnable
+  result.depthBiasConstantFactor = depthBiasConstantFactor
+  result.depthBiasClamp = depthBiasClamp
+  result.depthBiasSlopeFactor = depthBiasSlopeFactor
+  result.lineWidth = lineWidth
+
+proc newVkPipelineMultisampleStateCreateInfo*(sType: VkStructureType = VkStructureTypePipelineMultisampleStateCreateInfo, pNext: pointer = nil, flags: VkPipelineMultisampleStateCreateFlags = 0.VkPipelineMultisampleStateCreateFlags, rasterizationSamples: VkSampleCountFlagBits, sampleShadingEnable: VkBool32, minSampleShading: float32, pSampleMask: ptr VkSampleMask, alphaToCoverageEnable: VkBool32, alphaToOneEnable: VkBool32): VkPipelineMultisampleStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.rasterizationSamples = rasterizationSamples
+  result.sampleShadingEnable = sampleShadingEnable
+  result.minSampleShading = minSampleShading
+  result.pSampleMask = pSampleMask
+  result.alphaToCoverageEnable = alphaToCoverageEnable
+  result.alphaToOneEnable = alphaToOneEnable
+
+proc newVkPipelineColorBlendAttachmentState*(blendEnable: VkBool32, srcColorBlendFactor: VkBlendFactor, dstColorBlendFactor: VkBlendFactor, colorBlendOp: VkBlendOp, srcAlphaBlendFactor: VkBlendFactor, dstAlphaBlendFactor: VkBlendFactor, alphaBlendOp: VkBlendOp, colorWriteMask: VkColorComponentFlags): VkPipelineColorBlendAttachmentState =
+  result.blendEnable = blendEnable
+  result.srcColorBlendFactor = srcColorBlendFactor
+  result.dstColorBlendFactor = dstColorBlendFactor
+  result.colorBlendOp = colorBlendOp
+  result.srcAlphaBlendFactor = srcAlphaBlendFactor
+  result.dstAlphaBlendFactor = dstAlphaBlendFactor
+  result.alphaBlendOp = alphaBlendOp
+  result.colorWriteMask = colorWriteMask
+
+proc newVkPipelineColorBlendStateCreateInfo*(sType: VkStructureType = VkStructureTypePipelineColorBlendStateCreateInfo, pNext: pointer = nil, flags: VkPipelineColorBlendStateCreateFlags = 0.VkPipelineColorBlendStateCreateFlags, logicOpEnable: VkBool32, logicOp: VkLogicOp, attachmentCount: uint32, pAttachments: ptr VkPipelineColorBlendAttachmentState, blendConstants: array[4, float32]): VkPipelineColorBlendStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.logicOpEnable = logicOpEnable
+  result.logicOp = logicOp
+  result.attachmentCount = attachmentCount
+  result.pAttachments = pAttachments
+  result.blendConstants = blendConstants
+
+proc newVkPipelineDynamicStateCreateInfo*(sType: VkStructureType = VkStructureTypePipelineDynamicStateCreateInfo, pNext: pointer = nil, flags: VkPipelineDynamicStateCreateFlags = 0.VkPipelineDynamicStateCreateFlags, dynamicStateCount: uint32, pDynamicStates: ptr VkDynamicState): VkPipelineDynamicStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.dynamicStateCount = dynamicStateCount
+  result.pDynamicStates = pDynamicStates
+
+proc newVkStencilOpState*(failOp: VkStencilOp, passOp: VkStencilOp, depthFailOp: VkStencilOp, compareOp: VkCompareOp, compareMask: uint32, writeMask: uint32, reference: uint32): VkStencilOpState =
+  result.failOp = failOp
+  result.passOp = passOp
+  result.depthFailOp = depthFailOp
+  result.compareOp = compareOp
+  result.compareMask = compareMask
+  result.writeMask = writeMask
+  result.reference = reference
+
+proc newVkPipelineDepthStencilStateCreateInfo*(sType: VkStructureType = VkStructureTypePipelineDepthStencilStateCreateInfo, pNext: pointer = nil, flags: VkPipelineDepthStencilStateCreateFlags = 0.VkPipelineDepthStencilStateCreateFlags, depthTestEnable: VkBool32, depthWriteEnable: VkBool32, depthCompareOp: VkCompareOp, depthBoundsTestEnable: VkBool32, stencilTestEnable: VkBool32, front: VkStencilOpState, back: VkStencilOpState, minDepthBounds: float32, maxDepthBounds: float32): VkPipelineDepthStencilStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.depthTestEnable = depthTestEnable
+  result.depthWriteEnable = depthWriteEnable
+  result.depthCompareOp = depthCompareOp
+  result.depthBoundsTestEnable = depthBoundsTestEnable
+  result.stencilTestEnable = stencilTestEnable
+  result.front = front
+  result.back = back
+  result.minDepthBounds = minDepthBounds
+  result.maxDepthBounds = maxDepthBounds
+
+proc newVkGraphicsPipelineCreateInfo*(sType: VkStructureType = VkStructureTypeGraphicsPipelineCreateInfo, pNext: pointer = nil, flags: VkPipelineCreateFlags = 0.VkPipelineCreateFlags, stageCount: uint32, pStages: ptr VkPipelineShaderStageCreateInfo, pVertexInputState: ptr VkPipelineVertexInputStateCreateInfo, pInputAssemblyState: ptr VkPipelineInputAssemblyStateCreateInfo, pTessellationState: ptr VkPipelineTessellationStateCreateInfo, pViewportState: ptr VkPipelineViewportStateCreateInfo, pRasterizationState: ptr VkPipelineRasterizationStateCreateInfo, pMultisampleState: ptr VkPipelineMultisampleStateCreateInfo, pDepthStencilState: ptr VkPipelineDepthStencilStateCreateInfo, pColorBlendState: ptr VkPipelineColorBlendStateCreateInfo, pDynamicState: ptr VkPipelineDynamicStateCreateInfo, layout: VkPipelineLayout, renderPass: VkRenderPass, subpass: uint32, basePipelineHandle: VkPipeline, basePipelineIndex: int32): VkGraphicsPipelineCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.stageCount = stageCount
+  result.pStages = pStages
+  result.pVertexInputState = pVertexInputState
+  result.pInputAssemblyState = pInputAssemblyState
+  result.pTessellationState = pTessellationState
+  result.pViewportState = pViewportState
+  result.pRasterizationState = pRasterizationState
+  result.pMultisampleState = pMultisampleState
+  result.pDepthStencilState = pDepthStencilState
+  result.pColorBlendState = pColorBlendState
+  result.pDynamicState = pDynamicState
+  result.layout = layout
+  result.renderPass = renderPass
+  result.subpass = subpass
+  result.basePipelineHandle = basePipelineHandle
+  result.basePipelineIndex = basePipelineIndex
+
+proc newVkPipelineCacheCreateInfo*(sType: VkStructureType = VkStructureTypePipelineCacheCreateInfo, pNext: pointer = nil, flags: VkPipelineCacheCreateFlags = 0.VkPipelineCacheCreateFlags, initialDataSize: uint, pInitialData: pointer = nil): VkPipelineCacheCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.initialDataSize = initialDataSize
+  result.pInitialData = pInitialData
+
+proc newVkPushConstantRange*(stageFlags: VkShaderStageFlags, offset: uint32, size: uint32): VkPushConstantRange =
+  result.stageFlags = stageFlags
+  result.offset = offset
+  result.size = size
+
+proc newVkPipelineLayoutCreateInfo*(sType: VkStructureType = VkStructureTypePipelineLayoutCreateInfo, pNext: pointer = nil, flags: VkPipelineLayoutCreateFlags = 0.VkPipelineLayoutCreateFlags, setLayoutCount: uint32, pSetLayouts: ptr VkDescriptorSetLayout, pushConstantRangeCount: uint32, pPushConstantRanges: ptr VkPushConstantRange): VkPipelineLayoutCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.setLayoutCount = setLayoutCount
+  result.pSetLayouts = pSetLayouts
+  result.pushConstantRangeCount = pushConstantRangeCount
+  result.pPushConstantRanges = pPushConstantRanges
+
+proc newVkSamplerCreateInfo*(sType: VkStructureType = VkStructureTypeSamplerCreateInfo, pNext: pointer = nil, flags: VkSamplerCreateFlags = 0.VkSamplerCreateFlags, magFilter: VkFilter, minFilter: VkFilter, mipmapMode: VkSamplerMipmapMode, addressModeU: VkSamplerAddressMode, addressModeV: VkSamplerAddressMode, addressModeW: VkSamplerAddressMode, mipLodBias: float32, anisotropyEnable: VkBool32, maxAnisotropy: float32, compareEnable: VkBool32, compareOp: VkCompareOp, minLod: float32, maxLod: float32, borderColor: VkBorderColor, unnormalizedCoordinates: VkBool32): VkSamplerCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.magFilter = magFilter
+  result.minFilter = minFilter
+  result.mipmapMode = mipmapMode
+  result.addressModeU = addressModeU
+  result.addressModeV = addressModeV
+  result.addressModeW = addressModeW
+  result.mipLodBias = mipLodBias
+  result.anisotropyEnable = anisotropyEnable
+  result.maxAnisotropy = maxAnisotropy
+  result.compareEnable = compareEnable
+  result.compareOp = compareOp
+  result.minLod = minLod
+  result.maxLod = maxLod
+  result.borderColor = borderColor
+  result.unnormalizedCoordinates = unnormalizedCoordinates
+
+proc newVkCommandPoolCreateInfo*(sType: VkStructureType = VkStructureTypeCommandPoolCreateInfo, pNext: pointer = nil, flags: VkCommandPoolCreateFlags = 0.VkCommandPoolCreateFlags, queueFamilyIndex: uint32): VkCommandPoolCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.queueFamilyIndex = queueFamilyIndex
+
+proc newVkCommandBufferAllocateInfo*(sType: VkStructureType = VkStructureTypeCommandBufferAllocateInfo, pNext: pointer = nil, commandPool: VkCommandPool, level: VkCommandBufferLevel, commandBufferCount: uint32): VkCommandBufferAllocateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.commandPool = commandPool
+  result.level = level
+  result.commandBufferCount = commandBufferCount
+
+proc newVkCommandBufferInheritanceInfo*(sType: VkStructureType = VkStructureTypeCommandBufferInheritanceInfo, pNext: pointer = nil, renderPass: VkRenderPass, subpass: uint32, framebuffer: VkFramebuffer, occlusionQueryEnable: VkBool32, queryFlags: VkQueryControlFlags, pipelineStatistics: VkQueryPipelineStatisticFlags): VkCommandBufferInheritanceInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.renderPass = renderPass
+  result.subpass = subpass
+  result.framebuffer = framebuffer
+  result.occlusionQueryEnable = occlusionQueryEnable
+  result.queryFlags = queryFlags
+  result.pipelineStatistics = pipelineStatistics
+
+proc newVkCommandBufferBeginInfo*(sType: VkStructureType = VkStructureTypeCommandBufferBeginInfo, pNext: pointer = nil, flags: VkCommandBufferUsageFlags = 0.VkCommandBufferUsageFlags, pInheritanceInfo: ptr VkCommandBufferInheritanceInfo): VkCommandBufferBeginInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.pInheritanceInfo = pInheritanceInfo
+
+proc newVkRenderPassBeginInfo*(sType: VkStructureType = VkStructureTypeRenderPassBeginInfo, pNext: pointer = nil, renderPass: VkRenderPass, framebuffer: VkFramebuffer, renderArea: VkRect2D, clearValueCount: uint32, pClearValues: ptr VkClearValue): VkRenderPassBeginInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.renderPass = renderPass
+  result.framebuffer = framebuffer
+  result.renderArea = renderArea
+  result.clearValueCount = clearValueCount
+  result.pClearValues = pClearValues
+
+proc newVkClearDepthStencilValue*(depth: float32, stencil: uint32): VkClearDepthStencilValue =
+  result.depth = depth
+  result.stencil = stencil
+
+proc newVkClearAttachment*(aspectMask: VkImageAspectFlags, colorAttachment: uint32, clearValue: VkClearValue): VkClearAttachment =
+  result.aspectMask = aspectMask
+  result.colorAttachment = colorAttachment
+  result.clearValue = clearValue
+
+proc newVkAttachmentDescription*(flags: VkAttachmentDescriptionFlags = 0.VkAttachmentDescriptionFlags, format: VkFormat, samples: VkSampleCountFlagBits, loadOp: VkAttachmentLoadOp, storeOp: VkAttachmentStoreOp, stencilLoadOp: VkAttachmentLoadOp, stencilStoreOp: VkAttachmentStoreOp, initialLayout: VkImageLayout, finalLayout: VkImageLayout): VkAttachmentDescription =
+  result.flags = flags
+  result.format = format
+  result.samples = samples
+  result.loadOp = loadOp
+  result.storeOp = storeOp
+  result.stencilLoadOp = stencilLoadOp
+  result.stencilStoreOp = stencilStoreOp
+  result.initialLayout = initialLayout
+  result.finalLayout = finalLayout
+
+proc newVkAttachmentReference*(attachment: uint32, layout: VkImageLayout): VkAttachmentReference =
+  result.attachment = attachment
+  result.layout = layout
+
+proc newVkSubpassDescription*(flags: VkSubpassDescriptionFlags = 0.VkSubpassDescriptionFlags, pipelineBindPoint: VkPipelineBindPoint, inputAttachmentCount: uint32, pInputAttachments: ptr VkAttachmentReference, colorAttachmentCount: uint32, pColorAttachments: ptr VkAttachmentReference, pResolveAttachments: ptr VkAttachmentReference, pDepthStencilAttachment: ptr VkAttachmentReference, preserveAttachmentCount: uint32, pPreserveAttachments: ptr uint32): VkSubpassDescription =
+  result.flags = flags
+  result.pipelineBindPoint = pipelineBindPoint
+  result.inputAttachmentCount = inputAttachmentCount
+  result.pInputAttachments = pInputAttachments
+  result.colorAttachmentCount = colorAttachmentCount
+  result.pColorAttachments = pColorAttachments
+  result.pResolveAttachments = pResolveAttachments
+  result.pDepthStencilAttachment = pDepthStencilAttachment
+  result.preserveAttachmentCount = preserveAttachmentCount
+  result.pPreserveAttachments = pPreserveAttachments
+
+proc newVkSubpassDependency*(srcSubpass: uint32, dstSubpass: uint32, srcStageMask: VkPipelineStageFlags, dstStageMask: VkPipelineStageFlags, srcAccessMask: VkAccessFlags, dstAccessMask: VkAccessFlags, dependencyFlags: VkDependencyFlags): VkSubpassDependency =
+  result.srcSubpass = srcSubpass
+  result.dstSubpass = dstSubpass
+  result.srcStageMask = srcStageMask
+  result.dstStageMask = dstStageMask
+  result.srcAccessMask = srcAccessMask
+  result.dstAccessMask = dstAccessMask
+  result.dependencyFlags = dependencyFlags
+
+proc newVkRenderPassCreateInfo*(sType: VkStructureType = VkStructureTypeRenderPassCreateInfo, pNext: pointer = nil, flags: VkRenderPassCreateFlags = 0.VkRenderPassCreateFlags, attachmentCount: uint32, pAttachments: ptr VkAttachmentDescription, subpassCount: uint32, pSubpasses: ptr VkSubpassDescription, dependencyCount: uint32, pDependencies: ptr VkSubpassDependency): VkRenderPassCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.attachmentCount = attachmentCount
+  result.pAttachments = pAttachments
+  result.subpassCount = subpassCount
+  result.pSubpasses = pSubpasses
+  result.dependencyCount = dependencyCount
+  result.pDependencies = pDependencies
+
+proc newVkEventCreateInfo*(sType: VkStructureType = VkStructureTypeEventCreateInfo, pNext: pointer = nil, flags: VkEventCreateFlags = 0.VkEventCreateFlags): VkEventCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+
+proc newVkFenceCreateInfo*(sType: VkStructureType = VkStructureTypeFenceCreateInfo, pNext: pointer = nil, flags: VkFenceCreateFlags = 0.VkFenceCreateFlags): VkFenceCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+
+proc newVkPhysicalDeviceFeatures*(robustBufferAccess: VkBool32, fullDrawIndexUint32: VkBool32, imageCubeArray: VkBool32, independentBlend: VkBool32, geometryShader: VkBool32, tessellationShader: VkBool32, sampleRateShading: VkBool32, dualSrcBlend: VkBool32, logicOp: VkBool32, multiDrawIndirect: VkBool32, drawIndirectFirstInstance: VkBool32, depthClamp: VkBool32, depthBiasClamp: VkBool32, fillModeNonSolid: VkBool32, depthBounds: VkBool32, wideLines: VkBool32, largePoints: VkBool32, alphaToOne: VkBool32, multiViewport: VkBool32, samplerAnisotropy: VkBool32, textureCompressionETC2: VkBool32, textureCompressionASTC_LDR: VkBool32, textureCompressionBC: VkBool32, occlusionQueryPrecise: VkBool32, pipelineStatisticsQuery: VkBool32, vertexPipelineStoresAndAtomics: VkBool32, fragmentStoresAndAtomics: VkBool32, shaderTessellationAndGeometryPointSize: VkBool32, shaderImageGatherExtended: VkBool32, shaderStorageImageExtendedFormats: VkBool32, shaderStorageImageMultisample: VkBool32, shaderStorageImageReadWithoutFormat: VkBool32, shaderStorageImageWriteWithoutFormat: VkBool32, shaderUniformBufferArrayDynamicIndexing: VkBool32, shaderSampledImageArrayDynamicIndexing: VkBool32, shaderStorageBufferArrayDynamicIndexing: VkBool32, shaderStorageImageArrayDynamicIndexing: VkBool32, shaderClipDistance: VkBool32, shaderCullDistance: VkBool32, shaderFloat64: VkBool32, shaderInt64: VkBool32, shaderInt16: VkBool32, shaderResourceResidency: VkBool32, shaderResourceMinLod: VkBool32, sparseBinding: VkBool32, sparseResidencyBuffer: VkBool32, sparseResidencyImage2D: VkBool32, sparseResidencyImage3D: VkBool32, sparseResidency2Samples: VkBool32, sparseResidency4Samples: VkBool32, sparseResidency8Samples: VkBool32, sparseResidency16Samples: VkBool32, sparseResidencyAliased: VkBool32, variableMultisampleRate: VkBool32, inheritedQueries: VkBool32): VkPhysicalDeviceFeatures =
+  result.robustBufferAccess = robustBufferAccess
+  result.fullDrawIndexUint32 = fullDrawIndexUint32
+  result.imageCubeArray = imageCubeArray
+  result.independentBlend = independentBlend
+  result.geometryShader = geometryShader
+  result.tessellationShader = tessellationShader
+  result.sampleRateShading = sampleRateShading
+  result.dualSrcBlend = dualSrcBlend
+  result.logicOp = logicOp
+  result.multiDrawIndirect = multiDrawIndirect
+  result.drawIndirectFirstInstance = drawIndirectFirstInstance
+  result.depthClamp = depthClamp
+  result.depthBiasClamp = depthBiasClamp
+  result.fillModeNonSolid = fillModeNonSolid
+  result.depthBounds = depthBounds
+  result.wideLines = wideLines
+  result.largePoints = largePoints
+  result.alphaToOne = alphaToOne
+  result.multiViewport = multiViewport
+  result.samplerAnisotropy = samplerAnisotropy
+  result.textureCompressionETC2 = textureCompressionETC2
+  result.textureCompressionASTC_LDR = textureCompressionASTC_LDR
+  result.textureCompressionBC = textureCompressionBC
+  result.occlusionQueryPrecise = occlusionQueryPrecise
+  result.pipelineStatisticsQuery = pipelineStatisticsQuery
+  result.vertexPipelineStoresAndAtomics = vertexPipelineStoresAndAtomics
+  result.fragmentStoresAndAtomics = fragmentStoresAndAtomics
+  result.shaderTessellationAndGeometryPointSize = shaderTessellationAndGeometryPointSize
+  result.shaderImageGatherExtended = shaderImageGatherExtended
+  result.shaderStorageImageExtendedFormats = shaderStorageImageExtendedFormats
+  result.shaderStorageImageMultisample = shaderStorageImageMultisample
+  result.shaderStorageImageReadWithoutFormat = shaderStorageImageReadWithoutFormat
+  result.shaderStorageImageWriteWithoutFormat = shaderStorageImageWriteWithoutFormat
+  result.shaderUniformBufferArrayDynamicIndexing = shaderUniformBufferArrayDynamicIndexing
+  result.shaderSampledImageArrayDynamicIndexing = shaderSampledImageArrayDynamicIndexing
+  result.shaderStorageBufferArrayDynamicIndexing = shaderStorageBufferArrayDynamicIndexing
+  result.shaderStorageImageArrayDynamicIndexing = shaderStorageImageArrayDynamicIndexing
+  result.shaderClipDistance = shaderClipDistance
+  result.shaderCullDistance = shaderCullDistance
+  result.shaderFloat64 = shaderFloat64
+  result.shaderInt64 = shaderInt64
+  result.shaderInt16 = shaderInt16
+  result.shaderResourceResidency = shaderResourceResidency
+  result.shaderResourceMinLod = shaderResourceMinLod
+  result.sparseBinding = sparseBinding
+  result.sparseResidencyBuffer = sparseResidencyBuffer
+  result.sparseResidencyImage2D = sparseResidencyImage2D
+  result.sparseResidencyImage3D = sparseResidencyImage3D
+  result.sparseResidency2Samples = sparseResidency2Samples
+  result.sparseResidency4Samples = sparseResidency4Samples
+  result.sparseResidency8Samples = sparseResidency8Samples
+  result.sparseResidency16Samples = sparseResidency16Samples
+  result.sparseResidencyAliased = sparseResidencyAliased
+  result.variableMultisampleRate = variableMultisampleRate
+  result.inheritedQueries = inheritedQueries
+
+proc newVkPhysicalDeviceSparseProperties*(residencyStandard2DBlockShape: VkBool32, residencyStandard2DMultisampleBlockShape: VkBool32, residencyStandard3DBlockShape: VkBool32, residencyAlignedMipSize: VkBool32, residencyNonResidentStrict: VkBool32): VkPhysicalDeviceSparseProperties =
+  result.residencyStandard2DBlockShape = residencyStandard2DBlockShape
+  result.residencyStandard2DMultisampleBlockShape = residencyStandard2DMultisampleBlockShape
+  result.residencyStandard3DBlockShape = residencyStandard3DBlockShape
+  result.residencyAlignedMipSize = residencyAlignedMipSize
+  result.residencyNonResidentStrict = residencyNonResidentStrict
+
+proc newVkPhysicalDeviceLimits*(maxImageDimension1D: uint32, maxImageDimension2D: uint32, maxImageDimension3D: uint32, maxImageDimensionCube: uint32, maxImageArrayLayers: uint32, maxTexelBufferElements: uint32, maxUniformBufferRange: uint32, maxStorageBufferRange: uint32, maxPushConstantsSize: uint32, maxMemoryAllocationCount: uint32, maxSamplerAllocationCount: uint32, bufferImageGranularity: VkDeviceSize, sparseAddressSpaceSize: VkDeviceSize, maxBoundDescriptorSets: uint32, maxPerStageDescriptorSamplers: uint32, maxPerStageDescriptorUniformBuffers: uint32, maxPerStageDescriptorStorageBuffers: uint32, maxPerStageDescriptorSampledImages: uint32, maxPerStageDescriptorStorageImages: uint32, maxPerStageDescriptorInputAttachments: uint32, maxPerStageResources: uint32, maxDescriptorSetSamplers: uint32, maxDescriptorSetUniformBuffers: uint32, maxDescriptorSetUniformBuffersDynamic: uint32, maxDescriptorSetStorageBuffers: uint32, maxDescriptorSetStorageBuffersDynamic: uint32, maxDescriptorSetSampledImages: uint32, maxDescriptorSetStorageImages: uint32, maxDescriptorSetInputAttachments: uint32, maxVertexInputAttributes: uint32, maxVertexInputBindings: uint32, maxVertexInputAttributeOffset: uint32, maxVertexInputBindingStride: uint32, maxVertexOutputComponents: uint32, maxTessellationGenerationLevel: uint32, maxTessellationPatchSize: uint32, maxTessellationControlPerVertexInputComponents: uint32, maxTessellationControlPerVertexOutputComponents: uint32, maxTessellationControlPerPatchOutputComponents: uint32, maxTessellationControlTotalOutputComponents: uint32, maxTessellationEvaluationInputComponents: uint32, maxTessellationEvaluationOutputComponents: uint32, maxGeometryShaderInvocations: uint32, maxGeometryInputComponents: uint32, maxGeometryOutputComponents: uint32, maxGeometryOutputVertices: uint32, maxGeometryTotalOutputComponents: uint32, maxFragmentInputComponents: uint32, maxFragmentOutputAttachments: uint32, maxFragmentDualSrcAttachments: uint32, maxFragmentCombinedOutputResources: uint32, maxComputeSharedMemorySize: uint32, maxComputeWorkGroupCount: array[3, uint32], maxComputeWorkGroupInvocations: uint32, maxComputeWorkGroupSize: array[3, uint32], subPixelPrecisionBits: uint32, subTexelPrecisionBits: uint32, mipmapPrecisionBits: uint32, maxDrawIndexedIndexValue: uint32, maxDrawIndirectCount: uint32, maxSamplerLodBias: float32, maxSamplerAnisotropy: float32, maxViewports: uint32, maxViewportDimensions: array[2, uint32], viewportBoundsRange: array[2, float32], viewportSubPixelBits: uint32, minMemoryMapAlignment: uint, minTexelBufferOffsetAlignment: VkDeviceSize, minUniformBufferOffsetAlignment: VkDeviceSize, minStorageBufferOffsetAlignment: VkDeviceSize, minTexelOffset: int32, maxTexelOffset: uint32, minTexelGatherOffset: int32, maxTexelGatherOffset: uint32, minInterpolationOffset: float32, maxInterpolationOffset: float32, subPixelInterpolationOffsetBits: uint32, maxFramebufferWidth: uint32, maxFramebufferHeight: uint32, maxFramebufferLayers: uint32, framebufferColorSampleCounts: VkSampleCountFlags, framebufferDepthSampleCounts: VkSampleCountFlags, framebufferStencilSampleCounts: VkSampleCountFlags, framebufferNoAttachmentsSampleCounts: VkSampleCountFlags, maxColorAttachments: uint32, sampledImageColorSampleCounts: VkSampleCountFlags, sampledImageIntegerSampleCounts: VkSampleCountFlags, sampledImageDepthSampleCounts: VkSampleCountFlags, sampledImageStencilSampleCounts: VkSampleCountFlags, storageImageSampleCounts: VkSampleCountFlags, maxSampleMaskWords: uint32, timestampComputeAndGraphics: VkBool32, timestampPeriod: float32, maxClipDistances: uint32, maxCullDistances: uint32, maxCombinedClipAndCullDistances: uint32, discreteQueuePriorities: uint32, pointSizeRange: array[2, float32], lineWidthRange: array[2, float32], pointSizeGranularity: float32, lineWidthGranularity: float32, strictLines: VkBool32, standardSampleLocations: VkBool32, optimalBufferCopyOffsetAlignment: VkDeviceSize, optimalBufferCopyRowPitchAlignment: VkDeviceSize, nonCoherentAtomSize: VkDeviceSize): VkPhysicalDeviceLimits =
+  result.maxImageDimension1D = maxImageDimension1D
+  result.maxImageDimension2D = maxImageDimension2D
+  result.maxImageDimension3D = maxImageDimension3D
+  result.maxImageDimensionCube = maxImageDimensionCube
+  result.maxImageArrayLayers = maxImageArrayLayers
+  result.maxTexelBufferElements = maxTexelBufferElements
+  result.maxUniformBufferRange = maxUniformBufferRange
+  result.maxStorageBufferRange = maxStorageBufferRange
+  result.maxPushConstantsSize = maxPushConstantsSize
+  result.maxMemoryAllocationCount = maxMemoryAllocationCount
+  result.maxSamplerAllocationCount = maxSamplerAllocationCount
+  result.bufferImageGranularity = bufferImageGranularity
+  result.sparseAddressSpaceSize = sparseAddressSpaceSize
+  result.maxBoundDescriptorSets = maxBoundDescriptorSets
+  result.maxPerStageDescriptorSamplers = maxPerStageDescriptorSamplers
+  result.maxPerStageDescriptorUniformBuffers = maxPerStageDescriptorUniformBuffers
+  result.maxPerStageDescriptorStorageBuffers = maxPerStageDescriptorStorageBuffers
+  result.maxPerStageDescriptorSampledImages = maxPerStageDescriptorSampledImages
+  result.maxPerStageDescriptorStorageImages = maxPerStageDescriptorStorageImages
+  result.maxPerStageDescriptorInputAttachments = maxPerStageDescriptorInputAttachments
+  result.maxPerStageResources = maxPerStageResources
+  result.maxDescriptorSetSamplers = maxDescriptorSetSamplers
+  result.maxDescriptorSetUniformBuffers = maxDescriptorSetUniformBuffers
+  result.maxDescriptorSetUniformBuffersDynamic = maxDescriptorSetUniformBuffersDynamic
+  result.maxDescriptorSetStorageBuffers = maxDescriptorSetStorageBuffers
+  result.maxDescriptorSetStorageBuffersDynamic = maxDescriptorSetStorageBuffersDynamic
+  result.maxDescriptorSetSampledImages = maxDescriptorSetSampledImages
+  result.maxDescriptorSetStorageImages = maxDescriptorSetStorageImages
+  result.maxDescriptorSetInputAttachments = maxDescriptorSetInputAttachments
+  result.maxVertexInputAttributes = maxVertexInputAttributes
+  result.maxVertexInputBindings = maxVertexInputBindings
+  result.maxVertexInputAttributeOffset = maxVertexInputAttributeOffset
+  result.maxVertexInputBindingStride = maxVertexInputBindingStride
+  result.maxVertexOutputComponents = maxVertexOutputComponents
+  result.maxTessellationGenerationLevel = maxTessellationGenerationLevel
+  result.maxTessellationPatchSize = maxTessellationPatchSize
+  result.maxTessellationControlPerVertexInputComponents = maxTessellationControlPerVertexInputComponents
+  result.maxTessellationControlPerVertexOutputComponents = maxTessellationControlPerVertexOutputComponents
+  result.maxTessellationControlPerPatchOutputComponents = maxTessellationControlPerPatchOutputComponents
+  result.maxTessellationControlTotalOutputComponents = maxTessellationControlTotalOutputComponents
+  result.maxTessellationEvaluationInputComponents = maxTessellationEvaluationInputComponents
+  result.maxTessellationEvaluationOutputComponents = maxTessellationEvaluationOutputComponents
+  result.maxGeometryShaderInvocations = maxGeometryShaderInvocations
+  result.maxGeometryInputComponents = maxGeometryInputComponents
+  result.maxGeometryOutputComponents = maxGeometryOutputComponents
+  result.maxGeometryOutputVertices = maxGeometryOutputVertices
+  result.maxGeometryTotalOutputComponents = maxGeometryTotalOutputComponents
+  result.maxFragmentInputComponents = maxFragmentInputComponents
+  result.maxFragmentOutputAttachments = maxFragmentOutputAttachments
+  result.maxFragmentDualSrcAttachments = maxFragmentDualSrcAttachments
+  result.maxFragmentCombinedOutputResources = maxFragmentCombinedOutputResources
+  result.maxComputeSharedMemorySize = maxComputeSharedMemorySize
+  result.maxComputeWorkGroupCount = maxComputeWorkGroupCount
+  result.maxComputeWorkGroupInvocations = maxComputeWorkGroupInvocations
+  result.maxComputeWorkGroupSize = maxComputeWorkGroupSize
+  result.subPixelPrecisionBits = subPixelPrecisionBits
+  result.subTexelPrecisionBits = subTexelPrecisionBits
+  result.mipmapPrecisionBits = mipmapPrecisionBits
+  result.maxDrawIndexedIndexValue = maxDrawIndexedIndexValue
+  result.maxDrawIndirectCount = maxDrawIndirectCount
+  result.maxSamplerLodBias = maxSamplerLodBias
+  result.maxSamplerAnisotropy = maxSamplerAnisotropy
+  result.maxViewports = maxViewports
+  result.maxViewportDimensions = maxViewportDimensions
+  result.viewportBoundsRange = viewportBoundsRange
+  result.viewportSubPixelBits = viewportSubPixelBits
+  result.minMemoryMapAlignment = minMemoryMapAlignment
+  result.minTexelBufferOffsetAlignment = minTexelBufferOffsetAlignment
+  result.minUniformBufferOffsetAlignment = minUniformBufferOffsetAlignment
+  result.minStorageBufferOffsetAlignment = minStorageBufferOffsetAlignment
+  result.minTexelOffset = minTexelOffset
+  result.maxTexelOffset = maxTexelOffset
+  result.minTexelGatherOffset = minTexelGatherOffset
+  result.maxTexelGatherOffset = maxTexelGatherOffset
+  result.minInterpolationOffset = minInterpolationOffset
+  result.maxInterpolationOffset = maxInterpolationOffset
+  result.subPixelInterpolationOffsetBits = subPixelInterpolationOffsetBits
+  result.maxFramebufferWidth = maxFramebufferWidth
+  result.maxFramebufferHeight = maxFramebufferHeight
+  result.maxFramebufferLayers = maxFramebufferLayers
+  result.framebufferColorSampleCounts = framebufferColorSampleCounts
+  result.framebufferDepthSampleCounts = framebufferDepthSampleCounts
+  result.framebufferStencilSampleCounts = framebufferStencilSampleCounts
+  result.framebufferNoAttachmentsSampleCounts = framebufferNoAttachmentsSampleCounts
+  result.maxColorAttachments = maxColorAttachments
+  result.sampledImageColorSampleCounts = sampledImageColorSampleCounts
+  result.sampledImageIntegerSampleCounts = sampledImageIntegerSampleCounts
+  result.sampledImageDepthSampleCounts = sampledImageDepthSampleCounts
+  result.sampledImageStencilSampleCounts = sampledImageStencilSampleCounts
+  result.storageImageSampleCounts = storageImageSampleCounts
+  result.maxSampleMaskWords = maxSampleMaskWords
+  result.timestampComputeAndGraphics = timestampComputeAndGraphics
+  result.timestampPeriod = timestampPeriod
+  result.maxClipDistances = maxClipDistances
+  result.maxCullDistances = maxCullDistances
+  result.maxCombinedClipAndCullDistances = maxCombinedClipAndCullDistances
+  result.discreteQueuePriorities = discreteQueuePriorities
+  result.pointSizeRange = pointSizeRange
+  result.lineWidthRange = lineWidthRange
+  result.pointSizeGranularity = pointSizeGranularity
+  result.lineWidthGranularity = lineWidthGranularity
+  result.strictLines = strictLines
+  result.standardSampleLocations = standardSampleLocations
+  result.optimalBufferCopyOffsetAlignment = optimalBufferCopyOffsetAlignment
+  result.optimalBufferCopyRowPitchAlignment = optimalBufferCopyRowPitchAlignment
+  result.nonCoherentAtomSize = nonCoherentAtomSize
+
+proc newVkSemaphoreCreateInfo*(sType: VkStructureType = VkStructureTypeSemaphoreCreateInfo, pNext: pointer = nil, flags: VkSemaphoreCreateFlags = 0.VkSemaphoreCreateFlags): VkSemaphoreCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+
+proc newVkQueryPoolCreateInfo*(sType: VkStructureType = VkStructureTypeQueryPoolCreateInfo, pNext: pointer = nil, flags: VkQueryPoolCreateFlags = 0.VkQueryPoolCreateFlags, queryType: VkQueryType, queryCount: uint32, pipelineStatistics: VkQueryPipelineStatisticFlags): VkQueryPoolCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.queryType = queryType
+  result.queryCount = queryCount
+  result.pipelineStatistics = pipelineStatistics
+
+proc newVkFramebufferCreateInfo*(sType: VkStructureType = VkStructureTypeFramebufferCreateInfo, pNext: pointer = nil, flags: VkFramebufferCreateFlags = 0.VkFramebufferCreateFlags, renderPass: VkRenderPass, attachmentCount: uint32, pAttachments: ptr VkImageView, width: uint32, height: uint32, layers: uint32): VkFramebufferCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.renderPass = renderPass
+  result.attachmentCount = attachmentCount
+  result.pAttachments = pAttachments
+  result.width = width
+  result.height = height
+  result.layers = layers
+
+proc newVkDrawIndirectCommand*(vertexCount: uint32, instanceCount: uint32, firstVertex: uint32, firstInstance: uint32): VkDrawIndirectCommand =
+  result.vertexCount = vertexCount
+  result.instanceCount = instanceCount
+  result.firstVertex = firstVertex
+  result.firstInstance = firstInstance
+
+proc newVkDrawIndexedIndirectCommand*(indexCount: uint32, instanceCount: uint32, firstIndex: uint32, vertexOffset: int32, firstInstance: uint32): VkDrawIndexedIndirectCommand =
+  result.indexCount = indexCount
+  result.instanceCount = instanceCount
+  result.firstIndex = firstIndex
+  result.vertexOffset = vertexOffset
+  result.firstInstance = firstInstance
+
+proc newVkDispatchIndirectCommand*(x: uint32, y: uint32, z: uint32): VkDispatchIndirectCommand =
+  result.x = x
+  result.y = y
+  result.z = z
+
+proc newVkSubmitInfo*(sType: VkStructureType = VkStructureTypeSubmitInfo, pNext: pointer = nil, waitSemaphoreCount: uint32, pWaitSemaphores: ptr VkSemaphore, pWaitDstStageMask: ptr VkPipelineStageFlags, commandBufferCount: uint32, pCommandBuffers: ptr VkCommandBuffer, signalSemaphoreCount: uint32, pSignalSemaphores: ptr VkSemaphore): VkSubmitInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.waitSemaphoreCount = waitSemaphoreCount
+  result.pWaitSemaphores = pWaitSemaphores
+  result.pWaitDstStageMask = pWaitDstStageMask
+  result.commandBufferCount = commandBufferCount
+  result.pCommandBuffers = pCommandBuffers
+  result.signalSemaphoreCount = signalSemaphoreCount
+  result.pSignalSemaphores = pSignalSemaphores
+
+proc newVkDisplayPropertiesKHR*(display: VkDisplayKHR, displayName: cstring, physicalDimensions: VkExtent2D, physicalResolution: VkExtent2D, supportedTransforms: VkSurfaceTransformFlagsKHR, planeReorderPossible: VkBool32, persistentContent: VkBool32): VkDisplayPropertiesKHR =
+  result.display = display
+  result.displayName = displayName
+  result.physicalDimensions = physicalDimensions
+  result.physicalResolution = physicalResolution
+  result.supportedTransforms = supportedTransforms
+  result.planeReorderPossible = planeReorderPossible
+  result.persistentContent = persistentContent
+
+proc newVkDisplayPlanePropertiesKHR*(currentDisplay: VkDisplayKHR, currentStackIndex: uint32): VkDisplayPlanePropertiesKHR =
+  result.currentDisplay = currentDisplay
+  result.currentStackIndex = currentStackIndex
+
+proc newVkDisplayModeParametersKHR*(visibleRegion: VkExtent2D, refreshRate: uint32): VkDisplayModeParametersKHR =
+  result.visibleRegion = visibleRegion
+  result.refreshRate = refreshRate
+
+proc newVkDisplayModePropertiesKHR*(displayMode: VkDisplayModeKHR, parameters: VkDisplayModeParametersKHR): VkDisplayModePropertiesKHR =
+  result.displayMode = displayMode
+  result.parameters = parameters
+
+proc newVkDisplayModeCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkDisplayModeCreateFlagsKHR = 0.VkDisplayModeCreateFlagsKHR, parameters: VkDisplayModeParametersKHR): VkDisplayModeCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.parameters = parameters
+
+proc newVkDisplayPlaneCapabilitiesKHR*(supportedAlpha: VkDisplayPlaneAlphaFlagsKHR, minSrcPosition: VkOffset2D, maxSrcPosition: VkOffset2D, minSrcExtent: VkExtent2D, maxSrcExtent: VkExtent2D, minDstPosition: VkOffset2D, maxDstPosition: VkOffset2D, minDstExtent: VkExtent2D, maxDstExtent: VkExtent2D): VkDisplayPlaneCapabilitiesKHR =
+  result.supportedAlpha = supportedAlpha
+  result.minSrcPosition = minSrcPosition
+  result.maxSrcPosition = maxSrcPosition
+  result.minSrcExtent = minSrcExtent
+  result.maxSrcExtent = maxSrcExtent
+  result.minDstPosition = minDstPosition
+  result.maxDstPosition = maxDstPosition
+  result.minDstExtent = minDstExtent
+  result.maxDstExtent = maxDstExtent
+
+proc newVkDisplaySurfaceCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkDisplaySurfaceCreateFlagsKHR = 0.VkDisplaySurfaceCreateFlagsKHR, displayMode: VkDisplayModeKHR, planeIndex: uint32, planeStackIndex: uint32, transform: VkSurfaceTransformFlagBitsKHR, globalAlpha: float32, alphaMode: VkDisplayPlaneAlphaFlagBitsKHR, imageExtent: VkExtent2D): VkDisplaySurfaceCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.displayMode = displayMode
+  result.planeIndex = planeIndex
+  result.planeStackIndex = planeStackIndex
+  result.transform = transform
+  result.globalAlpha = globalAlpha
+  result.alphaMode = alphaMode
+  result.imageExtent = imageExtent
+
+proc newVkDisplayPresentInfoKHR*(sType: VkStructureType, pNext: pointer = nil, srcRect: VkRect2D, dstRect: VkRect2D, persistent: VkBool32): VkDisplayPresentInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.srcRect = srcRect
+  result.dstRect = dstRect
+  result.persistent = persistent
+
+proc newVkSurfaceCapabilitiesKHR*(minImageCount: uint32, maxImageCount: uint32, currentExtent: VkExtent2D, minImageExtent: VkExtent2D, maxImageExtent: VkExtent2D, maxImageArrayLayers: uint32, supportedTransforms: VkSurfaceTransformFlagsKHR, currentTransform: VkSurfaceTransformFlagBitsKHR, supportedCompositeAlpha: VkCompositeAlphaFlagsKHR, supportedUsageFlags: VkImageUsageFlags): VkSurfaceCapabilitiesKHR =
+  result.minImageCount = minImageCount
+  result.maxImageCount = maxImageCount
+  result.currentExtent = currentExtent
+  result.minImageExtent = minImageExtent
+  result.maxImageExtent = maxImageExtent
+  result.maxImageArrayLayers = maxImageArrayLayers
+  result.supportedTransforms = supportedTransforms
+  result.currentTransform = currentTransform
+  result.supportedCompositeAlpha = supportedCompositeAlpha
+  result.supportedUsageFlags = supportedUsageFlags
+
+proc newVkAndroidSurfaceCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkAndroidSurfaceCreateFlagsKHR = 0.VkAndroidSurfaceCreateFlagsKHR, window: ptr ANativeWindow): VkAndroidSurfaceCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.window = window
+
+proc newVkViSurfaceCreateInfoNN*(sType: VkStructureType, pNext: pointer = nil, flags: VkViSurfaceCreateFlagsNN = 0.VkViSurfaceCreateFlagsNN, window: pointer = nil): VkViSurfaceCreateInfoNN =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.window = window
+
+proc newVkWaylandSurfaceCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkWaylandSurfaceCreateFlagsKHR = 0.VkWaylandSurfaceCreateFlagsKHR, display: ptr wl_display, surface: ptr wl_surface): VkWaylandSurfaceCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.display = display
+  result.surface = surface
+
+proc newVkWin32SurfaceCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkWin32SurfaceCreateFlagsKHR = 0.VkWin32SurfaceCreateFlagsKHR, hinstance: HINSTANCE, hwnd: HWND): VkWin32SurfaceCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.hinstance = hinstance
+  result.hwnd = hwnd
+
+proc newVkXlibSurfaceCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkXlibSurfaceCreateFlagsKHR = 0.VkXlibSurfaceCreateFlagsKHR, dpy: ptr Display, window: Window): VkXlibSurfaceCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.dpy = dpy
+  result.window = window
+
+proc newVkXcbSurfaceCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkXcbSurfaceCreateFlagsKHR = 0.VkXcbSurfaceCreateFlagsKHR, connection: ptr xcb_connection_t, window: xcb_window_t): VkXcbSurfaceCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.connection = connection
+  result.window = window
+
+proc newVkDirectFBSurfaceCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkDirectFBSurfaceCreateFlagsEXT = 0.VkDirectFBSurfaceCreateFlagsEXT, dfb: ptr IDirectFB, surface: ptr IDirectFBSurface): VkDirectFBSurfaceCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.dfb = dfb
+  result.surface = surface
+
+proc newVkImagePipeSurfaceCreateInfoFUCHSIA*(sType: VkStructureType, pNext: pointer = nil, flags: VkImagePipeSurfaceCreateFlagsFUCHSIA = 0.VkImagePipeSurfaceCreateFlagsFUCHSIA, imagePipeHandle: zx_handle_t): VkImagePipeSurfaceCreateInfoFUCHSIA =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.imagePipeHandle = imagePipeHandle
+
+proc newVkStreamDescriptorSurfaceCreateInfoGGP*(sType: VkStructureType, pNext: pointer = nil, flags: VkStreamDescriptorSurfaceCreateFlagsGGP = 0.VkStreamDescriptorSurfaceCreateFlagsGGP, streamDescriptor: GgpStreamDescriptor): VkStreamDescriptorSurfaceCreateInfoGGP =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.streamDescriptor = streamDescriptor
+
+proc newVkSurfaceFormatKHR*(format: VkFormat, colorSpace: VkColorSpaceKHR): VkSurfaceFormatKHR =
+  result.format = format
+  result.colorSpace = colorSpace
+
+proc newVkSwapchainCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkSwapchainCreateFlagsKHR = 0.VkSwapchainCreateFlagsKHR, surface: VkSurfaceKHR, minImageCount: uint32, imageFormat: VkFormat, imageColorSpace: VkColorSpaceKHR, imageExtent: VkExtent2D, imageArrayLayers: uint32, imageUsage: VkImageUsageFlags, imageSharingMode: VkSharingMode, queueFamilyIndexCount: uint32, pQueueFamilyIndices: ptr uint32, preTransform: VkSurfaceTransformFlagBitsKHR, compositeAlpha: VkCompositeAlphaFlagBitsKHR, presentMode: VkPresentModeKHR, clipped: VkBool32, oldSwapchain: VkSwapchainKHR): VkSwapchainCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.surface = surface
+  result.minImageCount = minImageCount
+  result.imageFormat = imageFormat
+  result.imageColorSpace = imageColorSpace
+  result.imageExtent = imageExtent
+  result.imageArrayLayers = imageArrayLayers
+  result.imageUsage = imageUsage
+  result.imageSharingMode = imageSharingMode
+  result.queueFamilyIndexCount = queueFamilyIndexCount
+  result.pQueueFamilyIndices = pQueueFamilyIndices
+  result.preTransform = preTransform
+  result.compositeAlpha = compositeAlpha
+  result.presentMode = presentMode
+  result.clipped = clipped
+  result.oldSwapchain = oldSwapchain
+
+proc newVkPresentInfoKHR*(sType: VkStructureType, pNext: pointer = nil, waitSemaphoreCount: uint32, pWaitSemaphores: ptr VkSemaphore, swapchainCount: uint32, pSwapchains: ptr VkSwapchainKHR, pImageIndices: ptr uint32, pResults: ptr VkResult): VkPresentInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.waitSemaphoreCount = waitSemaphoreCount
+  result.pWaitSemaphores = pWaitSemaphores
+  result.swapchainCount = swapchainCount
+  result.pSwapchains = pSwapchains
+  result.pImageIndices = pImageIndices
+  result.pResults = pResults
+
+proc newVkDebugReportCallbackCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkDebugReportFlagsEXT = 0.VkDebugReportFlagsEXT, pfnCallback: PFN_vkDebugReportCallbackEXT, pUserData: pointer = nil): VkDebugReportCallbackCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.pfnCallback = pfnCallback
+  result.pUserData = pUserData
+
+proc newVkValidationFlagsEXT*(sType: VkStructureType, pNext: pointer = nil, disabledValidationCheckCount: uint32, pDisabledValidationChecks: ptr VkValidationCheckEXT): VkValidationFlagsEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.disabledValidationCheckCount = disabledValidationCheckCount
+  result.pDisabledValidationChecks = pDisabledValidationChecks
+
+proc newVkValidationFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, enabledValidationFeatureCount: uint32, pEnabledValidationFeatures: ptr VkValidationFeatureEnableEXT, disabledValidationFeatureCount: uint32, pDisabledValidationFeatures: ptr VkValidationFeatureDisableEXT): VkValidationFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.enabledValidationFeatureCount = enabledValidationFeatureCount
+  result.pEnabledValidationFeatures = pEnabledValidationFeatures
+  result.disabledValidationFeatureCount = disabledValidationFeatureCount
+  result.pDisabledValidationFeatures = pDisabledValidationFeatures
+
+proc newVkPipelineRasterizationStateRasterizationOrderAMD*(sType: VkStructureType, pNext: pointer = nil, rasterizationOrder: VkRasterizationOrderAMD): VkPipelineRasterizationStateRasterizationOrderAMD =
+  result.sType = sType
+  result.pNext = pNext
+  result.rasterizationOrder = rasterizationOrder
+
+proc newVkDebugMarkerObjectNameInfoEXT*(sType: VkStructureType, pNext: pointer = nil, objectType: VkDebugReportObjectTypeEXT, `object`: uint64, pObjectName: cstring): VkDebugMarkerObjectNameInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.objectType = objectType
+  result.`object` = `object`
+  result.pObjectName = pObjectName
+
+proc newVkDebugMarkerObjectTagInfoEXT*(sType: VkStructureType, pNext: pointer = nil, objectType: VkDebugReportObjectTypeEXT, `object`: uint64, tagName: uint64, tagSize: uint, pTag: pointer = nil): VkDebugMarkerObjectTagInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.objectType = objectType
+  result.`object` = `object`
+  result.tagName = tagName
+  result.tagSize = tagSize
+  result.pTag = pTag
+
+proc newVkDebugMarkerMarkerInfoEXT*(sType: VkStructureType, pNext: pointer = nil, pMarkerName: cstring, color: array[4, float32]): VkDebugMarkerMarkerInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.pMarkerName = pMarkerName
+  result.color = color
+
+proc newVkDedicatedAllocationImageCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, dedicatedAllocation: VkBool32): VkDedicatedAllocationImageCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.dedicatedAllocation = dedicatedAllocation
+
+proc newVkDedicatedAllocationBufferCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, dedicatedAllocation: VkBool32): VkDedicatedAllocationBufferCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.dedicatedAllocation = dedicatedAllocation
+
+proc newVkDedicatedAllocationMemoryAllocateInfoNV*(sType: VkStructureType, pNext: pointer = nil, image: VkImage, buffer: VkBuffer): VkDedicatedAllocationMemoryAllocateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.image = image
+  result.buffer = buffer
+
+proc newVkExternalImageFormatPropertiesNV*(imageFormatProperties: VkImageFormatProperties, externalMemoryFeatures: VkExternalMemoryFeatureFlagsNV, exportFromImportedHandleTypes: VkExternalMemoryHandleTypeFlagsNV, compatibleHandleTypes: VkExternalMemoryHandleTypeFlagsNV): VkExternalImageFormatPropertiesNV =
+  result.imageFormatProperties = imageFormatProperties
+  result.externalMemoryFeatures = externalMemoryFeatures
+  result.exportFromImportedHandleTypes = exportFromImportedHandleTypes
+  result.compatibleHandleTypes = compatibleHandleTypes
+
+proc newVkExternalMemoryImageCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, handleTypes: VkExternalMemoryHandleTypeFlagsNV): VkExternalMemoryImageCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleTypes = handleTypes
+
+proc newVkExportMemoryAllocateInfoNV*(sType: VkStructureType, pNext: pointer = nil, handleTypes: VkExternalMemoryHandleTypeFlagsNV): VkExportMemoryAllocateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleTypes = handleTypes
+
+proc newVkImportMemoryWin32HandleInfoNV*(sType: VkStructureType, pNext: pointer = nil, handleType: VkExternalMemoryHandleTypeFlagsNV, handle: HANDLE): VkImportMemoryWin32HandleInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleType = handleType
+  result.handle = handle
+
+proc newVkExportMemoryWin32HandleInfoNV*(sType: VkStructureType, pNext: pointer = nil, pAttributes: ptr SECURITY_ATTRIBUTES, dwAccess: DWORD): VkExportMemoryWin32HandleInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.pAttributes = pAttributes
+  result.dwAccess = dwAccess
+
+proc newVkWin32KeyedMutexAcquireReleaseInfoNV*(sType: VkStructureType, pNext: pointer = nil, acquireCount: uint32, pAcquireSyncs: ptr VkDeviceMemory, pAcquireKeys: ptr uint64, pAcquireTimeoutMilliseconds: ptr uint32, releaseCount: uint32, pReleaseSyncs: ptr VkDeviceMemory, pReleaseKeys: ptr uint64): VkWin32KeyedMutexAcquireReleaseInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.acquireCount = acquireCount
+  result.pAcquireSyncs = pAcquireSyncs
+  result.pAcquireKeys = pAcquireKeys
+  result.pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds
+  result.releaseCount = releaseCount
+  result.pReleaseSyncs = pReleaseSyncs
+  result.pReleaseKeys = pReleaseKeys
+
+proc newVkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, deviceGeneratedCommands: VkBool32): VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceGeneratedCommands = deviceGeneratedCommands
+
+proc newVkDevicePrivateDataCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, privateDataSlotRequestCount: uint32): VkDevicePrivateDataCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.privateDataSlotRequestCount = privateDataSlotRequestCount
+
+proc newVkPrivateDataSlotCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkPrivateDataSlotCreateFlagsEXT = 0.VkPrivateDataSlotCreateFlagsEXT): VkPrivateDataSlotCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+
+proc newVkPhysicalDevicePrivateDataFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, privateData: VkBool32): VkPhysicalDevicePrivateDataFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.privateData = privateData
+
+proc newVkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*(sType: VkStructureType, pNext: pointer = nil, maxGraphicsShaderGroupCount: uint32, maxIndirectSequenceCount: uint32, maxIndirectCommandsTokenCount: uint32, maxIndirectCommandsStreamCount: uint32, maxIndirectCommandsTokenOffset: uint32, maxIndirectCommandsStreamStride: uint32, minSequencesCountBufferOffsetAlignment: uint32, minSequencesIndexBufferOffsetAlignment: uint32, minIndirectCommandsBufferOffsetAlignment: uint32): VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxGraphicsShaderGroupCount = maxGraphicsShaderGroupCount
+  result.maxIndirectSequenceCount = maxIndirectSequenceCount
+  result.maxIndirectCommandsTokenCount = maxIndirectCommandsTokenCount
+  result.maxIndirectCommandsStreamCount = maxIndirectCommandsStreamCount
+  result.maxIndirectCommandsTokenOffset = maxIndirectCommandsTokenOffset
+  result.maxIndirectCommandsStreamStride = maxIndirectCommandsStreamStride
+  result.minSequencesCountBufferOffsetAlignment = minSequencesCountBufferOffsetAlignment
+  result.minSequencesIndexBufferOffsetAlignment = minSequencesIndexBufferOffsetAlignment
+  result.minIndirectCommandsBufferOffsetAlignment = minIndirectCommandsBufferOffsetAlignment
+
+proc newVkGraphicsShaderGroupCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, stageCount: uint32, pStages: ptr VkPipelineShaderStageCreateInfo, pVertexInputState: ptr VkPipelineVertexInputStateCreateInfo, pTessellationState: ptr VkPipelineTessellationStateCreateInfo): VkGraphicsShaderGroupCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.stageCount = stageCount
+  result.pStages = pStages
+  result.pVertexInputState = pVertexInputState
+  result.pTessellationState = pTessellationState
+
+proc newVkGraphicsPipelineShaderGroupsCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, groupCount: uint32, pGroups: ptr VkGraphicsShaderGroupCreateInfoNV, pipelineCount: uint32, pPipelines: ptr VkPipeline): VkGraphicsPipelineShaderGroupsCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.groupCount = groupCount
+  result.pGroups = pGroups
+  result.pipelineCount = pipelineCount
+  result.pPipelines = pPipelines
+
+proc newVkBindShaderGroupIndirectCommandNV*(groupIndex: uint32): VkBindShaderGroupIndirectCommandNV =
+  result.groupIndex = groupIndex
+
+proc newVkBindIndexBufferIndirectCommandNV*(bufferAddress: VkDeviceAddress, size: uint32, indexType: VkIndexType): VkBindIndexBufferIndirectCommandNV =
+  result.bufferAddress = bufferAddress
+  result.size = size
+  result.indexType = indexType
+
+proc newVkBindVertexBufferIndirectCommandNV*(bufferAddress: VkDeviceAddress, size: uint32, stride: uint32): VkBindVertexBufferIndirectCommandNV =
+  result.bufferAddress = bufferAddress
+  result.size = size
+  result.stride = stride
+
+proc newVkSetStateFlagsIndirectCommandNV*(data: uint32): VkSetStateFlagsIndirectCommandNV =
+  result.data = data
+
+proc newVkIndirectCommandsStreamNV*(buffer: VkBuffer, offset: VkDeviceSize): VkIndirectCommandsStreamNV =
+  result.buffer = buffer
+  result.offset = offset
+
+proc newVkIndirectCommandsLayoutTokenNV*(sType: VkStructureType, pNext: pointer = nil, tokenType: VkIndirectCommandsTokenTypeNV, stream: uint32, offset: uint32, vertexBindingUnit: uint32, vertexDynamicStride: VkBool32, pushconstantPipelineLayout: VkPipelineLayout, pushconstantShaderStageFlags: VkShaderStageFlags, pushconstantOffset: uint32, pushconstantSize: uint32, indirectStateFlags: VkIndirectStateFlagsNV, indexTypeCount: uint32, pIndexTypes: ptr VkIndexType, pIndexTypeValues: ptr uint32): VkIndirectCommandsLayoutTokenNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.tokenType = tokenType
+  result.stream = stream
+  result.offset = offset
+  result.vertexBindingUnit = vertexBindingUnit
+  result.vertexDynamicStride = vertexDynamicStride
+  result.pushconstantPipelineLayout = pushconstantPipelineLayout
+  result.pushconstantShaderStageFlags = pushconstantShaderStageFlags
+  result.pushconstantOffset = pushconstantOffset
+  result.pushconstantSize = pushconstantSize
+  result.indirectStateFlags = indirectStateFlags
+  result.indexTypeCount = indexTypeCount
+  result.pIndexTypes = pIndexTypes
+  result.pIndexTypeValues = pIndexTypeValues
+
+proc newVkIndirectCommandsLayoutCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, flags: VkIndirectCommandsLayoutUsageFlagsNV = 0.VkIndirectCommandsLayoutUsageFlagsNV, pipelineBindPoint: VkPipelineBindPoint, tokenCount: uint32, pTokens: ptr VkIndirectCommandsLayoutTokenNV, streamCount: uint32, pStreamStrides: ptr uint32): VkIndirectCommandsLayoutCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.pipelineBindPoint = pipelineBindPoint
+  result.tokenCount = tokenCount
+  result.pTokens = pTokens
+  result.streamCount = streamCount
+  result.pStreamStrides = pStreamStrides
+
+proc newVkGeneratedCommandsInfoNV*(sType: VkStructureType, pNext: pointer = nil, pipelineBindPoint: VkPipelineBindPoint, pipeline: VkPipeline, indirectCommandsLayout: VkIndirectCommandsLayoutNV, streamCount: uint32, pStreams: ptr VkIndirectCommandsStreamNV, sequencesCount: uint32, preprocessBuffer: VkBuffer, preprocessOffset: VkDeviceSize, preprocessSize: VkDeviceSize, sequencesCountBuffer: VkBuffer, sequencesCountOffset: VkDeviceSize, sequencesIndexBuffer: VkBuffer, sequencesIndexOffset: VkDeviceSize): VkGeneratedCommandsInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.pipelineBindPoint = pipelineBindPoint
+  result.pipeline = pipeline
+  result.indirectCommandsLayout = indirectCommandsLayout
+  result.streamCount = streamCount
+  result.pStreams = pStreams
+  result.sequencesCount = sequencesCount
+  result.preprocessBuffer = preprocessBuffer
+  result.preprocessOffset = preprocessOffset
+  result.preprocessSize = preprocessSize
+  result.sequencesCountBuffer = sequencesCountBuffer
+  result.sequencesCountOffset = sequencesCountOffset
+  result.sequencesIndexBuffer = sequencesIndexBuffer
+  result.sequencesIndexOffset = sequencesIndexOffset
+
+proc newVkGeneratedCommandsMemoryRequirementsInfoNV*(sType: VkStructureType, pNext: pointer = nil, pipelineBindPoint: VkPipelineBindPoint, pipeline: VkPipeline, indirectCommandsLayout: VkIndirectCommandsLayoutNV, maxSequencesCount: uint32): VkGeneratedCommandsMemoryRequirementsInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.pipelineBindPoint = pipelineBindPoint
+  result.pipeline = pipeline
+  result.indirectCommandsLayout = indirectCommandsLayout
+  result.maxSequencesCount = maxSequencesCount
+
+proc newVkPhysicalDeviceFeatures2*(sType: VkStructureType, pNext: pointer = nil, features: VkPhysicalDeviceFeatures): VkPhysicalDeviceFeatures2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.features = features
+
+proc newVkPhysicalDeviceProperties2*(sType: VkStructureType, pNext: pointer = nil, properties: VkPhysicalDeviceProperties): VkPhysicalDeviceProperties2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.properties = properties
+
+proc newVkFormatProperties2*(sType: VkStructureType, pNext: pointer = nil, formatProperties: VkFormatProperties): VkFormatProperties2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.formatProperties = formatProperties
+
+proc newVkImageFormatProperties2*(sType: VkStructureType, pNext: pointer = nil, imageFormatProperties: VkImageFormatProperties): VkImageFormatProperties2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.imageFormatProperties = imageFormatProperties
+
+proc newVkPhysicalDeviceImageFormatInfo2*(sType: VkStructureType, pNext: pointer = nil, format: VkFormat, `type`: VkImageType, tiling: VkImageTiling, usage: VkImageUsageFlags, flags: VkImageCreateFlags = 0.VkImageCreateFlags): VkPhysicalDeviceImageFormatInfo2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.format = format
+  result.`type` = `type`
+  result.tiling = tiling
+  result.usage = usage
+  result.flags = flags
+
+proc newVkQueueFamilyProperties2*(sType: VkStructureType, pNext: pointer = nil, queueFamilyProperties: VkQueueFamilyProperties): VkQueueFamilyProperties2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.queueFamilyProperties = queueFamilyProperties
+
+proc newVkPhysicalDeviceMemoryProperties2*(sType: VkStructureType, pNext: pointer = nil, memoryProperties: VkPhysicalDeviceMemoryProperties): VkPhysicalDeviceMemoryProperties2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.memoryProperties = memoryProperties
+
+proc newVkSparseImageFormatProperties2*(sType: VkStructureType, pNext: pointer = nil, properties: VkSparseImageFormatProperties): VkSparseImageFormatProperties2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.properties = properties
+
+proc newVkPhysicalDeviceSparseImageFormatInfo2*(sType: VkStructureType, pNext: pointer = nil, format: VkFormat, `type`: VkImageType, samples: VkSampleCountFlagBits, usage: VkImageUsageFlags, tiling: VkImageTiling): VkPhysicalDeviceSparseImageFormatInfo2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.format = format
+  result.`type` = `type`
+  result.samples = samples
+  result.usage = usage
+  result.tiling = tiling
+
+proc newVkPhysicalDevicePushDescriptorPropertiesKHR*(sType: VkStructureType, pNext: pointer = nil, maxPushDescriptors: uint32): VkPhysicalDevicePushDescriptorPropertiesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxPushDescriptors = maxPushDescriptors
+
+proc newVkConformanceVersion*(major: uint8, minor: uint8, subminor: uint8, patch: uint8): VkConformanceVersion =
+  result.major = major
+  result.minor = minor
+  result.subminor = subminor
+  result.patch = patch
+
+proc newVkPhysicalDeviceDriverProperties*(sType: VkStructureType, pNext: pointer = nil, driverID: VkDriverId, driverName: array[VK_MAX_DRIVER_NAME_SIZE, char], driverInfo: array[VK_MAX_DRIVER_INFO_SIZE, char], conformanceVersion: VkConformanceVersion): VkPhysicalDeviceDriverProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.driverID = driverID
+  result.driverName = driverName
+  result.driverInfo = driverInfo
+  result.conformanceVersion = conformanceVersion
+
+proc newVkPresentRegionsKHR*(sType: VkStructureType, pNext: pointer = nil, swapchainCount: uint32, pRegions: ptr VkPresentRegionKHR): VkPresentRegionsKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.swapchainCount = swapchainCount
+  result.pRegions = pRegions
+
+proc newVkPresentRegionKHR*(rectangleCount: uint32, pRectangles: ptr VkRectLayerKHR): VkPresentRegionKHR =
+  result.rectangleCount = rectangleCount
+  result.pRectangles = pRectangles
+
+proc newVkRectLayerKHR*(offset: VkOffset2D, extent: VkExtent2D, layer: uint32): VkRectLayerKHR =
+  result.offset = offset
+  result.extent = extent
+  result.layer = layer
+
+proc newVkPhysicalDeviceVariablePointersFeatures*(sType: VkStructureType, pNext: pointer = nil, variablePointersStorageBuffer: VkBool32, variablePointers: VkBool32): VkPhysicalDeviceVariablePointersFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.variablePointersStorageBuffer = variablePointersStorageBuffer
+  result.variablePointers = variablePointers
+
+proc newVkExternalMemoryProperties*(externalMemoryFeatures: VkExternalMemoryFeatureFlags, exportFromImportedHandleTypes: VkExternalMemoryHandleTypeFlags, compatibleHandleTypes: VkExternalMemoryHandleTypeFlags): VkExternalMemoryProperties =
+  result.externalMemoryFeatures = externalMemoryFeatures
+  result.exportFromImportedHandleTypes = exportFromImportedHandleTypes
+  result.compatibleHandleTypes = compatibleHandleTypes
+
+proc newVkPhysicalDeviceExternalImageFormatInfo*(sType: VkStructureType, pNext: pointer = nil, handleType: VkExternalMemoryHandleTypeFlagBits): VkPhysicalDeviceExternalImageFormatInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleType = handleType
+
+proc newVkExternalImageFormatProperties*(sType: VkStructureType, pNext: pointer = nil, externalMemoryProperties: VkExternalMemoryProperties): VkExternalImageFormatProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.externalMemoryProperties = externalMemoryProperties
+
+proc newVkPhysicalDeviceExternalBufferInfo*(sType: VkStructureType, pNext: pointer = nil, flags: VkBufferCreateFlags = 0.VkBufferCreateFlags, usage: VkBufferUsageFlags, handleType: VkExternalMemoryHandleTypeFlagBits): VkPhysicalDeviceExternalBufferInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.usage = usage
+  result.handleType = handleType
+
+proc newVkExternalBufferProperties*(sType: VkStructureType, pNext: pointer = nil, externalMemoryProperties: VkExternalMemoryProperties): VkExternalBufferProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.externalMemoryProperties = externalMemoryProperties
+
+proc newVkPhysicalDeviceIDProperties*(sType: VkStructureType, pNext: pointer = nil, deviceUUID: array[VK_UUID_SIZE, uint8], driverUUID: array[VK_UUID_SIZE, uint8], deviceLUID: array[VK_LUID_SIZE, uint8], deviceNodeMask: uint32, deviceLUIDValid: VkBool32): VkPhysicalDeviceIDProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceUUID = deviceUUID
+  result.driverUUID = driverUUID
+  result.deviceLUID = deviceLUID
+  result.deviceNodeMask = deviceNodeMask
+  result.deviceLUIDValid = deviceLUIDValid
+
+proc newVkExternalMemoryImageCreateInfo*(sType: VkStructureType, pNext: pointer = nil, handleTypes: VkExternalMemoryHandleTypeFlags): VkExternalMemoryImageCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleTypes = handleTypes
+
+proc newVkExternalMemoryBufferCreateInfo*(sType: VkStructureType, pNext: pointer = nil, handleTypes: VkExternalMemoryHandleTypeFlags): VkExternalMemoryBufferCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleTypes = handleTypes
+
+proc newVkExportMemoryAllocateInfo*(sType: VkStructureType, pNext: pointer = nil, handleTypes: VkExternalMemoryHandleTypeFlags): VkExportMemoryAllocateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleTypes = handleTypes
+
+proc newVkImportMemoryWin32HandleInfoKHR*(sType: VkStructureType, pNext: pointer = nil, handleType: VkExternalMemoryHandleTypeFlagBits, handle: HANDLE, name: LPCWSTR): VkImportMemoryWin32HandleInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleType = handleType
+  result.handle = handle
+  result.name = name
+
+proc newVkExportMemoryWin32HandleInfoKHR*(sType: VkStructureType, pNext: pointer = nil, pAttributes: ptr SECURITY_ATTRIBUTES, dwAccess: DWORD, name: LPCWSTR): VkExportMemoryWin32HandleInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.pAttributes = pAttributes
+  result.dwAccess = dwAccess
+  result.name = name
+
+proc newVkMemoryWin32HandlePropertiesKHR*(sType: VkStructureType, pNext: pointer = nil, memoryTypeBits: uint32): VkMemoryWin32HandlePropertiesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.memoryTypeBits = memoryTypeBits
+
+proc newVkMemoryGetWin32HandleInfoKHR*(sType: VkStructureType, pNext: pointer = nil, memory: VkDeviceMemory, handleType: VkExternalMemoryHandleTypeFlagBits): VkMemoryGetWin32HandleInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.memory = memory
+  result.handleType = handleType
+
+proc newVkImportMemoryFdInfoKHR*(sType: VkStructureType, pNext: pointer = nil, handleType: VkExternalMemoryHandleTypeFlagBits, fd: int): VkImportMemoryFdInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleType = handleType
+  result.fd = fd
+
+proc newVkMemoryFdPropertiesKHR*(sType: VkStructureType, pNext: pointer = nil, memoryTypeBits: uint32): VkMemoryFdPropertiesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.memoryTypeBits = memoryTypeBits
+
+proc newVkMemoryGetFdInfoKHR*(sType: VkStructureType, pNext: pointer = nil, memory: VkDeviceMemory, handleType: VkExternalMemoryHandleTypeFlagBits): VkMemoryGetFdInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.memory = memory
+  result.handleType = handleType
+
+proc newVkWin32KeyedMutexAcquireReleaseInfoKHR*(sType: VkStructureType, pNext: pointer = nil, acquireCount: uint32, pAcquireSyncs: ptr VkDeviceMemory, pAcquireKeys: ptr uint64, pAcquireTimeouts: ptr uint32, releaseCount: uint32, pReleaseSyncs: ptr VkDeviceMemory, pReleaseKeys: ptr uint64): VkWin32KeyedMutexAcquireReleaseInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.acquireCount = acquireCount
+  result.pAcquireSyncs = pAcquireSyncs
+  result.pAcquireKeys = pAcquireKeys
+  result.pAcquireTimeouts = pAcquireTimeouts
+  result.releaseCount = releaseCount
+  result.pReleaseSyncs = pReleaseSyncs
+  result.pReleaseKeys = pReleaseKeys
+
+proc newVkPhysicalDeviceExternalSemaphoreInfo*(sType: VkStructureType, pNext: pointer = nil, handleType: VkExternalSemaphoreHandleTypeFlagBits): VkPhysicalDeviceExternalSemaphoreInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleType = handleType
+
+proc newVkExternalSemaphoreProperties*(sType: VkStructureType, pNext: pointer = nil, exportFromImportedHandleTypes: VkExternalSemaphoreHandleTypeFlags, compatibleHandleTypes: VkExternalSemaphoreHandleTypeFlags, externalSemaphoreFeatures: VkExternalSemaphoreFeatureFlags): VkExternalSemaphoreProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.exportFromImportedHandleTypes = exportFromImportedHandleTypes
+  result.compatibleHandleTypes = compatibleHandleTypes
+  result.externalSemaphoreFeatures = externalSemaphoreFeatures
+
+proc newVkExportSemaphoreCreateInfo*(sType: VkStructureType, pNext: pointer = nil, handleTypes: VkExternalSemaphoreHandleTypeFlags): VkExportSemaphoreCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleTypes = handleTypes
+
+proc newVkImportSemaphoreWin32HandleInfoKHR*(sType: VkStructureType, pNext: pointer = nil, semaphore: VkSemaphore, flags: VkSemaphoreImportFlags = 0.VkSemaphoreImportFlags, handleType: VkExternalSemaphoreHandleTypeFlagBits, handle: HANDLE, name: LPCWSTR): VkImportSemaphoreWin32HandleInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.semaphore = semaphore
+  result.flags = flags
+  result.handleType = handleType
+  result.handle = handle
+  result.name = name
+
+proc newVkExportSemaphoreWin32HandleInfoKHR*(sType: VkStructureType, pNext: pointer = nil, pAttributes: ptr SECURITY_ATTRIBUTES, dwAccess: DWORD, name: LPCWSTR): VkExportSemaphoreWin32HandleInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.pAttributes = pAttributes
+  result.dwAccess = dwAccess
+  result.name = name
+
+proc newVkD3D12FenceSubmitInfoKHR*(sType: VkStructureType, pNext: pointer = nil, waitSemaphoreValuesCount: uint32, pWaitSemaphoreValues: ptr uint64, signalSemaphoreValuesCount: uint32, pSignalSemaphoreValues: ptr uint64): VkD3D12FenceSubmitInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.waitSemaphoreValuesCount = waitSemaphoreValuesCount
+  result.pWaitSemaphoreValues = pWaitSemaphoreValues
+  result.signalSemaphoreValuesCount = signalSemaphoreValuesCount
+  result.pSignalSemaphoreValues = pSignalSemaphoreValues
+
+proc newVkSemaphoreGetWin32HandleInfoKHR*(sType: VkStructureType, pNext: pointer = nil, semaphore: VkSemaphore, handleType: VkExternalSemaphoreHandleTypeFlagBits): VkSemaphoreGetWin32HandleInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.semaphore = semaphore
+  result.handleType = handleType
+
+proc newVkImportSemaphoreFdInfoKHR*(sType: VkStructureType, pNext: pointer = nil, semaphore: VkSemaphore, flags: VkSemaphoreImportFlags = 0.VkSemaphoreImportFlags, handleType: VkExternalSemaphoreHandleTypeFlagBits, fd: int): VkImportSemaphoreFdInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.semaphore = semaphore
+  result.flags = flags
+  result.handleType = handleType
+  result.fd = fd
+
+proc newVkSemaphoreGetFdInfoKHR*(sType: VkStructureType, pNext: pointer = nil, semaphore: VkSemaphore, handleType: VkExternalSemaphoreHandleTypeFlagBits): VkSemaphoreGetFdInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.semaphore = semaphore
+  result.handleType = handleType
+
+proc newVkPhysicalDeviceExternalFenceInfo*(sType: VkStructureType, pNext: pointer = nil, handleType: VkExternalFenceHandleTypeFlagBits): VkPhysicalDeviceExternalFenceInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleType = handleType
+
+proc newVkExternalFenceProperties*(sType: VkStructureType, pNext: pointer = nil, exportFromImportedHandleTypes: VkExternalFenceHandleTypeFlags, compatibleHandleTypes: VkExternalFenceHandleTypeFlags, externalFenceFeatures: VkExternalFenceFeatureFlags): VkExternalFenceProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.exportFromImportedHandleTypes = exportFromImportedHandleTypes
+  result.compatibleHandleTypes = compatibleHandleTypes
+  result.externalFenceFeatures = externalFenceFeatures
+
+proc newVkExportFenceCreateInfo*(sType: VkStructureType, pNext: pointer = nil, handleTypes: VkExternalFenceHandleTypeFlags): VkExportFenceCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleTypes = handleTypes
+
+proc newVkImportFenceWin32HandleInfoKHR*(sType: VkStructureType, pNext: pointer = nil, fence: VkFence, flags: VkFenceImportFlags = 0.VkFenceImportFlags, handleType: VkExternalFenceHandleTypeFlagBits, handle: HANDLE, name: LPCWSTR): VkImportFenceWin32HandleInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.fence = fence
+  result.flags = flags
+  result.handleType = handleType
+  result.handle = handle
+  result.name = name
+
+proc newVkExportFenceWin32HandleInfoKHR*(sType: VkStructureType, pNext: pointer = nil, pAttributes: ptr SECURITY_ATTRIBUTES, dwAccess: DWORD, name: LPCWSTR): VkExportFenceWin32HandleInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.pAttributes = pAttributes
+  result.dwAccess = dwAccess
+  result.name = name
+
+proc newVkFenceGetWin32HandleInfoKHR*(sType: VkStructureType, pNext: pointer = nil, fence: VkFence, handleType: VkExternalFenceHandleTypeFlagBits): VkFenceGetWin32HandleInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.fence = fence
+  result.handleType = handleType
+
+proc newVkImportFenceFdInfoKHR*(sType: VkStructureType, pNext: pointer = nil, fence: VkFence, flags: VkFenceImportFlags = 0.VkFenceImportFlags, handleType: VkExternalFenceHandleTypeFlagBits, fd: int): VkImportFenceFdInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.fence = fence
+  result.flags = flags
+  result.handleType = handleType
+  result.fd = fd
+
+proc newVkFenceGetFdInfoKHR*(sType: VkStructureType, pNext: pointer = nil, fence: VkFence, handleType: VkExternalFenceHandleTypeFlagBits): VkFenceGetFdInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.fence = fence
+  result.handleType = handleType
+
+proc newVkPhysicalDeviceMultiviewFeatures*(sType: VkStructureType, pNext: pointer = nil, multiview: VkBool32, multiviewGeometryShader: VkBool32, multiviewTessellationShader: VkBool32): VkPhysicalDeviceMultiviewFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.multiview = multiview
+  result.multiviewGeometryShader = multiviewGeometryShader
+  result.multiviewTessellationShader = multiviewTessellationShader
+
+proc newVkPhysicalDeviceMultiviewProperties*(sType: VkStructureType, pNext: pointer = nil, maxMultiviewViewCount: uint32, maxMultiviewInstanceIndex: uint32): VkPhysicalDeviceMultiviewProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxMultiviewViewCount = maxMultiviewViewCount
+  result.maxMultiviewInstanceIndex = maxMultiviewInstanceIndex
+
+proc newVkRenderPassMultiviewCreateInfo*(sType: VkStructureType, pNext: pointer = nil, subpassCount: uint32, pViewMasks: ptr uint32, dependencyCount: uint32, pViewOffsets: ptr int32, correlationMaskCount: uint32, pCorrelationMasks: ptr uint32): VkRenderPassMultiviewCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.subpassCount = subpassCount
+  result.pViewMasks = pViewMasks
+  result.dependencyCount = dependencyCount
+  result.pViewOffsets = pViewOffsets
+  result.correlationMaskCount = correlationMaskCount
+  result.pCorrelationMasks = pCorrelationMasks
+
+proc newVkSurfaceCapabilities2EXT*(sType: VkStructureType, pNext: pointer = nil, minImageCount: uint32, maxImageCount: uint32, currentExtent: VkExtent2D, minImageExtent: VkExtent2D, maxImageExtent: VkExtent2D, maxImageArrayLayers: uint32, supportedTransforms: VkSurfaceTransformFlagsKHR, currentTransform: VkSurfaceTransformFlagBitsKHR, supportedCompositeAlpha: VkCompositeAlphaFlagsKHR, supportedUsageFlags: VkImageUsageFlags, supportedSurfaceCounters: VkSurfaceCounterFlagsEXT): VkSurfaceCapabilities2EXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.minImageCount = minImageCount
+  result.maxImageCount = maxImageCount
+  result.currentExtent = currentExtent
+  result.minImageExtent = minImageExtent
+  result.maxImageExtent = maxImageExtent
+  result.maxImageArrayLayers = maxImageArrayLayers
+  result.supportedTransforms = supportedTransforms
+  result.currentTransform = currentTransform
+  result.supportedCompositeAlpha = supportedCompositeAlpha
+  result.supportedUsageFlags = supportedUsageFlags
+  result.supportedSurfaceCounters = supportedSurfaceCounters
+
+proc newVkDisplayPowerInfoEXT*(sType: VkStructureType, pNext: pointer = nil, powerState: VkDisplayPowerStateEXT): VkDisplayPowerInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.powerState = powerState
+
+proc newVkDeviceEventInfoEXT*(sType: VkStructureType, pNext: pointer = nil, deviceEvent: VkDeviceEventTypeEXT): VkDeviceEventInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceEvent = deviceEvent
+
+proc newVkDisplayEventInfoEXT*(sType: VkStructureType, pNext: pointer = nil, displayEvent: VkDisplayEventTypeEXT): VkDisplayEventInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.displayEvent = displayEvent
+
+proc newVkSwapchainCounterCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, surfaceCounters: VkSurfaceCounterFlagsEXT): VkSwapchainCounterCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.surfaceCounters = surfaceCounters
+
+proc newVkPhysicalDeviceGroupProperties*(sType: VkStructureType, pNext: pointer = nil, physicalDeviceCount: uint32, physicalDevices: array[VK_MAX_DEVICE_GROUP_SIZE, VkPhysicalDevice], subsetAllocation: VkBool32): VkPhysicalDeviceGroupProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.physicalDeviceCount = physicalDeviceCount
+  result.physicalDevices = physicalDevices
+  result.subsetAllocation = subsetAllocation
+
+proc newVkMemoryAllocateFlagsInfo*(sType: VkStructureType, pNext: pointer = nil, flags: VkMemoryAllocateFlags = 0.VkMemoryAllocateFlags, deviceMask: uint32): VkMemoryAllocateFlagsInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.deviceMask = deviceMask
+
+proc newVkBindBufferMemoryInfo*(sType: VkStructureType, pNext: pointer = nil, buffer: VkBuffer, memory: VkDeviceMemory, memoryOffset: VkDeviceSize): VkBindBufferMemoryInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.buffer = buffer
+  result.memory = memory
+  result.memoryOffset = memoryOffset
+
+proc newVkBindBufferMemoryDeviceGroupInfo*(sType: VkStructureType, pNext: pointer = nil, deviceIndexCount: uint32, pDeviceIndices: ptr uint32): VkBindBufferMemoryDeviceGroupInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceIndexCount = deviceIndexCount
+  result.pDeviceIndices = pDeviceIndices
+
+proc newVkBindImageMemoryInfo*(sType: VkStructureType, pNext: pointer = nil, image: VkImage, memory: VkDeviceMemory, memoryOffset: VkDeviceSize): VkBindImageMemoryInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.image = image
+  result.memory = memory
+  result.memoryOffset = memoryOffset
+
+proc newVkBindImageMemoryDeviceGroupInfo*(sType: VkStructureType, pNext: pointer = nil, deviceIndexCount: uint32, pDeviceIndices: ptr uint32, splitInstanceBindRegionCount: uint32, pSplitInstanceBindRegions: ptr VkRect2D): VkBindImageMemoryDeviceGroupInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceIndexCount = deviceIndexCount
+  result.pDeviceIndices = pDeviceIndices
+  result.splitInstanceBindRegionCount = splitInstanceBindRegionCount
+  result.pSplitInstanceBindRegions = pSplitInstanceBindRegions
+
+proc newVkDeviceGroupRenderPassBeginInfo*(sType: VkStructureType, pNext: pointer = nil, deviceMask: uint32, deviceRenderAreaCount: uint32, pDeviceRenderAreas: ptr VkRect2D): VkDeviceGroupRenderPassBeginInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceMask = deviceMask
+  result.deviceRenderAreaCount = deviceRenderAreaCount
+  result.pDeviceRenderAreas = pDeviceRenderAreas
+
+proc newVkDeviceGroupCommandBufferBeginInfo*(sType: VkStructureType, pNext: pointer = nil, deviceMask: uint32): VkDeviceGroupCommandBufferBeginInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceMask = deviceMask
+
+proc newVkDeviceGroupSubmitInfo*(sType: VkStructureType, pNext: pointer = nil, waitSemaphoreCount: uint32, pWaitSemaphoreDeviceIndices: ptr uint32, commandBufferCount: uint32, pCommandBufferDeviceMasks: ptr uint32, signalSemaphoreCount: uint32, pSignalSemaphoreDeviceIndices: ptr uint32): VkDeviceGroupSubmitInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.waitSemaphoreCount = waitSemaphoreCount
+  result.pWaitSemaphoreDeviceIndices = pWaitSemaphoreDeviceIndices
+  result.commandBufferCount = commandBufferCount
+  result.pCommandBufferDeviceMasks = pCommandBufferDeviceMasks
+  result.signalSemaphoreCount = signalSemaphoreCount
+  result.pSignalSemaphoreDeviceIndices = pSignalSemaphoreDeviceIndices
+
+proc newVkDeviceGroupBindSparseInfo*(sType: VkStructureType, pNext: pointer = nil, resourceDeviceIndex: uint32, memoryDeviceIndex: uint32): VkDeviceGroupBindSparseInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.resourceDeviceIndex = resourceDeviceIndex
+  result.memoryDeviceIndex = memoryDeviceIndex
+
+proc newVkDeviceGroupPresentCapabilitiesKHR*(sType: VkStructureType, pNext: pointer = nil, presentMask: array[VK_MAX_DEVICE_GROUP_SIZE, uint32], modes: VkDeviceGroupPresentModeFlagsKHR): VkDeviceGroupPresentCapabilitiesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.presentMask = presentMask
+  result.modes = modes
+
+proc newVkImageSwapchainCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, swapchain: VkSwapchainKHR): VkImageSwapchainCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.swapchain = swapchain
+
+proc newVkBindImageMemorySwapchainInfoKHR*(sType: VkStructureType, pNext: pointer = nil, swapchain: VkSwapchainKHR, imageIndex: uint32): VkBindImageMemorySwapchainInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.swapchain = swapchain
+  result.imageIndex = imageIndex
+
+proc newVkAcquireNextImageInfoKHR*(sType: VkStructureType, pNext: pointer = nil, swapchain: VkSwapchainKHR, timeout: uint64, semaphore: VkSemaphore, fence: VkFence, deviceMask: uint32): VkAcquireNextImageInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.swapchain = swapchain
+  result.timeout = timeout
+  result.semaphore = semaphore
+  result.fence = fence
+  result.deviceMask = deviceMask
+
+proc newVkDeviceGroupPresentInfoKHR*(sType: VkStructureType, pNext: pointer = nil, swapchainCount: uint32, pDeviceMasks: ptr uint32, mode: VkDeviceGroupPresentModeFlagBitsKHR): VkDeviceGroupPresentInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.swapchainCount = swapchainCount
+  result.pDeviceMasks = pDeviceMasks
+  result.mode = mode
+
+proc newVkDeviceGroupDeviceCreateInfo*(sType: VkStructureType, pNext: pointer = nil, physicalDeviceCount: uint32, pPhysicalDevices: ptr VkPhysicalDevice): VkDeviceGroupDeviceCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.physicalDeviceCount = physicalDeviceCount
+  result.pPhysicalDevices = pPhysicalDevices
+
+proc newVkDeviceGroupSwapchainCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, modes: VkDeviceGroupPresentModeFlagsKHR): VkDeviceGroupSwapchainCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.modes = modes
+
+proc newVkDescriptorUpdateTemplateEntry*(dstBinding: uint32, dstArrayElement: uint32, descriptorCount: uint32, descriptorType: VkDescriptorType, offset: uint, stride: uint): VkDescriptorUpdateTemplateEntry =
+  result.dstBinding = dstBinding
+  result.dstArrayElement = dstArrayElement
+  result.descriptorCount = descriptorCount
+  result.descriptorType = descriptorType
+  result.offset = offset
+  result.stride = stride
+
+proc newVkDescriptorUpdateTemplateCreateInfo*(sType: VkStructureType, pNext: pointer = nil, flags: VkDescriptorUpdateTemplateCreateFlags = 0.VkDescriptorUpdateTemplateCreateFlags, descriptorUpdateEntryCount: uint32, pDescriptorUpdateEntries: ptr VkDescriptorUpdateTemplateEntry, templateType: VkDescriptorUpdateTemplateType, descriptorSetLayout: VkDescriptorSetLayout, pipelineBindPoint: VkPipelineBindPoint, pipelineLayout: VkPipelineLayout, set: uint32): VkDescriptorUpdateTemplateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.descriptorUpdateEntryCount = descriptorUpdateEntryCount
+  result.pDescriptorUpdateEntries = pDescriptorUpdateEntries
+  result.templateType = templateType
+  result.descriptorSetLayout = descriptorSetLayout
+  result.pipelineBindPoint = pipelineBindPoint
+  result.pipelineLayout = pipelineLayout
+  result.set = set
+
+proc newVkXYColorEXT*(x: float32, y: float32): VkXYColorEXT =
+  result.x = x
+  result.y = y
+
+proc newVkHdrMetadataEXT*(sType: VkStructureType, pNext: pointer = nil, displayPrimaryRed: VkXYColorEXT, displayPrimaryGreen: VkXYColorEXT, displayPrimaryBlue: VkXYColorEXT, whitePoint: VkXYColorEXT, maxLuminance: float32, minLuminance: float32, maxContentLightLevel: float32, maxFrameAverageLightLevel: float32): VkHdrMetadataEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.displayPrimaryRed = displayPrimaryRed
+  result.displayPrimaryGreen = displayPrimaryGreen
+  result.displayPrimaryBlue = displayPrimaryBlue
+  result.whitePoint = whitePoint
+  result.maxLuminance = maxLuminance
+  result.minLuminance = minLuminance
+  result.maxContentLightLevel = maxContentLightLevel
+  result.maxFrameAverageLightLevel = maxFrameAverageLightLevel
+
+proc newVkDisplayNativeHdrSurfaceCapabilitiesAMD*(sType: VkStructureType, pNext: pointer = nil, localDimmingSupport: VkBool32): VkDisplayNativeHdrSurfaceCapabilitiesAMD =
+  result.sType = sType
+  result.pNext = pNext
+  result.localDimmingSupport = localDimmingSupport
+
+proc newVkSwapchainDisplayNativeHdrCreateInfoAMD*(sType: VkStructureType, pNext: pointer = nil, localDimmingEnable: VkBool32): VkSwapchainDisplayNativeHdrCreateInfoAMD =
+  result.sType = sType
+  result.pNext = pNext
+  result.localDimmingEnable = localDimmingEnable
+
+proc newVkRefreshCycleDurationGOOGLE*(refreshDuration: uint64): VkRefreshCycleDurationGOOGLE =
+  result.refreshDuration = refreshDuration
+
+proc newVkPastPresentationTimingGOOGLE*(presentID: uint32, desiredPresentTime: uint64, actualPresentTime: uint64, earliestPresentTime: uint64, presentMargin: uint64): VkPastPresentationTimingGOOGLE =
+  result.presentID = presentID
+  result.desiredPresentTime = desiredPresentTime
+  result.actualPresentTime = actualPresentTime
+  result.earliestPresentTime = earliestPresentTime
+  result.presentMargin = presentMargin
+
+proc newVkPresentTimesInfoGOOGLE*(sType: VkStructureType, pNext: pointer = nil, swapchainCount: uint32, pTimes: ptr VkPresentTimeGOOGLE): VkPresentTimesInfoGOOGLE =
+  result.sType = sType
+  result.pNext = pNext
+  result.swapchainCount = swapchainCount
+  result.pTimes = pTimes
+
+proc newVkPresentTimeGOOGLE*(presentID: uint32, desiredPresentTime: uint64): VkPresentTimeGOOGLE =
+  result.presentID = presentID
+  result.desiredPresentTime = desiredPresentTime
+
+proc newVkIOSSurfaceCreateInfoMVK*(sType: VkStructureType, pNext: pointer = nil, flags: VkIOSSurfaceCreateFlagsMVK = 0.VkIOSSurfaceCreateFlagsMVK, pView: pointer = nil): VkIOSSurfaceCreateInfoMVK =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.pView = pView
+
+proc newVkMacOSSurfaceCreateInfoMVK*(sType: VkStructureType, pNext: pointer = nil, flags: VkMacOSSurfaceCreateFlagsMVK = 0.VkMacOSSurfaceCreateFlagsMVK, pView: pointer = nil): VkMacOSSurfaceCreateInfoMVK =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.pView = pView
+
+proc newVkMetalSurfaceCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkMetalSurfaceCreateFlagsEXT = 0.VkMetalSurfaceCreateFlagsEXT, pLayer: ptr CAMetalLayer): VkMetalSurfaceCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.pLayer = pLayer
+
+proc newVkViewportWScalingNV*(xcoeff: float32, ycoeff: float32): VkViewportWScalingNV =
+  result.xcoeff = xcoeff
+  result.ycoeff = ycoeff
+
+proc newVkPipelineViewportWScalingStateCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, viewportWScalingEnable: VkBool32, viewportCount: uint32, pViewportWScalings: ptr VkViewportWScalingNV): VkPipelineViewportWScalingStateCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.viewportWScalingEnable = viewportWScalingEnable
+  result.viewportCount = viewportCount
+  result.pViewportWScalings = pViewportWScalings
+
+proc newVkViewportSwizzleNV*(x: VkViewportCoordinateSwizzleNV, y: VkViewportCoordinateSwizzleNV, z: VkViewportCoordinateSwizzleNV, w: VkViewportCoordinateSwizzleNV): VkViewportSwizzleNV =
+  result.x = x
+  result.y = y
+  result.z = z
+  result.w = w
+
+proc newVkPipelineViewportSwizzleStateCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineViewportSwizzleStateCreateFlagsNV = 0.VkPipelineViewportSwizzleStateCreateFlagsNV, viewportCount: uint32, pViewportSwizzles: ptr VkViewportSwizzleNV): VkPipelineViewportSwizzleStateCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.viewportCount = viewportCount
+  result.pViewportSwizzles = pViewportSwizzles
+
+proc newVkPhysicalDeviceDiscardRectanglePropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, maxDiscardRectangles: uint32): VkPhysicalDeviceDiscardRectanglePropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxDiscardRectangles = maxDiscardRectangles
+
+proc newVkPipelineDiscardRectangleStateCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineDiscardRectangleStateCreateFlagsEXT = 0.VkPipelineDiscardRectangleStateCreateFlagsEXT, discardRectangleMode: VkDiscardRectangleModeEXT, discardRectangleCount: uint32, pDiscardRectangles: ptr VkRect2D): VkPipelineDiscardRectangleStateCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.discardRectangleMode = discardRectangleMode
+  result.discardRectangleCount = discardRectangleCount
+  result.pDiscardRectangles = pDiscardRectangles
+
+proc newVkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*(sType: VkStructureType, pNext: pointer = nil, perViewPositionAllComponents: VkBool32): VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX =
+  result.sType = sType
+  result.pNext = pNext
+  result.perViewPositionAllComponents = perViewPositionAllComponents
+
+proc newVkInputAttachmentAspectReference*(subpass: uint32, inputAttachmentIndex: uint32, aspectMask: VkImageAspectFlags): VkInputAttachmentAspectReference =
+  result.subpass = subpass
+  result.inputAttachmentIndex = inputAttachmentIndex
+  result.aspectMask = aspectMask
+
+proc newVkRenderPassInputAttachmentAspectCreateInfo*(sType: VkStructureType, pNext: pointer = nil, aspectReferenceCount: uint32, pAspectReferences: ptr VkInputAttachmentAspectReference): VkRenderPassInputAttachmentAspectCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.aspectReferenceCount = aspectReferenceCount
+  result.pAspectReferences = pAspectReferences
+
+proc newVkPhysicalDeviceSurfaceInfo2KHR*(sType: VkStructureType, pNext: pointer = nil, surface: VkSurfaceKHR): VkPhysicalDeviceSurfaceInfo2KHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.surface = surface
+
+proc newVkSurfaceCapabilities2KHR*(sType: VkStructureType, pNext: pointer = nil, surfaceCapabilities: VkSurfaceCapabilitiesKHR): VkSurfaceCapabilities2KHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.surfaceCapabilities = surfaceCapabilities
+
+proc newVkSurfaceFormat2KHR*(sType: VkStructureType, pNext: pointer = nil, surfaceFormat: VkSurfaceFormatKHR): VkSurfaceFormat2KHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.surfaceFormat = surfaceFormat
+
+proc newVkDisplayProperties2KHR*(sType: VkStructureType, pNext: pointer = nil, displayProperties: VkDisplayPropertiesKHR): VkDisplayProperties2KHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.displayProperties = displayProperties
+
+proc newVkDisplayPlaneProperties2KHR*(sType: VkStructureType, pNext: pointer = nil, displayPlaneProperties: VkDisplayPlanePropertiesKHR): VkDisplayPlaneProperties2KHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.displayPlaneProperties = displayPlaneProperties
+
+proc newVkDisplayModeProperties2KHR*(sType: VkStructureType, pNext: pointer = nil, displayModeProperties: VkDisplayModePropertiesKHR): VkDisplayModeProperties2KHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.displayModeProperties = displayModeProperties
+
+proc newVkDisplayPlaneInfo2KHR*(sType: VkStructureType, pNext: pointer = nil, mode: VkDisplayModeKHR, planeIndex: uint32): VkDisplayPlaneInfo2KHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.mode = mode
+  result.planeIndex = planeIndex
+
+proc newVkDisplayPlaneCapabilities2KHR*(sType: VkStructureType, pNext: pointer = nil, capabilities: VkDisplayPlaneCapabilitiesKHR): VkDisplayPlaneCapabilities2KHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.capabilities = capabilities
+
+proc newVkSharedPresentSurfaceCapabilitiesKHR*(sType: VkStructureType, pNext: pointer = nil, sharedPresentSupportedUsageFlags: VkImageUsageFlags): VkSharedPresentSurfaceCapabilitiesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.sharedPresentSupportedUsageFlags = sharedPresentSupportedUsageFlags
+
+proc newVkPhysicalDevice16BitStorageFeatures*(sType: VkStructureType, pNext: pointer = nil, storageBuffer16BitAccess: VkBool32, uniformAndStorageBuffer16BitAccess: VkBool32, storagePushConstant16: VkBool32, storageInputOutput16: VkBool32): VkPhysicalDevice16BitStorageFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.storageBuffer16BitAccess = storageBuffer16BitAccess
+  result.uniformAndStorageBuffer16BitAccess = uniformAndStorageBuffer16BitAccess
+  result.storagePushConstant16 = storagePushConstant16
+  result.storageInputOutput16 = storageInputOutput16
+
+proc newVkPhysicalDeviceSubgroupProperties*(sType: VkStructureType, pNext: pointer = nil, subgroupSize: uint32, supportedStages: VkShaderStageFlags, supportedOperations: VkSubgroupFeatureFlags, quadOperationsInAllStages: VkBool32): VkPhysicalDeviceSubgroupProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.subgroupSize = subgroupSize
+  result.supportedStages = supportedStages
+  result.supportedOperations = supportedOperations
+  result.quadOperationsInAllStages = quadOperationsInAllStages
+
+proc newVkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*(sType: VkStructureType, pNext: pointer = nil, shaderSubgroupExtendedTypes: VkBool32): VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderSubgroupExtendedTypes = shaderSubgroupExtendedTypes
+
+proc newVkBufferMemoryRequirementsInfo2*(sType: VkStructureType, pNext: pointer = nil, buffer: VkBuffer): VkBufferMemoryRequirementsInfo2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.buffer = buffer
+
+proc newVkImageMemoryRequirementsInfo2*(sType: VkStructureType, pNext: pointer = nil, image: VkImage): VkImageMemoryRequirementsInfo2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.image = image
+
+proc newVkImageSparseMemoryRequirementsInfo2*(sType: VkStructureType, pNext: pointer = nil, image: VkImage): VkImageSparseMemoryRequirementsInfo2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.image = image
+
+proc newVkMemoryRequirements2*(sType: VkStructureType, pNext: pointer = nil, memoryRequirements: VkMemoryRequirements): VkMemoryRequirements2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.memoryRequirements = memoryRequirements
+
+proc newVkSparseImageMemoryRequirements2*(sType: VkStructureType, pNext: pointer = nil, memoryRequirements: VkSparseImageMemoryRequirements): VkSparseImageMemoryRequirements2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.memoryRequirements = memoryRequirements
+
+proc newVkPhysicalDevicePointClippingProperties*(sType: VkStructureType, pNext: pointer = nil, pointClippingBehavior: VkPointClippingBehavior): VkPhysicalDevicePointClippingProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.pointClippingBehavior = pointClippingBehavior
+
+proc newVkMemoryDedicatedRequirements*(sType: VkStructureType, pNext: pointer = nil, prefersDedicatedAllocation: VkBool32, requiresDedicatedAllocation: VkBool32): VkMemoryDedicatedRequirements =
+  result.sType = sType
+  result.pNext = pNext
+  result.prefersDedicatedAllocation = prefersDedicatedAllocation
+  result.requiresDedicatedAllocation = requiresDedicatedAllocation
+
+proc newVkMemoryDedicatedAllocateInfo*(sType: VkStructureType, pNext: pointer = nil, image: VkImage, buffer: VkBuffer): VkMemoryDedicatedAllocateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.image = image
+  result.buffer = buffer
+
+proc newVkImageViewUsageCreateInfo*(sType: VkStructureType, pNext: pointer = nil, usage: VkImageUsageFlags): VkImageViewUsageCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.usage = usage
+
+proc newVkPipelineTessellationDomainOriginStateCreateInfo*(sType: VkStructureType, pNext: pointer = nil, domainOrigin: VkTessellationDomainOrigin): VkPipelineTessellationDomainOriginStateCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.domainOrigin = domainOrigin
+
+proc newVkSamplerYcbcrConversionInfo*(sType: VkStructureType, pNext: pointer = nil, conversion: VkSamplerYcbcrConversion): VkSamplerYcbcrConversionInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.conversion = conversion
+
+proc newVkSamplerYcbcrConversionCreateInfo*(sType: VkStructureType, pNext: pointer = nil, format: VkFormat, ycbcrModel: VkSamplerYcbcrModelConversion, ycbcrRange: VkSamplerYcbcrRange, components: VkComponentMapping, xChromaOffset: VkChromaLocation, yChromaOffset: VkChromaLocation, chromaFilter: VkFilter, forceExplicitReconstruction: VkBool32): VkSamplerYcbcrConversionCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.format = format
+  result.ycbcrModel = ycbcrModel
+  result.ycbcrRange = ycbcrRange
+  result.components = components
+  result.xChromaOffset = xChromaOffset
+  result.yChromaOffset = yChromaOffset
+  result.chromaFilter = chromaFilter
+  result.forceExplicitReconstruction = forceExplicitReconstruction
+
+proc newVkBindImagePlaneMemoryInfo*(sType: VkStructureType, pNext: pointer = nil, planeAspect: VkImageAspectFlagBits): VkBindImagePlaneMemoryInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.planeAspect = planeAspect
+
+proc newVkImagePlaneMemoryRequirementsInfo*(sType: VkStructureType, pNext: pointer = nil, planeAspect: VkImageAspectFlagBits): VkImagePlaneMemoryRequirementsInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.planeAspect = planeAspect
+
+proc newVkPhysicalDeviceSamplerYcbcrConversionFeatures*(sType: VkStructureType, pNext: pointer = nil, samplerYcbcrConversion: VkBool32): VkPhysicalDeviceSamplerYcbcrConversionFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.samplerYcbcrConversion = samplerYcbcrConversion
+
+proc newVkSamplerYcbcrConversionImageFormatProperties*(sType: VkStructureType, pNext: pointer = nil, combinedImageSamplerDescriptorCount: uint32): VkSamplerYcbcrConversionImageFormatProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.combinedImageSamplerDescriptorCount = combinedImageSamplerDescriptorCount
+
+proc newVkTextureLODGatherFormatPropertiesAMD*(sType: VkStructureType, pNext: pointer = nil, supportsTextureGatherLODBiasAMD: VkBool32): VkTextureLODGatherFormatPropertiesAMD =
+  result.sType = sType
+  result.pNext = pNext
+  result.supportsTextureGatherLODBiasAMD = supportsTextureGatherLODBiasAMD
+
+proc newVkConditionalRenderingBeginInfoEXT*(sType: VkStructureType, pNext: pointer = nil, buffer: VkBuffer, offset: VkDeviceSize, flags: VkConditionalRenderingFlagsEXT = 0.VkConditionalRenderingFlagsEXT): VkConditionalRenderingBeginInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.buffer = buffer
+  result.offset = offset
+  result.flags = flags
+
+proc newVkProtectedSubmitInfo*(sType: VkStructureType, pNext: pointer = nil, protectedSubmit: VkBool32): VkProtectedSubmitInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.protectedSubmit = protectedSubmit
+
+proc newVkPhysicalDeviceProtectedMemoryFeatures*(sType: VkStructureType, pNext: pointer = nil, protectedMemory: VkBool32): VkPhysicalDeviceProtectedMemoryFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.protectedMemory = protectedMemory
+
+proc newVkPhysicalDeviceProtectedMemoryProperties*(sType: VkStructureType, pNext: pointer = nil, protectedNoFault: VkBool32): VkPhysicalDeviceProtectedMemoryProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.protectedNoFault = protectedNoFault
+
+proc newVkDeviceQueueInfo2*(sType: VkStructureType, pNext: pointer = nil, flags: VkDeviceQueueCreateFlags = 0.VkDeviceQueueCreateFlags, queueFamilyIndex: uint32, queueIndex: uint32): VkDeviceQueueInfo2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.queueFamilyIndex = queueFamilyIndex
+  result.queueIndex = queueIndex
+
+proc newVkPipelineCoverageToColorStateCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineCoverageToColorStateCreateFlagsNV = 0.VkPipelineCoverageToColorStateCreateFlagsNV, coverageToColorEnable: VkBool32, coverageToColorLocation: uint32): VkPipelineCoverageToColorStateCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.coverageToColorEnable = coverageToColorEnable
+  result.coverageToColorLocation = coverageToColorLocation
+
+proc newVkPhysicalDeviceSamplerFilterMinmaxProperties*(sType: VkStructureType, pNext: pointer = nil, filterMinmaxSingleComponentFormats: VkBool32, filterMinmaxImageComponentMapping: VkBool32): VkPhysicalDeviceSamplerFilterMinmaxProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.filterMinmaxSingleComponentFormats = filterMinmaxSingleComponentFormats
+  result.filterMinmaxImageComponentMapping = filterMinmaxImageComponentMapping
+
+proc newVkSampleLocationEXT*(x: float32, y: float32): VkSampleLocationEXT =
+  result.x = x
+  result.y = y
+
+proc newVkSampleLocationsInfoEXT*(sType: VkStructureType, pNext: pointer = nil, sampleLocationsPerPixel: VkSampleCountFlagBits, sampleLocationGridSize: VkExtent2D, sampleLocationsCount: uint32, pSampleLocations: ptr VkSampleLocationEXT): VkSampleLocationsInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.sampleLocationsPerPixel = sampleLocationsPerPixel
+  result.sampleLocationGridSize = sampleLocationGridSize
+  result.sampleLocationsCount = sampleLocationsCount
+  result.pSampleLocations = pSampleLocations
+
+proc newVkAttachmentSampleLocationsEXT*(attachmentIndex: uint32, sampleLocationsInfo: VkSampleLocationsInfoEXT): VkAttachmentSampleLocationsEXT =
+  result.attachmentIndex = attachmentIndex
+  result.sampleLocationsInfo = sampleLocationsInfo
+
+proc newVkSubpassSampleLocationsEXT*(subpassIndex: uint32, sampleLocationsInfo: VkSampleLocationsInfoEXT): VkSubpassSampleLocationsEXT =
+  result.subpassIndex = subpassIndex
+  result.sampleLocationsInfo = sampleLocationsInfo
+
+proc newVkRenderPassSampleLocationsBeginInfoEXT*(sType: VkStructureType, pNext: pointer = nil, attachmentInitialSampleLocationsCount: uint32, pAttachmentInitialSampleLocations: ptr VkAttachmentSampleLocationsEXT, postSubpassSampleLocationsCount: uint32, pPostSubpassSampleLocations: ptr VkSubpassSampleLocationsEXT): VkRenderPassSampleLocationsBeginInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.attachmentInitialSampleLocationsCount = attachmentInitialSampleLocationsCount
+  result.pAttachmentInitialSampleLocations = pAttachmentInitialSampleLocations
+  result.postSubpassSampleLocationsCount = postSubpassSampleLocationsCount
+  result.pPostSubpassSampleLocations = pPostSubpassSampleLocations
+
+proc newVkPipelineSampleLocationsStateCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, sampleLocationsEnable: VkBool32, sampleLocationsInfo: VkSampleLocationsInfoEXT): VkPipelineSampleLocationsStateCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.sampleLocationsEnable = sampleLocationsEnable
+  result.sampleLocationsInfo = sampleLocationsInfo
+
+proc newVkPhysicalDeviceSampleLocationsPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, sampleLocationSampleCounts: VkSampleCountFlags, maxSampleLocationGridSize: VkExtent2D, sampleLocationCoordinateRange: array[2, float32], sampleLocationSubPixelBits: uint32, variableSampleLocations: VkBool32): VkPhysicalDeviceSampleLocationsPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.sampleLocationSampleCounts = sampleLocationSampleCounts
+  result.maxSampleLocationGridSize = maxSampleLocationGridSize
+  result.sampleLocationCoordinateRange = sampleLocationCoordinateRange
+  result.sampleLocationSubPixelBits = sampleLocationSubPixelBits
+  result.variableSampleLocations = variableSampleLocations
+
+proc newVkMultisamplePropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, maxSampleLocationGridSize: VkExtent2D): VkMultisamplePropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxSampleLocationGridSize = maxSampleLocationGridSize
+
+proc newVkSamplerReductionModeCreateInfo*(sType: VkStructureType, pNext: pointer = nil, reductionMode: VkSamplerReductionMode): VkSamplerReductionModeCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.reductionMode = reductionMode
+
+proc newVkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, advancedBlendCoherentOperations: VkBool32): VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.advancedBlendCoherentOperations = advancedBlendCoherentOperations
+
+proc newVkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, advancedBlendMaxColorAttachments: uint32, advancedBlendIndependentBlend: VkBool32, advancedBlendNonPremultipliedSrcColor: VkBool32, advancedBlendNonPremultipliedDstColor: VkBool32, advancedBlendCorrelatedOverlap: VkBool32, advancedBlendAllOperations: VkBool32): VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.advancedBlendMaxColorAttachments = advancedBlendMaxColorAttachments
+  result.advancedBlendIndependentBlend = advancedBlendIndependentBlend
+  result.advancedBlendNonPremultipliedSrcColor = advancedBlendNonPremultipliedSrcColor
+  result.advancedBlendNonPremultipliedDstColor = advancedBlendNonPremultipliedDstColor
+  result.advancedBlendCorrelatedOverlap = advancedBlendCorrelatedOverlap
+  result.advancedBlendAllOperations = advancedBlendAllOperations
+
+proc newVkPipelineColorBlendAdvancedStateCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, srcPremultiplied: VkBool32, dstPremultiplied: VkBool32, blendOverlap: VkBlendOverlapEXT): VkPipelineColorBlendAdvancedStateCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.srcPremultiplied = srcPremultiplied
+  result.dstPremultiplied = dstPremultiplied
+  result.blendOverlap = blendOverlap
+
+proc newVkPhysicalDeviceInlineUniformBlockFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, inlineUniformBlock: VkBool32, descriptorBindingInlineUniformBlockUpdateAfterBind: VkBool32): VkPhysicalDeviceInlineUniformBlockFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.inlineUniformBlock = inlineUniformBlock
+  result.descriptorBindingInlineUniformBlockUpdateAfterBind = descriptorBindingInlineUniformBlockUpdateAfterBind
+
+proc newVkPhysicalDeviceInlineUniformBlockPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, maxInlineUniformBlockSize: uint32, maxPerStageDescriptorInlineUniformBlocks: uint32, maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks: uint32, maxDescriptorSetInlineUniformBlocks: uint32, maxDescriptorSetUpdateAfterBindInlineUniformBlocks: uint32): VkPhysicalDeviceInlineUniformBlockPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxInlineUniformBlockSize = maxInlineUniformBlockSize
+  result.maxPerStageDescriptorInlineUniformBlocks = maxPerStageDescriptorInlineUniformBlocks
+  result.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
+  result.maxDescriptorSetInlineUniformBlocks = maxDescriptorSetInlineUniformBlocks
+  result.maxDescriptorSetUpdateAfterBindInlineUniformBlocks = maxDescriptorSetUpdateAfterBindInlineUniformBlocks
+
+proc newVkWriteDescriptorSetInlineUniformBlockEXT*(sType: VkStructureType, pNext: pointer = nil, dataSize: uint32, pData: pointer = nil): VkWriteDescriptorSetInlineUniformBlockEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.dataSize = dataSize
+  result.pData = pData
+
+proc newVkDescriptorPoolInlineUniformBlockCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, maxInlineUniformBlockBindings: uint32): VkDescriptorPoolInlineUniformBlockCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxInlineUniformBlockBindings = maxInlineUniformBlockBindings
+
+proc newVkPipelineCoverageModulationStateCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineCoverageModulationStateCreateFlagsNV = 0.VkPipelineCoverageModulationStateCreateFlagsNV, coverageModulationMode: VkCoverageModulationModeNV, coverageModulationTableEnable: VkBool32, coverageModulationTableCount: uint32, pCoverageModulationTable: ptr float32): VkPipelineCoverageModulationStateCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.coverageModulationMode = coverageModulationMode
+  result.coverageModulationTableEnable = coverageModulationTableEnable
+  result.coverageModulationTableCount = coverageModulationTableCount
+  result.pCoverageModulationTable = pCoverageModulationTable
+
+proc newVkImageFormatListCreateInfo*(sType: VkStructureType, pNext: pointer = nil, viewFormatCount: uint32, pViewFormats: ptr VkFormat): VkImageFormatListCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.viewFormatCount = viewFormatCount
+  result.pViewFormats = pViewFormats
+
+proc newVkValidationCacheCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkValidationCacheCreateFlagsEXT = 0.VkValidationCacheCreateFlagsEXT, initialDataSize: uint, pInitialData: pointer = nil): VkValidationCacheCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.initialDataSize = initialDataSize
+  result.pInitialData = pInitialData
+
+proc newVkShaderModuleValidationCacheCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, validationCache: VkValidationCacheEXT): VkShaderModuleValidationCacheCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.validationCache = validationCache
+
+proc newVkPhysicalDeviceMaintenance3Properties*(sType: VkStructureType, pNext: pointer = nil, maxPerSetDescriptors: uint32, maxMemoryAllocationSize: VkDeviceSize): VkPhysicalDeviceMaintenance3Properties =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxPerSetDescriptors = maxPerSetDescriptors
+  result.maxMemoryAllocationSize = maxMemoryAllocationSize
+
+proc newVkDescriptorSetLayoutSupport*(sType: VkStructureType, pNext: pointer = nil, supported: VkBool32): VkDescriptorSetLayoutSupport =
+  result.sType = sType
+  result.pNext = pNext
+  result.supported = supported
+
+proc newVkPhysicalDeviceShaderDrawParametersFeatures*(sType: VkStructureType, pNext: pointer = nil, shaderDrawParameters: VkBool32): VkPhysicalDeviceShaderDrawParametersFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderDrawParameters = shaderDrawParameters
+
+proc newVkPhysicalDeviceShaderFloat16Int8Features*(sType: VkStructureType, pNext: pointer = nil, shaderFloat16: VkBool32, shaderInt8: VkBool32): VkPhysicalDeviceShaderFloat16Int8Features =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderFloat16 = shaderFloat16
+  result.shaderInt8 = shaderInt8
+
+proc newVkPhysicalDeviceFloatControlsProperties*(sType: VkStructureType, pNext: pointer = nil, denormBehaviorIndependence: VkShaderFloatControlsIndependence, roundingModeIndependence: VkShaderFloatControlsIndependence, shaderSignedZeroInfNanPreserveFloat16: VkBool32, shaderSignedZeroInfNanPreserveFloat32: VkBool32, shaderSignedZeroInfNanPreserveFloat64: VkBool32, shaderDenormPreserveFloat16: VkBool32, shaderDenormPreserveFloat32: VkBool32, shaderDenormPreserveFloat64: VkBool32, shaderDenormFlushToZeroFloat16: VkBool32, shaderDenormFlushToZeroFloat32: VkBool32, shaderDenormFlushToZeroFloat64: VkBool32, shaderRoundingModeRTEFloat16: VkBool32, shaderRoundingModeRTEFloat32: VkBool32, shaderRoundingModeRTEFloat64: VkBool32, shaderRoundingModeRTZFloat16: VkBool32, shaderRoundingModeRTZFloat32: VkBool32, shaderRoundingModeRTZFloat64: VkBool32): VkPhysicalDeviceFloatControlsProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.denormBehaviorIndependence = denormBehaviorIndependence
+  result.roundingModeIndependence = roundingModeIndependence
+  result.shaderSignedZeroInfNanPreserveFloat16 = shaderSignedZeroInfNanPreserveFloat16
+  result.shaderSignedZeroInfNanPreserveFloat32 = shaderSignedZeroInfNanPreserveFloat32
+  result.shaderSignedZeroInfNanPreserveFloat64 = shaderSignedZeroInfNanPreserveFloat64
+  result.shaderDenormPreserveFloat16 = shaderDenormPreserveFloat16
+  result.shaderDenormPreserveFloat32 = shaderDenormPreserveFloat32
+  result.shaderDenormPreserveFloat64 = shaderDenormPreserveFloat64
+  result.shaderDenormFlushToZeroFloat16 = shaderDenormFlushToZeroFloat16
+  result.shaderDenormFlushToZeroFloat32 = shaderDenormFlushToZeroFloat32
+  result.shaderDenormFlushToZeroFloat64 = shaderDenormFlushToZeroFloat64
+  result.shaderRoundingModeRTEFloat16 = shaderRoundingModeRTEFloat16
+  result.shaderRoundingModeRTEFloat32 = shaderRoundingModeRTEFloat32
+  result.shaderRoundingModeRTEFloat64 = shaderRoundingModeRTEFloat64
+  result.shaderRoundingModeRTZFloat16 = shaderRoundingModeRTZFloat16
+  result.shaderRoundingModeRTZFloat32 = shaderRoundingModeRTZFloat32
+  result.shaderRoundingModeRTZFloat64 = shaderRoundingModeRTZFloat64
+
+proc newVkPhysicalDeviceHostQueryResetFeatures*(sType: VkStructureType, pNext: pointer = nil, hostQueryReset: VkBool32): VkPhysicalDeviceHostQueryResetFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.hostQueryReset = hostQueryReset
+
+proc newVkNativeBufferUsage2ANDROID*(consumer: uint64, producer: uint64): VkNativeBufferUsage2ANDROID =
+  result.consumer = consumer
+  result.producer = producer
+
+proc newVkNativeBufferANDROID*(sType: VkStructureType, pNext: pointer = nil, handle: pointer = nil, stride: int, format: int, usage: int, usage2: VkNativeBufferUsage2ANDROID): VkNativeBufferANDROID =
+  result.sType = sType
+  result.pNext = pNext
+  result.handle = handle
+  result.stride = stride
+  result.format = format
+  result.usage = usage
+  result.usage2 = usage2
+
+proc newVkSwapchainImageCreateInfoANDROID*(sType: VkStructureType, pNext: pointer = nil, usage: VkSwapchainImageUsageFlagsANDROID): VkSwapchainImageCreateInfoANDROID =
+  result.sType = sType
+  result.pNext = pNext
+  result.usage = usage
+
+proc newVkPhysicalDevicePresentationPropertiesANDROID*(sType: VkStructureType, pNext: pointer = nil, sharedImage: VkBool32): VkPhysicalDevicePresentationPropertiesANDROID =
+  result.sType = sType
+  result.pNext = pNext
+  result.sharedImage = sharedImage
+
+proc newVkShaderResourceUsageAMD*(numUsedVgprs: uint32, numUsedSgprs: uint32, ldsSizePerLocalWorkGroup: uint32, ldsUsageSizeInBytes: uint, scratchMemUsageInBytes: uint): VkShaderResourceUsageAMD =
+  result.numUsedVgprs = numUsedVgprs
+  result.numUsedSgprs = numUsedSgprs
+  result.ldsSizePerLocalWorkGroup = ldsSizePerLocalWorkGroup
+  result.ldsUsageSizeInBytes = ldsUsageSizeInBytes
+  result.scratchMemUsageInBytes = scratchMemUsageInBytes
+
+proc newVkShaderStatisticsInfoAMD*(shaderStageMask: VkShaderStageFlags, resourceUsage: VkShaderResourceUsageAMD, numPhysicalVgprs: uint32, numPhysicalSgprs: uint32, numAvailableVgprs: uint32, numAvailableSgprs: uint32, computeWorkGroupSize: array[3, uint32]): VkShaderStatisticsInfoAMD =
+  result.shaderStageMask = shaderStageMask
+  result.resourceUsage = resourceUsage
+  result.numPhysicalVgprs = numPhysicalVgprs
+  result.numPhysicalSgprs = numPhysicalSgprs
+  result.numAvailableVgprs = numAvailableVgprs
+  result.numAvailableSgprs = numAvailableSgprs
+  result.computeWorkGroupSize = computeWorkGroupSize
+
+proc newVkDeviceQueueGlobalPriorityCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, globalPriority: VkQueueGlobalPriorityEXT): VkDeviceQueueGlobalPriorityCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.globalPriority = globalPriority
+
+proc newVkDebugUtilsObjectNameInfoEXT*(sType: VkStructureType, pNext: pointer = nil, objectType: VkObjectType, objectHandle: uint64, pObjectName: cstring): VkDebugUtilsObjectNameInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.objectType = objectType
+  result.objectHandle = objectHandle
+  result.pObjectName = pObjectName
+
+proc newVkDebugUtilsObjectTagInfoEXT*(sType: VkStructureType, pNext: pointer = nil, objectType: VkObjectType, objectHandle: uint64, tagName: uint64, tagSize: uint, pTag: pointer = nil): VkDebugUtilsObjectTagInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.objectType = objectType
+  result.objectHandle = objectHandle
+  result.tagName = tagName
+  result.tagSize = tagSize
+  result.pTag = pTag
+
+proc newVkDebugUtilsLabelEXT*(sType: VkStructureType, pNext: pointer = nil, pLabelName: cstring, color: array[4, float32]): VkDebugUtilsLabelEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.pLabelName = pLabelName
+  result.color = color
+
+proc newVkDebugUtilsMessengerCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkDebugUtilsMessengerCreateFlagsEXT = 0.VkDebugUtilsMessengerCreateFlagsEXT, messageSeverity: VkDebugUtilsMessageSeverityFlagsEXT, messageType: VkDebugUtilsMessageTypeFlagsEXT, pfnUserCallback: PFN_vkDebugUtilsMessengerCallbackEXT, pUserData: pointer = nil): VkDebugUtilsMessengerCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.messageSeverity = messageSeverity
+  result.messageType = messageType
+  result.pfnUserCallback = pfnUserCallback
+  result.pUserData = pUserData
+
+proc newVkDebugUtilsMessengerCallbackDataEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkDebugUtilsMessengerCallbackDataFlagsEXT = 0.VkDebugUtilsMessengerCallbackDataFlagsEXT, pMessageIdName: cstring, messageIdNumber: int32, pMessage: cstring, queueLabelCount: uint32, pQueueLabels: ptr VkDebugUtilsLabelEXT, cmdBufLabelCount: uint32, pCmdBufLabels: ptr VkDebugUtilsLabelEXT, objectCount: uint32, pObjects: ptr VkDebugUtilsObjectNameInfoEXT): VkDebugUtilsMessengerCallbackDataEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.pMessageIdName = pMessageIdName
+  result.messageIdNumber = messageIdNumber
+  result.pMessage = pMessage
+  result.queueLabelCount = queueLabelCount
+  result.pQueueLabels = pQueueLabels
+  result.cmdBufLabelCount = cmdBufLabelCount
+  result.pCmdBufLabels = pCmdBufLabels
+  result.objectCount = objectCount
+  result.pObjects = pObjects
+
+proc newVkImportMemoryHostPointerInfoEXT*(sType: VkStructureType, pNext: pointer = nil, handleType: VkExternalMemoryHandleTypeFlagBits, pHostPointer: pointer = nil): VkImportMemoryHostPointerInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.handleType = handleType
+  result.pHostPointer = pHostPointer
+
+proc newVkMemoryHostPointerPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, memoryTypeBits: uint32): VkMemoryHostPointerPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.memoryTypeBits = memoryTypeBits
+
+proc newVkPhysicalDeviceExternalMemoryHostPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, minImportedHostPointerAlignment: VkDeviceSize): VkPhysicalDeviceExternalMemoryHostPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.minImportedHostPointerAlignment = minImportedHostPointerAlignment
+
+proc newVkPhysicalDeviceConservativeRasterizationPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, primitiveOverestimationSize: float32, maxExtraPrimitiveOverestimationSize: float32, extraPrimitiveOverestimationSizeGranularity: float32, primitiveUnderestimation: VkBool32, conservativePointAndLineRasterization: VkBool32, degenerateTrianglesRasterized: VkBool32, degenerateLinesRasterized: VkBool32, fullyCoveredFragmentShaderInputVariable: VkBool32, conservativeRasterizationPostDepthCoverage: VkBool32): VkPhysicalDeviceConservativeRasterizationPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.primitiveOverestimationSize = primitiveOverestimationSize
+  result.maxExtraPrimitiveOverestimationSize = maxExtraPrimitiveOverestimationSize
+  result.extraPrimitiveOverestimationSizeGranularity = extraPrimitiveOverestimationSizeGranularity
+  result.primitiveUnderestimation = primitiveUnderestimation
+  result.conservativePointAndLineRasterization = conservativePointAndLineRasterization
+  result.degenerateTrianglesRasterized = degenerateTrianglesRasterized
+  result.degenerateLinesRasterized = degenerateLinesRasterized
+  result.fullyCoveredFragmentShaderInputVariable = fullyCoveredFragmentShaderInputVariable
+  result.conservativeRasterizationPostDepthCoverage = conservativeRasterizationPostDepthCoverage
+
+proc newVkCalibratedTimestampInfoEXT*(sType: VkStructureType, pNext: pointer = nil, timeDomain: VkTimeDomainEXT): VkCalibratedTimestampInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.timeDomain = timeDomain
+
+proc newVkPhysicalDeviceShaderCorePropertiesAMD*(sType: VkStructureType, pNext: pointer = nil, shaderEngineCount: uint32, shaderArraysPerEngineCount: uint32, computeUnitsPerShaderArray: uint32, simdPerComputeUnit: uint32, wavefrontsPerSimd: uint32, wavefrontSize: uint32, sgprsPerSimd: uint32, minSgprAllocation: uint32, maxSgprAllocation: uint32, sgprAllocationGranularity: uint32, vgprsPerSimd: uint32, minVgprAllocation: uint32, maxVgprAllocation: uint32, vgprAllocationGranularity: uint32): VkPhysicalDeviceShaderCorePropertiesAMD =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderEngineCount = shaderEngineCount
+  result.shaderArraysPerEngineCount = shaderArraysPerEngineCount
+  result.computeUnitsPerShaderArray = computeUnitsPerShaderArray
+  result.simdPerComputeUnit = simdPerComputeUnit
+  result.wavefrontsPerSimd = wavefrontsPerSimd
+  result.wavefrontSize = wavefrontSize
+  result.sgprsPerSimd = sgprsPerSimd
+  result.minSgprAllocation = minSgprAllocation
+  result.maxSgprAllocation = maxSgprAllocation
+  result.sgprAllocationGranularity = sgprAllocationGranularity
+  result.vgprsPerSimd = vgprsPerSimd
+  result.minVgprAllocation = minVgprAllocation
+  result.maxVgprAllocation = maxVgprAllocation
+  result.vgprAllocationGranularity = vgprAllocationGranularity
+
+proc newVkPhysicalDeviceShaderCoreProperties2AMD*(sType: VkStructureType, pNext: pointer = nil, shaderCoreFeatures: VkShaderCorePropertiesFlagsAMD, activeComputeUnitCount: uint32): VkPhysicalDeviceShaderCoreProperties2AMD =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderCoreFeatures = shaderCoreFeatures
+  result.activeComputeUnitCount = activeComputeUnitCount
+
+proc newVkPipelineRasterizationConservativeStateCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineRasterizationConservativeStateCreateFlagsEXT = 0.VkPipelineRasterizationConservativeStateCreateFlagsEXT, conservativeRasterizationMode: VkConservativeRasterizationModeEXT, extraPrimitiveOverestimationSize: float32): VkPipelineRasterizationConservativeStateCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.conservativeRasterizationMode = conservativeRasterizationMode
+  result.extraPrimitiveOverestimationSize = extraPrimitiveOverestimationSize
+
+proc newVkPhysicalDeviceDescriptorIndexingFeatures*(sType: VkStructureType, pNext: pointer = nil, shaderInputAttachmentArrayDynamicIndexing: VkBool32, shaderUniformTexelBufferArrayDynamicIndexing: VkBool32, shaderStorageTexelBufferArrayDynamicIndexing: VkBool32, shaderUniformBufferArrayNonUniformIndexing: VkBool32, shaderSampledImageArrayNonUniformIndexing: VkBool32, shaderStorageBufferArrayNonUniformIndexing: VkBool32, shaderStorageImageArrayNonUniformIndexing: VkBool32, shaderInputAttachmentArrayNonUniformIndexing: VkBool32, shaderUniformTexelBufferArrayNonUniformIndexing: VkBool32, shaderStorageTexelBufferArrayNonUniformIndexing: VkBool32, descriptorBindingUniformBufferUpdateAfterBind: VkBool32, descriptorBindingSampledImageUpdateAfterBind: VkBool32, descriptorBindingStorageImageUpdateAfterBind: VkBool32, descriptorBindingStorageBufferUpdateAfterBind: VkBool32, descriptorBindingUniformTexelBufferUpdateAfterBind: VkBool32, descriptorBindingStorageTexelBufferUpdateAfterBind: VkBool32, descriptorBindingUpdateUnusedWhilePending: VkBool32, descriptorBindingPartiallyBound: VkBool32, descriptorBindingVariableDescriptorCount: VkBool32, runtimeDescriptorArray: VkBool32): VkPhysicalDeviceDescriptorIndexingFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderInputAttachmentArrayDynamicIndexing = shaderInputAttachmentArrayDynamicIndexing
+  result.shaderUniformTexelBufferArrayDynamicIndexing = shaderUniformTexelBufferArrayDynamicIndexing
+  result.shaderStorageTexelBufferArrayDynamicIndexing = shaderStorageTexelBufferArrayDynamicIndexing
+  result.shaderUniformBufferArrayNonUniformIndexing = shaderUniformBufferArrayNonUniformIndexing
+  result.shaderSampledImageArrayNonUniformIndexing = shaderSampledImageArrayNonUniformIndexing
+  result.shaderStorageBufferArrayNonUniformIndexing = shaderStorageBufferArrayNonUniformIndexing
+  result.shaderStorageImageArrayNonUniformIndexing = shaderStorageImageArrayNonUniformIndexing
+  result.shaderInputAttachmentArrayNonUniformIndexing = shaderInputAttachmentArrayNonUniformIndexing
+  result.shaderUniformTexelBufferArrayNonUniformIndexing = shaderUniformTexelBufferArrayNonUniformIndexing
+  result.shaderStorageTexelBufferArrayNonUniformIndexing = shaderStorageTexelBufferArrayNonUniformIndexing
+  result.descriptorBindingUniformBufferUpdateAfterBind = descriptorBindingUniformBufferUpdateAfterBind
+  result.descriptorBindingSampledImageUpdateAfterBind = descriptorBindingSampledImageUpdateAfterBind
+  result.descriptorBindingStorageImageUpdateAfterBind = descriptorBindingStorageImageUpdateAfterBind
+  result.descriptorBindingStorageBufferUpdateAfterBind = descriptorBindingStorageBufferUpdateAfterBind
+  result.descriptorBindingUniformTexelBufferUpdateAfterBind = descriptorBindingUniformTexelBufferUpdateAfterBind
+  result.descriptorBindingStorageTexelBufferUpdateAfterBind = descriptorBindingStorageTexelBufferUpdateAfterBind
+  result.descriptorBindingUpdateUnusedWhilePending = descriptorBindingUpdateUnusedWhilePending
+  result.descriptorBindingPartiallyBound = descriptorBindingPartiallyBound
+  result.descriptorBindingVariableDescriptorCount = descriptorBindingVariableDescriptorCount
+  result.runtimeDescriptorArray = runtimeDescriptorArray
+
+proc newVkPhysicalDeviceDescriptorIndexingProperties*(sType: VkStructureType, pNext: pointer = nil, maxUpdateAfterBindDescriptorsInAllPools: uint32, shaderUniformBufferArrayNonUniformIndexingNative: VkBool32, shaderSampledImageArrayNonUniformIndexingNative: VkBool32, shaderStorageBufferArrayNonUniformIndexingNative: VkBool32, shaderStorageImageArrayNonUniformIndexingNative: VkBool32, shaderInputAttachmentArrayNonUniformIndexingNative: VkBool32, robustBufferAccessUpdateAfterBind: VkBool32, quadDivergentImplicitLod: VkBool32, maxPerStageDescriptorUpdateAfterBindSamplers: uint32, maxPerStageDescriptorUpdateAfterBindUniformBuffers: uint32, maxPerStageDescriptorUpdateAfterBindStorageBuffers: uint32, maxPerStageDescriptorUpdateAfterBindSampledImages: uint32, maxPerStageDescriptorUpdateAfterBindStorageImages: uint32, maxPerStageDescriptorUpdateAfterBindInputAttachments: uint32, maxPerStageUpdateAfterBindResources: uint32, maxDescriptorSetUpdateAfterBindSamplers: uint32, maxDescriptorSetUpdateAfterBindUniformBuffers: uint32, maxDescriptorSetUpdateAfterBindUniformBuffersDynamic: uint32, maxDescriptorSetUpdateAfterBindStorageBuffers: uint32, maxDescriptorSetUpdateAfterBindStorageBuffersDynamic: uint32, maxDescriptorSetUpdateAfterBindSampledImages: uint32, maxDescriptorSetUpdateAfterBindStorageImages: uint32, maxDescriptorSetUpdateAfterBindInputAttachments: uint32): VkPhysicalDeviceDescriptorIndexingProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxUpdateAfterBindDescriptorsInAllPools = maxUpdateAfterBindDescriptorsInAllPools
+  result.shaderUniformBufferArrayNonUniformIndexingNative = shaderUniformBufferArrayNonUniformIndexingNative
+  result.shaderSampledImageArrayNonUniformIndexingNative = shaderSampledImageArrayNonUniformIndexingNative
+  result.shaderStorageBufferArrayNonUniformIndexingNative = shaderStorageBufferArrayNonUniformIndexingNative
+  result.shaderStorageImageArrayNonUniformIndexingNative = shaderStorageImageArrayNonUniformIndexingNative
+  result.shaderInputAttachmentArrayNonUniformIndexingNative = shaderInputAttachmentArrayNonUniformIndexingNative
+  result.robustBufferAccessUpdateAfterBind = robustBufferAccessUpdateAfterBind
+  result.quadDivergentImplicitLod = quadDivergentImplicitLod
+  result.maxPerStageDescriptorUpdateAfterBindSamplers = maxPerStageDescriptorUpdateAfterBindSamplers
+  result.maxPerStageDescriptorUpdateAfterBindUniformBuffers = maxPerStageDescriptorUpdateAfterBindUniformBuffers
+  result.maxPerStageDescriptorUpdateAfterBindStorageBuffers = maxPerStageDescriptorUpdateAfterBindStorageBuffers
+  result.maxPerStageDescriptorUpdateAfterBindSampledImages = maxPerStageDescriptorUpdateAfterBindSampledImages
+  result.maxPerStageDescriptorUpdateAfterBindStorageImages = maxPerStageDescriptorUpdateAfterBindStorageImages
+  result.maxPerStageDescriptorUpdateAfterBindInputAttachments = maxPerStageDescriptorUpdateAfterBindInputAttachments
+  result.maxPerStageUpdateAfterBindResources = maxPerStageUpdateAfterBindResources
+  result.maxDescriptorSetUpdateAfterBindSamplers = maxDescriptorSetUpdateAfterBindSamplers
+  result.maxDescriptorSetUpdateAfterBindUniformBuffers = maxDescriptorSetUpdateAfterBindUniformBuffers
+  result.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = maxDescriptorSetUpdateAfterBindUniformBuffersDynamic
+  result.maxDescriptorSetUpdateAfterBindStorageBuffers = maxDescriptorSetUpdateAfterBindStorageBuffers
+  result.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = maxDescriptorSetUpdateAfterBindStorageBuffersDynamic
+  result.maxDescriptorSetUpdateAfterBindSampledImages = maxDescriptorSetUpdateAfterBindSampledImages
+  result.maxDescriptorSetUpdateAfterBindStorageImages = maxDescriptorSetUpdateAfterBindStorageImages
+  result.maxDescriptorSetUpdateAfterBindInputAttachments = maxDescriptorSetUpdateAfterBindInputAttachments
+
+proc newVkDescriptorSetLayoutBindingFlagsCreateInfo*(sType: VkStructureType, pNext: pointer = nil, bindingCount: uint32, pBindingFlags: ptr VkDescriptorBindingFlags): VkDescriptorSetLayoutBindingFlagsCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.bindingCount = bindingCount
+  result.pBindingFlags = pBindingFlags
+
+proc newVkDescriptorSetVariableDescriptorCountAllocateInfo*(sType: VkStructureType, pNext: pointer = nil, descriptorSetCount: uint32, pDescriptorCounts: ptr uint32): VkDescriptorSetVariableDescriptorCountAllocateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.descriptorSetCount = descriptorSetCount
+  result.pDescriptorCounts = pDescriptorCounts
+
+proc newVkDescriptorSetVariableDescriptorCountLayoutSupport*(sType: VkStructureType, pNext: pointer = nil, maxVariableDescriptorCount: uint32): VkDescriptorSetVariableDescriptorCountLayoutSupport =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxVariableDescriptorCount = maxVariableDescriptorCount
+
+proc newVkAttachmentDescription2*(sType: VkStructureType, pNext: pointer = nil, flags: VkAttachmentDescriptionFlags = 0.VkAttachmentDescriptionFlags, format: VkFormat, samples: VkSampleCountFlagBits, loadOp: VkAttachmentLoadOp, storeOp: VkAttachmentStoreOp, stencilLoadOp: VkAttachmentLoadOp, stencilStoreOp: VkAttachmentStoreOp, initialLayout: VkImageLayout, finalLayout: VkImageLayout): VkAttachmentDescription2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.format = format
+  result.samples = samples
+  result.loadOp = loadOp
+  result.storeOp = storeOp
+  result.stencilLoadOp = stencilLoadOp
+  result.stencilStoreOp = stencilStoreOp
+  result.initialLayout = initialLayout
+  result.finalLayout = finalLayout
+
+proc newVkAttachmentReference2*(sType: VkStructureType, pNext: pointer = nil, attachment: uint32, layout: VkImageLayout, aspectMask: VkImageAspectFlags): VkAttachmentReference2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.attachment = attachment
+  result.layout = layout
+  result.aspectMask = aspectMask
+
+proc newVkSubpassDescription2*(sType: VkStructureType, pNext: pointer = nil, flags: VkSubpassDescriptionFlags = 0.VkSubpassDescriptionFlags, pipelineBindPoint: VkPipelineBindPoint, viewMask: uint32, inputAttachmentCount: uint32, pInputAttachments: ptr VkAttachmentReference2, colorAttachmentCount: uint32, pColorAttachments: ptr VkAttachmentReference2, pResolveAttachments: ptr VkAttachmentReference2, pDepthStencilAttachment: ptr VkAttachmentReference2, preserveAttachmentCount: uint32, pPreserveAttachments: ptr uint32): VkSubpassDescription2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.pipelineBindPoint = pipelineBindPoint
+  result.viewMask = viewMask
+  result.inputAttachmentCount = inputAttachmentCount
+  result.pInputAttachments = pInputAttachments
+  result.colorAttachmentCount = colorAttachmentCount
+  result.pColorAttachments = pColorAttachments
+  result.pResolveAttachments = pResolveAttachments
+  result.pDepthStencilAttachment = pDepthStencilAttachment
+  result.preserveAttachmentCount = preserveAttachmentCount
+  result.pPreserveAttachments = pPreserveAttachments
+
+proc newVkSubpassDependency2*(sType: VkStructureType, pNext: pointer = nil, srcSubpass: uint32, dstSubpass: uint32, srcStageMask: VkPipelineStageFlags, dstStageMask: VkPipelineStageFlags, srcAccessMask: VkAccessFlags, dstAccessMask: VkAccessFlags, dependencyFlags: VkDependencyFlags, viewOffset: int32): VkSubpassDependency2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.srcSubpass = srcSubpass
+  result.dstSubpass = dstSubpass
+  result.srcStageMask = srcStageMask
+  result.dstStageMask = dstStageMask
+  result.srcAccessMask = srcAccessMask
+  result.dstAccessMask = dstAccessMask
+  result.dependencyFlags = dependencyFlags
+  result.viewOffset = viewOffset
+
+proc newVkRenderPassCreateInfo2*(sType: VkStructureType, pNext: pointer = nil, flags: VkRenderPassCreateFlags = 0.VkRenderPassCreateFlags, attachmentCount: uint32, pAttachments: ptr VkAttachmentDescription2, subpassCount: uint32, pSubpasses: ptr VkSubpassDescription2, dependencyCount: uint32, pDependencies: ptr VkSubpassDependency2, correlatedViewMaskCount: uint32, pCorrelatedViewMasks: ptr uint32): VkRenderPassCreateInfo2 =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.attachmentCount = attachmentCount
+  result.pAttachments = pAttachments
+  result.subpassCount = subpassCount
+  result.pSubpasses = pSubpasses
+  result.dependencyCount = dependencyCount
+  result.pDependencies = pDependencies
+  result.correlatedViewMaskCount = correlatedViewMaskCount
+  result.pCorrelatedViewMasks = pCorrelatedViewMasks
+
+proc newVkSubpassBeginInfo*(sType: VkStructureType, pNext: pointer = nil, contents: VkSubpassContents): VkSubpassBeginInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.contents = contents
+
+proc newVkSubpassEndInfo*(sType: VkStructureType, pNext: pointer = nil): VkSubpassEndInfo =
+  result.sType = sType
+  result.pNext = pNext
+
+proc newVkPhysicalDeviceTimelineSemaphoreFeatures*(sType: VkStructureType, pNext: pointer = nil, timelineSemaphore: VkBool32): VkPhysicalDeviceTimelineSemaphoreFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.timelineSemaphore = timelineSemaphore
+
+proc newVkPhysicalDeviceTimelineSemaphoreProperties*(sType: VkStructureType, pNext: pointer = nil, maxTimelineSemaphoreValueDifference: uint64): VkPhysicalDeviceTimelineSemaphoreProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxTimelineSemaphoreValueDifference = maxTimelineSemaphoreValueDifference
+
+proc newVkSemaphoreTypeCreateInfo*(sType: VkStructureType, pNext: pointer = nil, semaphoreType: VkSemaphoreType, initialValue: uint64): VkSemaphoreTypeCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.semaphoreType = semaphoreType
+  result.initialValue = initialValue
+
+proc newVkTimelineSemaphoreSubmitInfo*(sType: VkStructureType, pNext: pointer = nil, waitSemaphoreValueCount: uint32, pWaitSemaphoreValues: ptr uint64, signalSemaphoreValueCount: uint32, pSignalSemaphoreValues: ptr uint64): VkTimelineSemaphoreSubmitInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.waitSemaphoreValueCount = waitSemaphoreValueCount
+  result.pWaitSemaphoreValues = pWaitSemaphoreValues
+  result.signalSemaphoreValueCount = signalSemaphoreValueCount
+  result.pSignalSemaphoreValues = pSignalSemaphoreValues
+
+proc newVkSemaphoreWaitInfo*(sType: VkStructureType, pNext: pointer = nil, flags: VkSemaphoreWaitFlags = 0.VkSemaphoreWaitFlags, semaphoreCount: uint32, pSemaphores: ptr VkSemaphore, pValues: ptr uint64): VkSemaphoreWaitInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.semaphoreCount = semaphoreCount
+  result.pSemaphores = pSemaphores
+  result.pValues = pValues
+
+proc newVkSemaphoreSignalInfo*(sType: VkStructureType, pNext: pointer = nil, semaphore: VkSemaphore, value: uint64): VkSemaphoreSignalInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.semaphore = semaphore
+  result.value = value
+
+proc newVkVertexInputBindingDivisorDescriptionEXT*(binding: uint32, divisor: uint32): VkVertexInputBindingDivisorDescriptionEXT =
+  result.binding = binding
+  result.divisor = divisor
+
+proc newVkPipelineVertexInputDivisorStateCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, vertexBindingDivisorCount: uint32, pVertexBindingDivisors: ptr VkVertexInputBindingDivisorDescriptionEXT): VkPipelineVertexInputDivisorStateCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.vertexBindingDivisorCount = vertexBindingDivisorCount
+  result.pVertexBindingDivisors = pVertexBindingDivisors
+
+proc newVkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, maxVertexAttribDivisor: uint32): VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxVertexAttribDivisor = maxVertexAttribDivisor
+
+proc newVkPhysicalDevicePCIBusInfoPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, pciDomain: uint32, pciBus: uint32, pciDevice: uint32, pciFunction: uint32): VkPhysicalDevicePCIBusInfoPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.pciDomain = pciDomain
+  result.pciBus = pciBus
+  result.pciDevice = pciDevice
+  result.pciFunction = pciFunction
+
+proc newVkImportAndroidHardwareBufferInfoANDROID*(sType: VkStructureType, pNext: pointer = nil, buffer: ptr AHardwareBuffer): VkImportAndroidHardwareBufferInfoANDROID =
+  result.sType = sType
+  result.pNext = pNext
+  result.buffer = buffer
+
+proc newVkAndroidHardwareBufferUsageANDROID*(sType: VkStructureType, pNext: pointer = nil, androidHardwareBufferUsage: uint64): VkAndroidHardwareBufferUsageANDROID =
+  result.sType = sType
+  result.pNext = pNext
+  result.androidHardwareBufferUsage = androidHardwareBufferUsage
+
+proc newVkAndroidHardwareBufferPropertiesANDROID*(sType: VkStructureType, pNext: pointer = nil, allocationSize: VkDeviceSize, memoryTypeBits: uint32): VkAndroidHardwareBufferPropertiesANDROID =
+  result.sType = sType
+  result.pNext = pNext
+  result.allocationSize = allocationSize
+  result.memoryTypeBits = memoryTypeBits
+
+proc newVkMemoryGetAndroidHardwareBufferInfoANDROID*(sType: VkStructureType, pNext: pointer = nil, memory: VkDeviceMemory): VkMemoryGetAndroidHardwareBufferInfoANDROID =
+  result.sType = sType
+  result.pNext = pNext
+  result.memory = memory
+
+proc newVkAndroidHardwareBufferFormatPropertiesANDROID*(sType: VkStructureType, pNext: pointer = nil, format: VkFormat, externalFormat: uint64, formatFeatures: VkFormatFeatureFlags, samplerYcbcrConversionComponents: VkComponentMapping, suggestedYcbcrModel: VkSamplerYcbcrModelConversion, suggestedYcbcrRange: VkSamplerYcbcrRange, suggestedXChromaOffset: VkChromaLocation, suggestedYChromaOffset: VkChromaLocation): VkAndroidHardwareBufferFormatPropertiesANDROID =
+  result.sType = sType
+  result.pNext = pNext
+  result.format = format
+  result.externalFormat = externalFormat
+  result.formatFeatures = formatFeatures
+  result.samplerYcbcrConversionComponents = samplerYcbcrConversionComponents
+  result.suggestedYcbcrModel = suggestedYcbcrModel
+  result.suggestedYcbcrRange = suggestedYcbcrRange
+  result.suggestedXChromaOffset = suggestedXChromaOffset
+  result.suggestedYChromaOffset = suggestedYChromaOffset
+
+proc newVkCommandBufferInheritanceConditionalRenderingInfoEXT*(sType: VkStructureType, pNext: pointer = nil, conditionalRenderingEnable: VkBool32): VkCommandBufferInheritanceConditionalRenderingInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.conditionalRenderingEnable = conditionalRenderingEnable
+
+proc newVkExternalFormatANDROID*(sType: VkStructureType, pNext: pointer = nil, externalFormat: uint64): VkExternalFormatANDROID =
+  result.sType = sType
+  result.pNext = pNext
+  result.externalFormat = externalFormat
+
+proc newVkPhysicalDevice8BitStorageFeatures*(sType: VkStructureType, pNext: pointer = nil, storageBuffer8BitAccess: VkBool32, uniformAndStorageBuffer8BitAccess: VkBool32, storagePushConstant8: VkBool32): VkPhysicalDevice8BitStorageFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.storageBuffer8BitAccess = storageBuffer8BitAccess
+  result.uniformAndStorageBuffer8BitAccess = uniformAndStorageBuffer8BitAccess
+  result.storagePushConstant8 = storagePushConstant8
+
+proc newVkPhysicalDeviceConditionalRenderingFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, conditionalRendering: VkBool32, inheritedConditionalRendering: VkBool32): VkPhysicalDeviceConditionalRenderingFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.conditionalRendering = conditionalRendering
+  result.inheritedConditionalRendering = inheritedConditionalRendering
+
+proc newVkPhysicalDeviceVulkanMemoryModelFeatures*(sType: VkStructureType, pNext: pointer = nil, vulkanMemoryModel: VkBool32, vulkanMemoryModelDeviceScope: VkBool32, vulkanMemoryModelAvailabilityVisibilityChains: VkBool32): VkPhysicalDeviceVulkanMemoryModelFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.vulkanMemoryModel = vulkanMemoryModel
+  result.vulkanMemoryModelDeviceScope = vulkanMemoryModelDeviceScope
+  result.vulkanMemoryModelAvailabilityVisibilityChains = vulkanMemoryModelAvailabilityVisibilityChains
+
+proc newVkPhysicalDeviceShaderAtomicInt64Features*(sType: VkStructureType, pNext: pointer = nil, shaderBufferInt64Atomics: VkBool32, shaderSharedInt64Atomics: VkBool32): VkPhysicalDeviceShaderAtomicInt64Features =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderBufferInt64Atomics = shaderBufferInt64Atomics
+  result.shaderSharedInt64Atomics = shaderSharedInt64Atomics
+
+proc newVkPhysicalDeviceShaderAtomicFloatFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, shaderBufferFloat32Atomics: VkBool32, shaderBufferFloat32AtomicAdd: VkBool32, shaderBufferFloat64Atomics: VkBool32, shaderBufferFloat64AtomicAdd: VkBool32, shaderSharedFloat32Atomics: VkBool32, shaderSharedFloat32AtomicAdd: VkBool32, shaderSharedFloat64Atomics: VkBool32, shaderSharedFloat64AtomicAdd: VkBool32, shaderImageFloat32Atomics: VkBool32, shaderImageFloat32AtomicAdd: VkBool32, sparseImageFloat32Atomics: VkBool32, sparseImageFloat32AtomicAdd: VkBool32): VkPhysicalDeviceShaderAtomicFloatFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderBufferFloat32Atomics = shaderBufferFloat32Atomics
+  result.shaderBufferFloat32AtomicAdd = shaderBufferFloat32AtomicAdd
+  result.shaderBufferFloat64Atomics = shaderBufferFloat64Atomics
+  result.shaderBufferFloat64AtomicAdd = shaderBufferFloat64AtomicAdd
+  result.shaderSharedFloat32Atomics = shaderSharedFloat32Atomics
+  result.shaderSharedFloat32AtomicAdd = shaderSharedFloat32AtomicAdd
+  result.shaderSharedFloat64Atomics = shaderSharedFloat64Atomics
+  result.shaderSharedFloat64AtomicAdd = shaderSharedFloat64AtomicAdd
+  result.shaderImageFloat32Atomics = shaderImageFloat32Atomics
+  result.shaderImageFloat32AtomicAdd = shaderImageFloat32AtomicAdd
+  result.sparseImageFloat32Atomics = sparseImageFloat32Atomics
+  result.sparseImageFloat32AtomicAdd = sparseImageFloat32AtomicAdd
+
+proc newVkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, vertexAttributeInstanceRateDivisor: VkBool32, vertexAttributeInstanceRateZeroDivisor: VkBool32): VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.vertexAttributeInstanceRateDivisor = vertexAttributeInstanceRateDivisor
+  result.vertexAttributeInstanceRateZeroDivisor = vertexAttributeInstanceRateZeroDivisor
+
+proc newVkQueueFamilyCheckpointPropertiesNV*(sType: VkStructureType, pNext: pointer = nil, checkpointExecutionStageMask: VkPipelineStageFlags): VkQueueFamilyCheckpointPropertiesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.checkpointExecutionStageMask = checkpointExecutionStageMask
+
+proc newVkCheckpointDataNV*(sType: VkStructureType, pNext: pointer = nil, stage: VkPipelineStageFlagBits, pCheckpointMarker: pointer = nil): VkCheckpointDataNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.stage = stage
+  result.pCheckpointMarker = pCheckpointMarker
+
+proc newVkPhysicalDeviceDepthStencilResolveProperties*(sType: VkStructureType, pNext: pointer = nil, supportedDepthResolveModes: VkResolveModeFlags, supportedStencilResolveModes: VkResolveModeFlags, independentResolveNone: VkBool32, independentResolve: VkBool32): VkPhysicalDeviceDepthStencilResolveProperties =
+  result.sType = sType
+  result.pNext = pNext
+  result.supportedDepthResolveModes = supportedDepthResolveModes
+  result.supportedStencilResolveModes = supportedStencilResolveModes
+  result.independentResolveNone = independentResolveNone
+  result.independentResolve = independentResolve
+
+proc newVkSubpassDescriptionDepthStencilResolve*(sType: VkStructureType, pNext: pointer = nil, depthResolveMode: VkResolveModeFlagBits, stencilResolveMode: VkResolveModeFlagBits, pDepthStencilResolveAttachment: ptr VkAttachmentReference2): VkSubpassDescriptionDepthStencilResolve =
+  result.sType = sType
+  result.pNext = pNext
+  result.depthResolveMode = depthResolveMode
+  result.stencilResolveMode = stencilResolveMode
+  result.pDepthStencilResolveAttachment = pDepthStencilResolveAttachment
+
+proc newVkImageViewASTCDecodeModeEXT*(sType: VkStructureType, pNext: pointer = nil, decodeMode: VkFormat): VkImageViewASTCDecodeModeEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.decodeMode = decodeMode
+
+proc newVkPhysicalDeviceASTCDecodeFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, decodeModeSharedExponent: VkBool32): VkPhysicalDeviceASTCDecodeFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.decodeModeSharedExponent = decodeModeSharedExponent
+
+proc newVkPhysicalDeviceTransformFeedbackFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, transformFeedback: VkBool32, geometryStreams: VkBool32): VkPhysicalDeviceTransformFeedbackFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.transformFeedback = transformFeedback
+  result.geometryStreams = geometryStreams
+
+proc newVkPhysicalDeviceTransformFeedbackPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, maxTransformFeedbackStreams: uint32, maxTransformFeedbackBuffers: uint32, maxTransformFeedbackBufferSize: VkDeviceSize, maxTransformFeedbackStreamDataSize: uint32, maxTransformFeedbackBufferDataSize: uint32, maxTransformFeedbackBufferDataStride: uint32, transformFeedbackQueries: VkBool32, transformFeedbackStreamsLinesTriangles: VkBool32, transformFeedbackRasterizationStreamSelect: VkBool32, transformFeedbackDraw: VkBool32): VkPhysicalDeviceTransformFeedbackPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxTransformFeedbackStreams = maxTransformFeedbackStreams
+  result.maxTransformFeedbackBuffers = maxTransformFeedbackBuffers
+  result.maxTransformFeedbackBufferSize = maxTransformFeedbackBufferSize
+  result.maxTransformFeedbackStreamDataSize = maxTransformFeedbackStreamDataSize
+  result.maxTransformFeedbackBufferDataSize = maxTransformFeedbackBufferDataSize
+  result.maxTransformFeedbackBufferDataStride = maxTransformFeedbackBufferDataStride
+  result.transformFeedbackQueries = transformFeedbackQueries
+  result.transformFeedbackStreamsLinesTriangles = transformFeedbackStreamsLinesTriangles
+  result.transformFeedbackRasterizationStreamSelect = transformFeedbackRasterizationStreamSelect
+  result.transformFeedbackDraw = transformFeedbackDraw
+
+proc newVkPipelineRasterizationStateStreamCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineRasterizationStateStreamCreateFlagsEXT = 0.VkPipelineRasterizationStateStreamCreateFlagsEXT, rasterizationStream: uint32): VkPipelineRasterizationStateStreamCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.rasterizationStream = rasterizationStream
+
+proc newVkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, representativeFragmentTest: VkBool32): VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.representativeFragmentTest = representativeFragmentTest
+
+proc newVkPipelineRepresentativeFragmentTestStateCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, representativeFragmentTestEnable: VkBool32): VkPipelineRepresentativeFragmentTestStateCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.representativeFragmentTestEnable = representativeFragmentTestEnable
+
+proc newVkPhysicalDeviceExclusiveScissorFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, exclusiveScissor: VkBool32): VkPhysicalDeviceExclusiveScissorFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.exclusiveScissor = exclusiveScissor
+
+proc newVkPipelineViewportExclusiveScissorStateCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, exclusiveScissorCount: uint32, pExclusiveScissors: ptr VkRect2D): VkPipelineViewportExclusiveScissorStateCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.exclusiveScissorCount = exclusiveScissorCount
+  result.pExclusiveScissors = pExclusiveScissors
+
+proc newVkPhysicalDeviceCornerSampledImageFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, cornerSampledImage: VkBool32): VkPhysicalDeviceCornerSampledImageFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.cornerSampledImage = cornerSampledImage
+
+proc newVkPhysicalDeviceComputeShaderDerivativesFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, computeDerivativeGroupQuads: VkBool32, computeDerivativeGroupLinear: VkBool32): VkPhysicalDeviceComputeShaderDerivativesFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.computeDerivativeGroupQuads = computeDerivativeGroupQuads
+  result.computeDerivativeGroupLinear = computeDerivativeGroupLinear
+
+proc newVkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, fragmentShaderBarycentric: VkBool32): VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.fragmentShaderBarycentric = fragmentShaderBarycentric
+
+proc newVkPhysicalDeviceShaderImageFootprintFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, imageFootprint: VkBool32): VkPhysicalDeviceShaderImageFootprintFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.imageFootprint = imageFootprint
+
+proc newVkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, dedicatedAllocationImageAliasing: VkBool32): VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.dedicatedAllocationImageAliasing = dedicatedAllocationImageAliasing
+
+proc newVkShadingRatePaletteNV*(shadingRatePaletteEntryCount: uint32, pShadingRatePaletteEntries: ptr VkShadingRatePaletteEntryNV): VkShadingRatePaletteNV =
+  result.shadingRatePaletteEntryCount = shadingRatePaletteEntryCount
+  result.pShadingRatePaletteEntries = pShadingRatePaletteEntries
+
+proc newVkPipelineViewportShadingRateImageStateCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, shadingRateImageEnable: VkBool32, viewportCount: uint32, pShadingRatePalettes: ptr VkShadingRatePaletteNV): VkPipelineViewportShadingRateImageStateCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.shadingRateImageEnable = shadingRateImageEnable
+  result.viewportCount = viewportCount
+  result.pShadingRatePalettes = pShadingRatePalettes
+
+proc newVkPhysicalDeviceShadingRateImageFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, shadingRateImage: VkBool32, shadingRateCoarseSampleOrder: VkBool32): VkPhysicalDeviceShadingRateImageFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.shadingRateImage = shadingRateImage
+  result.shadingRateCoarseSampleOrder = shadingRateCoarseSampleOrder
+
+proc newVkPhysicalDeviceShadingRateImagePropertiesNV*(sType: VkStructureType, pNext: pointer = nil, shadingRateTexelSize: VkExtent2D, shadingRatePaletteSize: uint32, shadingRateMaxCoarseSamples: uint32): VkPhysicalDeviceShadingRateImagePropertiesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.shadingRateTexelSize = shadingRateTexelSize
+  result.shadingRatePaletteSize = shadingRatePaletteSize
+  result.shadingRateMaxCoarseSamples = shadingRateMaxCoarseSamples
+
+proc newVkCoarseSampleLocationNV*(pixelX: uint32, pixelY: uint32, sample: uint32): VkCoarseSampleLocationNV =
+  result.pixelX = pixelX
+  result.pixelY = pixelY
+  result.sample = sample
+
+proc newVkCoarseSampleOrderCustomNV*(shadingRate: VkShadingRatePaletteEntryNV, sampleCount: uint32, sampleLocationCount: uint32, pSampleLocations: ptr VkCoarseSampleLocationNV): VkCoarseSampleOrderCustomNV =
+  result.shadingRate = shadingRate
+  result.sampleCount = sampleCount
+  result.sampleLocationCount = sampleLocationCount
+  result.pSampleLocations = pSampleLocations
+
+proc newVkPipelineViewportCoarseSampleOrderStateCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, sampleOrderType: VkCoarseSampleOrderTypeNV, customSampleOrderCount: uint32, pCustomSampleOrders: ptr VkCoarseSampleOrderCustomNV): VkPipelineViewportCoarseSampleOrderStateCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.sampleOrderType = sampleOrderType
+  result.customSampleOrderCount = customSampleOrderCount
+  result.pCustomSampleOrders = pCustomSampleOrders
+
+proc newVkPhysicalDeviceMeshShaderFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, taskShader: VkBool32, meshShader: VkBool32): VkPhysicalDeviceMeshShaderFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.taskShader = taskShader
+  result.meshShader = meshShader
+
+proc newVkPhysicalDeviceMeshShaderPropertiesNV*(sType: VkStructureType, pNext: pointer = nil, maxDrawMeshTasksCount: uint32, maxTaskWorkGroupInvocations: uint32, maxTaskWorkGroupSize: array[3, uint32], maxTaskTotalMemorySize: uint32, maxTaskOutputCount: uint32, maxMeshWorkGroupInvocations: uint32, maxMeshWorkGroupSize: array[3, uint32], maxMeshTotalMemorySize: uint32, maxMeshOutputVertices: uint32, maxMeshOutputPrimitives: uint32, maxMeshMultiviewViewCount: uint32, meshOutputPerVertexGranularity: uint32, meshOutputPerPrimitiveGranularity: uint32): VkPhysicalDeviceMeshShaderPropertiesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxDrawMeshTasksCount = maxDrawMeshTasksCount
+  result.maxTaskWorkGroupInvocations = maxTaskWorkGroupInvocations
+  result.maxTaskWorkGroupSize = maxTaskWorkGroupSize
+  result.maxTaskTotalMemorySize = maxTaskTotalMemorySize
+  result.maxTaskOutputCount = maxTaskOutputCount
+  result.maxMeshWorkGroupInvocations = maxMeshWorkGroupInvocations
+  result.maxMeshWorkGroupSize = maxMeshWorkGroupSize
+  result.maxMeshTotalMemorySize = maxMeshTotalMemorySize
+  result.maxMeshOutputVertices = maxMeshOutputVertices
+  result.maxMeshOutputPrimitives = maxMeshOutputPrimitives
+  result.maxMeshMultiviewViewCount = maxMeshMultiviewViewCount
+  result.meshOutputPerVertexGranularity = meshOutputPerVertexGranularity
+  result.meshOutputPerPrimitiveGranularity = meshOutputPerPrimitiveGranularity
+
+proc newVkDrawMeshTasksIndirectCommandNV*(taskCount: uint32, firstTask: uint32): VkDrawMeshTasksIndirectCommandNV =
+  result.taskCount = taskCount
+  result.firstTask = firstTask
+
+proc newVkRayTracingShaderGroupCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, `type`: VkRayTracingShaderGroupTypeKHR, generalShader: uint32, closestHitShader: uint32, anyHitShader: uint32, intersectionShader: uint32): VkRayTracingShaderGroupCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.`type` = `type`
+  result.generalShader = generalShader
+  result.closestHitShader = closestHitShader
+  result.anyHitShader = anyHitShader
+  result.intersectionShader = intersectionShader
+
+proc newVkRayTracingShaderGroupCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, `type`: VkRayTracingShaderGroupTypeKHR, generalShader: uint32, closestHitShader: uint32, anyHitShader: uint32, intersectionShader: uint32, pShaderGroupCaptureReplayHandle: pointer = nil): VkRayTracingShaderGroupCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.`type` = `type`
+  result.generalShader = generalShader
+  result.closestHitShader = closestHitShader
+  result.anyHitShader = anyHitShader
+  result.intersectionShader = intersectionShader
+  result.pShaderGroupCaptureReplayHandle = pShaderGroupCaptureReplayHandle
+
+proc newVkRayTracingPipelineCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineCreateFlags = 0.VkPipelineCreateFlags, stageCount: uint32, pStages: ptr VkPipelineShaderStageCreateInfo, groupCount: uint32, pGroups: ptr VkRayTracingShaderGroupCreateInfoNV, maxRecursionDepth: uint32, layout: VkPipelineLayout, basePipelineHandle: VkPipeline, basePipelineIndex: int32): VkRayTracingPipelineCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.stageCount = stageCount
+  result.pStages = pStages
+  result.groupCount = groupCount
+  result.pGroups = pGroups
+  result.maxRecursionDepth = maxRecursionDepth
+  result.layout = layout
+  result.basePipelineHandle = basePipelineHandle
+  result.basePipelineIndex = basePipelineIndex
+
+proc newVkRayTracingPipelineCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineCreateFlags = 0.VkPipelineCreateFlags, stageCount: uint32, pStages: ptr VkPipelineShaderStageCreateInfo, groupCount: uint32, pGroups: ptr VkRayTracingShaderGroupCreateInfoKHR, maxRecursionDepth: uint32, libraries: VkPipelineLibraryCreateInfoKHR, pLibraryInterface: ptr VkRayTracingPipelineInterfaceCreateInfoKHR, layout: VkPipelineLayout, basePipelineHandle: VkPipeline, basePipelineIndex: int32): VkRayTracingPipelineCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.stageCount = stageCount
+  result.pStages = pStages
+  result.groupCount = groupCount
+  result.pGroups = pGroups
+  result.maxRecursionDepth = maxRecursionDepth
+  result.libraries = libraries
+  result.pLibraryInterface = pLibraryInterface
+  result.layout = layout
+  result.basePipelineHandle = basePipelineHandle
+  result.basePipelineIndex = basePipelineIndex
+
+proc newVkGeometryTrianglesNV*(sType: VkStructureType, pNext: pointer = nil, vertexData: VkBuffer, vertexOffset: VkDeviceSize, vertexCount: uint32, vertexStride: VkDeviceSize, vertexFormat: VkFormat, indexData: VkBuffer, indexOffset: VkDeviceSize, indexCount: uint32, indexType: VkIndexType, transformData: VkBuffer, transformOffset: VkDeviceSize): VkGeometryTrianglesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.vertexData = vertexData
+  result.vertexOffset = vertexOffset
+  result.vertexCount = vertexCount
+  result.vertexStride = vertexStride
+  result.vertexFormat = vertexFormat
+  result.indexData = indexData
+  result.indexOffset = indexOffset
+  result.indexCount = indexCount
+  result.indexType = indexType
+  result.transformData = transformData
+  result.transformOffset = transformOffset
+
+proc newVkGeometryAABBNV*(sType: VkStructureType, pNext: pointer = nil, aabbData: VkBuffer, numAABBs: uint32, stride: uint32, offset: VkDeviceSize): VkGeometryAABBNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.aabbData = aabbData
+  result.numAABBs = numAABBs
+  result.stride = stride
+  result.offset = offset
+
+proc newVkGeometryDataNV*(triangles: VkGeometryTrianglesNV, aabbs: VkGeometryAABBNV): VkGeometryDataNV =
+  result.triangles = triangles
+  result.aabbs = aabbs
+
+proc newVkGeometryNV*(sType: VkStructureType, pNext: pointer = nil, geometryType: VkGeometryTypeKHR, geometry: VkGeometryDataNV, flags: VkGeometryFlagsKHR = 0.VkGeometryFlagsKHR): VkGeometryNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.geometryType = geometryType
+  result.geometry = geometry
+  result.flags = flags
+
+proc newVkAccelerationStructureInfoNV*(sType: VkStructureType, pNext: pointer = nil, `type`: VkAccelerationStructureTypeNV, flags: VkBuildAccelerationStructureFlagsNV = 0.VkBuildAccelerationStructureFlagsNV, instanceCount: uint32, geometryCount: uint32, pGeometries: ptr VkGeometryNV): VkAccelerationStructureInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.`type` = `type`
+  result.flags = flags
+  result.instanceCount = instanceCount
+  result.geometryCount = geometryCount
+  result.pGeometries = pGeometries
+
+proc newVkAccelerationStructureCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, compactedSize: VkDeviceSize, info: VkAccelerationStructureInfoNV): VkAccelerationStructureCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.compactedSize = compactedSize
+  result.info = info
+
+proc newVkBindAccelerationStructureMemoryInfoKHR*(sType: VkStructureType, pNext: pointer = nil, accelerationStructure: VkAccelerationStructureKHR, memory: VkDeviceMemory, memoryOffset: VkDeviceSize, deviceIndexCount: uint32, pDeviceIndices: ptr uint32): VkBindAccelerationStructureMemoryInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.accelerationStructure = accelerationStructure
+  result.memory = memory
+  result.memoryOffset = memoryOffset
+  result.deviceIndexCount = deviceIndexCount
+  result.pDeviceIndices = pDeviceIndices
+
+proc newVkWriteDescriptorSetAccelerationStructureKHR*(sType: VkStructureType, pNext: pointer = nil, accelerationStructureCount: uint32, pAccelerationStructures: ptr VkAccelerationStructureKHR): VkWriteDescriptorSetAccelerationStructureKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.accelerationStructureCount = accelerationStructureCount
+  result.pAccelerationStructures = pAccelerationStructures
+
+proc newVkAccelerationStructureMemoryRequirementsInfoKHR*(sType: VkStructureType, pNext: pointer = nil, `type`: VkAccelerationStructureMemoryRequirementsTypeKHR, buildType: VkAccelerationStructureBuildTypeKHR, accelerationStructure: VkAccelerationStructureKHR): VkAccelerationStructureMemoryRequirementsInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.`type` = `type`
+  result.buildType = buildType
+  result.accelerationStructure = accelerationStructure
+
+proc newVkAccelerationStructureMemoryRequirementsInfoNV*(sType: VkStructureType, pNext: pointer = nil, `type`: VkAccelerationStructureMemoryRequirementsTypeNV, accelerationStructure: VkAccelerationStructureNV): VkAccelerationStructureMemoryRequirementsInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.`type` = `type`
+  result.accelerationStructure = accelerationStructure
+
+proc newVkPhysicalDeviceRayTracingFeaturesKHR*(sType: VkStructureType, pNext: pointer = nil, rayTracing: VkBool32, rayTracingShaderGroupHandleCaptureReplay: VkBool32, rayTracingShaderGroupHandleCaptureReplayMixed: VkBool32, rayTracingAccelerationStructureCaptureReplay: VkBool32, rayTracingIndirectTraceRays: VkBool32, rayTracingIndirectAccelerationStructureBuild: VkBool32, rayTracingHostAccelerationStructureCommands: VkBool32, rayQuery: VkBool32, rayTracingPrimitiveCulling: VkBool32): VkPhysicalDeviceRayTracingFeaturesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.rayTracing = rayTracing
+  result.rayTracingShaderGroupHandleCaptureReplay = rayTracingShaderGroupHandleCaptureReplay
+  result.rayTracingShaderGroupHandleCaptureReplayMixed = rayTracingShaderGroupHandleCaptureReplayMixed
+  result.rayTracingAccelerationStructureCaptureReplay = rayTracingAccelerationStructureCaptureReplay
+  result.rayTracingIndirectTraceRays = rayTracingIndirectTraceRays
+  result.rayTracingIndirectAccelerationStructureBuild = rayTracingIndirectAccelerationStructureBuild
+  result.rayTracingHostAccelerationStructureCommands = rayTracingHostAccelerationStructureCommands
+  result.rayQuery = rayQuery
+  result.rayTracingPrimitiveCulling = rayTracingPrimitiveCulling
+
+proc newVkPhysicalDeviceRayTracingPropertiesKHR*(sType: VkStructureType, pNext: pointer = nil, shaderGroupHandleSize: uint32, maxRecursionDepth: uint32, maxShaderGroupStride: uint32, shaderGroupBaseAlignment: uint32, maxGeometryCount: uint64, maxInstanceCount: uint64, maxPrimitiveCount: uint64, maxDescriptorSetAccelerationStructures: uint32, shaderGroupHandleCaptureReplaySize: uint32): VkPhysicalDeviceRayTracingPropertiesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderGroupHandleSize = shaderGroupHandleSize
+  result.maxRecursionDepth = maxRecursionDepth
+  result.maxShaderGroupStride = maxShaderGroupStride
+  result.shaderGroupBaseAlignment = shaderGroupBaseAlignment
+  result.maxGeometryCount = maxGeometryCount
+  result.maxInstanceCount = maxInstanceCount
+  result.maxPrimitiveCount = maxPrimitiveCount
+  result.maxDescriptorSetAccelerationStructures = maxDescriptorSetAccelerationStructures
+  result.shaderGroupHandleCaptureReplaySize = shaderGroupHandleCaptureReplaySize
+
+proc newVkPhysicalDeviceRayTracingPropertiesNV*(sType: VkStructureType, pNext: pointer = nil, shaderGroupHandleSize: uint32, maxRecursionDepth: uint32, maxShaderGroupStride: uint32, shaderGroupBaseAlignment: uint32, maxGeometryCount: uint64, maxInstanceCount: uint64, maxTriangleCount: uint64, maxDescriptorSetAccelerationStructures: uint32): VkPhysicalDeviceRayTracingPropertiesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderGroupHandleSize = shaderGroupHandleSize
+  result.maxRecursionDepth = maxRecursionDepth
+  result.maxShaderGroupStride = maxShaderGroupStride
+  result.shaderGroupBaseAlignment = shaderGroupBaseAlignment
+  result.maxGeometryCount = maxGeometryCount
+  result.maxInstanceCount = maxInstanceCount
+  result.maxTriangleCount = maxTriangleCount
+  result.maxDescriptorSetAccelerationStructures = maxDescriptorSetAccelerationStructures
+
+proc newVkStridedBufferRegionKHR*(buffer: VkBuffer, offset: VkDeviceSize, stride: VkDeviceSize, size: VkDeviceSize): VkStridedBufferRegionKHR =
+  result.buffer = buffer
+  result.offset = offset
+  result.stride = stride
+  result.size = size
+
+proc newVkTraceRaysIndirectCommandKHR*(width: uint32, height: uint32, depth: uint32): VkTraceRaysIndirectCommandKHR =
+  result.width = width
+  result.height = height
+  result.depth = depth
+
+proc newVkDrmFormatModifierPropertiesListEXT*(sType: VkStructureType, pNext: pointer = nil, drmFormatModifierCount: uint32, pDrmFormatModifierProperties: ptr VkDrmFormatModifierPropertiesEXT): VkDrmFormatModifierPropertiesListEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.drmFormatModifierCount = drmFormatModifierCount
+  result.pDrmFormatModifierProperties = pDrmFormatModifierProperties
+
+proc newVkDrmFormatModifierPropertiesEXT*(drmFormatModifier: uint64, drmFormatModifierPlaneCount: uint32, drmFormatModifierTilingFeatures: VkFormatFeatureFlags): VkDrmFormatModifierPropertiesEXT =
+  result.drmFormatModifier = drmFormatModifier
+  result.drmFormatModifierPlaneCount = drmFormatModifierPlaneCount
+  result.drmFormatModifierTilingFeatures = drmFormatModifierTilingFeatures
+
+proc newVkPhysicalDeviceImageDrmFormatModifierInfoEXT*(sType: VkStructureType, pNext: pointer = nil, drmFormatModifier: uint64, sharingMode: VkSharingMode, queueFamilyIndexCount: uint32, pQueueFamilyIndices: ptr uint32): VkPhysicalDeviceImageDrmFormatModifierInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.drmFormatModifier = drmFormatModifier
+  result.sharingMode = sharingMode
+  result.queueFamilyIndexCount = queueFamilyIndexCount
+  result.pQueueFamilyIndices = pQueueFamilyIndices
+
+proc newVkImageDrmFormatModifierListCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, drmFormatModifierCount: uint32, pDrmFormatModifiers: ptr uint64): VkImageDrmFormatModifierListCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.drmFormatModifierCount = drmFormatModifierCount
+  result.pDrmFormatModifiers = pDrmFormatModifiers
+
+proc newVkImageDrmFormatModifierExplicitCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, drmFormatModifier: uint64, drmFormatModifierPlaneCount: uint32, pPlaneLayouts: ptr VkSubresourceLayout): VkImageDrmFormatModifierExplicitCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.drmFormatModifier = drmFormatModifier
+  result.drmFormatModifierPlaneCount = drmFormatModifierPlaneCount
+  result.pPlaneLayouts = pPlaneLayouts
+
+proc newVkImageDrmFormatModifierPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, drmFormatModifier: uint64): VkImageDrmFormatModifierPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.drmFormatModifier = drmFormatModifier
+
+proc newVkImageStencilUsageCreateInfo*(sType: VkStructureType, pNext: pointer = nil, stencilUsage: VkImageUsageFlags): VkImageStencilUsageCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.stencilUsage = stencilUsage
+
+proc newVkDeviceMemoryOverallocationCreateInfoAMD*(sType: VkStructureType, pNext: pointer = nil, overallocationBehavior: VkMemoryOverallocationBehaviorAMD): VkDeviceMemoryOverallocationCreateInfoAMD =
+  result.sType = sType
+  result.pNext = pNext
+  result.overallocationBehavior = overallocationBehavior
+
+proc newVkPhysicalDeviceFragmentDensityMapFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, fragmentDensityMap: VkBool32, fragmentDensityMapDynamic: VkBool32, fragmentDensityMapNonSubsampledImages: VkBool32): VkPhysicalDeviceFragmentDensityMapFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.fragmentDensityMap = fragmentDensityMap
+  result.fragmentDensityMapDynamic = fragmentDensityMapDynamic
+  result.fragmentDensityMapNonSubsampledImages = fragmentDensityMapNonSubsampledImages
+
+proc newVkPhysicalDeviceFragmentDensityMap2FeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, fragmentDensityMapDeferred: VkBool32): VkPhysicalDeviceFragmentDensityMap2FeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.fragmentDensityMapDeferred = fragmentDensityMapDeferred
+
+proc newVkPhysicalDeviceFragmentDensityMapPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, minFragmentDensityTexelSize: VkExtent2D, maxFragmentDensityTexelSize: VkExtent2D, fragmentDensityInvocations: VkBool32): VkPhysicalDeviceFragmentDensityMapPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.minFragmentDensityTexelSize = minFragmentDensityTexelSize
+  result.maxFragmentDensityTexelSize = maxFragmentDensityTexelSize
+  result.fragmentDensityInvocations = fragmentDensityInvocations
+
+proc newVkPhysicalDeviceFragmentDensityMap2PropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, subsampledLoads: VkBool32, subsampledCoarseReconstructionEarlyAccess: VkBool32, maxSubsampledArrayLayers: uint32, maxDescriptorSetSubsampledSamplers: uint32): VkPhysicalDeviceFragmentDensityMap2PropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.subsampledLoads = subsampledLoads
+  result.subsampledCoarseReconstructionEarlyAccess = subsampledCoarseReconstructionEarlyAccess
+  result.maxSubsampledArrayLayers = maxSubsampledArrayLayers
+  result.maxDescriptorSetSubsampledSamplers = maxDescriptorSetSubsampledSamplers
+
+proc newVkRenderPassFragmentDensityMapCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, fragmentDensityMapAttachment: VkAttachmentReference): VkRenderPassFragmentDensityMapCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.fragmentDensityMapAttachment = fragmentDensityMapAttachment
+
+proc newVkPhysicalDeviceScalarBlockLayoutFeatures*(sType: VkStructureType, pNext: pointer = nil, scalarBlockLayout: VkBool32): VkPhysicalDeviceScalarBlockLayoutFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.scalarBlockLayout = scalarBlockLayout
+
+proc newVkSurfaceProtectedCapabilitiesKHR*(sType: VkStructureType, pNext: pointer = nil, supportsProtected: VkBool32): VkSurfaceProtectedCapabilitiesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.supportsProtected = supportsProtected
+
+proc newVkPhysicalDeviceUniformBufferStandardLayoutFeatures*(sType: VkStructureType, pNext: pointer = nil, uniformBufferStandardLayout: VkBool32): VkPhysicalDeviceUniformBufferStandardLayoutFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.uniformBufferStandardLayout = uniformBufferStandardLayout
+
+proc newVkPhysicalDeviceDepthClipEnableFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, depthClipEnable: VkBool32): VkPhysicalDeviceDepthClipEnableFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.depthClipEnable = depthClipEnable
+
+proc newVkPipelineRasterizationDepthClipStateCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineRasterizationDepthClipStateCreateFlagsEXT = 0.VkPipelineRasterizationDepthClipStateCreateFlagsEXT, depthClipEnable: VkBool32): VkPipelineRasterizationDepthClipStateCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.depthClipEnable = depthClipEnable
+
+proc newVkPhysicalDeviceMemoryBudgetPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, heapBudget: array[VK_MAX_MEMORY_HEAPS, VkDeviceSize], heapUsage: array[VK_MAX_MEMORY_HEAPS, VkDeviceSize]): VkPhysicalDeviceMemoryBudgetPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.heapBudget = heapBudget
+  result.heapUsage = heapUsage
+
+proc newVkPhysicalDeviceMemoryPriorityFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, memoryPriority: VkBool32): VkPhysicalDeviceMemoryPriorityFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.memoryPriority = memoryPriority
+
+proc newVkMemoryPriorityAllocateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, priority: float32): VkMemoryPriorityAllocateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.priority = priority
+
+proc newVkPhysicalDeviceBufferDeviceAddressFeatures*(sType: VkStructureType, pNext: pointer = nil, bufferDeviceAddress: VkBool32, bufferDeviceAddressCaptureReplay: VkBool32, bufferDeviceAddressMultiDevice: VkBool32): VkPhysicalDeviceBufferDeviceAddressFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.bufferDeviceAddress = bufferDeviceAddress
+  result.bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay
+  result.bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice
+
+proc newVkPhysicalDeviceBufferDeviceAddressFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, bufferDeviceAddress: VkBool32, bufferDeviceAddressCaptureReplay: VkBool32, bufferDeviceAddressMultiDevice: VkBool32): VkPhysicalDeviceBufferDeviceAddressFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.bufferDeviceAddress = bufferDeviceAddress
+  result.bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay
+  result.bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice
+
+proc newVkBufferDeviceAddressInfo*(sType: VkStructureType, pNext: pointer = nil, buffer: VkBuffer): VkBufferDeviceAddressInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.buffer = buffer
+
+proc newVkBufferOpaqueCaptureAddressCreateInfo*(sType: VkStructureType, pNext: pointer = nil, opaqueCaptureAddress: uint64): VkBufferOpaqueCaptureAddressCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.opaqueCaptureAddress = opaqueCaptureAddress
+
+proc newVkBufferDeviceAddressCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, deviceAddress: VkDeviceAddress): VkBufferDeviceAddressCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceAddress = deviceAddress
+
+proc newVkPhysicalDeviceImageViewImageFormatInfoEXT*(sType: VkStructureType, pNext: pointer = nil, imageViewType: VkImageViewType): VkPhysicalDeviceImageViewImageFormatInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.imageViewType = imageViewType
+
+proc newVkFilterCubicImageViewImageFormatPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, filterCubic: VkBool32, filterCubicMinmax: VkBool32): VkFilterCubicImageViewImageFormatPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.filterCubic = filterCubic
+  result.filterCubicMinmax = filterCubicMinmax
+
+proc newVkPhysicalDeviceImagelessFramebufferFeatures*(sType: VkStructureType, pNext: pointer = nil, imagelessFramebuffer: VkBool32): VkPhysicalDeviceImagelessFramebufferFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.imagelessFramebuffer = imagelessFramebuffer
+
+proc newVkFramebufferAttachmentsCreateInfo*(sType: VkStructureType, pNext: pointer = nil, attachmentImageInfoCount: uint32, pAttachmentImageInfos: ptr VkFramebufferAttachmentImageInfo): VkFramebufferAttachmentsCreateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.attachmentImageInfoCount = attachmentImageInfoCount
+  result.pAttachmentImageInfos = pAttachmentImageInfos
+
+proc newVkFramebufferAttachmentImageInfo*(sType: VkStructureType, pNext: pointer = nil, flags: VkImageCreateFlags = 0.VkImageCreateFlags, usage: VkImageUsageFlags, width: uint32, height: uint32, layerCount: uint32, viewFormatCount: uint32, pViewFormats: ptr VkFormat): VkFramebufferAttachmentImageInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.usage = usage
+  result.width = width
+  result.height = height
+  result.layerCount = layerCount
+  result.viewFormatCount = viewFormatCount
+  result.pViewFormats = pViewFormats
+
+proc newVkRenderPassAttachmentBeginInfo*(sType: VkStructureType, pNext: pointer = nil, attachmentCount: uint32, pAttachments: ptr VkImageView): VkRenderPassAttachmentBeginInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.attachmentCount = attachmentCount
+  result.pAttachments = pAttachments
+
+proc newVkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, textureCompressionASTC_HDR: VkBool32): VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.textureCompressionASTC_HDR = textureCompressionASTC_HDR
+
+proc newVkPhysicalDeviceCooperativeMatrixFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, cooperativeMatrix: VkBool32, cooperativeMatrixRobustBufferAccess: VkBool32): VkPhysicalDeviceCooperativeMatrixFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.cooperativeMatrix = cooperativeMatrix
+  result.cooperativeMatrixRobustBufferAccess = cooperativeMatrixRobustBufferAccess
+
+proc newVkPhysicalDeviceCooperativeMatrixPropertiesNV*(sType: VkStructureType, pNext: pointer = nil, cooperativeMatrixSupportedStages: VkShaderStageFlags): VkPhysicalDeviceCooperativeMatrixPropertiesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.cooperativeMatrixSupportedStages = cooperativeMatrixSupportedStages
+
+proc newVkCooperativeMatrixPropertiesNV*(sType: VkStructureType, pNext: pointer = nil, MSize: uint32, NSize: uint32, KSize: uint32, AType: VkComponentTypeNV, BType: VkComponentTypeNV, CType: VkComponentTypeNV, DType: VkComponentTypeNV, scope: VkScopeNV): VkCooperativeMatrixPropertiesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.MSize = MSize
+  result.NSize = NSize
+  result.KSize = KSize
+  result.AType = AType
+  result.BType = BType
+  result.CType = CType
+  result.DType = DType
+  result.scope = scope
+
+proc newVkPhysicalDeviceYcbcrImageArraysFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, ycbcrImageArrays: VkBool32): VkPhysicalDeviceYcbcrImageArraysFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.ycbcrImageArrays = ycbcrImageArrays
+
+proc newVkImageViewHandleInfoNVX*(sType: VkStructureType, pNext: pointer = nil, imageView: VkImageView, descriptorType: VkDescriptorType, sampler: VkSampler): VkImageViewHandleInfoNVX =
+  result.sType = sType
+  result.pNext = pNext
+  result.imageView = imageView
+  result.descriptorType = descriptorType
+  result.sampler = sampler
+
+proc newVkImageViewAddressPropertiesNVX*(sType: VkStructureType, pNext: pointer = nil, deviceAddress: VkDeviceAddress, size: VkDeviceSize): VkImageViewAddressPropertiesNVX =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceAddress = deviceAddress
+  result.size = size
+
+proc newVkPresentFrameTokenGGP*(sType: VkStructureType, pNext: pointer = nil, frameToken: GgpFrameToken): VkPresentFrameTokenGGP =
+  result.sType = sType
+  result.pNext = pNext
+  result.frameToken = frameToken
+
+proc newVkPipelineCreationFeedbackEXT*(flags: VkPipelineCreationFeedbackFlagsEXT = 0.VkPipelineCreationFeedbackFlagsEXT, duration: uint64): VkPipelineCreationFeedbackEXT =
+  result.flags = flags
+  result.duration = duration
+
+proc newVkPipelineCreationFeedbackCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, pPipelineCreationFeedback: ptr VkPipelineCreationFeedbackEXT, pipelineStageCreationFeedbackCount: uint32, pPipelineStageCreationFeedbacks: ptr ptr VkPipelineCreationFeedbackEXT): VkPipelineCreationFeedbackCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.pPipelineCreationFeedback = pPipelineCreationFeedback
+  result.pipelineStageCreationFeedbackCount = pipelineStageCreationFeedbackCount
+  result.pPipelineStageCreationFeedbacks = pPipelineStageCreationFeedbacks
+
+proc newVkSurfaceFullScreenExclusiveInfoEXT*(sType: VkStructureType, pNext: pointer = nil, fullScreenExclusive: VkFullScreenExclusiveEXT): VkSurfaceFullScreenExclusiveInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.fullScreenExclusive = fullScreenExclusive
+
+proc newVkSurfaceFullScreenExclusiveWin32InfoEXT*(sType: VkStructureType, pNext: pointer = nil, hmonitor: HMONITOR): VkSurfaceFullScreenExclusiveWin32InfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.hmonitor = hmonitor
+
+proc newVkSurfaceCapabilitiesFullScreenExclusiveEXT*(sType: VkStructureType, pNext: pointer = nil, fullScreenExclusiveSupported: VkBool32): VkSurfaceCapabilitiesFullScreenExclusiveEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.fullScreenExclusiveSupported = fullScreenExclusiveSupported
+
+proc newVkPhysicalDevicePerformanceQueryFeaturesKHR*(sType: VkStructureType, pNext: pointer = nil, performanceCounterQueryPools: VkBool32, performanceCounterMultipleQueryPools: VkBool32): VkPhysicalDevicePerformanceQueryFeaturesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.performanceCounterQueryPools = performanceCounterQueryPools
+  result.performanceCounterMultipleQueryPools = performanceCounterMultipleQueryPools
+
+proc newVkPhysicalDevicePerformanceQueryPropertiesKHR*(sType: VkStructureType, pNext: pointer = nil, allowCommandBufferQueryCopies: VkBool32): VkPhysicalDevicePerformanceQueryPropertiesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.allowCommandBufferQueryCopies = allowCommandBufferQueryCopies
+
+proc newVkPerformanceCounterKHR*(sType: VkStructureType, pNext: pointer = nil, unit: VkPerformanceCounterUnitKHR, scope: VkPerformanceCounterScopeKHR, storage: VkPerformanceCounterStorageKHR, uuid: array[VK_UUID_SIZE, uint8]): VkPerformanceCounterKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.unit = unit
+  result.scope = scope
+  result.storage = storage
+  result.uuid = uuid
+
+proc newVkPerformanceCounterDescriptionKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkPerformanceCounterDescriptionFlagsKHR = 0.VkPerformanceCounterDescriptionFlagsKHR, name: array[VK_MAX_DESCRIPTION_SIZE, char], category: array[VK_MAX_DESCRIPTION_SIZE, char], description: array[VK_MAX_DESCRIPTION_SIZE, char]): VkPerformanceCounterDescriptionKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.name = name
+  result.category = category
+  result.description = description
+
+proc newVkQueryPoolPerformanceCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, queueFamilyIndex: uint32, counterIndexCount: uint32, pCounterIndices: ptr uint32): VkQueryPoolPerformanceCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.queueFamilyIndex = queueFamilyIndex
+  result.counterIndexCount = counterIndexCount
+  result.pCounterIndices = pCounterIndices
+
+proc newVkAcquireProfilingLockInfoKHR*(sType: VkStructureType, pNext: pointer = nil, flags: VkAcquireProfilingLockFlagsKHR = 0.VkAcquireProfilingLockFlagsKHR, timeout: uint64): VkAcquireProfilingLockInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.timeout = timeout
+
+proc newVkPerformanceQuerySubmitInfoKHR*(sType: VkStructureType, pNext: pointer = nil, counterPassIndex: uint32): VkPerformanceQuerySubmitInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.counterPassIndex = counterPassIndex
+
+proc newVkHeadlessSurfaceCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, flags: VkHeadlessSurfaceCreateFlagsEXT = 0.VkHeadlessSurfaceCreateFlagsEXT): VkHeadlessSurfaceCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+
+proc newVkPhysicalDeviceCoverageReductionModeFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, coverageReductionMode: VkBool32): VkPhysicalDeviceCoverageReductionModeFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.coverageReductionMode = coverageReductionMode
+
+proc newVkPipelineCoverageReductionStateCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, flags: VkPipelineCoverageReductionStateCreateFlagsNV = 0.VkPipelineCoverageReductionStateCreateFlagsNV, coverageReductionMode: VkCoverageReductionModeNV): VkPipelineCoverageReductionStateCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+  result.coverageReductionMode = coverageReductionMode
+
+proc newVkFramebufferMixedSamplesCombinationNV*(sType: VkStructureType, pNext: pointer = nil, coverageReductionMode: VkCoverageReductionModeNV, rasterizationSamples: VkSampleCountFlagBits, depthStencilSamples: VkSampleCountFlags, colorSamples: VkSampleCountFlags): VkFramebufferMixedSamplesCombinationNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.coverageReductionMode = coverageReductionMode
+  result.rasterizationSamples = rasterizationSamples
+  result.depthStencilSamples = depthStencilSamples
+  result.colorSamples = colorSamples
+
+proc newVkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*(sType: VkStructureType, pNext: pointer = nil, shaderIntegerFunctions2: VkBool32): VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderIntegerFunctions2 = shaderIntegerFunctions2
+
+proc newVkPerformanceValueINTEL*(`type`: VkPerformanceValueTypeINTEL, data: VkPerformanceValueDataINTEL): VkPerformanceValueINTEL =
+  result.`type` = `type`
+  result.data = data
+
+proc newVkInitializePerformanceApiInfoINTEL*(sType: VkStructureType, pNext: pointer = nil, pUserData: pointer = nil): VkInitializePerformanceApiInfoINTEL =
+  result.sType = sType
+  result.pNext = pNext
+  result.pUserData = pUserData
+
+proc newVkQueryPoolPerformanceQueryCreateInfoINTEL*(sType: VkStructureType, pNext: pointer = nil, performanceCountersSampling: VkQueryPoolSamplingModeINTEL): VkQueryPoolPerformanceQueryCreateInfoINTEL =
+  result.sType = sType
+  result.pNext = pNext
+  result.performanceCountersSampling = performanceCountersSampling
+
+proc newVkPerformanceMarkerInfoINTEL*(sType: VkStructureType, pNext: pointer = nil, marker: uint64): VkPerformanceMarkerInfoINTEL =
+  result.sType = sType
+  result.pNext = pNext
+  result.marker = marker
+
+proc newVkPerformanceStreamMarkerInfoINTEL*(sType: VkStructureType, pNext: pointer = nil, marker: uint32): VkPerformanceStreamMarkerInfoINTEL =
+  result.sType = sType
+  result.pNext = pNext
+  result.marker = marker
+
+proc newVkPerformanceOverrideInfoINTEL*(sType: VkStructureType, pNext: pointer = nil, `type`: VkPerformanceOverrideTypeINTEL, enable: VkBool32, parameter: uint64): VkPerformanceOverrideInfoINTEL =
+  result.sType = sType
+  result.pNext = pNext
+  result.`type` = `type`
+  result.enable = enable
+  result.parameter = parameter
+
+proc newVkPerformanceConfigurationAcquireInfoINTEL*(sType: VkStructureType, pNext: pointer = nil, `type`: VkPerformanceConfigurationTypeINTEL): VkPerformanceConfigurationAcquireInfoINTEL =
+  result.sType = sType
+  result.pNext = pNext
+  result.`type` = `type`
+
+proc newVkPhysicalDeviceShaderClockFeaturesKHR*(sType: VkStructureType, pNext: pointer = nil, shaderSubgroupClock: VkBool32, shaderDeviceClock: VkBool32): VkPhysicalDeviceShaderClockFeaturesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderSubgroupClock = shaderSubgroupClock
+  result.shaderDeviceClock = shaderDeviceClock
+
+proc newVkPhysicalDeviceIndexTypeUint8FeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, indexTypeUint8: VkBool32): VkPhysicalDeviceIndexTypeUint8FeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.indexTypeUint8 = indexTypeUint8
+
+proc newVkPhysicalDeviceShaderSMBuiltinsPropertiesNV*(sType: VkStructureType, pNext: pointer = nil, shaderSMCount: uint32, shaderWarpsPerSM: uint32): VkPhysicalDeviceShaderSMBuiltinsPropertiesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderSMCount = shaderSMCount
+  result.shaderWarpsPerSM = shaderWarpsPerSM
+
+proc newVkPhysicalDeviceShaderSMBuiltinsFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, shaderSMBuiltins: VkBool32): VkPhysicalDeviceShaderSMBuiltinsFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderSMBuiltins = shaderSMBuiltins
+
+proc newVkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, fragmentShaderSampleInterlock: VkBool32, fragmentShaderPixelInterlock: VkBool32, fragmentShaderShadingRateInterlock: VkBool32): VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.fragmentShaderSampleInterlock = fragmentShaderSampleInterlock
+  result.fragmentShaderPixelInterlock = fragmentShaderPixelInterlock
+  result.fragmentShaderShadingRateInterlock = fragmentShaderShadingRateInterlock
+
+proc newVkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*(sType: VkStructureType, pNext: pointer = nil, separateDepthStencilLayouts: VkBool32): VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures =
+  result.sType = sType
+  result.pNext = pNext
+  result.separateDepthStencilLayouts = separateDepthStencilLayouts
+
+proc newVkAttachmentReferenceStencilLayout*(sType: VkStructureType, pNext: pointer = nil, stencilLayout: VkImageLayout): VkAttachmentReferenceStencilLayout =
+  result.sType = sType
+  result.pNext = pNext
+  result.stencilLayout = stencilLayout
+
+proc newVkAttachmentDescriptionStencilLayout*(sType: VkStructureType, pNext: pointer = nil, stencilInitialLayout: VkImageLayout, stencilFinalLayout: VkImageLayout): VkAttachmentDescriptionStencilLayout =
+  result.sType = sType
+  result.pNext = pNext
+  result.stencilInitialLayout = stencilInitialLayout
+  result.stencilFinalLayout = stencilFinalLayout
+
+proc newVkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*(sType: VkStructureType, pNext: pointer = nil, pipelineExecutableInfo: VkBool32): VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.pipelineExecutableInfo = pipelineExecutableInfo
+
+proc newVkPipelineInfoKHR*(sType: VkStructureType, pNext: pointer = nil, pipeline: VkPipeline): VkPipelineInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.pipeline = pipeline
+
+proc newVkPipelineExecutablePropertiesKHR*(sType: VkStructureType, pNext: pointer = nil, stages: VkShaderStageFlags, name: array[VK_MAX_DESCRIPTION_SIZE, char], description: array[VK_MAX_DESCRIPTION_SIZE, char], subgroupSize: uint32): VkPipelineExecutablePropertiesKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.stages = stages
+  result.name = name
+  result.description = description
+  result.subgroupSize = subgroupSize
+
+proc newVkPipelineExecutableInfoKHR*(sType: VkStructureType, pNext: pointer = nil, pipeline: VkPipeline, executableIndex: uint32): VkPipelineExecutableInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.pipeline = pipeline
+  result.executableIndex = executableIndex
+
+proc newVkPipelineExecutableStatisticKHR*(sType: VkStructureType, pNext: pointer = nil, name: array[VK_MAX_DESCRIPTION_SIZE, char], description: array[VK_MAX_DESCRIPTION_SIZE, char], format: VkPipelineExecutableStatisticFormatKHR, value: VkPipelineExecutableStatisticValueKHR): VkPipelineExecutableStatisticKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.name = name
+  result.description = description
+  result.format = format
+  result.value = value
+
+proc newVkPipelineExecutableInternalRepresentationKHR*(sType: VkStructureType, pNext: pointer = nil, name: array[VK_MAX_DESCRIPTION_SIZE, char], description: array[VK_MAX_DESCRIPTION_SIZE, char], isText: VkBool32, dataSize: uint, pData: pointer = nil): VkPipelineExecutableInternalRepresentationKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.name = name
+  result.description = description
+  result.isText = isText
+  result.dataSize = dataSize
+  result.pData = pData
+
+proc newVkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, shaderDemoteToHelperInvocation: VkBool32): VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.shaderDemoteToHelperInvocation = shaderDemoteToHelperInvocation
+
+proc newVkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, texelBufferAlignment: VkBool32): VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.texelBufferAlignment = texelBufferAlignment
+
+proc newVkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, storageTexelBufferOffsetAlignmentBytes: VkDeviceSize, storageTexelBufferOffsetSingleTexelAlignment: VkBool32, uniformTexelBufferOffsetAlignmentBytes: VkDeviceSize, uniformTexelBufferOffsetSingleTexelAlignment: VkBool32): VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.storageTexelBufferOffsetAlignmentBytes = storageTexelBufferOffsetAlignmentBytes
+  result.storageTexelBufferOffsetSingleTexelAlignment = storageTexelBufferOffsetSingleTexelAlignment
+  result.uniformTexelBufferOffsetAlignmentBytes = uniformTexelBufferOffsetAlignmentBytes
+  result.uniformTexelBufferOffsetSingleTexelAlignment = uniformTexelBufferOffsetSingleTexelAlignment
+
+proc newVkPhysicalDeviceSubgroupSizeControlFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, subgroupSizeControl: VkBool32, computeFullSubgroups: VkBool32): VkPhysicalDeviceSubgroupSizeControlFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.subgroupSizeControl = subgroupSizeControl
+  result.computeFullSubgroups = computeFullSubgroups
+
+proc newVkPhysicalDeviceSubgroupSizeControlPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, minSubgroupSize: uint32, maxSubgroupSize: uint32, maxComputeWorkgroupSubgroups: uint32, requiredSubgroupSizeStages: VkShaderStageFlags): VkPhysicalDeviceSubgroupSizeControlPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.minSubgroupSize = minSubgroupSize
+  result.maxSubgroupSize = maxSubgroupSize
+  result.maxComputeWorkgroupSubgroups = maxComputeWorkgroupSubgroups
+  result.requiredSubgroupSizeStages = requiredSubgroupSizeStages
+
+proc newVkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, requiredSubgroupSize: uint32): VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.requiredSubgroupSize = requiredSubgroupSize
+
+proc newVkMemoryOpaqueCaptureAddressAllocateInfo*(sType: VkStructureType, pNext: pointer = nil, opaqueCaptureAddress: uint64): VkMemoryOpaqueCaptureAddressAllocateInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.opaqueCaptureAddress = opaqueCaptureAddress
+
+proc newVkDeviceMemoryOpaqueCaptureAddressInfo*(sType: VkStructureType, pNext: pointer = nil, memory: VkDeviceMemory): VkDeviceMemoryOpaqueCaptureAddressInfo =
+  result.sType = sType
+  result.pNext = pNext
+  result.memory = memory
+
+proc newVkPhysicalDeviceLineRasterizationFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, rectangularLines: VkBool32, bresenhamLines: VkBool32, smoothLines: VkBool32, stippledRectangularLines: VkBool32, stippledBresenhamLines: VkBool32, stippledSmoothLines: VkBool32): VkPhysicalDeviceLineRasterizationFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.rectangularLines = rectangularLines
+  result.bresenhamLines = bresenhamLines
+  result.smoothLines = smoothLines
+  result.stippledRectangularLines = stippledRectangularLines
+  result.stippledBresenhamLines = stippledBresenhamLines
+  result.stippledSmoothLines = stippledSmoothLines
+
+proc newVkPhysicalDeviceLineRasterizationPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, lineSubPixelPrecisionBits: uint32): VkPhysicalDeviceLineRasterizationPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.lineSubPixelPrecisionBits = lineSubPixelPrecisionBits
+
+proc newVkPipelineRasterizationLineStateCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, lineRasterizationMode: VkLineRasterizationModeEXT, stippledLineEnable: VkBool32, lineStippleFactor: uint32, lineStipplePattern: uint16): VkPipelineRasterizationLineStateCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.lineRasterizationMode = lineRasterizationMode
+  result.stippledLineEnable = stippledLineEnable
+  result.lineStippleFactor = lineStippleFactor
+  result.lineStipplePattern = lineStipplePattern
+
+proc newVkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, pipelineCreationCacheControl: VkBool32): VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.pipelineCreationCacheControl = pipelineCreationCacheControl
+
+proc newVkPhysicalDeviceVulkan11Features*(sType: VkStructureType, pNext: pointer = nil, storageBuffer16BitAccess: VkBool32, uniformAndStorageBuffer16BitAccess: VkBool32, storagePushConstant16: VkBool32, storageInputOutput16: VkBool32, multiview: VkBool32, multiviewGeometryShader: VkBool32, multiviewTessellationShader: VkBool32, variablePointersStorageBuffer: VkBool32, variablePointers: VkBool32, protectedMemory: VkBool32, samplerYcbcrConversion: VkBool32, shaderDrawParameters: VkBool32): VkPhysicalDeviceVulkan11Features =
+  result.sType = sType
+  result.pNext = pNext
+  result.storageBuffer16BitAccess = storageBuffer16BitAccess
+  result.uniformAndStorageBuffer16BitAccess = uniformAndStorageBuffer16BitAccess
+  result.storagePushConstant16 = storagePushConstant16
+  result.storageInputOutput16 = storageInputOutput16
+  result.multiview = multiview
+  result.multiviewGeometryShader = multiviewGeometryShader
+  result.multiviewTessellationShader = multiviewTessellationShader
+  result.variablePointersStorageBuffer = variablePointersStorageBuffer
+  result.variablePointers = variablePointers
+  result.protectedMemory = protectedMemory
+  result.samplerYcbcrConversion = samplerYcbcrConversion
+  result.shaderDrawParameters = shaderDrawParameters
+
+proc newVkPhysicalDeviceVulkan11Properties*(sType: VkStructureType, pNext: pointer = nil, deviceUUID: array[VK_UUID_SIZE, uint8], driverUUID: array[VK_UUID_SIZE, uint8], deviceLUID: array[VK_LUID_SIZE, uint8], deviceNodeMask: uint32, deviceLUIDValid: VkBool32, subgroupSize: uint32, subgroupSupportedStages: VkShaderStageFlags, subgroupSupportedOperations: VkSubgroupFeatureFlags, subgroupQuadOperationsInAllStages: VkBool32, pointClippingBehavior: VkPointClippingBehavior, maxMultiviewViewCount: uint32, maxMultiviewInstanceIndex: uint32, protectedNoFault: VkBool32, maxPerSetDescriptors: uint32, maxMemoryAllocationSize: VkDeviceSize): VkPhysicalDeviceVulkan11Properties =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceUUID = deviceUUID
+  result.driverUUID = driverUUID
+  result.deviceLUID = deviceLUID
+  result.deviceNodeMask = deviceNodeMask
+  result.deviceLUIDValid = deviceLUIDValid
+  result.subgroupSize = subgroupSize
+  result.subgroupSupportedStages = subgroupSupportedStages
+  result.subgroupSupportedOperations = subgroupSupportedOperations
+  result.subgroupQuadOperationsInAllStages = subgroupQuadOperationsInAllStages
+  result.pointClippingBehavior = pointClippingBehavior
+  result.maxMultiviewViewCount = maxMultiviewViewCount
+  result.maxMultiviewInstanceIndex = maxMultiviewInstanceIndex
+  result.protectedNoFault = protectedNoFault
+  result.maxPerSetDescriptors = maxPerSetDescriptors
+  result.maxMemoryAllocationSize = maxMemoryAllocationSize
+
+proc newVkPhysicalDeviceVulkan12Features*(sType: VkStructureType, pNext: pointer = nil, samplerMirrorClampToEdge: VkBool32, drawIndirectCount: VkBool32, storageBuffer8BitAccess: VkBool32, uniformAndStorageBuffer8BitAccess: VkBool32, storagePushConstant8: VkBool32, shaderBufferInt64Atomics: VkBool32, shaderSharedInt64Atomics: VkBool32, shaderFloat16: VkBool32, shaderInt8: VkBool32, descriptorIndexing: VkBool32, shaderInputAttachmentArrayDynamicIndexing: VkBool32, shaderUniformTexelBufferArrayDynamicIndexing: VkBool32, shaderStorageTexelBufferArrayDynamicIndexing: VkBool32, shaderUniformBufferArrayNonUniformIndexing: VkBool32, shaderSampledImageArrayNonUniformIndexing: VkBool32, shaderStorageBufferArrayNonUniformIndexing: VkBool32, shaderStorageImageArrayNonUniformIndexing: VkBool32, shaderInputAttachmentArrayNonUniformIndexing: VkBool32, shaderUniformTexelBufferArrayNonUniformIndexing: VkBool32, shaderStorageTexelBufferArrayNonUniformIndexing: VkBool32, descriptorBindingUniformBufferUpdateAfterBind: VkBool32, descriptorBindingSampledImageUpdateAfterBind: VkBool32, descriptorBindingStorageImageUpdateAfterBind: VkBool32, descriptorBindingStorageBufferUpdateAfterBind: VkBool32, descriptorBindingUniformTexelBufferUpdateAfterBind: VkBool32, descriptorBindingStorageTexelBufferUpdateAfterBind: VkBool32, descriptorBindingUpdateUnusedWhilePending: VkBool32, descriptorBindingPartiallyBound: VkBool32, descriptorBindingVariableDescriptorCount: VkBool32, runtimeDescriptorArray: VkBool32, samplerFilterMinmax: VkBool32, scalarBlockLayout: VkBool32, imagelessFramebuffer: VkBool32, uniformBufferStandardLayout: VkBool32, shaderSubgroupExtendedTypes: VkBool32, separateDepthStencilLayouts: VkBool32, hostQueryReset: VkBool32, timelineSemaphore: VkBool32, bufferDeviceAddress: VkBool32, bufferDeviceAddressCaptureReplay: VkBool32, bufferDeviceAddressMultiDevice: VkBool32, vulkanMemoryModel: VkBool32, vulkanMemoryModelDeviceScope: VkBool32, vulkanMemoryModelAvailabilityVisibilityChains: VkBool32, shaderOutputViewportIndex: VkBool32, shaderOutputLayer: VkBool32, subgroupBroadcastDynamicId: VkBool32): VkPhysicalDeviceVulkan12Features =
+  result.sType = sType
+  result.pNext = pNext
+  result.samplerMirrorClampToEdge = samplerMirrorClampToEdge
+  result.drawIndirectCount = drawIndirectCount
+  result.storageBuffer8BitAccess = storageBuffer8BitAccess
+  result.uniformAndStorageBuffer8BitAccess = uniformAndStorageBuffer8BitAccess
+  result.storagePushConstant8 = storagePushConstant8
+  result.shaderBufferInt64Atomics = shaderBufferInt64Atomics
+  result.shaderSharedInt64Atomics = shaderSharedInt64Atomics
+  result.shaderFloat16 = shaderFloat16
+  result.shaderInt8 = shaderInt8
+  result.descriptorIndexing = descriptorIndexing
+  result.shaderInputAttachmentArrayDynamicIndexing = shaderInputAttachmentArrayDynamicIndexing
+  result.shaderUniformTexelBufferArrayDynamicIndexing = shaderUniformTexelBufferArrayDynamicIndexing
+  result.shaderStorageTexelBufferArrayDynamicIndexing = shaderStorageTexelBufferArrayDynamicIndexing
+  result.shaderUniformBufferArrayNonUniformIndexing = shaderUniformBufferArrayNonUniformIndexing
+  result.shaderSampledImageArrayNonUniformIndexing = shaderSampledImageArrayNonUniformIndexing
+  result.shaderStorageBufferArrayNonUniformIndexing = shaderStorageBufferArrayNonUniformIndexing
+  result.shaderStorageImageArrayNonUniformIndexing = shaderStorageImageArrayNonUniformIndexing
+  result.shaderInputAttachmentArrayNonUniformIndexing = shaderInputAttachmentArrayNonUniformIndexing
+  result.shaderUniformTexelBufferArrayNonUniformIndexing = shaderUniformTexelBufferArrayNonUniformIndexing
+  result.shaderStorageTexelBufferArrayNonUniformIndexing = shaderStorageTexelBufferArrayNonUniformIndexing
+  result.descriptorBindingUniformBufferUpdateAfterBind = descriptorBindingUniformBufferUpdateAfterBind
+  result.descriptorBindingSampledImageUpdateAfterBind = descriptorBindingSampledImageUpdateAfterBind
+  result.descriptorBindingStorageImageUpdateAfterBind = descriptorBindingStorageImageUpdateAfterBind
+  result.descriptorBindingStorageBufferUpdateAfterBind = descriptorBindingStorageBufferUpdateAfterBind
+  result.descriptorBindingUniformTexelBufferUpdateAfterBind = descriptorBindingUniformTexelBufferUpdateAfterBind
+  result.descriptorBindingStorageTexelBufferUpdateAfterBind = descriptorBindingStorageTexelBufferUpdateAfterBind
+  result.descriptorBindingUpdateUnusedWhilePending = descriptorBindingUpdateUnusedWhilePending
+  result.descriptorBindingPartiallyBound = descriptorBindingPartiallyBound
+  result.descriptorBindingVariableDescriptorCount = descriptorBindingVariableDescriptorCount
+  result.runtimeDescriptorArray = runtimeDescriptorArray
+  result.samplerFilterMinmax = samplerFilterMinmax
+  result.scalarBlockLayout = scalarBlockLayout
+  result.imagelessFramebuffer = imagelessFramebuffer
+  result.uniformBufferStandardLayout = uniformBufferStandardLayout
+  result.shaderSubgroupExtendedTypes = shaderSubgroupExtendedTypes
+  result.separateDepthStencilLayouts = separateDepthStencilLayouts
+  result.hostQueryReset = hostQueryReset
+  result.timelineSemaphore = timelineSemaphore
+  result.bufferDeviceAddress = bufferDeviceAddress
+  result.bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay
+  result.bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice
+  result.vulkanMemoryModel = vulkanMemoryModel
+  result.vulkanMemoryModelDeviceScope = vulkanMemoryModelDeviceScope
+  result.vulkanMemoryModelAvailabilityVisibilityChains = vulkanMemoryModelAvailabilityVisibilityChains
+  result.shaderOutputViewportIndex = shaderOutputViewportIndex
+  result.shaderOutputLayer = shaderOutputLayer
+  result.subgroupBroadcastDynamicId = subgroupBroadcastDynamicId
+
+proc newVkPhysicalDeviceVulkan12Properties*(sType: VkStructureType, pNext: pointer = nil, driverID: VkDriverId, driverName: array[VK_MAX_DRIVER_NAME_SIZE, char], driverInfo: array[VK_MAX_DRIVER_INFO_SIZE, char], conformanceVersion: VkConformanceVersion, denormBehaviorIndependence: VkShaderFloatControlsIndependence, roundingModeIndependence: VkShaderFloatControlsIndependence, shaderSignedZeroInfNanPreserveFloat16: VkBool32, shaderSignedZeroInfNanPreserveFloat32: VkBool32, shaderSignedZeroInfNanPreserveFloat64: VkBool32, shaderDenormPreserveFloat16: VkBool32, shaderDenormPreserveFloat32: VkBool32, shaderDenormPreserveFloat64: VkBool32, shaderDenormFlushToZeroFloat16: VkBool32, shaderDenormFlushToZeroFloat32: VkBool32, shaderDenormFlushToZeroFloat64: VkBool32, shaderRoundingModeRTEFloat16: VkBool32, shaderRoundingModeRTEFloat32: VkBool32, shaderRoundingModeRTEFloat64: VkBool32, shaderRoundingModeRTZFloat16: VkBool32, shaderRoundingModeRTZFloat32: VkBool32, shaderRoundingModeRTZFloat64: VkBool32, maxUpdateAfterBindDescriptorsInAllPools: uint32, shaderUniformBufferArrayNonUniformIndexingNative: VkBool32, shaderSampledImageArrayNonUniformIndexingNative: VkBool32, shaderStorageBufferArrayNonUniformIndexingNative: VkBool32, shaderStorageImageArrayNonUniformIndexingNative: VkBool32, shaderInputAttachmentArrayNonUniformIndexingNative: VkBool32, robustBufferAccessUpdateAfterBind: VkBool32, quadDivergentImplicitLod: VkBool32, maxPerStageDescriptorUpdateAfterBindSamplers: uint32, maxPerStageDescriptorUpdateAfterBindUniformBuffers: uint32, maxPerStageDescriptorUpdateAfterBindStorageBuffers: uint32, maxPerStageDescriptorUpdateAfterBindSampledImages: uint32, maxPerStageDescriptorUpdateAfterBindStorageImages: uint32, maxPerStageDescriptorUpdateAfterBindInputAttachments: uint32, maxPerStageUpdateAfterBindResources: uint32, maxDescriptorSetUpdateAfterBindSamplers: uint32, maxDescriptorSetUpdateAfterBindUniformBuffers: uint32, maxDescriptorSetUpdateAfterBindUniformBuffersDynamic: uint32, maxDescriptorSetUpdateAfterBindStorageBuffers: uint32, maxDescriptorSetUpdateAfterBindStorageBuffersDynamic: uint32, maxDescriptorSetUpdateAfterBindSampledImages: uint32, maxDescriptorSetUpdateAfterBindStorageImages: uint32, maxDescriptorSetUpdateAfterBindInputAttachments: uint32, supportedDepthResolveModes: VkResolveModeFlags, supportedStencilResolveModes: VkResolveModeFlags, independentResolveNone: VkBool32, independentResolve: VkBool32, filterMinmaxSingleComponentFormats: VkBool32, filterMinmaxImageComponentMapping: VkBool32, maxTimelineSemaphoreValueDifference: uint64, framebufferIntegerColorSampleCounts: VkSampleCountFlags): VkPhysicalDeviceVulkan12Properties =
+  result.sType = sType
+  result.pNext = pNext
+  result.driverID = driverID
+  result.driverName = driverName
+  result.driverInfo = driverInfo
+  result.conformanceVersion = conformanceVersion
+  result.denormBehaviorIndependence = denormBehaviorIndependence
+  result.roundingModeIndependence = roundingModeIndependence
+  result.shaderSignedZeroInfNanPreserveFloat16 = shaderSignedZeroInfNanPreserveFloat16
+  result.shaderSignedZeroInfNanPreserveFloat32 = shaderSignedZeroInfNanPreserveFloat32
+  result.shaderSignedZeroInfNanPreserveFloat64 = shaderSignedZeroInfNanPreserveFloat64
+  result.shaderDenormPreserveFloat16 = shaderDenormPreserveFloat16
+  result.shaderDenormPreserveFloat32 = shaderDenormPreserveFloat32
+  result.shaderDenormPreserveFloat64 = shaderDenormPreserveFloat64
+  result.shaderDenormFlushToZeroFloat16 = shaderDenormFlushToZeroFloat16
+  result.shaderDenormFlushToZeroFloat32 = shaderDenormFlushToZeroFloat32
+  result.shaderDenormFlushToZeroFloat64 = shaderDenormFlushToZeroFloat64
+  result.shaderRoundingModeRTEFloat16 = shaderRoundingModeRTEFloat16
+  result.shaderRoundingModeRTEFloat32 = shaderRoundingModeRTEFloat32
+  result.shaderRoundingModeRTEFloat64 = shaderRoundingModeRTEFloat64
+  result.shaderRoundingModeRTZFloat16 = shaderRoundingModeRTZFloat16
+  result.shaderRoundingModeRTZFloat32 = shaderRoundingModeRTZFloat32
+  result.shaderRoundingModeRTZFloat64 = shaderRoundingModeRTZFloat64
+  result.maxUpdateAfterBindDescriptorsInAllPools = maxUpdateAfterBindDescriptorsInAllPools
+  result.shaderUniformBufferArrayNonUniformIndexingNative = shaderUniformBufferArrayNonUniformIndexingNative
+  result.shaderSampledImageArrayNonUniformIndexingNative = shaderSampledImageArrayNonUniformIndexingNative
+  result.shaderStorageBufferArrayNonUniformIndexingNative = shaderStorageBufferArrayNonUniformIndexingNative
+  result.shaderStorageImageArrayNonUniformIndexingNative = shaderStorageImageArrayNonUniformIndexingNative
+  result.shaderInputAttachmentArrayNonUniformIndexingNative = shaderInputAttachmentArrayNonUniformIndexingNative
+  result.robustBufferAccessUpdateAfterBind = robustBufferAccessUpdateAfterBind
+  result.quadDivergentImplicitLod = quadDivergentImplicitLod
+  result.maxPerStageDescriptorUpdateAfterBindSamplers = maxPerStageDescriptorUpdateAfterBindSamplers
+  result.maxPerStageDescriptorUpdateAfterBindUniformBuffers = maxPerStageDescriptorUpdateAfterBindUniformBuffers
+  result.maxPerStageDescriptorUpdateAfterBindStorageBuffers = maxPerStageDescriptorUpdateAfterBindStorageBuffers
+  result.maxPerStageDescriptorUpdateAfterBindSampledImages = maxPerStageDescriptorUpdateAfterBindSampledImages
+  result.maxPerStageDescriptorUpdateAfterBindStorageImages = maxPerStageDescriptorUpdateAfterBindStorageImages
+  result.maxPerStageDescriptorUpdateAfterBindInputAttachments = maxPerStageDescriptorUpdateAfterBindInputAttachments
+  result.maxPerStageUpdateAfterBindResources = maxPerStageUpdateAfterBindResources
+  result.maxDescriptorSetUpdateAfterBindSamplers = maxDescriptorSetUpdateAfterBindSamplers
+  result.maxDescriptorSetUpdateAfterBindUniformBuffers = maxDescriptorSetUpdateAfterBindUniformBuffers
+  result.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = maxDescriptorSetUpdateAfterBindUniformBuffersDynamic
+  result.maxDescriptorSetUpdateAfterBindStorageBuffers = maxDescriptorSetUpdateAfterBindStorageBuffers
+  result.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = maxDescriptorSetUpdateAfterBindStorageBuffersDynamic
+  result.maxDescriptorSetUpdateAfterBindSampledImages = maxDescriptorSetUpdateAfterBindSampledImages
+  result.maxDescriptorSetUpdateAfterBindStorageImages = maxDescriptorSetUpdateAfterBindStorageImages
+  result.maxDescriptorSetUpdateAfterBindInputAttachments = maxDescriptorSetUpdateAfterBindInputAttachments
+  result.supportedDepthResolveModes = supportedDepthResolveModes
+  result.supportedStencilResolveModes = supportedStencilResolveModes
+  result.independentResolveNone = independentResolveNone
+  result.independentResolve = independentResolve
+  result.filterMinmaxSingleComponentFormats = filterMinmaxSingleComponentFormats
+  result.filterMinmaxImageComponentMapping = filterMinmaxImageComponentMapping
+  result.maxTimelineSemaphoreValueDifference = maxTimelineSemaphoreValueDifference
+  result.framebufferIntegerColorSampleCounts = framebufferIntegerColorSampleCounts
+
+proc newVkPipelineCompilerControlCreateInfoAMD*(sType: VkStructureType, pNext: pointer = nil, compilerControlFlags: VkPipelineCompilerControlFlagsAMD): VkPipelineCompilerControlCreateInfoAMD =
+  result.sType = sType
+  result.pNext = pNext
+  result.compilerControlFlags = compilerControlFlags
+
+proc newVkPhysicalDeviceCoherentMemoryFeaturesAMD*(sType: VkStructureType, pNext: pointer = nil, deviceCoherentMemory: VkBool32): VkPhysicalDeviceCoherentMemoryFeaturesAMD =
+  result.sType = sType
+  result.pNext = pNext
+  result.deviceCoherentMemory = deviceCoherentMemory
+
+proc newVkPhysicalDeviceToolPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, name: array[VK_MAX_EXTENSION_NAME_SIZE, char], version: array[VK_MAX_EXTENSION_NAME_SIZE, char], purposes: VkToolPurposeFlagsEXT, description: array[VK_MAX_DESCRIPTION_SIZE, char], layer: array[VK_MAX_EXTENSION_NAME_SIZE, char]): VkPhysicalDeviceToolPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.name = name
+  result.version = version
+  result.purposes = purposes
+  result.description = description
+  result.layer = layer
+
+proc newVkSamplerCustomBorderColorCreateInfoEXT*(sType: VkStructureType, pNext: pointer = nil, customBorderColor: VkClearColorValue, format: VkFormat): VkSamplerCustomBorderColorCreateInfoEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.customBorderColor = customBorderColor
+  result.format = format
+
+proc newVkPhysicalDeviceCustomBorderColorPropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, maxCustomBorderColorSamplers: uint32): VkPhysicalDeviceCustomBorderColorPropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxCustomBorderColorSamplers = maxCustomBorderColorSamplers
+
+proc newVkPhysicalDeviceCustomBorderColorFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, customBorderColors: VkBool32, customBorderColorWithoutFormat: VkBool32): VkPhysicalDeviceCustomBorderColorFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.customBorderColors = customBorderColors
+  result.customBorderColorWithoutFormat = customBorderColorWithoutFormat
+
+proc newVkAccelerationStructureGeometryTrianglesDataKHR*(sType: VkStructureType, pNext: pointer = nil, vertexFormat: VkFormat, vertexData: VkDeviceOrHostAddressConstKHR, vertexStride: VkDeviceSize, indexType: VkIndexType, indexData: VkDeviceOrHostAddressConstKHR, transformData: VkDeviceOrHostAddressConstKHR): VkAccelerationStructureGeometryTrianglesDataKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.vertexFormat = vertexFormat
+  result.vertexData = vertexData
+  result.vertexStride = vertexStride
+  result.indexType = indexType
+  result.indexData = indexData
+  result.transformData = transformData
+
+proc newVkAccelerationStructureGeometryAabbsDataKHR*(sType: VkStructureType, pNext: pointer = nil, data: VkDeviceOrHostAddressConstKHR, stride: VkDeviceSize): VkAccelerationStructureGeometryAabbsDataKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.data = data
+  result.stride = stride
+
+proc newVkAccelerationStructureGeometryInstancesDataKHR*(sType: VkStructureType, pNext: pointer = nil, arrayOfPointers: VkBool32, data: VkDeviceOrHostAddressConstKHR): VkAccelerationStructureGeometryInstancesDataKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.arrayOfPointers = arrayOfPointers
+  result.data = data
+
+proc newVkAccelerationStructureGeometryKHR*(sType: VkStructureType, pNext: pointer = nil, geometryType: VkGeometryTypeKHR, geometry: VkAccelerationStructureGeometryDataKHR, flags: VkGeometryFlagsKHR = 0.VkGeometryFlagsKHR): VkAccelerationStructureGeometryKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.geometryType = geometryType
+  result.geometry = geometry
+  result.flags = flags
+
+proc newVkAccelerationStructureBuildGeometryInfoKHR*(sType: VkStructureType, pNext: pointer = nil, `type`: VkAccelerationStructureTypeKHR, flags: VkBuildAccelerationStructureFlagsKHR = 0.VkBuildAccelerationStructureFlagsKHR, update: VkBool32, srcAccelerationStructure: VkAccelerationStructureKHR, dstAccelerationStructure: VkAccelerationStructureKHR, geometryArrayOfPointers: VkBool32, geometryCount: uint32, ppGeometries: ptr ptr VkAccelerationStructureGeometryKHR, scratchData: VkDeviceOrHostAddressKHR): VkAccelerationStructureBuildGeometryInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.`type` = `type`
+  result.flags = flags
+  result.update = update
+  result.srcAccelerationStructure = srcAccelerationStructure
+  result.dstAccelerationStructure = dstAccelerationStructure
+  result.geometryArrayOfPointers = geometryArrayOfPointers
+  result.geometryCount = geometryCount
+  result.ppGeometries = ppGeometries
+  result.scratchData = scratchData
+
+proc newVkAccelerationStructureBuildOffsetInfoKHR*(primitiveCount: uint32, primitiveOffset: uint32, firstVertex: uint32, transformOffset: uint32): VkAccelerationStructureBuildOffsetInfoKHR =
+  result.primitiveCount = primitiveCount
+  result.primitiveOffset = primitiveOffset
+  result.firstVertex = firstVertex
+  result.transformOffset = transformOffset
+
+proc newVkAccelerationStructureCreateGeometryTypeInfoKHR*(sType: VkStructureType, pNext: pointer = nil, geometryType: VkGeometryTypeKHR, maxPrimitiveCount: uint32, indexType: VkIndexType, maxVertexCount: uint32, vertexFormat: VkFormat, allowsTransforms: VkBool32): VkAccelerationStructureCreateGeometryTypeInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.geometryType = geometryType
+  result.maxPrimitiveCount = maxPrimitiveCount
+  result.indexType = indexType
+  result.maxVertexCount = maxVertexCount
+  result.vertexFormat = vertexFormat
+  result.allowsTransforms = allowsTransforms
+
+proc newVkAccelerationStructureCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, compactedSize: VkDeviceSize, `type`: VkAccelerationStructureTypeKHR, flags: VkBuildAccelerationStructureFlagsKHR = 0.VkBuildAccelerationStructureFlagsKHR, maxGeometryCount: uint32, pGeometryInfos: ptr VkAccelerationStructureCreateGeometryTypeInfoKHR, deviceAddress: VkDeviceAddress): VkAccelerationStructureCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.compactedSize = compactedSize
+  result.`type` = `type`
+  result.flags = flags
+  result.maxGeometryCount = maxGeometryCount
+  result.pGeometryInfos = pGeometryInfos
+  result.deviceAddress = deviceAddress
+
+proc newVkAabbPositionsKHR*(minX: float32, minY: float32, minZ: float32, maxX: float32, maxY: float32, maxZ: float32): VkAabbPositionsKHR =
+  result.minX = minX
+  result.minY = minY
+  result.minZ = minZ
+  result.maxX = maxX
+  result.maxY = maxY
+  result.maxZ = maxZ
+
+proc newVkTransformMatrixKHR*(matrix: array[3, float32]): VkTransformMatrixKHR =
+  result.matrix = matrix
+
+proc newVkAccelerationStructureInstanceKHR*(transform: VkTransformMatrixKHR, instanceCustomIndex: uint32, mask: uint32, instanceShaderBindingTableRecordOffset: uint32, flags: VkGeometryInstanceFlagsKHR = 0.VkGeometryInstanceFlagsKHR, accelerationStructureReference: uint64): VkAccelerationStructureInstanceKHR =
+  result.transform = transform
+  result.instanceCustomIndex = instanceCustomIndex
+  result.mask = mask
+  result.instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset
+  result.flags = flags
+  result.accelerationStructureReference = accelerationStructureReference
+
+proc newVkAccelerationStructureDeviceAddressInfoKHR*(sType: VkStructureType, pNext: pointer = nil, accelerationStructure: VkAccelerationStructureKHR): VkAccelerationStructureDeviceAddressInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.accelerationStructure = accelerationStructure
+
+proc newVkAccelerationStructureVersionKHR*(sType: VkStructureType, pNext: pointer = nil, versionData: ptr uint8): VkAccelerationStructureVersionKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.versionData = versionData
+
+proc newVkCopyAccelerationStructureInfoKHR*(sType: VkStructureType, pNext: pointer = nil, src: VkAccelerationStructureKHR, dst: VkAccelerationStructureKHR, mode: VkCopyAccelerationStructureModeKHR): VkCopyAccelerationStructureInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.src = src
+  result.dst = dst
+  result.mode = mode
+
+proc newVkCopyAccelerationStructureToMemoryInfoKHR*(sType: VkStructureType, pNext: pointer = nil, src: VkAccelerationStructureKHR, dst: VkDeviceOrHostAddressKHR, mode: VkCopyAccelerationStructureModeKHR): VkCopyAccelerationStructureToMemoryInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.src = src
+  result.dst = dst
+  result.mode = mode
+
+proc newVkCopyMemoryToAccelerationStructureInfoKHR*(sType: VkStructureType, pNext: pointer = nil, src: VkDeviceOrHostAddressConstKHR, dst: VkAccelerationStructureKHR, mode: VkCopyAccelerationStructureModeKHR): VkCopyMemoryToAccelerationStructureInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.src = src
+  result.dst = dst
+  result.mode = mode
+
+proc newVkRayTracingPipelineInterfaceCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, maxPayloadSize: uint32, maxAttributeSize: uint32, maxCallableSize: uint32): VkRayTracingPipelineInterfaceCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.maxPayloadSize = maxPayloadSize
+  result.maxAttributeSize = maxAttributeSize
+  result.maxCallableSize = maxCallableSize
+
+proc newVkDeferredOperationInfoKHR*(sType: VkStructureType, pNext: pointer = nil, operationHandle: VkDeferredOperationKHR): VkDeferredOperationInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.operationHandle = operationHandle
+
+proc newVkPipelineLibraryCreateInfoKHR*(sType: VkStructureType, pNext: pointer = nil, libraryCount: uint32, pLibraries: ptr VkPipeline): VkPipelineLibraryCreateInfoKHR =
+  result.sType = sType
+  result.pNext = pNext
+  result.libraryCount = libraryCount
+  result.pLibraries = pLibraries
+
+proc newVkPhysicalDeviceExtendedDynamicStateFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, extendedDynamicState: VkBool32): VkPhysicalDeviceExtendedDynamicStateFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.extendedDynamicState = extendedDynamicState
+
+proc newVkRenderPassTransformBeginInfoQCOM*(sType: VkStructureType, pNext: pointer = nil, transform: VkSurfaceTransformFlagBitsKHR): VkRenderPassTransformBeginInfoQCOM =
+  result.sType = sType
+  result.pNext = pNext
+  result.transform = transform
+
+proc newVkCommandBufferInheritanceRenderPassTransformInfoQCOM*(sType: VkStructureType, pNext: pointer = nil, transform: VkSurfaceTransformFlagBitsKHR, renderArea: VkRect2D): VkCommandBufferInheritanceRenderPassTransformInfoQCOM =
+  result.sType = sType
+  result.pNext = pNext
+  result.transform = transform
+  result.renderArea = renderArea
+
+proc newVkPhysicalDeviceDiagnosticsConfigFeaturesNV*(sType: VkStructureType, pNext: pointer = nil, diagnosticsConfig: VkBool32): VkPhysicalDeviceDiagnosticsConfigFeaturesNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.diagnosticsConfig = diagnosticsConfig
+
+proc newVkDeviceDiagnosticsConfigCreateInfoNV*(sType: VkStructureType, pNext: pointer = nil, flags: VkDeviceDiagnosticsConfigFlagsNV = 0.VkDeviceDiagnosticsConfigFlagsNV): VkDeviceDiagnosticsConfigCreateInfoNV =
+  result.sType = sType
+  result.pNext = pNext
+  result.flags = flags
+
+proc newVkPhysicalDeviceRobustness2FeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, robustBufferAccess2: VkBool32, robustImageAccess2: VkBool32, nullDescriptor: VkBool32): VkPhysicalDeviceRobustness2FeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.robustBufferAccess2 = robustBufferAccess2
+  result.robustImageAccess2 = robustImageAccess2
+  result.nullDescriptor = nullDescriptor
+
+proc newVkPhysicalDeviceRobustness2PropertiesEXT*(sType: VkStructureType, pNext: pointer = nil, robustStorageBufferAccessSizeAlignment: VkDeviceSize, robustUniformBufferAccessSizeAlignment: VkDeviceSize): VkPhysicalDeviceRobustness2PropertiesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.robustStorageBufferAccessSizeAlignment = robustStorageBufferAccessSizeAlignment
+  result.robustUniformBufferAccessSizeAlignment = robustUniformBufferAccessSizeAlignment
+
+proc newVkPhysicalDeviceImageRobustnessFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, robustImageAccess: VkBool32): VkPhysicalDeviceImageRobustnessFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.robustImageAccess = robustImageAccess
+
+proc newVkPhysicalDevice4444FormatsFeaturesEXT*(sType: VkStructureType, pNext: pointer = nil, formatA4R4G4B4: VkBool32, formatA4B4G4R4: VkBool32): VkPhysicalDevice4444FormatsFeaturesEXT =
+  result.sType = sType
+  result.pNext = pNext
+  result.formatA4R4G4B4 = formatA4R4G4B4
+  result.formatA4B4G4R4 = formatA4B4G4R4
+
+# Procs
+var
+  vkCreateInstance*: proc(pCreateInfo: ptr VkInstanceCreateInfo , pAllocator: ptr VkAllocationCallbacks , pInstance: ptr VkInstance ): VkResult {.stdcall.}
+  vkDestroyInstance*: proc(instance: VkInstance, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkEnumeratePhysicalDevices*: proc(instance: VkInstance, pPhysicalDeviceCount: ptr uint32 , pPhysicalDevices: ptr VkPhysicalDevice ): VkResult {.stdcall.}
+  vkGetDeviceProcAddr*: proc(device: VkDevice, pName: cstring ): PFN_vkVoidFunction {.stdcall.}
+  vkGetInstanceProcAddr*: proc(instance: VkInstance, pName: cstring ): PFN_vkVoidFunction {.stdcall.}
+  vkGetPhysicalDeviceProperties*: proc(physicalDevice: VkPhysicalDevice, pProperties: ptr VkPhysicalDeviceProperties ): void {.stdcall.}
+  vkGetPhysicalDeviceQueueFamilyProperties*: proc(physicalDevice: VkPhysicalDevice, pQueueFamilyPropertyCount: ptr uint32 , pQueueFamilyProperties: ptr VkQueueFamilyProperties ): void {.stdcall.}
+  vkGetPhysicalDeviceMemoryProperties*: proc(physicalDevice: VkPhysicalDevice, pMemoryProperties: ptr VkPhysicalDeviceMemoryProperties ): void {.stdcall.}
+  vkGetPhysicalDeviceFeatures*: proc(physicalDevice: VkPhysicalDevice, pFeatures: ptr VkPhysicalDeviceFeatures ): void {.stdcall.}
+  vkGetPhysicalDeviceFormatProperties*: proc(physicalDevice: VkPhysicalDevice, format: VkFormat, pFormatProperties: ptr VkFormatProperties ): void {.stdcall.}
+  vkGetPhysicalDeviceImageFormatProperties*: proc(physicalDevice: VkPhysicalDevice, format: VkFormat, `type`: VkImageType, tiling: VkImageTiling, usage: VkImageUsageFlags, flags: VkImageCreateFlags, pImageFormatProperties: ptr VkImageFormatProperties ): VkResult {.stdcall.}
+  vkCreateDevice*: proc(physicalDevice: VkPhysicalDevice, pCreateInfo: ptr VkDeviceCreateInfo , pAllocator: ptr VkAllocationCallbacks , pDevice: ptr VkDevice ): VkResult {.stdcall.}
+  vkDestroyDevice*: proc(device: VkDevice, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkEnumerateInstanceVersion*: proc(pApiVersion: ptr uint32 ): VkResult {.stdcall.}
+  vkEnumerateInstanceLayerProperties*: proc(pPropertyCount: ptr uint32 , pProperties: ptr VkLayerProperties ): VkResult {.stdcall.}
+  vkEnumerateInstanceExtensionProperties*: proc(pLayerName: cstring , pPropertyCount: ptr uint32 , pProperties: ptr VkExtensionProperties ): VkResult {.stdcall.}
+  vkEnumerateDeviceLayerProperties*: proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkLayerProperties ): VkResult {.stdcall.}
+  vkEnumerateDeviceExtensionProperties*: proc(physicalDevice: VkPhysicalDevice, pLayerName: cstring , pPropertyCount: ptr uint32 , pProperties: ptr VkExtensionProperties ): VkResult {.stdcall.}
+  vkGetDeviceQueue*: proc(device: VkDevice, queueFamilyIndex: uint32, queueIndex: uint32, pQueue: ptr VkQueue ): void {.stdcall.}
+  vkQueueSubmit*: proc(queue: VkQueue, submitCount: uint32, pSubmits: ptr VkSubmitInfo , fence: VkFence): VkResult {.stdcall.}
+  vkQueueWaitIdle*: proc(queue: VkQueue): VkResult {.stdcall.}
+  vkDeviceWaitIdle*: proc(device: VkDevice): VkResult {.stdcall.}
+  vkAllocateMemory*: proc(device: VkDevice, pAllocateInfo: ptr VkMemoryAllocateInfo , pAllocator: ptr VkAllocationCallbacks , pMemory: ptr VkDeviceMemory ): VkResult {.stdcall.}
+  vkFreeMemory*: proc(device: VkDevice, memory: VkDeviceMemory, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkMapMemory*: proc(device: VkDevice, memory: VkDeviceMemory, offset: VkDeviceSize, size: VkDeviceSize, flags: VkMemoryMapFlags, ppData: ptr pointer ): VkResult {.stdcall.}
+  vkUnmapMemory*: proc(device: VkDevice, memory: VkDeviceMemory): void {.stdcall.}
+  vkFlushMappedMemoryRanges*: proc(device: VkDevice, memoryRangeCount: uint32, pMemoryRanges: ptr VkMappedMemoryRange ): VkResult {.stdcall.}
+  vkInvalidateMappedMemoryRanges*: proc(device: VkDevice, memoryRangeCount: uint32, pMemoryRanges: ptr VkMappedMemoryRange ): VkResult {.stdcall.}
+  vkGetDeviceMemoryCommitment*: proc(device: VkDevice, memory: VkDeviceMemory, pCommittedMemoryInBytes: ptr VkDeviceSize ): void {.stdcall.}
+  vkGetBufferMemoryRequirements*: proc(device: VkDevice, buffer: VkBuffer, pMemoryRequirements: ptr VkMemoryRequirements ): void {.stdcall.}
+  vkBindBufferMemory*: proc(device: VkDevice, buffer: VkBuffer, memory: VkDeviceMemory, memoryOffset: VkDeviceSize): VkResult {.stdcall.}
+  vkGetImageMemoryRequirements*: proc(device: VkDevice, image: VkImage, pMemoryRequirements: ptr VkMemoryRequirements ): void {.stdcall.}
+  vkBindImageMemory*: proc(device: VkDevice, image: VkImage, memory: VkDeviceMemory, memoryOffset: VkDeviceSize): VkResult {.stdcall.}
+  vkGetImageSparseMemoryRequirements*: proc(device: VkDevice, image: VkImage, pSparseMemoryRequirementCount: ptr uint32 , pSparseMemoryRequirements: ptr VkSparseImageMemoryRequirements ): void {.stdcall.}
+  vkGetPhysicalDeviceSparseImageFormatProperties*: proc(physicalDevice: VkPhysicalDevice, format: VkFormat, `type`: VkImageType, samples: VkSampleCountFlagBits, usage: VkImageUsageFlags, tiling: VkImageTiling, pPropertyCount: ptr uint32 , pProperties: ptr VkSparseImageFormatProperties ): void {.stdcall.}
+  vkQueueBindSparse*: proc(queue: VkQueue, bindInfoCount: uint32, pBindInfo: ptr VkBindSparseInfo , fence: VkFence): VkResult {.stdcall.}
+  vkCreateFence*: proc(device: VkDevice, pCreateInfo: ptr VkFenceCreateInfo , pAllocator: ptr VkAllocationCallbacks , pFence: ptr VkFence ): VkResult {.stdcall.}
+  vkDestroyFence*: proc(device: VkDevice, fence: VkFence, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkResetFences*: proc(device: VkDevice, fenceCount: uint32, pFences: ptr VkFence ): VkResult {.stdcall.}
+  vkGetFenceStatus*: proc(device: VkDevice, fence: VkFence): VkResult {.stdcall.}
+  vkWaitForFences*: proc(device: VkDevice, fenceCount: uint32, pFences: ptr VkFence , waitAll: VkBool32, timeout: uint64): VkResult {.stdcall.}
+  vkCreateSemaphore*: proc(device: VkDevice, pCreateInfo: ptr VkSemaphoreCreateInfo , pAllocator: ptr VkAllocationCallbacks , pSemaphore: ptr VkSemaphore ): VkResult {.stdcall.}
+  vkDestroySemaphore*: proc(device: VkDevice, semaphore: VkSemaphore, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreateEvent*: proc(device: VkDevice, pCreateInfo: ptr VkEventCreateInfo , pAllocator: ptr VkAllocationCallbacks , pEvent: ptr VkEvent ): VkResult {.stdcall.}
+  vkDestroyEvent*: proc(device: VkDevice, event: VkEvent, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetEventStatus*: proc(device: VkDevice, event: VkEvent): VkResult {.stdcall.}
+  vkSetEvent*: proc(device: VkDevice, event: VkEvent): VkResult {.stdcall.}
+  vkResetEvent*: proc(device: VkDevice, event: VkEvent): VkResult {.stdcall.}
+  vkCreateQueryPool*: proc(device: VkDevice, pCreateInfo: ptr VkQueryPoolCreateInfo , pAllocator: ptr VkAllocationCallbacks , pQueryPool: ptr VkQueryPool ): VkResult {.stdcall.}
+  vkDestroyQueryPool*: proc(device: VkDevice, queryPool: VkQueryPool, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetQueryPoolResults*: proc(device: VkDevice, queryPool: VkQueryPool, firstQuery: uint32, queryCount: uint32, dataSize: uint, pData: pointer , stride: VkDeviceSize, flags: VkQueryResultFlags): VkResult {.stdcall.}
+  vkResetQueryPool*: proc(device: VkDevice, queryPool: VkQueryPool, firstQuery: uint32, queryCount: uint32): void {.stdcall.}
+  vkCreateBuffer*: proc(device: VkDevice, pCreateInfo: ptr VkBufferCreateInfo , pAllocator: ptr VkAllocationCallbacks , pBuffer: ptr VkBuffer ): VkResult {.stdcall.}
+  vkDestroyBuffer*: proc(device: VkDevice, buffer: VkBuffer, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreateBufferView*: proc(device: VkDevice, pCreateInfo: ptr VkBufferViewCreateInfo , pAllocator: ptr VkAllocationCallbacks , pView: ptr VkBufferView ): VkResult {.stdcall.}
+  vkDestroyBufferView*: proc(device: VkDevice, bufferView: VkBufferView, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreateImage*: proc(device: VkDevice, pCreateInfo: ptr VkImageCreateInfo , pAllocator: ptr VkAllocationCallbacks , pImage: ptr VkImage ): VkResult {.stdcall.}
+  vkDestroyImage*: proc(device: VkDevice, image: VkImage, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetImageSubresourceLayout*: proc(device: VkDevice, image: VkImage, pSubresource: ptr VkImageSubresource , pLayout: ptr VkSubresourceLayout ): void {.stdcall.}
+  vkCreateImageView*: proc(device: VkDevice, pCreateInfo: ptr VkImageViewCreateInfo , pAllocator: ptr VkAllocationCallbacks , pView: ptr VkImageView ): VkResult {.stdcall.}
+  vkDestroyImageView*: proc(device: VkDevice, imageView: VkImageView, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreateShaderModule*: proc(device: VkDevice, pCreateInfo: ptr VkShaderModuleCreateInfo , pAllocator: ptr VkAllocationCallbacks , pShaderModule: ptr VkShaderModule ): VkResult {.stdcall.}
+  vkDestroyShaderModule*: proc(device: VkDevice, shaderModule: VkShaderModule, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreatePipelineCache*: proc(device: VkDevice, pCreateInfo: ptr VkPipelineCacheCreateInfo , pAllocator: ptr VkAllocationCallbacks , pPipelineCache: ptr VkPipelineCache ): VkResult {.stdcall.}
+  vkDestroyPipelineCache*: proc(device: VkDevice, pipelineCache: VkPipelineCache, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetPipelineCacheData*: proc(device: VkDevice, pipelineCache: VkPipelineCache, pDataSize: ptr uint , pData: pointer ): VkResult {.stdcall.}
+  vkMergePipelineCaches*: proc(device: VkDevice, dstCache: VkPipelineCache, srcCacheCount: uint32, pSrcCaches: ptr VkPipelineCache ): VkResult {.stdcall.}
+  vkCreateGraphicsPipelines*: proc(device: VkDevice, pipelineCache: VkPipelineCache, createInfoCount: uint32, pCreateInfos: ptr VkGraphicsPipelineCreateInfo , pAllocator: ptr VkAllocationCallbacks , pPipelines: ptr VkPipeline ): VkResult {.stdcall.}
+  vkCreateComputePipelines*: proc(device: VkDevice, pipelineCache: VkPipelineCache, createInfoCount: uint32, pCreateInfos: ptr VkComputePipelineCreateInfo , pAllocator: ptr VkAllocationCallbacks , pPipelines: ptr VkPipeline ): VkResult {.stdcall.}
+  vkDestroyPipeline*: proc(device: VkDevice, pipeline: VkPipeline, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreatePipelineLayout*: proc(device: VkDevice, pCreateInfo: ptr VkPipelineLayoutCreateInfo , pAllocator: ptr VkAllocationCallbacks , pPipelineLayout: ptr VkPipelineLayout ): VkResult {.stdcall.}
+  vkDestroyPipelineLayout*: proc(device: VkDevice, pipelineLayout: VkPipelineLayout, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreateSampler*: proc(device: VkDevice, pCreateInfo: ptr VkSamplerCreateInfo , pAllocator: ptr VkAllocationCallbacks , pSampler: ptr VkSampler ): VkResult {.stdcall.}
+  vkDestroySampler*: proc(device: VkDevice, sampler: VkSampler, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreateDescriptorSetLayout*: proc(device: VkDevice, pCreateInfo: ptr VkDescriptorSetLayoutCreateInfo , pAllocator: ptr VkAllocationCallbacks , pSetLayout: ptr VkDescriptorSetLayout ): VkResult {.stdcall.}
+  vkDestroyDescriptorSetLayout*: proc(device: VkDevice, descriptorSetLayout: VkDescriptorSetLayout, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreateDescriptorPool*: proc(device: VkDevice, pCreateInfo: ptr VkDescriptorPoolCreateInfo , pAllocator: ptr VkAllocationCallbacks , pDescriptorPool: ptr VkDescriptorPool ): VkResult {.stdcall.}
+  vkDestroyDescriptorPool*: proc(device: VkDevice, descriptorPool: VkDescriptorPool, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkResetDescriptorPool*: proc(device: VkDevice, descriptorPool: VkDescriptorPool, flags: VkDescriptorPoolResetFlags): VkResult {.stdcall.}
+  vkAllocateDescriptorSets*: proc(device: VkDevice, pAllocateInfo: ptr VkDescriptorSetAllocateInfo , pDescriptorSets: ptr VkDescriptorSet ): VkResult {.stdcall.}
+  vkFreeDescriptorSets*: proc(device: VkDevice, descriptorPool: VkDescriptorPool, descriptorSetCount: uint32, pDescriptorSets: ptr VkDescriptorSet ): VkResult {.stdcall.}
+  vkUpdateDescriptorSets*: proc(device: VkDevice, descriptorWriteCount: uint32, pDescriptorWrites: ptr VkWriteDescriptorSet , descriptorCopyCount: uint32, pDescriptorCopies: ptr VkCopyDescriptorSet ): void {.stdcall.}
+  vkCreateFramebuffer*: proc(device: VkDevice, pCreateInfo: ptr VkFramebufferCreateInfo , pAllocator: ptr VkAllocationCallbacks , pFramebuffer: ptr VkFramebuffer ): VkResult {.stdcall.}
+  vkDestroyFramebuffer*: proc(device: VkDevice, framebuffer: VkFramebuffer, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkCreateRenderPass*: proc(device: VkDevice, pCreateInfo: ptr VkRenderPassCreateInfo , pAllocator: ptr VkAllocationCallbacks , pRenderPass: ptr VkRenderPass ): VkResult {.stdcall.}
+  vkDestroyRenderPass*: proc(device: VkDevice, renderPass: VkRenderPass, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetRenderAreaGranularity*: proc(device: VkDevice, renderPass: VkRenderPass, pGranularity: ptr VkExtent2D ): void {.stdcall.}
+  vkCreateCommandPool*: proc(device: VkDevice, pCreateInfo: ptr VkCommandPoolCreateInfo , pAllocator: ptr VkAllocationCallbacks , pCommandPool: ptr VkCommandPool ): VkResult {.stdcall.}
+  vkDestroyCommandPool*: proc(device: VkDevice, commandPool: VkCommandPool, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkResetCommandPool*: proc(device: VkDevice, commandPool: VkCommandPool, flags: VkCommandPoolResetFlags): VkResult {.stdcall.}
+  vkAllocateCommandBuffers*: proc(device: VkDevice, pAllocateInfo: ptr VkCommandBufferAllocateInfo , pCommandBuffers: ptr VkCommandBuffer ): VkResult {.stdcall.}
+  vkFreeCommandBuffers*: proc(device: VkDevice, commandPool: VkCommandPool, commandBufferCount: uint32, pCommandBuffers: ptr VkCommandBuffer ): void {.stdcall.}
+  vkBeginCommandBuffer*: proc(commandBuffer: VkCommandBuffer, pBeginInfo: ptr VkCommandBufferBeginInfo ): VkResult {.stdcall.}
+  vkEndCommandBuffer*: proc(commandBuffer: VkCommandBuffer): VkResult {.stdcall.}
+  vkResetCommandBuffer*: proc(commandBuffer: VkCommandBuffer, flags: VkCommandBufferResetFlags): VkResult {.stdcall.}
+  vkCmdBindPipeline*: proc(commandBuffer: VkCommandBuffer, pipelineBindPoint: VkPipelineBindPoint, pipeline: VkPipeline): void {.stdcall.}
+  vkCmdSetViewport*: proc(commandBuffer: VkCommandBuffer, firstViewport: uint32, viewportCount: uint32, pViewports: ptr VkViewport ): void {.stdcall.}
+  vkCmdSetScissor*: proc(commandBuffer: VkCommandBuffer, firstScissor: uint32, scissorCount: uint32, pScissors: ptr VkRect2D ): void {.stdcall.}
+  vkCmdSetLineWidth*: proc(commandBuffer: VkCommandBuffer, lineWidth: float32): void {.stdcall.}
+  vkCmdSetDepthBias*: proc(commandBuffer: VkCommandBuffer, depthBiasConstantFactor: float32, depthBiasClamp: float32, depthBiasSlopeFactor: float32): void {.stdcall.}
+  vkCmdSetBlendConstants*: proc(commandBuffer: VkCommandBuffer, blendConstants: array[4, float32]): void {.stdcall.}
+  vkCmdSetDepthBounds*: proc(commandBuffer: VkCommandBuffer, minDepthBounds: float32, maxDepthBounds: float32): void {.stdcall.}
+  vkCmdSetStencilCompareMask*: proc(commandBuffer: VkCommandBuffer, faceMask: VkStencilFaceFlags, compareMask: uint32): void {.stdcall.}
+  vkCmdSetStencilWriteMask*: proc(commandBuffer: VkCommandBuffer, faceMask: VkStencilFaceFlags, writeMask: uint32): void {.stdcall.}
+  vkCmdSetStencilReference*: proc(commandBuffer: VkCommandBuffer, faceMask: VkStencilFaceFlags, reference: uint32): void {.stdcall.}
+  vkCmdBindDescriptorSets*: proc(commandBuffer: VkCommandBuffer, pipelineBindPoint: VkPipelineBindPoint, layout: VkPipelineLayout, firstSet: uint32, descriptorSetCount: uint32, pDescriptorSets: ptr VkDescriptorSet , dynamicOffsetCount: uint32, pDynamicOffsets: ptr uint32 ): void {.stdcall.}
+  vkCmdBindIndexBuffer*: proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, indexType: VkIndexType): void {.stdcall.}
+  vkCmdBindVertexBuffers*: proc(commandBuffer: VkCommandBuffer, firstBinding: uint32, bindingCount: uint32, pBuffers: ptr VkBuffer , pOffsets: ptr VkDeviceSize ): void {.stdcall.}
+  vkCmdDraw*: proc(commandBuffer: VkCommandBuffer, vertexCount: uint32, instanceCount: uint32, firstVertex: uint32, firstInstance: uint32): void {.stdcall.}
+  vkCmdDrawIndexed*: proc(commandBuffer: VkCommandBuffer, indexCount: uint32, instanceCount: uint32, firstIndex: uint32, vertexOffset: int32, firstInstance: uint32): void {.stdcall.}
+  vkCmdDrawIndirect*: proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, drawCount: uint32, stride: uint32): void {.stdcall.}
+  vkCmdDrawIndexedIndirect*: proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, drawCount: uint32, stride: uint32): void {.stdcall.}
+  vkCmdDispatch*: proc(commandBuffer: VkCommandBuffer, groupCountX: uint32, groupCountY: uint32, groupCountZ: uint32): void {.stdcall.}
+  vkCmdDispatchIndirect*: proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize): void {.stdcall.}
+  vkCmdCopyBuffer*: proc(commandBuffer: VkCommandBuffer, srcBuffer: VkBuffer, dstBuffer: VkBuffer, regionCount: uint32, pRegions: ptr VkBufferCopy ): void {.stdcall.}
+  vkCmdCopyImage*: proc(commandBuffer: VkCommandBuffer, srcImage: VkImage, srcImageLayout: VkImageLayout, dstImage: VkImage, dstImageLayout: VkImageLayout, regionCount: uint32, pRegions: ptr VkImageCopy ): void {.stdcall.}
+  vkCmdBlitImage*: proc(commandBuffer: VkCommandBuffer, srcImage: VkImage, srcImageLayout: VkImageLayout, dstImage: VkImage, dstImageLayout: VkImageLayout, regionCount: uint32, pRegions: ptr VkImageBlit , filter: VkFilter): void {.stdcall.}
+  vkCmdCopyBufferToImage*: proc(commandBuffer: VkCommandBuffer, srcBuffer: VkBuffer, dstImage: VkImage, dstImageLayout: VkImageLayout, regionCount: uint32, pRegions: ptr VkBufferImageCopy ): void {.stdcall.}
+  vkCmdCopyImageToBuffer*: proc(commandBuffer: VkCommandBuffer, srcImage: VkImage, srcImageLayout: VkImageLayout, dstBuffer: VkBuffer, regionCount: uint32, pRegions: ptr VkBufferImageCopy ): void {.stdcall.}
+  vkCmdUpdateBuffer*: proc(commandBuffer: VkCommandBuffer, dstBuffer: VkBuffer, dstOffset: VkDeviceSize, dataSize: VkDeviceSize, pData: pointer ): void {.stdcall.}
+  vkCmdFillBuffer*: proc(commandBuffer: VkCommandBuffer, dstBuffer: VkBuffer, dstOffset: VkDeviceSize, size: VkDeviceSize, data: uint32): void {.stdcall.}
+  vkCmdClearColorImage*: proc(commandBuffer: VkCommandBuffer, image: VkImage, imageLayout: VkImageLayout, pColor: ptr VkClearColorValue , rangeCount: uint32, pRanges: ptr VkImageSubresourceRange ): void {.stdcall.}
+  vkCmdClearDepthStencilImage*: proc(commandBuffer: VkCommandBuffer, image: VkImage, imageLayout: VkImageLayout, pDepthStencil: ptr VkClearDepthStencilValue , rangeCount: uint32, pRanges: ptr VkImageSubresourceRange ): void {.stdcall.}
+  vkCmdClearAttachments*: proc(commandBuffer: VkCommandBuffer, attachmentCount: uint32, pAttachments: ptr VkClearAttachment , rectCount: uint32, pRects: ptr VkClearRect ): void {.stdcall.}
+  vkCmdResolveImage*: proc(commandBuffer: VkCommandBuffer, srcImage: VkImage, srcImageLayout: VkImageLayout, dstImage: VkImage, dstImageLayout: VkImageLayout, regionCount: uint32, pRegions: ptr VkImageResolve ): void {.stdcall.}
+  vkCmdSetEvent*: proc(commandBuffer: VkCommandBuffer, event: VkEvent, stageMask: VkPipelineStageFlags): void {.stdcall.}
+  vkCmdResetEvent*: proc(commandBuffer: VkCommandBuffer, event: VkEvent, stageMask: VkPipelineStageFlags): void {.stdcall.}
+  vkCmdWaitEvents*: proc(commandBuffer: VkCommandBuffer, eventCount: uint32, pEvents: ptr VkEvent , srcStageMask: VkPipelineStageFlags, dstStageMask: VkPipelineStageFlags, memoryBarrierCount: uint32, pMemoryBarriers: ptr VkMemoryBarrier , bufferMemoryBarrierCount: uint32, pBufferMemoryBarriers: ptr VkBufferMemoryBarrier , imageMemoryBarrierCount: uint32, pImageMemoryBarriers: ptr VkImageMemoryBarrier ): void {.stdcall.}
+  vkCmdPipelineBarrier*: proc(commandBuffer: VkCommandBuffer, srcStageMask: VkPipelineStageFlags, dstStageMask: VkPipelineStageFlags, dependencyFlags: VkDependencyFlags, memoryBarrierCount: uint32, pMemoryBarriers: ptr VkMemoryBarrier , bufferMemoryBarrierCount: uint32, pBufferMemoryBarriers: ptr VkBufferMemoryBarrier , imageMemoryBarrierCount: uint32, pImageMemoryBarriers: ptr VkImageMemoryBarrier ): void {.stdcall.}
+  vkCmdBeginQuery*: proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, query: uint32, flags: VkQueryControlFlags): void {.stdcall.}
+  vkCmdEndQuery*: proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, query: uint32): void {.stdcall.}
+  vkCmdBeginConditionalRenderingEXT*: proc(commandBuffer: VkCommandBuffer, pConditionalRenderingBegin: ptr VkConditionalRenderingBeginInfoEXT ): void {.stdcall.}
+  vkCmdEndConditionalRenderingEXT*: proc(commandBuffer: VkCommandBuffer): void {.stdcall.}
+  vkCmdResetQueryPool*: proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, firstQuery: uint32, queryCount: uint32): void {.stdcall.}
+  vkCmdWriteTimestamp*: proc(commandBuffer: VkCommandBuffer, pipelineStage: VkPipelineStageFlagBits, queryPool: VkQueryPool, query: uint32): void {.stdcall.}
+  vkCmdCopyQueryPoolResults*: proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, firstQuery: uint32, queryCount: uint32, dstBuffer: VkBuffer, dstOffset: VkDeviceSize, stride: VkDeviceSize, flags: VkQueryResultFlags): void {.stdcall.}
+  vkCmdPushConstants*: proc(commandBuffer: VkCommandBuffer, layout: VkPipelineLayout, stageFlags: VkShaderStageFlags, offset: uint32, size: uint32, pValues: pointer ): void {.stdcall.}
+  vkCmdBeginRenderPass*: proc(commandBuffer: VkCommandBuffer, pRenderPassBegin: ptr VkRenderPassBeginInfo , contents: VkSubpassContents): void {.stdcall.}
+  vkCmdNextSubpass*: proc(commandBuffer: VkCommandBuffer, contents: VkSubpassContents): void {.stdcall.}
+  vkCmdEndRenderPass*: proc(commandBuffer: VkCommandBuffer): void {.stdcall.}
+  vkCmdExecuteCommands*: proc(commandBuffer: VkCommandBuffer, commandBufferCount: uint32, pCommandBuffers: ptr VkCommandBuffer ): void {.stdcall.}
+  vkCreateAndroidSurfaceKHR*: proc(instance: VkInstance, pCreateInfo: ptr VkAndroidSurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceDisplayPropertiesKHR*: proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayPropertiesKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceDisplayPlanePropertiesKHR*: proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayPlanePropertiesKHR ): VkResult {.stdcall.}
+  vkGetDisplayPlaneSupportedDisplaysKHR*: proc(physicalDevice: VkPhysicalDevice, planeIndex: uint32, pDisplayCount: ptr uint32 , pDisplays: ptr VkDisplayKHR ): VkResult {.stdcall.}
+  vkGetDisplayModePropertiesKHR*: proc(physicalDevice: VkPhysicalDevice, display: VkDisplayKHR, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayModePropertiesKHR ): VkResult {.stdcall.}
+  vkCreateDisplayModeKHR*: proc(physicalDevice: VkPhysicalDevice, display: VkDisplayKHR, pCreateInfo: ptr VkDisplayModeCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pMode: ptr VkDisplayModeKHR ): VkResult {.stdcall.}
+  vkGetDisplayPlaneCapabilitiesKHR*: proc(physicalDevice: VkPhysicalDevice, mode: VkDisplayModeKHR, planeIndex: uint32, pCapabilities: ptr VkDisplayPlaneCapabilitiesKHR ): VkResult {.stdcall.}
+  vkCreateDisplayPlaneSurfaceKHR*: proc(instance: VkInstance, pCreateInfo: ptr VkDisplaySurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkCreateSharedSwapchainsKHR*: proc(device: VkDevice, swapchainCount: uint32, pCreateInfos: ptr VkSwapchainCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSwapchains: ptr VkSwapchainKHR ): VkResult {.stdcall.}
+  vkDestroySurfaceKHR*: proc(instance: VkInstance, surface: VkSurfaceKHR, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetPhysicalDeviceSurfaceSupportKHR*: proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, surface: VkSurfaceKHR, pSupported: ptr VkBool32 ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceSurfaceCapabilitiesKHR*: proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pSurfaceCapabilities: ptr VkSurfaceCapabilitiesKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceSurfaceFormatsKHR*: proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pSurfaceFormatCount: ptr uint32 , pSurfaceFormats: ptr VkSurfaceFormatKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceSurfacePresentModesKHR*: proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pPresentModeCount: ptr uint32 , pPresentModes: ptr VkPresentModeKHR ): VkResult {.stdcall.}
+  vkCreateSwapchainKHR*: proc(device: VkDevice, pCreateInfo: ptr VkSwapchainCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSwapchain: ptr VkSwapchainKHR ): VkResult {.stdcall.}
+  vkDestroySwapchainKHR*: proc(device: VkDevice, swapchain: VkSwapchainKHR, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetSwapchainImagesKHR*: proc(device: VkDevice, swapchain: VkSwapchainKHR, pSwapchainImageCount: ptr uint32 , pSwapchainImages: ptr VkImage ): VkResult {.stdcall.}
+  vkAcquireNextImageKHR*: proc(device: VkDevice, swapchain: VkSwapchainKHR, timeout: uint64, semaphore: VkSemaphore, fence: VkFence, pImageIndex: ptr uint32 ): VkResult {.stdcall.}
+  vkQueuePresentKHR*: proc(queue: VkQueue, pPresentInfo: ptr VkPresentInfoKHR ): VkResult {.stdcall.}
+  vkCreateViSurfaceNN*: proc(instance: VkInstance, pCreateInfo: ptr VkViSurfaceCreateInfoNN , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkCreateWaylandSurfaceKHR*: proc(instance: VkInstance, pCreateInfo: ptr VkWaylandSurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceWaylandPresentationSupportKHR*: proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, display: ptr wl_display ): VkBool32 {.stdcall.}
+  vkCreateWin32SurfaceKHR*: proc(instance: VkInstance, pCreateInfo: ptr VkWin32SurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceWin32PresentationSupportKHR*: proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32): VkBool32 {.stdcall.}
+  vkCreateXlibSurfaceKHR*: proc(instance: VkInstance, pCreateInfo: ptr VkXlibSurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceXlibPresentationSupportKHR*: proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, dpy: ptr Display , visualID: VisualID): VkBool32 {.stdcall.}
+  vkCreateXcbSurfaceKHR*: proc(instance: VkInstance, pCreateInfo: ptr VkXcbSurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceXcbPresentationSupportKHR*: proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, connection: ptr xcb_connection_t , visual_id: xcb_visualid_t): VkBool32 {.stdcall.}
+  vkCreateDirectFBSurfaceEXT*: proc(instance: VkInstance, pCreateInfo: ptr VkDirectFBSurfaceCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceDirectFBPresentationSupportEXT*: proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, dfb: ptr IDirectFB ): VkBool32 {.stdcall.}
+  vkCreateImagePipeSurfaceFUCHSIA*: proc(instance: VkInstance, pCreateInfo: ptr VkImagePipeSurfaceCreateInfoFUCHSIA , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkCreateStreamDescriptorSurfaceGGP*: proc(instance: VkInstance, pCreateInfo: ptr VkStreamDescriptorSurfaceCreateInfoGGP , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkCreateDebugReportCallbackEXT*: proc(instance: VkInstance, pCreateInfo: ptr VkDebugReportCallbackCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pCallback: ptr VkDebugReportCallbackEXT ): VkResult {.stdcall.}
+  vkDestroyDebugReportCallbackEXT*: proc(instance: VkInstance, callback: VkDebugReportCallbackEXT, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkDebugReportMessageEXT*: proc(instance: VkInstance, flags: VkDebugReportFlagsEXT, objectType: VkDebugReportObjectTypeEXT, `object`: uint64, location: uint, messageCode: int32, pLayerPrefix: cstring , pMessage: cstring ): void {.stdcall.}
+  vkDebugMarkerSetObjectNameEXT*: proc(device: VkDevice, pNameInfo: ptr VkDebugMarkerObjectNameInfoEXT ): VkResult {.stdcall.}
+  vkDebugMarkerSetObjectTagEXT*: proc(device: VkDevice, pTagInfo: ptr VkDebugMarkerObjectTagInfoEXT ): VkResult {.stdcall.}
+  vkCmdDebugMarkerBeginEXT*: proc(commandBuffer: VkCommandBuffer, pMarkerInfo: ptr VkDebugMarkerMarkerInfoEXT ): void {.stdcall.}
+  vkCmdDebugMarkerEndEXT*: proc(commandBuffer: VkCommandBuffer): void {.stdcall.}
+  vkCmdDebugMarkerInsertEXT*: proc(commandBuffer: VkCommandBuffer, pMarkerInfo: ptr VkDebugMarkerMarkerInfoEXT ): void {.stdcall.}
+  vkGetPhysicalDeviceExternalImageFormatPropertiesNV*: proc(physicalDevice: VkPhysicalDevice, format: VkFormat, `type`: VkImageType, tiling: VkImageTiling, usage: VkImageUsageFlags, flags: VkImageCreateFlags, externalHandleType: VkExternalMemoryHandleTypeFlagsNV, pExternalImageFormatProperties: ptr VkExternalImageFormatPropertiesNV ): VkResult {.stdcall.}
+  vkGetMemoryWin32HandleNV*: proc(device: VkDevice, memory: VkDeviceMemory, handleType: VkExternalMemoryHandleTypeFlagsNV, pHandle: ptr HANDLE ): VkResult {.stdcall.}
+  vkCmdExecuteGeneratedCommandsNV*: proc(commandBuffer: VkCommandBuffer, isPreprocessed: VkBool32, pGeneratedCommandsInfo: ptr VkGeneratedCommandsInfoNV ): void {.stdcall.}
+  vkCmdPreprocessGeneratedCommandsNV*: proc(commandBuffer: VkCommandBuffer, pGeneratedCommandsInfo: ptr VkGeneratedCommandsInfoNV ): void {.stdcall.}
+  vkCmdBindPipelineShaderGroupNV*: proc(commandBuffer: VkCommandBuffer, pipelineBindPoint: VkPipelineBindPoint, pipeline: VkPipeline, groupIndex: uint32): void {.stdcall.}
+  vkGetGeneratedCommandsMemoryRequirementsNV*: proc(device: VkDevice, pInfo: ptr VkGeneratedCommandsMemoryRequirementsInfoNV , pMemoryRequirements: ptr VkMemoryRequirements2 ): void {.stdcall.}
+  vkCreateIndirectCommandsLayoutNV*: proc(device: VkDevice, pCreateInfo: ptr VkIndirectCommandsLayoutCreateInfoNV , pAllocator: ptr VkAllocationCallbacks , pIndirectCommandsLayout: ptr VkIndirectCommandsLayoutNV ): VkResult {.stdcall.}
+  vkDestroyIndirectCommandsLayoutNV*: proc(device: VkDevice, indirectCommandsLayout: VkIndirectCommandsLayoutNV, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetPhysicalDeviceFeatures2*: proc(physicalDevice: VkPhysicalDevice, pFeatures: ptr VkPhysicalDeviceFeatures2 ): void {.stdcall.}
+  vkGetPhysicalDeviceProperties2*: proc(physicalDevice: VkPhysicalDevice, pProperties: ptr VkPhysicalDeviceProperties2 ): void {.stdcall.}
+  vkGetPhysicalDeviceFormatProperties2*: proc(physicalDevice: VkPhysicalDevice, format: VkFormat, pFormatProperties: ptr VkFormatProperties2 ): void {.stdcall.}
+  vkGetPhysicalDeviceImageFormatProperties2*: proc(physicalDevice: VkPhysicalDevice, pImageFormatInfo: ptr VkPhysicalDeviceImageFormatInfo2 , pImageFormatProperties: ptr VkImageFormatProperties2 ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceQueueFamilyProperties2*: proc(physicalDevice: VkPhysicalDevice, pQueueFamilyPropertyCount: ptr uint32 , pQueueFamilyProperties: ptr VkQueueFamilyProperties2 ): void {.stdcall.}
+  vkGetPhysicalDeviceMemoryProperties2*: proc(physicalDevice: VkPhysicalDevice, pMemoryProperties: ptr VkPhysicalDeviceMemoryProperties2 ): void {.stdcall.}
+  vkGetPhysicalDeviceSparseImageFormatProperties2*: proc(physicalDevice: VkPhysicalDevice, pFormatInfo: ptr VkPhysicalDeviceSparseImageFormatInfo2 , pPropertyCount: ptr uint32 , pProperties: ptr VkSparseImageFormatProperties2 ): void {.stdcall.}
+  vkCmdPushDescriptorSetKHR*: proc(commandBuffer: VkCommandBuffer, pipelineBindPoint: VkPipelineBindPoint, layout: VkPipelineLayout, set: uint32, descriptorWriteCount: uint32, pDescriptorWrites: ptr VkWriteDescriptorSet ): void {.stdcall.}
+  vkTrimCommandPool*: proc(device: VkDevice, commandPool: VkCommandPool, flags: VkCommandPoolTrimFlags): void {.stdcall.}
+  vkGetPhysicalDeviceExternalBufferProperties*: proc(physicalDevice: VkPhysicalDevice, pExternalBufferInfo: ptr VkPhysicalDeviceExternalBufferInfo , pExternalBufferProperties: ptr VkExternalBufferProperties ): void {.stdcall.}
+  vkGetMemoryWin32HandleKHR*: proc(device: VkDevice, pGetWin32HandleInfo: ptr VkMemoryGetWin32HandleInfoKHR , pHandle: ptr HANDLE ): VkResult {.stdcall.}
+  vkGetMemoryWin32HandlePropertiesKHR*: proc(device: VkDevice, handleType: VkExternalMemoryHandleTypeFlagBits, handle: HANDLE, pMemoryWin32HandleProperties: ptr VkMemoryWin32HandlePropertiesKHR ): VkResult {.stdcall.}
+  vkGetMemoryFdKHR*: proc(device: VkDevice, pGetFdInfo: ptr VkMemoryGetFdInfoKHR , pFd: ptr int ): VkResult {.stdcall.}
+  vkGetMemoryFdPropertiesKHR*: proc(device: VkDevice, handleType: VkExternalMemoryHandleTypeFlagBits, fd: int, pMemoryFdProperties: ptr VkMemoryFdPropertiesKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceExternalSemaphoreProperties*: proc(physicalDevice: VkPhysicalDevice, pExternalSemaphoreInfo: ptr VkPhysicalDeviceExternalSemaphoreInfo , pExternalSemaphoreProperties: ptr VkExternalSemaphoreProperties ): void {.stdcall.}
+  vkGetSemaphoreWin32HandleKHR*: proc(device: VkDevice, pGetWin32HandleInfo: ptr VkSemaphoreGetWin32HandleInfoKHR , pHandle: ptr HANDLE ): VkResult {.stdcall.}
+  vkImportSemaphoreWin32HandleKHR*: proc(device: VkDevice, pImportSemaphoreWin32HandleInfo: ptr VkImportSemaphoreWin32HandleInfoKHR ): VkResult {.stdcall.}
+  vkGetSemaphoreFdKHR*: proc(device: VkDevice, pGetFdInfo: ptr VkSemaphoreGetFdInfoKHR , pFd: ptr int ): VkResult {.stdcall.}
+  vkImportSemaphoreFdKHR*: proc(device: VkDevice, pImportSemaphoreFdInfo: ptr VkImportSemaphoreFdInfoKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceExternalFenceProperties*: proc(physicalDevice: VkPhysicalDevice, pExternalFenceInfo: ptr VkPhysicalDeviceExternalFenceInfo , pExternalFenceProperties: ptr VkExternalFenceProperties ): void {.stdcall.}
+  vkGetFenceWin32HandleKHR*: proc(device: VkDevice, pGetWin32HandleInfo: ptr VkFenceGetWin32HandleInfoKHR , pHandle: ptr HANDLE ): VkResult {.stdcall.}
+  vkImportFenceWin32HandleKHR*: proc(device: VkDevice, pImportFenceWin32HandleInfo: ptr VkImportFenceWin32HandleInfoKHR ): VkResult {.stdcall.}
+  vkGetFenceFdKHR*: proc(device: VkDevice, pGetFdInfo: ptr VkFenceGetFdInfoKHR , pFd: ptr int ): VkResult {.stdcall.}
+  vkImportFenceFdKHR*: proc(device: VkDevice, pImportFenceFdInfo: ptr VkImportFenceFdInfoKHR ): VkResult {.stdcall.}
+  vkReleaseDisplayEXT*: proc(physicalDevice: VkPhysicalDevice, display: VkDisplayKHR): VkResult {.stdcall.}
+  vkAcquireXlibDisplayEXT*: proc(physicalDevice: VkPhysicalDevice, dpy: ptr Display , display: VkDisplayKHR): VkResult {.stdcall.}
+  vkGetRandROutputDisplayEXT*: proc(physicalDevice: VkPhysicalDevice, dpy: ptr Display , rrOutput: RROutput, pDisplay: ptr VkDisplayKHR ): VkResult {.stdcall.}
+  vkDisplayPowerControlEXT*: proc(device: VkDevice, display: VkDisplayKHR, pDisplayPowerInfo: ptr VkDisplayPowerInfoEXT ): VkResult {.stdcall.}
+  vkRegisterDeviceEventEXT*: proc(device: VkDevice, pDeviceEventInfo: ptr VkDeviceEventInfoEXT , pAllocator: ptr VkAllocationCallbacks , pFence: ptr VkFence ): VkResult {.stdcall.}
+  vkRegisterDisplayEventEXT*: proc(device: VkDevice, display: VkDisplayKHR, pDisplayEventInfo: ptr VkDisplayEventInfoEXT , pAllocator: ptr VkAllocationCallbacks , pFence: ptr VkFence ): VkResult {.stdcall.}
+  vkGetSwapchainCounterEXT*: proc(device: VkDevice, swapchain: VkSwapchainKHR, counter: VkSurfaceCounterFlagBitsEXT, pCounterValue: ptr uint64 ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceSurfaceCapabilities2EXT*: proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pSurfaceCapabilities: ptr VkSurfaceCapabilities2EXT ): VkResult {.stdcall.}
+  vkEnumeratePhysicalDeviceGroups*: proc(instance: VkInstance, pPhysicalDeviceGroupCount: ptr uint32 , pPhysicalDeviceGroupProperties: ptr VkPhysicalDeviceGroupProperties ): VkResult {.stdcall.}
+  vkGetDeviceGroupPeerMemoryFeatures*: proc(device: VkDevice, heapIndex: uint32, localDeviceIndex: uint32, remoteDeviceIndex: uint32, pPeerMemoryFeatures: ptr VkPeerMemoryFeatureFlags ): void {.stdcall.}
+  vkBindBufferMemory2*: proc(device: VkDevice, bindInfoCount: uint32, pBindInfos: ptr VkBindBufferMemoryInfo ): VkResult {.stdcall.}
+  vkBindImageMemory2*: proc(device: VkDevice, bindInfoCount: uint32, pBindInfos: ptr VkBindImageMemoryInfo ): VkResult {.stdcall.}
+  vkCmdSetDeviceMask*: proc(commandBuffer: VkCommandBuffer, deviceMask: uint32): void {.stdcall.}
+  vkGetDeviceGroupPresentCapabilitiesKHR*: proc(device: VkDevice, pDeviceGroupPresentCapabilities: ptr VkDeviceGroupPresentCapabilitiesKHR ): VkResult {.stdcall.}
+  vkGetDeviceGroupSurfacePresentModesKHR*: proc(device: VkDevice, surface: VkSurfaceKHR, pModes: ptr VkDeviceGroupPresentModeFlagsKHR ): VkResult {.stdcall.}
+  vkAcquireNextImage2KHR*: proc(device: VkDevice, pAcquireInfo: ptr VkAcquireNextImageInfoKHR , pImageIndex: ptr uint32 ): VkResult {.stdcall.}
+  vkCmdDispatchBase*: proc(commandBuffer: VkCommandBuffer, baseGroupX: uint32, baseGroupY: uint32, baseGroupZ: uint32, groupCountX: uint32, groupCountY: uint32, groupCountZ: uint32): void {.stdcall.}
+  vkGetPhysicalDevicePresentRectanglesKHR*: proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pRectCount: ptr uint32 , pRects: ptr VkRect2D ): VkResult {.stdcall.}
+  vkCreateDescriptorUpdateTemplate*: proc(device: VkDevice, pCreateInfo: ptr VkDescriptorUpdateTemplateCreateInfo , pAllocator: ptr VkAllocationCallbacks , pDescriptorUpdateTemplate: ptr VkDescriptorUpdateTemplate ): VkResult {.stdcall.}
+  vkDestroyDescriptorUpdateTemplate*: proc(device: VkDevice, descriptorUpdateTemplate: VkDescriptorUpdateTemplate, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkUpdateDescriptorSetWithTemplate*: proc(device: VkDevice, descriptorSet: VkDescriptorSet, descriptorUpdateTemplate: VkDescriptorUpdateTemplate, pData: pointer ): void {.stdcall.}
+  vkCmdPushDescriptorSetWithTemplateKHR*: proc(commandBuffer: VkCommandBuffer, descriptorUpdateTemplate: VkDescriptorUpdateTemplate, layout: VkPipelineLayout, set: uint32, pData: pointer ): void {.stdcall.}
+  vkSetHdrMetadataEXT*: proc(device: VkDevice, swapchainCount: uint32, pSwapchains: ptr VkSwapchainKHR , pMetadata: ptr VkHdrMetadataEXT ): void {.stdcall.}
+  vkGetSwapchainStatusKHR*: proc(device: VkDevice, swapchain: VkSwapchainKHR): VkResult {.stdcall.}
+  vkGetRefreshCycleDurationGOOGLE*: proc(device: VkDevice, swapchain: VkSwapchainKHR, pDisplayTimingProperties: ptr VkRefreshCycleDurationGOOGLE ): VkResult {.stdcall.}
+  vkGetPastPresentationTimingGOOGLE*: proc(device: VkDevice, swapchain: VkSwapchainKHR, pPresentationTimingCount: ptr uint32 , pPresentationTimings: ptr VkPastPresentationTimingGOOGLE ): VkResult {.stdcall.}
+  vkCreateIOSSurfaceMVK*: proc(instance: VkInstance, pCreateInfo: ptr VkIOSSurfaceCreateInfoMVK , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkCreateMacOSSurfaceMVK*: proc(instance: VkInstance, pCreateInfo: ptr VkMacOSSurfaceCreateInfoMVK , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkCreateMetalSurfaceEXT*: proc(instance: VkInstance, pCreateInfo: ptr VkMetalSurfaceCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkCmdSetViewportWScalingNV*: proc(commandBuffer: VkCommandBuffer, firstViewport: uint32, viewportCount: uint32, pViewportWScalings: ptr VkViewportWScalingNV ): void {.stdcall.}
+  vkCmdSetDiscardRectangleEXT*: proc(commandBuffer: VkCommandBuffer, firstDiscardRectangle: uint32, discardRectangleCount: uint32, pDiscardRectangles: ptr VkRect2D ): void {.stdcall.}
+  vkCmdSetSampleLocationsEXT*: proc(commandBuffer: VkCommandBuffer, pSampleLocationsInfo: ptr VkSampleLocationsInfoEXT ): void {.stdcall.}
+  vkGetPhysicalDeviceMultisamplePropertiesEXT*: proc(physicalDevice: VkPhysicalDevice, samples: VkSampleCountFlagBits, pMultisampleProperties: ptr VkMultisamplePropertiesEXT ): void {.stdcall.}
+  vkGetPhysicalDeviceSurfaceCapabilities2KHR*: proc(physicalDevice: VkPhysicalDevice, pSurfaceInfo: ptr VkPhysicalDeviceSurfaceInfo2KHR , pSurfaceCapabilities: ptr VkSurfaceCapabilities2KHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceSurfaceFormats2KHR*: proc(physicalDevice: VkPhysicalDevice, pSurfaceInfo: ptr VkPhysicalDeviceSurfaceInfo2KHR , pSurfaceFormatCount: ptr uint32 , pSurfaceFormats: ptr VkSurfaceFormat2KHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceDisplayProperties2KHR*: proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayProperties2KHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceDisplayPlaneProperties2KHR*: proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayPlaneProperties2KHR ): VkResult {.stdcall.}
+  vkGetDisplayModeProperties2KHR*: proc(physicalDevice: VkPhysicalDevice, display: VkDisplayKHR, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayModeProperties2KHR ): VkResult {.stdcall.}
+  vkGetDisplayPlaneCapabilities2KHR*: proc(physicalDevice: VkPhysicalDevice, pDisplayPlaneInfo: ptr VkDisplayPlaneInfo2KHR , pCapabilities: ptr VkDisplayPlaneCapabilities2KHR ): VkResult {.stdcall.}
+  vkGetBufferMemoryRequirements2*: proc(device: VkDevice, pInfo: ptr VkBufferMemoryRequirementsInfo2 , pMemoryRequirements: ptr VkMemoryRequirements2 ): void {.stdcall.}
+  vkGetImageMemoryRequirements2*: proc(device: VkDevice, pInfo: ptr VkImageMemoryRequirementsInfo2 , pMemoryRequirements: ptr VkMemoryRequirements2 ): void {.stdcall.}
+  vkGetImageSparseMemoryRequirements2*: proc(device: VkDevice, pInfo: ptr VkImageSparseMemoryRequirementsInfo2 , pSparseMemoryRequirementCount: ptr uint32 , pSparseMemoryRequirements: ptr VkSparseImageMemoryRequirements2 ): void {.stdcall.}
+  vkCreateSamplerYcbcrConversion*: proc(device: VkDevice, pCreateInfo: ptr VkSamplerYcbcrConversionCreateInfo , pAllocator: ptr VkAllocationCallbacks , pYcbcrConversion: ptr VkSamplerYcbcrConversion ): VkResult {.stdcall.}
+  vkDestroySamplerYcbcrConversion*: proc(device: VkDevice, ycbcrConversion: VkSamplerYcbcrConversion, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetDeviceQueue2*: proc(device: VkDevice, pQueueInfo: ptr VkDeviceQueueInfo2 , pQueue: ptr VkQueue ): void {.stdcall.}
+  vkCreateValidationCacheEXT*: proc(device: VkDevice, pCreateInfo: ptr VkValidationCacheCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pValidationCache: ptr VkValidationCacheEXT ): VkResult {.stdcall.}
+  vkDestroyValidationCacheEXT*: proc(device: VkDevice, validationCache: VkValidationCacheEXT, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetValidationCacheDataEXT*: proc(device: VkDevice, validationCache: VkValidationCacheEXT, pDataSize: ptr uint , pData: pointer ): VkResult {.stdcall.}
+  vkMergeValidationCachesEXT*: proc(device: VkDevice, dstCache: VkValidationCacheEXT, srcCacheCount: uint32, pSrcCaches: ptr VkValidationCacheEXT ): VkResult {.stdcall.}
+  vkGetDescriptorSetLayoutSupport*: proc(device: VkDevice, pCreateInfo: ptr VkDescriptorSetLayoutCreateInfo , pSupport: ptr VkDescriptorSetLayoutSupport ): void {.stdcall.}
+  vkGetSwapchainGrallocUsageANDROID*: proc(device: VkDevice, format: VkFormat, imageUsage: VkImageUsageFlags, grallocUsage: ptr int ): VkResult {.stdcall.}
+  vkGetSwapchainGrallocUsage2ANDROID*: proc(device: VkDevice, format: VkFormat, imageUsage: VkImageUsageFlags, swapchainImageUsage: VkSwapchainImageUsageFlagsANDROID, grallocConsumerUsage: ptr uint64 , grallocProducerUsage: ptr uint64 ): VkResult {.stdcall.}
+  vkAcquireImageANDROID*: proc(device: VkDevice, image: VkImage, nativeFenceFd: int, semaphore: VkSemaphore, fence: VkFence): VkResult {.stdcall.}
+  vkQueueSignalReleaseImageANDROID*: proc(queue: VkQueue, waitSemaphoreCount: uint32, pWaitSemaphores: ptr VkSemaphore , image: VkImage, pNativeFenceFd: ptr int ): VkResult {.stdcall.}
+  vkGetShaderInfoAMD*: proc(device: VkDevice, pipeline: VkPipeline, shaderStage: VkShaderStageFlagBits, infoType: VkShaderInfoTypeAMD, pInfoSize: ptr uint , pInfo: pointer ): VkResult {.stdcall.}
+  vkSetLocalDimmingAMD*: proc(device: VkDevice, swapChain: VkSwapchainKHR, localDimmingEnable: VkBool32): void {.stdcall.}
+  vkGetPhysicalDeviceCalibrateableTimeDomainsEXT*: proc(physicalDevice: VkPhysicalDevice, pTimeDomainCount: ptr uint32 , pTimeDomains: ptr VkTimeDomainEXT ): VkResult {.stdcall.}
+  vkGetCalibratedTimestampsEXT*: proc(device: VkDevice, timestampCount: uint32, pTimestampInfos: ptr VkCalibratedTimestampInfoEXT , pTimestamps: ptr uint64 , pMaxDeviation: ptr uint64 ): VkResult {.stdcall.}
+  vkSetDebugUtilsObjectNameEXT*: proc(device: VkDevice, pNameInfo: ptr VkDebugUtilsObjectNameInfoEXT ): VkResult {.stdcall.}
+  vkSetDebugUtilsObjectTagEXT*: proc(device: VkDevice, pTagInfo: ptr VkDebugUtilsObjectTagInfoEXT ): VkResult {.stdcall.}
+  vkQueueBeginDebugUtilsLabelEXT*: proc(queue: VkQueue, pLabelInfo: ptr VkDebugUtilsLabelEXT ): void {.stdcall.}
+  vkQueueEndDebugUtilsLabelEXT*: proc(queue: VkQueue): void {.stdcall.}
+  vkQueueInsertDebugUtilsLabelEXT*: proc(queue: VkQueue, pLabelInfo: ptr VkDebugUtilsLabelEXT ): void {.stdcall.}
+  vkCmdBeginDebugUtilsLabelEXT*: proc(commandBuffer: VkCommandBuffer, pLabelInfo: ptr VkDebugUtilsLabelEXT ): void {.stdcall.}
+  vkCmdEndDebugUtilsLabelEXT*: proc(commandBuffer: VkCommandBuffer): void {.stdcall.}
+  vkCmdInsertDebugUtilsLabelEXT*: proc(commandBuffer: VkCommandBuffer, pLabelInfo: ptr VkDebugUtilsLabelEXT ): void {.stdcall.}
+  vkCreateDebugUtilsMessengerEXT*: proc(instance: VkInstance, pCreateInfo: ptr VkDebugUtilsMessengerCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pMessenger: ptr VkDebugUtilsMessengerEXT ): VkResult {.stdcall.}
+  vkDestroyDebugUtilsMessengerEXT*: proc(instance: VkInstance, messenger: VkDebugUtilsMessengerEXT, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkSubmitDebugUtilsMessageEXT*: proc(instance: VkInstance, messageSeverity: VkDebugUtilsMessageSeverityFlagBitsEXT, messageTypes: VkDebugUtilsMessageTypeFlagsEXT, pCallbackData: ptr VkDebugUtilsMessengerCallbackDataEXT ): void {.stdcall.}
+  vkGetMemoryHostPointerPropertiesEXT*: proc(device: VkDevice, handleType: VkExternalMemoryHandleTypeFlagBits, pHostPointer: pointer , pMemoryHostPointerProperties: ptr VkMemoryHostPointerPropertiesEXT ): VkResult {.stdcall.}
+  vkCmdWriteBufferMarkerAMD*: proc(commandBuffer: VkCommandBuffer, pipelineStage: VkPipelineStageFlagBits, dstBuffer: VkBuffer, dstOffset: VkDeviceSize, marker: uint32): void {.stdcall.}
+  vkCreateRenderPass2*: proc(device: VkDevice, pCreateInfo: ptr VkRenderPassCreateInfo2 , pAllocator: ptr VkAllocationCallbacks , pRenderPass: ptr VkRenderPass ): VkResult {.stdcall.}
+  vkCmdBeginRenderPass2*: proc(commandBuffer: VkCommandBuffer, pRenderPassBegin: ptr VkRenderPassBeginInfo      , pSubpassBeginInfo: ptr VkSubpassBeginInfo      ): void {.stdcall.}
+  vkCmdNextSubpass2*: proc(commandBuffer: VkCommandBuffer, pSubpassBeginInfo: ptr VkSubpassBeginInfo      , pSubpassEndInfo: ptr VkSubpassEndInfo        ): void {.stdcall.}
+  vkCmdEndRenderPass2*: proc(commandBuffer: VkCommandBuffer, pSubpassEndInfo: ptr VkSubpassEndInfo        ): void {.stdcall.}
+  vkGetSemaphoreCounterValue*: proc(device: VkDevice, semaphore: VkSemaphore, pValue: ptr uint64 ): VkResult {.stdcall.}
+  vkWaitSemaphores*: proc(device: VkDevice, pWaitInfo: ptr VkSemaphoreWaitInfo , timeout: uint64): VkResult {.stdcall.}
+  vkSignalSemaphore*: proc(device: VkDevice, pSignalInfo: ptr VkSemaphoreSignalInfo ): VkResult {.stdcall.}
+  vkGetAndroidHardwareBufferPropertiesANDROID*: proc(device: VkDevice, buffer: ptr AHardwareBuffer , pProperties: ptr VkAndroidHardwareBufferPropertiesANDROID ): VkResult {.stdcall.}
+  vkGetMemoryAndroidHardwareBufferANDROID*: proc(device: VkDevice, pInfo: ptr VkMemoryGetAndroidHardwareBufferInfoANDROID , pBuffer: ptr ptr AHardwareBuffer ): VkResult {.stdcall.}
+  vkCmdDrawIndirectCount*: proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, countBuffer: VkBuffer, countBufferOffset: VkDeviceSize, maxDrawCount: uint32, stride: uint32): void {.stdcall.}
+  vkCmdDrawIndexedIndirectCount*: proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, countBuffer: VkBuffer, countBufferOffset: VkDeviceSize, maxDrawCount: uint32, stride: uint32): void {.stdcall.}
+  vkCmdSetCheckpointNV*: proc(commandBuffer: VkCommandBuffer, pCheckpointMarker: pointer ): void {.stdcall.}
+  vkGetQueueCheckpointDataNV*: proc(queue: VkQueue, pCheckpointDataCount: ptr uint32 , pCheckpointData: ptr VkCheckpointDataNV ): void {.stdcall.}
+  vkCmdBindTransformFeedbackBuffersEXT*: proc(commandBuffer: VkCommandBuffer, firstBinding: uint32, bindingCount: uint32, pBuffers: ptr VkBuffer , pOffsets: ptr VkDeviceSize , pSizes: ptr VkDeviceSize ): void {.stdcall.}
+  vkCmdBeginTransformFeedbackEXT*: proc(commandBuffer: VkCommandBuffer, firstCounterBuffer: uint32, counterBufferCount: uint32, pCounterBuffers: ptr VkBuffer , pCounterBufferOffsets: ptr VkDeviceSize ): void {.stdcall.}
+  vkCmdEndTransformFeedbackEXT*: proc(commandBuffer: VkCommandBuffer, firstCounterBuffer: uint32, counterBufferCount: uint32, pCounterBuffers: ptr VkBuffer , pCounterBufferOffsets: ptr VkDeviceSize ): void {.stdcall.}
+  vkCmdBeginQueryIndexedEXT*: proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, query: uint32, flags: VkQueryControlFlags, index: uint32): void {.stdcall.}
+  vkCmdEndQueryIndexedEXT*: proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, query: uint32, index: uint32): void {.stdcall.}
+  vkCmdDrawIndirectByteCountEXT*: proc(commandBuffer: VkCommandBuffer, instanceCount: uint32, firstInstance: uint32, counterBuffer: VkBuffer, counterBufferOffset: VkDeviceSize, counterOffset: uint32, vertexStride: uint32): void {.stdcall.}
+  vkCmdSetExclusiveScissorNV*: proc(commandBuffer: VkCommandBuffer, firstExclusiveScissor: uint32, exclusiveScissorCount: uint32, pExclusiveScissors: ptr VkRect2D ): void {.stdcall.}
+  vkCmdBindShadingRateImageNV*: proc(commandBuffer: VkCommandBuffer, imageView: VkImageView, imageLayout: VkImageLayout): void {.stdcall.}
+  vkCmdSetViewportShadingRatePaletteNV*: proc(commandBuffer: VkCommandBuffer, firstViewport: uint32, viewportCount: uint32, pShadingRatePalettes: ptr VkShadingRatePaletteNV ): void {.stdcall.}
+  vkCmdSetCoarseSampleOrderNV*: proc(commandBuffer: VkCommandBuffer, sampleOrderType: VkCoarseSampleOrderTypeNV, customSampleOrderCount: uint32, pCustomSampleOrders: ptr VkCoarseSampleOrderCustomNV ): void {.stdcall.}
+  vkCmdDrawMeshTasksNV*: proc(commandBuffer: VkCommandBuffer, taskCount: uint32, firstTask: uint32): void {.stdcall.}
+  vkCmdDrawMeshTasksIndirectNV*: proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, drawCount: uint32, stride: uint32): void {.stdcall.}
+  vkCmdDrawMeshTasksIndirectCountNV*: proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, countBuffer: VkBuffer, countBufferOffset: VkDeviceSize, maxDrawCount: uint32, stride: uint32): void {.stdcall.}
+  vkCompileDeferredNV*: proc(device: VkDevice, pipeline: VkPipeline, shader: uint32): VkResult {.stdcall.}
+  vkCreateAccelerationStructureNV*: proc(device: VkDevice, pCreateInfo: ptr VkAccelerationStructureCreateInfoNV , pAllocator: ptr VkAllocationCallbacks , pAccelerationStructure: ptr VkAccelerationStructureNV ): VkResult {.stdcall.}
+  vkDestroyAccelerationStructureKHR*: proc(device: VkDevice, accelerationStructure: VkAccelerationStructureKHR, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetAccelerationStructureMemoryRequirementsKHR*: proc(device: VkDevice, pInfo: ptr VkAccelerationStructureMemoryRequirementsInfoKHR , pMemoryRequirements: ptr VkMemoryRequirements2 ): void {.stdcall.}
+  vkGetAccelerationStructureMemoryRequirementsNV*: proc(device: VkDevice, pInfo: ptr VkAccelerationStructureMemoryRequirementsInfoNV , pMemoryRequirements: ptr VkMemoryRequirements2KHR ): void {.stdcall.}
+  vkBindAccelerationStructureMemoryKHR*: proc(device: VkDevice, bindInfoCount: uint32, pBindInfos: ptr VkBindAccelerationStructureMemoryInfoKHR ): VkResult {.stdcall.}
+  vkCmdCopyAccelerationStructureNV*: proc(commandBuffer: VkCommandBuffer, dst: VkAccelerationStructureKHR, src: VkAccelerationStructureKHR, mode: VkCopyAccelerationStructureModeKHR): void {.stdcall.}
+  vkCmdCopyAccelerationStructureKHR*: proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkCopyAccelerationStructureInfoKHR ): void {.stdcall.}
+  vkCopyAccelerationStructureKHR*: proc(device: VkDevice, pInfo: ptr VkCopyAccelerationStructureInfoKHR ): VkResult {.stdcall.}
+  vkCmdCopyAccelerationStructureToMemoryKHR*: proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkCopyAccelerationStructureToMemoryInfoKHR ): void {.stdcall.}
+  vkCopyAccelerationStructureToMemoryKHR*: proc(device: VkDevice, pInfo: ptr VkCopyAccelerationStructureToMemoryInfoKHR ): VkResult {.stdcall.}
+  vkCmdCopyMemoryToAccelerationStructureKHR*: proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkCopyMemoryToAccelerationStructureInfoKHR ): void {.stdcall.}
+  vkCopyMemoryToAccelerationStructureKHR*: proc(device: VkDevice, pInfo: ptr VkCopyMemoryToAccelerationStructureInfoKHR ): VkResult {.stdcall.}
+  vkCmdWriteAccelerationStructuresPropertiesKHR*: proc(commandBuffer: VkCommandBuffer, accelerationStructureCount: uint32, pAccelerationStructures: ptr VkAccelerationStructureKHR , queryType: VkQueryType, queryPool: VkQueryPool, firstQuery: uint32): void {.stdcall.}
+  vkCmdBuildAccelerationStructureNV*: proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkAccelerationStructureInfoNV , instanceData: VkBuffer, instanceOffset: VkDeviceSize, update: VkBool32, dst: VkAccelerationStructureKHR, src: VkAccelerationStructureKHR, scratch: VkBuffer, scratchOffset: VkDeviceSize): void {.stdcall.}
+  vkWriteAccelerationStructuresPropertiesKHR*: proc(device: VkDevice, accelerationStructureCount: uint32, pAccelerationStructures: ptr VkAccelerationStructureKHR , queryType: VkQueryType, dataSize: uint, pData: pointer , stride: uint): VkResult {.stdcall.}
+  vkCmdTraceRaysKHR*: proc(commandBuffer: VkCommandBuffer, pRaygenShaderBindingTable: ptr VkStridedBufferRegionKHR , pMissShaderBindingTable: ptr VkStridedBufferRegionKHR , pHitShaderBindingTable: ptr VkStridedBufferRegionKHR , pCallableShaderBindingTable: ptr VkStridedBufferRegionKHR , width: uint32, height: uint32, depth: uint32): void {.stdcall.}
+  vkCmdTraceRaysNV*: proc(commandBuffer: VkCommandBuffer, raygenShaderBindingTableBuffer: VkBuffer, raygenShaderBindingOffset: VkDeviceSize, missShaderBindingTableBuffer: VkBuffer, missShaderBindingOffset: VkDeviceSize, missShaderBindingStride: VkDeviceSize, hitShaderBindingTableBuffer: VkBuffer, hitShaderBindingOffset: VkDeviceSize, hitShaderBindingStride: VkDeviceSize, callableShaderBindingTableBuffer: VkBuffer, callableShaderBindingOffset: VkDeviceSize, callableShaderBindingStride: VkDeviceSize, width: uint32, height: uint32, depth: uint32): void {.stdcall.}
+  vkGetRayTracingShaderGroupHandlesKHR*: proc(device: VkDevice, pipeline: VkPipeline, firstGroup: uint32, groupCount: uint32, dataSize: uint, pData: pointer ): VkResult {.stdcall.}
+  vkGetRayTracingCaptureReplayShaderGroupHandlesKHR*: proc(device: VkDevice, pipeline: VkPipeline, firstGroup: uint32, groupCount: uint32, dataSize: uint, pData: pointer ): VkResult {.stdcall.}
+  vkGetAccelerationStructureHandleNV*: proc(device: VkDevice, accelerationStructure: VkAccelerationStructureKHR, dataSize: uint, pData: pointer ): VkResult {.stdcall.}
+  vkCreateRayTracingPipelinesNV*: proc(device: VkDevice, pipelineCache: VkPipelineCache, createInfoCount: uint32, pCreateInfos: ptr VkRayTracingPipelineCreateInfoNV , pAllocator: ptr VkAllocationCallbacks , pPipelines: ptr VkPipeline ): VkResult {.stdcall.}
+  vkCreateRayTracingPipelinesKHR*: proc(device: VkDevice, pipelineCache: VkPipelineCache, createInfoCount: uint32, pCreateInfos: ptr VkRayTracingPipelineCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pPipelines: ptr VkPipeline ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceCooperativeMatrixPropertiesNV*: proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkCooperativeMatrixPropertiesNV ): VkResult {.stdcall.}
+  vkCmdTraceRaysIndirectKHR*: proc(commandBuffer: VkCommandBuffer, pRaygenShaderBindingTable: ptr VkStridedBufferRegionKHR , pMissShaderBindingTable: ptr VkStridedBufferRegionKHR , pHitShaderBindingTable: ptr VkStridedBufferRegionKHR , pCallableShaderBindingTable: ptr VkStridedBufferRegionKHR , buffer: VkBuffer, offset: VkDeviceSize): void {.stdcall.}
+  vkGetDeviceAccelerationStructureCompatibilityKHR*: proc(device: VkDevice, version: ptr VkAccelerationStructureVersionKHR ): VkResult {.stdcall.}
+  vkGetImageViewHandleNVX*: proc(device: VkDevice, pInfo: ptr VkImageViewHandleInfoNVX ): uint32 {.stdcall.}
+  vkGetImageViewAddressNVX*: proc(device: VkDevice, imageView: VkImageView, pProperties: ptr VkImageViewAddressPropertiesNVX ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceSurfacePresentModes2EXT*: proc(physicalDevice: VkPhysicalDevice, pSurfaceInfo: ptr VkPhysicalDeviceSurfaceInfo2KHR , pPresentModeCount: ptr uint32 , pPresentModes: ptr VkPresentModeKHR ): VkResult {.stdcall.}
+  vkGetDeviceGroupSurfacePresentModes2EXT*: proc(device: VkDevice, pSurfaceInfo: ptr VkPhysicalDeviceSurfaceInfo2KHR , pModes: ptr VkDeviceGroupPresentModeFlagsKHR ): VkResult {.stdcall.}
+  vkAcquireFullScreenExclusiveModeEXT*: proc(device: VkDevice, swapchain: VkSwapchainKHR): VkResult {.stdcall.}
+  vkReleaseFullScreenExclusiveModeEXT*: proc(device: VkDevice, swapchain: VkSwapchainKHR): VkResult {.stdcall.}
+  vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR*: proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, pCounterCount: ptr uint32 , pCounters: ptr VkPerformanceCounterKHR , pCounterDescriptions: ptr VkPerformanceCounterDescriptionKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR*: proc(physicalDevice: VkPhysicalDevice, pPerformanceQueryCreateInfo: ptr VkQueryPoolPerformanceCreateInfoKHR , pNumPasses: ptr uint32 ): void {.stdcall.}
+  vkAcquireProfilingLockKHR*: proc(device: VkDevice, pInfo: ptr VkAcquireProfilingLockInfoKHR ): VkResult {.stdcall.}
+  vkReleaseProfilingLockKHR*: proc(device: VkDevice): void {.stdcall.}
+  vkGetImageDrmFormatModifierPropertiesEXT*: proc(device: VkDevice, image: VkImage, pProperties: ptr VkImageDrmFormatModifierPropertiesEXT ): VkResult {.stdcall.}
+  vkGetBufferOpaqueCaptureAddress*: proc(device: VkDevice, pInfo: ptr VkBufferDeviceAddressInfo ): uint64 {.stdcall.}
+  vkGetBufferDeviceAddress*: proc(device: VkDevice, pInfo: ptr VkBufferDeviceAddressInfo ): VkDeviceAddress {.stdcall.}
+  vkCreateHeadlessSurfaceEXT*: proc(instance: VkInstance, pCreateInfo: ptr VkHeadlessSurfaceCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}
+  vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV*: proc(physicalDevice: VkPhysicalDevice, pCombinationCount: ptr uint32 , pCombinations: ptr VkFramebufferMixedSamplesCombinationNV ): VkResult {.stdcall.}
+  vkInitializePerformanceApiINTEL*: proc(device: VkDevice, pInitializeInfo: ptr VkInitializePerformanceApiInfoINTEL ): VkResult {.stdcall.}
+  vkUninitializePerformanceApiINTEL*: proc(device: VkDevice): void {.stdcall.}
+  vkCmdSetPerformanceMarkerINTEL*: proc(commandBuffer: VkCommandBuffer, pMarkerInfo: ptr VkPerformanceMarkerInfoINTEL ): VkResult {.stdcall.}
+  vkCmdSetPerformanceStreamMarkerINTEL*: proc(commandBuffer: VkCommandBuffer, pMarkerInfo: ptr VkPerformanceStreamMarkerInfoINTEL ): VkResult {.stdcall.}
+  vkCmdSetPerformanceOverrideINTEL*: proc(commandBuffer: VkCommandBuffer, pOverrideInfo: ptr VkPerformanceOverrideInfoINTEL ): VkResult {.stdcall.}
+  vkAcquirePerformanceConfigurationINTEL*: proc(device: VkDevice, pAcquireInfo: ptr VkPerformanceConfigurationAcquireInfoINTEL , pConfiguration: ptr VkPerformanceConfigurationINTEL ): VkResult {.stdcall.}
+  vkReleasePerformanceConfigurationINTEL*: proc(device: VkDevice, configuration: VkPerformanceConfigurationINTEL): VkResult {.stdcall.}
+  vkQueueSetPerformanceConfigurationINTEL*: proc(queue: VkQueue, configuration: VkPerformanceConfigurationINTEL): VkResult {.stdcall.}
+  vkGetPerformanceParameterINTEL*: proc(device: VkDevice, parameter: VkPerformanceParameterTypeINTEL, pValue: ptr VkPerformanceValueINTEL ): VkResult {.stdcall.}
+  vkGetDeviceMemoryOpaqueCaptureAddress*: proc(device: VkDevice, pInfo: ptr VkDeviceMemoryOpaqueCaptureAddressInfo ): uint64 {.stdcall.}
+  vkGetPipelineExecutablePropertiesKHR*: proc(device: VkDevice, pPipelineInfo: ptr VkPipelineInfoKHR        , pExecutableCount: ptr uint32 , pProperties: ptr VkPipelineExecutablePropertiesKHR ): VkResult {.stdcall.}
+  vkGetPipelineExecutableStatisticsKHR*: proc(device: VkDevice, pExecutableInfo: ptr VkPipelineExecutableInfoKHR  , pStatisticCount: ptr uint32 , pStatistics: ptr VkPipelineExecutableStatisticKHR ): VkResult {.stdcall.}
+  vkGetPipelineExecutableInternalRepresentationsKHR*: proc(device: VkDevice, pExecutableInfo: ptr VkPipelineExecutableInfoKHR  , pInternalRepresentationCount: ptr uint32 , pInternalRepresentations: ptr VkPipelineExecutableInternalRepresentationKHR ): VkResult {.stdcall.}
+  vkCmdSetLineStippleEXT*: proc(commandBuffer: VkCommandBuffer, lineStippleFactor: uint32, lineStipplePattern: uint16): void {.stdcall.}
+  vkGetPhysicalDeviceToolPropertiesEXT*: proc(physicalDevice: VkPhysicalDevice, pToolCount: ptr uint32 , pToolProperties: ptr VkPhysicalDeviceToolPropertiesEXT ): VkResult {.stdcall.}
+  vkCreateAccelerationStructureKHR*: proc(device: VkDevice, pCreateInfo: ptr VkAccelerationStructureCreateInfoKHR        , pAllocator: ptr VkAllocationCallbacks       , pAccelerationStructure: ptr VkAccelerationStructureKHR                        ): VkResult {.stdcall.}
+  vkCmdBuildAccelerationStructureKHR*: proc(commandBuffer: VkCommandBuffer, infoCount: uint32, pInfos: ptr VkAccelerationStructureBuildGeometryInfoKHR , ppOffsetInfos: ptr ptr VkAccelerationStructureBuildOffsetInfoKHR ): void {.stdcall.}
+  vkCmdBuildAccelerationStructureIndirectKHR*: proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkAccelerationStructureBuildGeometryInfoKHR , indirectBuffer: VkBuffer, indirectOffset: VkDeviceSize, indirectStride: uint32): void {.stdcall.}
+  vkBuildAccelerationStructureKHR*: proc(device: VkDevice, infoCount: uint32, pInfos: ptr VkAccelerationStructureBuildGeometryInfoKHR , ppOffsetInfos: ptr ptr VkAccelerationStructureBuildOffsetInfoKHR ): VkResult {.stdcall.}
+  vkGetAccelerationStructureDeviceAddressKHR*: proc(device: VkDevice, pInfo: ptr VkAccelerationStructureDeviceAddressInfoKHR ): VkDeviceAddress {.stdcall.}
+  vkCreateDeferredOperationKHR*: proc(device: VkDevice, pAllocator: ptr VkAllocationCallbacks , pDeferredOperation: ptr VkDeferredOperationKHR ): VkResult {.stdcall.}
+  vkDestroyDeferredOperationKHR*: proc(device: VkDevice, operation: VkDeferredOperationKHR, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkGetDeferredOperationMaxConcurrencyKHR*: proc(device: VkDevice, operation: VkDeferredOperationKHR): uint32 {.stdcall.}
+  vkGetDeferredOperationResultKHR*: proc(device: VkDevice, operation: VkDeferredOperationKHR): VkResult {.stdcall.}
+  vkDeferredOperationJoinKHR*: proc(device: VkDevice, operation: VkDeferredOperationKHR): VkResult {.stdcall.}
+  vkCmdSetCullModeEXT*: proc(commandBuffer: VkCommandBuffer, cullMode: VkCullModeFlags): void {.stdcall.}
+  vkCmdSetFrontFaceEXT*: proc(commandBuffer: VkCommandBuffer, frontFace: VkFrontFace): void {.stdcall.}
+  vkCmdSetPrimitiveTopologyEXT*: proc(commandBuffer: VkCommandBuffer, primitiveTopology: VkPrimitiveTopology): void {.stdcall.}
+  vkCmdSetViewportWithCountEXT*: proc(commandBuffer: VkCommandBuffer, viewportCount: uint32, pViewports: ptr VkViewport ): void {.stdcall.}
+  vkCmdSetScissorWithCountEXT*: proc(commandBuffer: VkCommandBuffer, scissorCount: uint32, pScissors: ptr VkRect2D ): void {.stdcall.}
+  vkCmdBindVertexBuffers2EXT*: proc(commandBuffer: VkCommandBuffer, firstBinding: uint32, bindingCount: uint32, pBuffers: ptr VkBuffer , pOffsets: ptr VkDeviceSize , pSizes: ptr VkDeviceSize , pStrides: ptr VkDeviceSize ): void {.stdcall.}
+  vkCmdSetDepthTestEnableEXT*: proc(commandBuffer: VkCommandBuffer, depthTestEnable: VkBool32): void {.stdcall.}
+  vkCmdSetDepthWriteEnableEXT*: proc(commandBuffer: VkCommandBuffer, depthWriteEnable: VkBool32): void {.stdcall.}
+  vkCmdSetDepthCompareOpEXT*: proc(commandBuffer: VkCommandBuffer, depthCompareOp: VkCompareOp): void {.stdcall.}
+  vkCmdSetDepthBoundsTestEnableEXT*: proc(commandBuffer: VkCommandBuffer, depthBoundsTestEnable: VkBool32): void {.stdcall.}
+  vkCmdSetStencilTestEnableEXT*: proc(commandBuffer: VkCommandBuffer, stencilTestEnable: VkBool32): void {.stdcall.}
+  vkCmdSetStencilOpEXT*: proc(commandBuffer: VkCommandBuffer, faceMask: VkStencilFaceFlags, failOp: VkStencilOp, passOp: VkStencilOp, depthFailOp: VkStencilOp, compareOp: VkCompareOp): void {.stdcall.}
+  vkCreatePrivateDataSlotEXT*: proc(device: VkDevice, pCreateInfo: ptr VkPrivateDataSlotCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pPrivateDataSlot: ptr VkPrivateDataSlotEXT ): VkResult {.stdcall.}
+  vkDestroyPrivateDataSlotEXT*: proc(device: VkDevice, privateDataSlot: VkPrivateDataSlotEXT, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}
+  vkSetPrivateDataEXT*: proc(device: VkDevice, objectType: VkObjectType, objectHandle: uint64, privateDataSlot: VkPrivateDataSlotEXT, data: uint64): VkResult {.stdcall.}
+  vkGetPrivateDataEXT*: proc(device: VkDevice, objectType: VkObjectType, objectHandle: uint64, privateDataSlot: VkPrivateDataSlotEXT, pData: ptr uint64 ): void {.stdcall.}
+
+# Vulkan 1_0
+proc vkLoad1_0*() =
+  vkCreateInstance = cast[proc(pCreateInfo: ptr VkInstanceCreateInfo , pAllocator: ptr VkAllocationCallbacks , pInstance: ptr VkInstance ): VkResult {.stdcall.}](vkGetProc("vkCreateInstance"))
+  vkDestroyInstance = cast[proc(instance: VkInstance, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyInstance"))
+  vkEnumeratePhysicalDevices = cast[proc(instance: VkInstance, pPhysicalDeviceCount: ptr uint32 , pPhysicalDevices: ptr VkPhysicalDevice ): VkResult {.stdcall.}](vkGetProc("vkEnumeratePhysicalDevices"))
+  vkGetPhysicalDeviceFeatures = cast[proc(physicalDevice: VkPhysicalDevice, pFeatures: ptr VkPhysicalDeviceFeatures ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceFeatures"))
+  vkGetPhysicalDeviceFormatProperties = cast[proc(physicalDevice: VkPhysicalDevice, format: VkFormat, pFormatProperties: ptr VkFormatProperties ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceFormatProperties"))
+  vkGetPhysicalDeviceImageFormatProperties = cast[proc(physicalDevice: VkPhysicalDevice, format: VkFormat, `type`: VkImageType, tiling: VkImageTiling, usage: VkImageUsageFlags, flags: VkImageCreateFlags, pImageFormatProperties: ptr VkImageFormatProperties ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceImageFormatProperties"))
+  vkGetPhysicalDeviceProperties = cast[proc(physicalDevice: VkPhysicalDevice, pProperties: ptr VkPhysicalDeviceProperties ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceProperties"))
+  vkGetPhysicalDeviceQueueFamilyProperties = cast[proc(physicalDevice: VkPhysicalDevice, pQueueFamilyPropertyCount: ptr uint32 , pQueueFamilyProperties: ptr VkQueueFamilyProperties ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceQueueFamilyProperties"))
+  vkGetPhysicalDeviceMemoryProperties = cast[proc(physicalDevice: VkPhysicalDevice, pMemoryProperties: ptr VkPhysicalDeviceMemoryProperties ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceMemoryProperties"))
+  vkGetInstanceProcAddr = cast[proc(instance: VkInstance, pName: cstring ): PFN_vkVoidFunction {.stdcall.}](vkGetProc("vkGetInstanceProcAddr"))
+  vkGetDeviceProcAddr = cast[proc(device: VkDevice, pName: cstring ): PFN_vkVoidFunction {.stdcall.}](vkGetProc("vkGetDeviceProcAddr"))
+  vkCreateDevice = cast[proc(physicalDevice: VkPhysicalDevice, pCreateInfo: ptr VkDeviceCreateInfo , pAllocator: ptr VkAllocationCallbacks , pDevice: ptr VkDevice ): VkResult {.stdcall.}](vkGetProc("vkCreateDevice"))
+  vkDestroyDevice = cast[proc(device: VkDevice, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyDevice"))
+  vkEnumerateInstanceExtensionProperties = cast[proc(pLayerName: cstring , pPropertyCount: ptr uint32 , pProperties: ptr VkExtensionProperties ): VkResult {.stdcall.}](vkGetProc("vkEnumerateInstanceExtensionProperties"))
+  vkEnumerateDeviceExtensionProperties = cast[proc(physicalDevice: VkPhysicalDevice, pLayerName: cstring , pPropertyCount: ptr uint32 , pProperties: ptr VkExtensionProperties ): VkResult {.stdcall.}](vkGetProc("vkEnumerateDeviceExtensionProperties"))
+  vkEnumerateInstanceLayerProperties = cast[proc(pPropertyCount: ptr uint32 , pProperties: ptr VkLayerProperties ): VkResult {.stdcall.}](vkGetProc("vkEnumerateInstanceLayerProperties"))
+  vkEnumerateDeviceLayerProperties = cast[proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkLayerProperties ): VkResult {.stdcall.}](vkGetProc("vkEnumerateDeviceLayerProperties"))
+  vkGetDeviceQueue = cast[proc(device: VkDevice, queueFamilyIndex: uint32, queueIndex: uint32, pQueue: ptr VkQueue ): void {.stdcall.}](vkGetProc("vkGetDeviceQueue"))
+  vkQueueSubmit = cast[proc(queue: VkQueue, submitCount: uint32, pSubmits: ptr VkSubmitInfo , fence: VkFence): VkResult {.stdcall.}](vkGetProc("vkQueueSubmit"))
+  vkQueueWaitIdle = cast[proc(queue: VkQueue): VkResult {.stdcall.}](vkGetProc("vkQueueWaitIdle"))
+  vkDeviceWaitIdle = cast[proc(device: VkDevice): VkResult {.stdcall.}](vkGetProc("vkDeviceWaitIdle"))
+  vkAllocateMemory = cast[proc(device: VkDevice, pAllocateInfo: ptr VkMemoryAllocateInfo , pAllocator: ptr VkAllocationCallbacks , pMemory: ptr VkDeviceMemory ): VkResult {.stdcall.}](vkGetProc("vkAllocateMemory"))
+  vkFreeMemory = cast[proc(device: VkDevice, memory: VkDeviceMemory, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkFreeMemory"))
+  vkMapMemory = cast[proc(device: VkDevice, memory: VkDeviceMemory, offset: VkDeviceSize, size: VkDeviceSize, flags: VkMemoryMapFlags, ppData: ptr pointer ): VkResult {.stdcall.}](vkGetProc("vkMapMemory"))
+  vkUnmapMemory = cast[proc(device: VkDevice, memory: VkDeviceMemory): void {.stdcall.}](vkGetProc("vkUnmapMemory"))
+  vkFlushMappedMemoryRanges = cast[proc(device: VkDevice, memoryRangeCount: uint32, pMemoryRanges: ptr VkMappedMemoryRange ): VkResult {.stdcall.}](vkGetProc("vkFlushMappedMemoryRanges"))
+  vkInvalidateMappedMemoryRanges = cast[proc(device: VkDevice, memoryRangeCount: uint32, pMemoryRanges: ptr VkMappedMemoryRange ): VkResult {.stdcall.}](vkGetProc("vkInvalidateMappedMemoryRanges"))
+  vkGetDeviceMemoryCommitment = cast[proc(device: VkDevice, memory: VkDeviceMemory, pCommittedMemoryInBytes: ptr VkDeviceSize ): void {.stdcall.}](vkGetProc("vkGetDeviceMemoryCommitment"))
+  vkBindBufferMemory = cast[proc(device: VkDevice, buffer: VkBuffer, memory: VkDeviceMemory, memoryOffset: VkDeviceSize): VkResult {.stdcall.}](vkGetProc("vkBindBufferMemory"))
+  vkBindImageMemory = cast[proc(device: VkDevice, image: VkImage, memory: VkDeviceMemory, memoryOffset: VkDeviceSize): VkResult {.stdcall.}](vkGetProc("vkBindImageMemory"))
+  vkGetBufferMemoryRequirements = cast[proc(device: VkDevice, buffer: VkBuffer, pMemoryRequirements: ptr VkMemoryRequirements ): void {.stdcall.}](vkGetProc("vkGetBufferMemoryRequirements"))
+  vkGetImageMemoryRequirements = cast[proc(device: VkDevice, image: VkImage, pMemoryRequirements: ptr VkMemoryRequirements ): void {.stdcall.}](vkGetProc("vkGetImageMemoryRequirements"))
+  vkGetImageSparseMemoryRequirements = cast[proc(device: VkDevice, image: VkImage, pSparseMemoryRequirementCount: ptr uint32 , pSparseMemoryRequirements: ptr VkSparseImageMemoryRequirements ): void {.stdcall.}](vkGetProc("vkGetImageSparseMemoryRequirements"))
+  vkGetPhysicalDeviceSparseImageFormatProperties = cast[proc(physicalDevice: VkPhysicalDevice, format: VkFormat, `type`: VkImageType, samples: VkSampleCountFlagBits, usage: VkImageUsageFlags, tiling: VkImageTiling, pPropertyCount: ptr uint32 , pProperties: ptr VkSparseImageFormatProperties ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSparseImageFormatProperties"))
+  vkQueueBindSparse = cast[proc(queue: VkQueue, bindInfoCount: uint32, pBindInfo: ptr VkBindSparseInfo , fence: VkFence): VkResult {.stdcall.}](vkGetProc("vkQueueBindSparse"))
+  vkCreateFence = cast[proc(device: VkDevice, pCreateInfo: ptr VkFenceCreateInfo , pAllocator: ptr VkAllocationCallbacks , pFence: ptr VkFence ): VkResult {.stdcall.}](vkGetProc("vkCreateFence"))
+  vkDestroyFence = cast[proc(device: VkDevice, fence: VkFence, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyFence"))
+  vkResetFences = cast[proc(device: VkDevice, fenceCount: uint32, pFences: ptr VkFence ): VkResult {.stdcall.}](vkGetProc("vkResetFences"))
+  vkGetFenceStatus = cast[proc(device: VkDevice, fence: VkFence): VkResult {.stdcall.}](vkGetProc("vkGetFenceStatus"))
+  vkWaitForFences = cast[proc(device: VkDevice, fenceCount: uint32, pFences: ptr VkFence , waitAll: VkBool32, timeout: uint64): VkResult {.stdcall.}](vkGetProc("vkWaitForFences"))
+  vkCreateSemaphore = cast[proc(device: VkDevice, pCreateInfo: ptr VkSemaphoreCreateInfo , pAllocator: ptr VkAllocationCallbacks , pSemaphore: ptr VkSemaphore ): VkResult {.stdcall.}](vkGetProc("vkCreateSemaphore"))
+  vkDestroySemaphore = cast[proc(device: VkDevice, semaphore: VkSemaphore, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroySemaphore"))
+  vkCreateEvent = cast[proc(device: VkDevice, pCreateInfo: ptr VkEventCreateInfo , pAllocator: ptr VkAllocationCallbacks , pEvent: ptr VkEvent ): VkResult {.stdcall.}](vkGetProc("vkCreateEvent"))
+  vkDestroyEvent = cast[proc(device: VkDevice, event: VkEvent, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyEvent"))
+  vkGetEventStatus = cast[proc(device: VkDevice, event: VkEvent): VkResult {.stdcall.}](vkGetProc("vkGetEventStatus"))
+  vkSetEvent = cast[proc(device: VkDevice, event: VkEvent): VkResult {.stdcall.}](vkGetProc("vkSetEvent"))
+  vkResetEvent = cast[proc(device: VkDevice, event: VkEvent): VkResult {.stdcall.}](vkGetProc("vkResetEvent"))
+  vkCreateQueryPool = cast[proc(device: VkDevice, pCreateInfo: ptr VkQueryPoolCreateInfo , pAllocator: ptr VkAllocationCallbacks , pQueryPool: ptr VkQueryPool ): VkResult {.stdcall.}](vkGetProc("vkCreateQueryPool"))
+  vkDestroyQueryPool = cast[proc(device: VkDevice, queryPool: VkQueryPool, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyQueryPool"))
+  vkGetQueryPoolResults = cast[proc(device: VkDevice, queryPool: VkQueryPool, firstQuery: uint32, queryCount: uint32, dataSize: uint, pData: pointer , stride: VkDeviceSize, flags: VkQueryResultFlags): VkResult {.stdcall.}](vkGetProc("vkGetQueryPoolResults"))
+  vkCreateBuffer = cast[proc(device: VkDevice, pCreateInfo: ptr VkBufferCreateInfo , pAllocator: ptr VkAllocationCallbacks , pBuffer: ptr VkBuffer ): VkResult {.stdcall.}](vkGetProc("vkCreateBuffer"))
+  vkDestroyBuffer = cast[proc(device: VkDevice, buffer: VkBuffer, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyBuffer"))
+  vkCreateBufferView = cast[proc(device: VkDevice, pCreateInfo: ptr VkBufferViewCreateInfo , pAllocator: ptr VkAllocationCallbacks , pView: ptr VkBufferView ): VkResult {.stdcall.}](vkGetProc("vkCreateBufferView"))
+  vkDestroyBufferView = cast[proc(device: VkDevice, bufferView: VkBufferView, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyBufferView"))
+  vkCreateImage = cast[proc(device: VkDevice, pCreateInfo: ptr VkImageCreateInfo , pAllocator: ptr VkAllocationCallbacks , pImage: ptr VkImage ): VkResult {.stdcall.}](vkGetProc("vkCreateImage"))
+  vkDestroyImage = cast[proc(device: VkDevice, image: VkImage, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyImage"))
+  vkGetImageSubresourceLayout = cast[proc(device: VkDevice, image: VkImage, pSubresource: ptr VkImageSubresource , pLayout: ptr VkSubresourceLayout ): void {.stdcall.}](vkGetProc("vkGetImageSubresourceLayout"))
+  vkCreateImageView = cast[proc(device: VkDevice, pCreateInfo: ptr VkImageViewCreateInfo , pAllocator: ptr VkAllocationCallbacks , pView: ptr VkImageView ): VkResult {.stdcall.}](vkGetProc("vkCreateImageView"))
+  vkDestroyImageView = cast[proc(device: VkDevice, imageView: VkImageView, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyImageView"))
+  vkCreateShaderModule = cast[proc(device: VkDevice, pCreateInfo: ptr VkShaderModuleCreateInfo , pAllocator: ptr VkAllocationCallbacks , pShaderModule: ptr VkShaderModule ): VkResult {.stdcall.}](vkGetProc("vkCreateShaderModule"))
+  vkDestroyShaderModule = cast[proc(device: VkDevice, shaderModule: VkShaderModule, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyShaderModule"))
+  vkCreatePipelineCache = cast[proc(device: VkDevice, pCreateInfo: ptr VkPipelineCacheCreateInfo , pAllocator: ptr VkAllocationCallbacks , pPipelineCache: ptr VkPipelineCache ): VkResult {.stdcall.}](vkGetProc("vkCreatePipelineCache"))
+  vkDestroyPipelineCache = cast[proc(device: VkDevice, pipelineCache: VkPipelineCache, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyPipelineCache"))
+  vkGetPipelineCacheData = cast[proc(device: VkDevice, pipelineCache: VkPipelineCache, pDataSize: ptr uint , pData: pointer ): VkResult {.stdcall.}](vkGetProc("vkGetPipelineCacheData"))
+  vkMergePipelineCaches = cast[proc(device: VkDevice, dstCache: VkPipelineCache, srcCacheCount: uint32, pSrcCaches: ptr VkPipelineCache ): VkResult {.stdcall.}](vkGetProc("vkMergePipelineCaches"))
+  vkCreateGraphicsPipelines = cast[proc(device: VkDevice, pipelineCache: VkPipelineCache, createInfoCount: uint32, pCreateInfos: ptr VkGraphicsPipelineCreateInfo , pAllocator: ptr VkAllocationCallbacks , pPipelines: ptr VkPipeline ): VkResult {.stdcall.}](vkGetProc("vkCreateGraphicsPipelines"))
+  vkCreateComputePipelines = cast[proc(device: VkDevice, pipelineCache: VkPipelineCache, createInfoCount: uint32, pCreateInfos: ptr VkComputePipelineCreateInfo , pAllocator: ptr VkAllocationCallbacks , pPipelines: ptr VkPipeline ): VkResult {.stdcall.}](vkGetProc("vkCreateComputePipelines"))
+  vkDestroyPipeline = cast[proc(device: VkDevice, pipeline: VkPipeline, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyPipeline"))
+  vkCreatePipelineLayout = cast[proc(device: VkDevice, pCreateInfo: ptr VkPipelineLayoutCreateInfo , pAllocator: ptr VkAllocationCallbacks , pPipelineLayout: ptr VkPipelineLayout ): VkResult {.stdcall.}](vkGetProc("vkCreatePipelineLayout"))
+  vkDestroyPipelineLayout = cast[proc(device: VkDevice, pipelineLayout: VkPipelineLayout, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyPipelineLayout"))
+  vkCreateSampler = cast[proc(device: VkDevice, pCreateInfo: ptr VkSamplerCreateInfo , pAllocator: ptr VkAllocationCallbacks , pSampler: ptr VkSampler ): VkResult {.stdcall.}](vkGetProc("vkCreateSampler"))
+  vkDestroySampler = cast[proc(device: VkDevice, sampler: VkSampler, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroySampler"))
+  vkCreateDescriptorSetLayout = cast[proc(device: VkDevice, pCreateInfo: ptr VkDescriptorSetLayoutCreateInfo , pAllocator: ptr VkAllocationCallbacks , pSetLayout: ptr VkDescriptorSetLayout ): VkResult {.stdcall.}](vkGetProc("vkCreateDescriptorSetLayout"))
+  vkDestroyDescriptorSetLayout = cast[proc(device: VkDevice, descriptorSetLayout: VkDescriptorSetLayout, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyDescriptorSetLayout"))
+  vkCreateDescriptorPool = cast[proc(device: VkDevice, pCreateInfo: ptr VkDescriptorPoolCreateInfo , pAllocator: ptr VkAllocationCallbacks , pDescriptorPool: ptr VkDescriptorPool ): VkResult {.stdcall.}](vkGetProc("vkCreateDescriptorPool"))
+  vkDestroyDescriptorPool = cast[proc(device: VkDevice, descriptorPool: VkDescriptorPool, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyDescriptorPool"))
+  vkResetDescriptorPool = cast[proc(device: VkDevice, descriptorPool: VkDescriptorPool, flags: VkDescriptorPoolResetFlags): VkResult {.stdcall.}](vkGetProc("vkResetDescriptorPool"))
+  vkAllocateDescriptorSets = cast[proc(device: VkDevice, pAllocateInfo: ptr VkDescriptorSetAllocateInfo , pDescriptorSets: ptr VkDescriptorSet ): VkResult {.stdcall.}](vkGetProc("vkAllocateDescriptorSets"))
+  vkFreeDescriptorSets = cast[proc(device: VkDevice, descriptorPool: VkDescriptorPool, descriptorSetCount: uint32, pDescriptorSets: ptr VkDescriptorSet ): VkResult {.stdcall.}](vkGetProc("vkFreeDescriptorSets"))
+  vkUpdateDescriptorSets = cast[proc(device: VkDevice, descriptorWriteCount: uint32, pDescriptorWrites: ptr VkWriteDescriptorSet , descriptorCopyCount: uint32, pDescriptorCopies: ptr VkCopyDescriptorSet ): void {.stdcall.}](vkGetProc("vkUpdateDescriptorSets"))
+  vkCreateFramebuffer = cast[proc(device: VkDevice, pCreateInfo: ptr VkFramebufferCreateInfo , pAllocator: ptr VkAllocationCallbacks , pFramebuffer: ptr VkFramebuffer ): VkResult {.stdcall.}](vkGetProc("vkCreateFramebuffer"))
+  vkDestroyFramebuffer = cast[proc(device: VkDevice, framebuffer: VkFramebuffer, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyFramebuffer"))
+  vkCreateRenderPass = cast[proc(device: VkDevice, pCreateInfo: ptr VkRenderPassCreateInfo , pAllocator: ptr VkAllocationCallbacks , pRenderPass: ptr VkRenderPass ): VkResult {.stdcall.}](vkGetProc("vkCreateRenderPass"))
+  vkDestroyRenderPass = cast[proc(device: VkDevice, renderPass: VkRenderPass, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyRenderPass"))
+  vkGetRenderAreaGranularity = cast[proc(device: VkDevice, renderPass: VkRenderPass, pGranularity: ptr VkExtent2D ): void {.stdcall.}](vkGetProc("vkGetRenderAreaGranularity"))
+  vkCreateCommandPool = cast[proc(device: VkDevice, pCreateInfo: ptr VkCommandPoolCreateInfo , pAllocator: ptr VkAllocationCallbacks , pCommandPool: ptr VkCommandPool ): VkResult {.stdcall.}](vkGetProc("vkCreateCommandPool"))
+  vkDestroyCommandPool = cast[proc(device: VkDevice, commandPool: VkCommandPool, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyCommandPool"))
+  vkResetCommandPool = cast[proc(device: VkDevice, commandPool: VkCommandPool, flags: VkCommandPoolResetFlags): VkResult {.stdcall.}](vkGetProc("vkResetCommandPool"))
+  vkAllocateCommandBuffers = cast[proc(device: VkDevice, pAllocateInfo: ptr VkCommandBufferAllocateInfo , pCommandBuffers: ptr VkCommandBuffer ): VkResult {.stdcall.}](vkGetProc("vkAllocateCommandBuffers"))
+  vkFreeCommandBuffers = cast[proc(device: VkDevice, commandPool: VkCommandPool, commandBufferCount: uint32, pCommandBuffers: ptr VkCommandBuffer ): void {.stdcall.}](vkGetProc("vkFreeCommandBuffers"))
+  vkBeginCommandBuffer = cast[proc(commandBuffer: VkCommandBuffer, pBeginInfo: ptr VkCommandBufferBeginInfo ): VkResult {.stdcall.}](vkGetProc("vkBeginCommandBuffer"))
+  vkEndCommandBuffer = cast[proc(commandBuffer: VkCommandBuffer): VkResult {.stdcall.}](vkGetProc("vkEndCommandBuffer"))
+  vkResetCommandBuffer = cast[proc(commandBuffer: VkCommandBuffer, flags: VkCommandBufferResetFlags): VkResult {.stdcall.}](vkGetProc("vkResetCommandBuffer"))
+  vkCmdBindPipeline = cast[proc(commandBuffer: VkCommandBuffer, pipelineBindPoint: VkPipelineBindPoint, pipeline: VkPipeline): void {.stdcall.}](vkGetProc("vkCmdBindPipeline"))
+  vkCmdSetViewport = cast[proc(commandBuffer: VkCommandBuffer, firstViewport: uint32, viewportCount: uint32, pViewports: ptr VkViewport ): void {.stdcall.}](vkGetProc("vkCmdSetViewport"))
+  vkCmdSetScissor = cast[proc(commandBuffer: VkCommandBuffer, firstScissor: uint32, scissorCount: uint32, pScissors: ptr VkRect2D ): void {.stdcall.}](vkGetProc("vkCmdSetScissor"))
+  vkCmdSetLineWidth = cast[proc(commandBuffer: VkCommandBuffer, lineWidth: float32): void {.stdcall.}](vkGetProc("vkCmdSetLineWidth"))
+  vkCmdSetDepthBias = cast[proc(commandBuffer: VkCommandBuffer, depthBiasConstantFactor: float32, depthBiasClamp: float32, depthBiasSlopeFactor: float32): void {.stdcall.}](vkGetProc("vkCmdSetDepthBias"))
+  vkCmdSetBlendConstants = cast[proc(commandBuffer: VkCommandBuffer, blendConstants: array[4, float32]): void {.stdcall.}](vkGetProc("vkCmdSetBlendConstants"))
+  vkCmdSetDepthBounds = cast[proc(commandBuffer: VkCommandBuffer, minDepthBounds: float32, maxDepthBounds: float32): void {.stdcall.}](vkGetProc("vkCmdSetDepthBounds"))
+  vkCmdSetStencilCompareMask = cast[proc(commandBuffer: VkCommandBuffer, faceMask: VkStencilFaceFlags, compareMask: uint32): void {.stdcall.}](vkGetProc("vkCmdSetStencilCompareMask"))
+  vkCmdSetStencilWriteMask = cast[proc(commandBuffer: VkCommandBuffer, faceMask: VkStencilFaceFlags, writeMask: uint32): void {.stdcall.}](vkGetProc("vkCmdSetStencilWriteMask"))
+  vkCmdSetStencilReference = cast[proc(commandBuffer: VkCommandBuffer, faceMask: VkStencilFaceFlags, reference: uint32): void {.stdcall.}](vkGetProc("vkCmdSetStencilReference"))
+  vkCmdBindDescriptorSets = cast[proc(commandBuffer: VkCommandBuffer, pipelineBindPoint: VkPipelineBindPoint, layout: VkPipelineLayout, firstSet: uint32, descriptorSetCount: uint32, pDescriptorSets: ptr VkDescriptorSet , dynamicOffsetCount: uint32, pDynamicOffsets: ptr uint32 ): void {.stdcall.}](vkGetProc("vkCmdBindDescriptorSets"))
+  vkCmdBindIndexBuffer = cast[proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, indexType: VkIndexType): void {.stdcall.}](vkGetProc("vkCmdBindIndexBuffer"))
+  vkCmdBindVertexBuffers = cast[proc(commandBuffer: VkCommandBuffer, firstBinding: uint32, bindingCount: uint32, pBuffers: ptr VkBuffer , pOffsets: ptr VkDeviceSize ): void {.stdcall.}](vkGetProc("vkCmdBindVertexBuffers"))
+  vkCmdDraw = cast[proc(commandBuffer: VkCommandBuffer, vertexCount: uint32, instanceCount: uint32, firstVertex: uint32, firstInstance: uint32): void {.stdcall.}](vkGetProc("vkCmdDraw"))
+  vkCmdDrawIndexed = cast[proc(commandBuffer: VkCommandBuffer, indexCount: uint32, instanceCount: uint32, firstIndex: uint32, vertexOffset: int32, firstInstance: uint32): void {.stdcall.}](vkGetProc("vkCmdDrawIndexed"))
+  vkCmdDrawIndirect = cast[proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, drawCount: uint32, stride: uint32): void {.stdcall.}](vkGetProc("vkCmdDrawIndirect"))
+  vkCmdDrawIndexedIndirect = cast[proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, drawCount: uint32, stride: uint32): void {.stdcall.}](vkGetProc("vkCmdDrawIndexedIndirect"))
+  vkCmdDispatch = cast[proc(commandBuffer: VkCommandBuffer, groupCountX: uint32, groupCountY: uint32, groupCountZ: uint32): void {.stdcall.}](vkGetProc("vkCmdDispatch"))
+  vkCmdDispatchIndirect = cast[proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize): void {.stdcall.}](vkGetProc("vkCmdDispatchIndirect"))
+  vkCmdCopyBuffer = cast[proc(commandBuffer: VkCommandBuffer, srcBuffer: VkBuffer, dstBuffer: VkBuffer, regionCount: uint32, pRegions: ptr VkBufferCopy ): void {.stdcall.}](vkGetProc("vkCmdCopyBuffer"))
+  vkCmdCopyImage = cast[proc(commandBuffer: VkCommandBuffer, srcImage: VkImage, srcImageLayout: VkImageLayout, dstImage: VkImage, dstImageLayout: VkImageLayout, regionCount: uint32, pRegions: ptr VkImageCopy ): void {.stdcall.}](vkGetProc("vkCmdCopyImage"))
+  vkCmdBlitImage = cast[proc(commandBuffer: VkCommandBuffer, srcImage: VkImage, srcImageLayout: VkImageLayout, dstImage: VkImage, dstImageLayout: VkImageLayout, regionCount: uint32, pRegions: ptr VkImageBlit , filter: VkFilter): void {.stdcall.}](vkGetProc("vkCmdBlitImage"))
+  vkCmdCopyBufferToImage = cast[proc(commandBuffer: VkCommandBuffer, srcBuffer: VkBuffer, dstImage: VkImage, dstImageLayout: VkImageLayout, regionCount: uint32, pRegions: ptr VkBufferImageCopy ): void {.stdcall.}](vkGetProc("vkCmdCopyBufferToImage"))
+  vkCmdCopyImageToBuffer = cast[proc(commandBuffer: VkCommandBuffer, srcImage: VkImage, srcImageLayout: VkImageLayout, dstBuffer: VkBuffer, regionCount: uint32, pRegions: ptr VkBufferImageCopy ): void {.stdcall.}](vkGetProc("vkCmdCopyImageToBuffer"))
+  vkCmdUpdateBuffer = cast[proc(commandBuffer: VkCommandBuffer, dstBuffer: VkBuffer, dstOffset: VkDeviceSize, dataSize: VkDeviceSize, pData: pointer ): void {.stdcall.}](vkGetProc("vkCmdUpdateBuffer"))
+  vkCmdFillBuffer = cast[proc(commandBuffer: VkCommandBuffer, dstBuffer: VkBuffer, dstOffset: VkDeviceSize, size: VkDeviceSize, data: uint32): void {.stdcall.}](vkGetProc("vkCmdFillBuffer"))
+  vkCmdClearColorImage = cast[proc(commandBuffer: VkCommandBuffer, image: VkImage, imageLayout: VkImageLayout, pColor: ptr VkClearColorValue , rangeCount: uint32, pRanges: ptr VkImageSubresourceRange ): void {.stdcall.}](vkGetProc("vkCmdClearColorImage"))
+  vkCmdClearDepthStencilImage = cast[proc(commandBuffer: VkCommandBuffer, image: VkImage, imageLayout: VkImageLayout, pDepthStencil: ptr VkClearDepthStencilValue , rangeCount: uint32, pRanges: ptr VkImageSubresourceRange ): void {.stdcall.}](vkGetProc("vkCmdClearDepthStencilImage"))
+  vkCmdClearAttachments = cast[proc(commandBuffer: VkCommandBuffer, attachmentCount: uint32, pAttachments: ptr VkClearAttachment , rectCount: uint32, pRects: ptr VkClearRect ): void {.stdcall.}](vkGetProc("vkCmdClearAttachments"))
+  vkCmdResolveImage = cast[proc(commandBuffer: VkCommandBuffer, srcImage: VkImage, srcImageLayout: VkImageLayout, dstImage: VkImage, dstImageLayout: VkImageLayout, regionCount: uint32, pRegions: ptr VkImageResolve ): void {.stdcall.}](vkGetProc("vkCmdResolveImage"))
+  vkCmdSetEvent = cast[proc(commandBuffer: VkCommandBuffer, event: VkEvent, stageMask: VkPipelineStageFlags): void {.stdcall.}](vkGetProc("vkCmdSetEvent"))
+  vkCmdResetEvent = cast[proc(commandBuffer: VkCommandBuffer, event: VkEvent, stageMask: VkPipelineStageFlags): void {.stdcall.}](vkGetProc("vkCmdResetEvent"))
+  vkCmdWaitEvents = cast[proc(commandBuffer: VkCommandBuffer, eventCount: uint32, pEvents: ptr VkEvent , srcStageMask: VkPipelineStageFlags, dstStageMask: VkPipelineStageFlags, memoryBarrierCount: uint32, pMemoryBarriers: ptr VkMemoryBarrier , bufferMemoryBarrierCount: uint32, pBufferMemoryBarriers: ptr VkBufferMemoryBarrier , imageMemoryBarrierCount: uint32, pImageMemoryBarriers: ptr VkImageMemoryBarrier ): void {.stdcall.}](vkGetProc("vkCmdWaitEvents"))
+  vkCmdPipelineBarrier = cast[proc(commandBuffer: VkCommandBuffer, srcStageMask: VkPipelineStageFlags, dstStageMask: VkPipelineStageFlags, dependencyFlags: VkDependencyFlags, memoryBarrierCount: uint32, pMemoryBarriers: ptr VkMemoryBarrier , bufferMemoryBarrierCount: uint32, pBufferMemoryBarriers: ptr VkBufferMemoryBarrier , imageMemoryBarrierCount: uint32, pImageMemoryBarriers: ptr VkImageMemoryBarrier ): void {.stdcall.}](vkGetProc("vkCmdPipelineBarrier"))
+  vkCmdBeginQuery = cast[proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, query: uint32, flags: VkQueryControlFlags): void {.stdcall.}](vkGetProc("vkCmdBeginQuery"))
+  vkCmdEndQuery = cast[proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, query: uint32): void {.stdcall.}](vkGetProc("vkCmdEndQuery"))
+  vkCmdResetQueryPool = cast[proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, firstQuery: uint32, queryCount: uint32): void {.stdcall.}](vkGetProc("vkCmdResetQueryPool"))
+  vkCmdWriteTimestamp = cast[proc(commandBuffer: VkCommandBuffer, pipelineStage: VkPipelineStageFlagBits, queryPool: VkQueryPool, query: uint32): void {.stdcall.}](vkGetProc("vkCmdWriteTimestamp"))
+  vkCmdCopyQueryPoolResults = cast[proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, firstQuery: uint32, queryCount: uint32, dstBuffer: VkBuffer, dstOffset: VkDeviceSize, stride: VkDeviceSize, flags: VkQueryResultFlags): void {.stdcall.}](vkGetProc("vkCmdCopyQueryPoolResults"))
+  vkCmdPushConstants = cast[proc(commandBuffer: VkCommandBuffer, layout: VkPipelineLayout, stageFlags: VkShaderStageFlags, offset: uint32, size: uint32, pValues: pointer ): void {.stdcall.}](vkGetProc("vkCmdPushConstants"))
+  vkCmdBeginRenderPass = cast[proc(commandBuffer: VkCommandBuffer, pRenderPassBegin: ptr VkRenderPassBeginInfo , contents: VkSubpassContents): void {.stdcall.}](vkGetProc("vkCmdBeginRenderPass"))
+  vkCmdNextSubpass = cast[proc(commandBuffer: VkCommandBuffer, contents: VkSubpassContents): void {.stdcall.}](vkGetProc("vkCmdNextSubpass"))
+  vkCmdEndRenderPass = cast[proc(commandBuffer: VkCommandBuffer): void {.stdcall.}](vkGetProc("vkCmdEndRenderPass"))
+  vkCmdExecuteCommands = cast[proc(commandBuffer: VkCommandBuffer, commandBufferCount: uint32, pCommandBuffers: ptr VkCommandBuffer ): void {.stdcall.}](vkGetProc("vkCmdExecuteCommands"))
+
+# Vulkan 1_1
+proc vkLoad1_1*() =
+  vkEnumerateInstanceVersion = cast[proc(pApiVersion: ptr uint32 ): VkResult {.stdcall.}](vkGetProc("vkEnumerateInstanceVersion"))
+  vkBindBufferMemory2 = cast[proc(device: VkDevice, bindInfoCount: uint32, pBindInfos: ptr VkBindBufferMemoryInfo ): VkResult {.stdcall.}](vkGetProc("vkBindBufferMemory2"))
+  vkBindImageMemory2 = cast[proc(device: VkDevice, bindInfoCount: uint32, pBindInfos: ptr VkBindImageMemoryInfo ): VkResult {.stdcall.}](vkGetProc("vkBindImageMemory2"))
+  vkGetDeviceGroupPeerMemoryFeatures = cast[proc(device: VkDevice, heapIndex: uint32, localDeviceIndex: uint32, remoteDeviceIndex: uint32, pPeerMemoryFeatures: ptr VkPeerMemoryFeatureFlags ): void {.stdcall.}](vkGetProc("vkGetDeviceGroupPeerMemoryFeatures"))
+  vkCmdSetDeviceMask = cast[proc(commandBuffer: VkCommandBuffer, deviceMask: uint32): void {.stdcall.}](vkGetProc("vkCmdSetDeviceMask"))
+  vkCmdDispatchBase = cast[proc(commandBuffer: VkCommandBuffer, baseGroupX: uint32, baseGroupY: uint32, baseGroupZ: uint32, groupCountX: uint32, groupCountY: uint32, groupCountZ: uint32): void {.stdcall.}](vkGetProc("vkCmdDispatchBase"))
+  vkEnumeratePhysicalDeviceGroups = cast[proc(instance: VkInstance, pPhysicalDeviceGroupCount: ptr uint32 , pPhysicalDeviceGroupProperties: ptr VkPhysicalDeviceGroupProperties ): VkResult {.stdcall.}](vkGetProc("vkEnumeratePhysicalDeviceGroups"))
+  vkGetImageMemoryRequirements2 = cast[proc(device: VkDevice, pInfo: ptr VkImageMemoryRequirementsInfo2 , pMemoryRequirements: ptr VkMemoryRequirements2 ): void {.stdcall.}](vkGetProc("vkGetImageMemoryRequirements2"))
+  vkGetBufferMemoryRequirements2 = cast[proc(device: VkDevice, pInfo: ptr VkBufferMemoryRequirementsInfo2 , pMemoryRequirements: ptr VkMemoryRequirements2 ): void {.stdcall.}](vkGetProc("vkGetBufferMemoryRequirements2"))
+  vkGetImageSparseMemoryRequirements2 = cast[proc(device: VkDevice, pInfo: ptr VkImageSparseMemoryRequirementsInfo2 , pSparseMemoryRequirementCount: ptr uint32 , pSparseMemoryRequirements: ptr VkSparseImageMemoryRequirements2 ): void {.stdcall.}](vkGetProc("vkGetImageSparseMemoryRequirements2"))
+  vkGetPhysicalDeviceFeatures2 = cast[proc(physicalDevice: VkPhysicalDevice, pFeatures: ptr VkPhysicalDeviceFeatures2 ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceFeatures2"))
+  vkGetPhysicalDeviceProperties2 = cast[proc(physicalDevice: VkPhysicalDevice, pProperties: ptr VkPhysicalDeviceProperties2 ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceProperties2"))
+  vkGetPhysicalDeviceFormatProperties2 = cast[proc(physicalDevice: VkPhysicalDevice, format: VkFormat, pFormatProperties: ptr VkFormatProperties2 ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceFormatProperties2"))
+  vkGetPhysicalDeviceImageFormatProperties2 = cast[proc(physicalDevice: VkPhysicalDevice, pImageFormatInfo: ptr VkPhysicalDeviceImageFormatInfo2 , pImageFormatProperties: ptr VkImageFormatProperties2 ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceImageFormatProperties2"))
+  vkGetPhysicalDeviceQueueFamilyProperties2 = cast[proc(physicalDevice: VkPhysicalDevice, pQueueFamilyPropertyCount: ptr uint32 , pQueueFamilyProperties: ptr VkQueueFamilyProperties2 ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceQueueFamilyProperties2"))
+  vkGetPhysicalDeviceMemoryProperties2 = cast[proc(physicalDevice: VkPhysicalDevice, pMemoryProperties: ptr VkPhysicalDeviceMemoryProperties2 ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceMemoryProperties2"))
+  vkGetPhysicalDeviceSparseImageFormatProperties2 = cast[proc(physicalDevice: VkPhysicalDevice, pFormatInfo: ptr VkPhysicalDeviceSparseImageFormatInfo2 , pPropertyCount: ptr uint32 , pProperties: ptr VkSparseImageFormatProperties2 ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSparseImageFormatProperties2"))
+  vkTrimCommandPool = cast[proc(device: VkDevice, commandPool: VkCommandPool, flags: VkCommandPoolTrimFlags): void {.stdcall.}](vkGetProc("vkTrimCommandPool"))
+  vkGetDeviceQueue2 = cast[proc(device: VkDevice, pQueueInfo: ptr VkDeviceQueueInfo2 , pQueue: ptr VkQueue ): void {.stdcall.}](vkGetProc("vkGetDeviceQueue2"))
+  vkCreateSamplerYcbcrConversion = cast[proc(device: VkDevice, pCreateInfo: ptr VkSamplerYcbcrConversionCreateInfo , pAllocator: ptr VkAllocationCallbacks , pYcbcrConversion: ptr VkSamplerYcbcrConversion ): VkResult {.stdcall.}](vkGetProc("vkCreateSamplerYcbcrConversion"))
+  vkDestroySamplerYcbcrConversion = cast[proc(device: VkDevice, ycbcrConversion: VkSamplerYcbcrConversion, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroySamplerYcbcrConversion"))
+  vkCreateDescriptorUpdateTemplate = cast[proc(device: VkDevice, pCreateInfo: ptr VkDescriptorUpdateTemplateCreateInfo , pAllocator: ptr VkAllocationCallbacks , pDescriptorUpdateTemplate: ptr VkDescriptorUpdateTemplate ): VkResult {.stdcall.}](vkGetProc("vkCreateDescriptorUpdateTemplate"))
+  vkDestroyDescriptorUpdateTemplate = cast[proc(device: VkDevice, descriptorUpdateTemplate: VkDescriptorUpdateTemplate, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyDescriptorUpdateTemplate"))
+  vkUpdateDescriptorSetWithTemplate = cast[proc(device: VkDevice, descriptorSet: VkDescriptorSet, descriptorUpdateTemplate: VkDescriptorUpdateTemplate, pData: pointer ): void {.stdcall.}](vkGetProc("vkUpdateDescriptorSetWithTemplate"))
+  vkGetPhysicalDeviceExternalBufferProperties = cast[proc(physicalDevice: VkPhysicalDevice, pExternalBufferInfo: ptr VkPhysicalDeviceExternalBufferInfo , pExternalBufferProperties: ptr VkExternalBufferProperties ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceExternalBufferProperties"))
+  vkGetPhysicalDeviceExternalFenceProperties = cast[proc(physicalDevice: VkPhysicalDevice, pExternalFenceInfo: ptr VkPhysicalDeviceExternalFenceInfo , pExternalFenceProperties: ptr VkExternalFenceProperties ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceExternalFenceProperties"))
+  vkGetPhysicalDeviceExternalSemaphoreProperties = cast[proc(physicalDevice: VkPhysicalDevice, pExternalSemaphoreInfo: ptr VkPhysicalDeviceExternalSemaphoreInfo , pExternalSemaphoreProperties: ptr VkExternalSemaphoreProperties ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceExternalSemaphoreProperties"))
+  vkGetDescriptorSetLayoutSupport = cast[proc(device: VkDevice, pCreateInfo: ptr VkDescriptorSetLayoutCreateInfo , pSupport: ptr VkDescriptorSetLayoutSupport ): void {.stdcall.}](vkGetProc("vkGetDescriptorSetLayoutSupport"))
+
+# Vulkan 1_2
+proc vkLoad1_2*() =
+  vkCmdDrawIndirectCount = cast[proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, countBuffer: VkBuffer, countBufferOffset: VkDeviceSize, maxDrawCount: uint32, stride: uint32): void {.stdcall.}](vkGetProc("vkCmdDrawIndirectCount"))
+  vkCmdDrawIndexedIndirectCount = cast[proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, countBuffer: VkBuffer, countBufferOffset: VkDeviceSize, maxDrawCount: uint32, stride: uint32): void {.stdcall.}](vkGetProc("vkCmdDrawIndexedIndirectCount"))
+  vkCreateRenderPass2 = cast[proc(device: VkDevice, pCreateInfo: ptr VkRenderPassCreateInfo2 , pAllocator: ptr VkAllocationCallbacks , pRenderPass: ptr VkRenderPass ): VkResult {.stdcall.}](vkGetProc("vkCreateRenderPass2"))
+  vkCmdBeginRenderPass2 = cast[proc(commandBuffer: VkCommandBuffer, pRenderPassBegin: ptr VkRenderPassBeginInfo      , pSubpassBeginInfo: ptr VkSubpassBeginInfo      ): void {.stdcall.}](vkGetProc("vkCmdBeginRenderPass2"))
+  vkCmdNextSubpass2 = cast[proc(commandBuffer: VkCommandBuffer, pSubpassBeginInfo: ptr VkSubpassBeginInfo      , pSubpassEndInfo: ptr VkSubpassEndInfo        ): void {.stdcall.}](vkGetProc("vkCmdNextSubpass2"))
+  vkCmdEndRenderPass2 = cast[proc(commandBuffer: VkCommandBuffer, pSubpassEndInfo: ptr VkSubpassEndInfo        ): void {.stdcall.}](vkGetProc("vkCmdEndRenderPass2"))
+  vkResetQueryPool = cast[proc(device: VkDevice, queryPool: VkQueryPool, firstQuery: uint32, queryCount: uint32): void {.stdcall.}](vkGetProc("vkResetQueryPool"))
+  vkGetSemaphoreCounterValue = cast[proc(device: VkDevice, semaphore: VkSemaphore, pValue: ptr uint64 ): VkResult {.stdcall.}](vkGetProc("vkGetSemaphoreCounterValue"))
+  vkWaitSemaphores = cast[proc(device: VkDevice, pWaitInfo: ptr VkSemaphoreWaitInfo , timeout: uint64): VkResult {.stdcall.}](vkGetProc("vkWaitSemaphores"))
+  vkSignalSemaphore = cast[proc(device: VkDevice, pSignalInfo: ptr VkSemaphoreSignalInfo ): VkResult {.stdcall.}](vkGetProc("vkSignalSemaphore"))
+  vkGetBufferDeviceAddress = cast[proc(device: VkDevice, pInfo: ptr VkBufferDeviceAddressInfo ): VkDeviceAddress {.stdcall.}](vkGetProc("vkGetBufferDeviceAddress"))
+  vkGetBufferOpaqueCaptureAddress = cast[proc(device: VkDevice, pInfo: ptr VkBufferDeviceAddressInfo ): uint64 {.stdcall.}](vkGetProc("vkGetBufferOpaqueCaptureAddress"))
+  vkGetDeviceMemoryOpaqueCaptureAddress = cast[proc(device: VkDevice, pInfo: ptr VkDeviceMemoryOpaqueCaptureAddressInfo ): uint64 {.stdcall.}](vkGetProc("vkGetDeviceMemoryOpaqueCaptureAddress"))
+
+# Load VK_KHR_surface
+proc loadVK_KHR_surface*() =
+  vkDestroySurfaceKHR = cast[proc(instance: VkInstance, surface: VkSurfaceKHR, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroySurfaceKHR"))
+  vkGetPhysicalDeviceSurfaceSupportKHR = cast[proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, surface: VkSurfaceKHR, pSupported: ptr VkBool32 ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSurfaceSupportKHR"))
+  vkGetPhysicalDeviceSurfaceCapabilitiesKHR = cast[proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pSurfaceCapabilities: ptr VkSurfaceCapabilitiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSurfaceCapabilitiesKHR"))
+  vkGetPhysicalDeviceSurfaceFormatsKHR = cast[proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pSurfaceFormatCount: ptr uint32 , pSurfaceFormats: ptr VkSurfaceFormatKHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSurfaceFormatsKHR"))
+  vkGetPhysicalDeviceSurfacePresentModesKHR = cast[proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pPresentModeCount: ptr uint32 , pPresentModes: ptr VkPresentModeKHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSurfacePresentModesKHR"))
+
+# Load VK_KHR_swapchain
+proc loadVK_KHR_swapchain*() =
+  vkCreateSwapchainKHR = cast[proc(device: VkDevice, pCreateInfo: ptr VkSwapchainCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSwapchain: ptr VkSwapchainKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateSwapchainKHR"))
+  vkDestroySwapchainKHR = cast[proc(device: VkDevice, swapchain: VkSwapchainKHR, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroySwapchainKHR"))
+  vkGetSwapchainImagesKHR = cast[proc(device: VkDevice, swapchain: VkSwapchainKHR, pSwapchainImageCount: ptr uint32 , pSwapchainImages: ptr VkImage ): VkResult {.stdcall.}](vkGetProc("vkGetSwapchainImagesKHR"))
+  vkAcquireNextImageKHR = cast[proc(device: VkDevice, swapchain: VkSwapchainKHR, timeout: uint64, semaphore: VkSemaphore, fence: VkFence, pImageIndex: ptr uint32 ): VkResult {.stdcall.}](vkGetProc("vkAcquireNextImageKHR"))
+  vkQueuePresentKHR = cast[proc(queue: VkQueue, pPresentInfo: ptr VkPresentInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkQueuePresentKHR"))
+  vkGetDeviceGroupPresentCapabilitiesKHR = cast[proc(device: VkDevice, pDeviceGroupPresentCapabilities: ptr VkDeviceGroupPresentCapabilitiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDeviceGroupPresentCapabilitiesKHR"))
+  vkGetDeviceGroupSurfacePresentModesKHR = cast[proc(device: VkDevice, surface: VkSurfaceKHR, pModes: ptr VkDeviceGroupPresentModeFlagsKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDeviceGroupSurfacePresentModesKHR"))
+  vkGetPhysicalDevicePresentRectanglesKHR = cast[proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pRectCount: ptr uint32 , pRects: ptr VkRect2D ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDevicePresentRectanglesKHR"))
+  vkAcquireNextImage2KHR = cast[proc(device: VkDevice, pAcquireInfo: ptr VkAcquireNextImageInfoKHR , pImageIndex: ptr uint32 ): VkResult {.stdcall.}](vkGetProc("vkAcquireNextImage2KHR"))
+
+# Load VK_KHR_display
+proc loadVK_KHR_display*() =
+  vkGetPhysicalDeviceDisplayPropertiesKHR = cast[proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayPropertiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceDisplayPropertiesKHR"))
+  vkGetPhysicalDeviceDisplayPlanePropertiesKHR = cast[proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayPlanePropertiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceDisplayPlanePropertiesKHR"))
+  vkGetDisplayPlaneSupportedDisplaysKHR = cast[proc(physicalDevice: VkPhysicalDevice, planeIndex: uint32, pDisplayCount: ptr uint32 , pDisplays: ptr VkDisplayKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDisplayPlaneSupportedDisplaysKHR"))
+  vkGetDisplayModePropertiesKHR = cast[proc(physicalDevice: VkPhysicalDevice, display: VkDisplayKHR, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayModePropertiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDisplayModePropertiesKHR"))
+  vkCreateDisplayModeKHR = cast[proc(physicalDevice: VkPhysicalDevice, display: VkDisplayKHR, pCreateInfo: ptr VkDisplayModeCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pMode: ptr VkDisplayModeKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateDisplayModeKHR"))
+  vkGetDisplayPlaneCapabilitiesKHR = cast[proc(physicalDevice: VkPhysicalDevice, mode: VkDisplayModeKHR, planeIndex: uint32, pCapabilities: ptr VkDisplayPlaneCapabilitiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDisplayPlaneCapabilitiesKHR"))
+  vkCreateDisplayPlaneSurfaceKHR = cast[proc(instance: VkInstance, pCreateInfo: ptr VkDisplaySurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateDisplayPlaneSurfaceKHR"))
+
+# Load VK_KHR_display_swapchain
+proc loadVK_KHR_display_swapchain*() =
+  vkCreateSharedSwapchainsKHR = cast[proc(device: VkDevice, swapchainCount: uint32, pCreateInfos: ptr VkSwapchainCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSwapchains: ptr VkSwapchainKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateSharedSwapchainsKHR"))
+
+# Load VK_KHR_xlib_surface
+proc loadVK_KHR_xlib_surface*() =
+  vkCreateXlibSurfaceKHR = cast[proc(instance: VkInstance, pCreateInfo: ptr VkXlibSurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateXlibSurfaceKHR"))
+  vkGetPhysicalDeviceXlibPresentationSupportKHR = cast[proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, dpy: ptr Display , visualID: VisualID): VkBool32 {.stdcall.}](vkGetProc("vkGetPhysicalDeviceXlibPresentationSupportKHR"))
+
+# Load VK_KHR_xcb_surface
+proc loadVK_KHR_xcb_surface*() =
+  vkCreateXcbSurfaceKHR = cast[proc(instance: VkInstance, pCreateInfo: ptr VkXcbSurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateXcbSurfaceKHR"))
+  vkGetPhysicalDeviceXcbPresentationSupportKHR = cast[proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, connection: ptr xcb_connection_t , visual_id: xcb_visualid_t): VkBool32 {.stdcall.}](vkGetProc("vkGetPhysicalDeviceXcbPresentationSupportKHR"))
+
+# Load VK_KHR_wayland_surface
+proc loadVK_KHR_wayland_surface*() =
+  vkCreateWaylandSurfaceKHR = cast[proc(instance: VkInstance, pCreateInfo: ptr VkWaylandSurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateWaylandSurfaceKHR"))
+  vkGetPhysicalDeviceWaylandPresentationSupportKHR = cast[proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, display: ptr wl_display ): VkBool32 {.stdcall.}](vkGetProc("vkGetPhysicalDeviceWaylandPresentationSupportKHR"))
+
+# Load VK_KHR_android_surface
+proc loadVK_KHR_android_surface*() =
+  vkCreateAndroidSurfaceKHR = cast[proc(instance: VkInstance, pCreateInfo: ptr VkAndroidSurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateAndroidSurfaceKHR"))
+
+# Load VK_KHR_win32_surface
+proc loadVK_KHR_win32_surface*() =
+  vkCreateWin32SurfaceKHR = cast[proc(instance: VkInstance, pCreateInfo: ptr VkWin32SurfaceCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateWin32SurfaceKHR"))
+  vkGetPhysicalDeviceWin32PresentationSupportKHR = cast[proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32): VkBool32 {.stdcall.}](vkGetProc("vkGetPhysicalDeviceWin32PresentationSupportKHR"))
+
+# Load VK_ANDROID_native_buffer
+proc loadVK_ANDROID_native_buffer*() =
+  vkGetSwapchainGrallocUsageANDROID = cast[proc(device: VkDevice, format: VkFormat, imageUsage: VkImageUsageFlags, grallocUsage: ptr int ): VkResult {.stdcall.}](vkGetProc("vkGetSwapchainGrallocUsageANDROID"))
+  vkAcquireImageANDROID = cast[proc(device: VkDevice, image: VkImage, nativeFenceFd: int, semaphore: VkSemaphore, fence: VkFence): VkResult {.stdcall.}](vkGetProc("vkAcquireImageANDROID"))
+  vkQueueSignalReleaseImageANDROID = cast[proc(queue: VkQueue, waitSemaphoreCount: uint32, pWaitSemaphores: ptr VkSemaphore , image: VkImage, pNativeFenceFd: ptr int ): VkResult {.stdcall.}](vkGetProc("vkQueueSignalReleaseImageANDROID"))
+  vkGetSwapchainGrallocUsage2ANDROID = cast[proc(device: VkDevice, format: VkFormat, imageUsage: VkImageUsageFlags, swapchainImageUsage: VkSwapchainImageUsageFlagsANDROID, grallocConsumerUsage: ptr uint64 , grallocProducerUsage: ptr uint64 ): VkResult {.stdcall.}](vkGetProc("vkGetSwapchainGrallocUsage2ANDROID"))
+
+# Load VK_EXT_debug_report
+proc loadVK_EXT_debug_report*() =
+  vkCreateDebugReportCallbackEXT = cast[proc(instance: VkInstance, pCreateInfo: ptr VkDebugReportCallbackCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pCallback: ptr VkDebugReportCallbackEXT ): VkResult {.stdcall.}](vkGetProc("vkCreateDebugReportCallbackEXT"))
+  vkDestroyDebugReportCallbackEXT = cast[proc(instance: VkInstance, callback: VkDebugReportCallbackEXT, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyDebugReportCallbackEXT"))
+  vkDebugReportMessageEXT = cast[proc(instance: VkInstance, flags: VkDebugReportFlagsEXT, objectType: VkDebugReportObjectTypeEXT, `object`: uint64, location: uint, messageCode: int32, pLayerPrefix: cstring , pMessage: cstring ): void {.stdcall.}](vkGetProc("vkDebugReportMessageEXT"))
+
+# Load VK_EXT_debug_marker
+proc loadVK_EXT_debug_marker*() =
+  vkDebugMarkerSetObjectTagEXT = cast[proc(device: VkDevice, pTagInfo: ptr VkDebugMarkerObjectTagInfoEXT ): VkResult {.stdcall.}](vkGetProc("vkDebugMarkerSetObjectTagEXT"))
+  vkDebugMarkerSetObjectNameEXT = cast[proc(device: VkDevice, pNameInfo: ptr VkDebugMarkerObjectNameInfoEXT ): VkResult {.stdcall.}](vkGetProc("vkDebugMarkerSetObjectNameEXT"))
+  vkCmdDebugMarkerBeginEXT = cast[proc(commandBuffer: VkCommandBuffer, pMarkerInfo: ptr VkDebugMarkerMarkerInfoEXT ): void {.stdcall.}](vkGetProc("vkCmdDebugMarkerBeginEXT"))
+  vkCmdDebugMarkerEndEXT = cast[proc(commandBuffer: VkCommandBuffer): void {.stdcall.}](vkGetProc("vkCmdDebugMarkerEndEXT"))
+  vkCmdDebugMarkerInsertEXT = cast[proc(commandBuffer: VkCommandBuffer, pMarkerInfo: ptr VkDebugMarkerMarkerInfoEXT ): void {.stdcall.}](vkGetProc("vkCmdDebugMarkerInsertEXT"))
+
+# Load VK_EXT_transform_feedback
+proc loadVK_EXT_transform_feedback*() =
+  vkCmdBindTransformFeedbackBuffersEXT = cast[proc(commandBuffer: VkCommandBuffer, firstBinding: uint32, bindingCount: uint32, pBuffers: ptr VkBuffer , pOffsets: ptr VkDeviceSize , pSizes: ptr VkDeviceSize ): void {.stdcall.}](vkGetProc("vkCmdBindTransformFeedbackBuffersEXT"))
+  vkCmdBeginTransformFeedbackEXT = cast[proc(commandBuffer: VkCommandBuffer, firstCounterBuffer: uint32, counterBufferCount: uint32, pCounterBuffers: ptr VkBuffer , pCounterBufferOffsets: ptr VkDeviceSize ): void {.stdcall.}](vkGetProc("vkCmdBeginTransformFeedbackEXT"))
+  vkCmdEndTransformFeedbackEXT = cast[proc(commandBuffer: VkCommandBuffer, firstCounterBuffer: uint32, counterBufferCount: uint32, pCounterBuffers: ptr VkBuffer , pCounterBufferOffsets: ptr VkDeviceSize ): void {.stdcall.}](vkGetProc("vkCmdEndTransformFeedbackEXT"))
+  vkCmdBeginQueryIndexedEXT = cast[proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, query: uint32, flags: VkQueryControlFlags, index: uint32): void {.stdcall.}](vkGetProc("vkCmdBeginQueryIndexedEXT"))
+  vkCmdEndQueryIndexedEXT = cast[proc(commandBuffer: VkCommandBuffer, queryPool: VkQueryPool, query: uint32, index: uint32): void {.stdcall.}](vkGetProc("vkCmdEndQueryIndexedEXT"))
+  vkCmdDrawIndirectByteCountEXT = cast[proc(commandBuffer: VkCommandBuffer, instanceCount: uint32, firstInstance: uint32, counterBuffer: VkBuffer, counterBufferOffset: VkDeviceSize, counterOffset: uint32, vertexStride: uint32): void {.stdcall.}](vkGetProc("vkCmdDrawIndirectByteCountEXT"))
+
+# Load VK_NVX_image_view_handle
+proc loadVK_NVX_image_view_handle*() =
+  vkGetImageViewHandleNVX = cast[proc(device: VkDevice, pInfo: ptr VkImageViewHandleInfoNVX ): uint32 {.stdcall.}](vkGetProc("vkGetImageViewHandleNVX"))
+  vkGetImageViewAddressNVX = cast[proc(device: VkDevice, imageView: VkImageView, pProperties: ptr VkImageViewAddressPropertiesNVX ): VkResult {.stdcall.}](vkGetProc("vkGetImageViewAddressNVX"))
+
+# Load VK_AMD_shader_info
+proc loadVK_AMD_shader_info*() =
+  vkGetShaderInfoAMD = cast[proc(device: VkDevice, pipeline: VkPipeline, shaderStage: VkShaderStageFlagBits, infoType: VkShaderInfoTypeAMD, pInfoSize: ptr uint , pInfo: pointer ): VkResult {.stdcall.}](vkGetProc("vkGetShaderInfoAMD"))
+
+# Load VK_GGP_stream_descriptor_surface
+proc loadVK_GGP_stream_descriptor_surface*() =
+  vkCreateStreamDescriptorSurfaceGGP = cast[proc(instance: VkInstance, pCreateInfo: ptr VkStreamDescriptorSurfaceCreateInfoGGP , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateStreamDescriptorSurfaceGGP"))
+
+# Load VK_NV_external_memory_capabilities
+proc loadVK_NV_external_memory_capabilities*() =
+  vkGetPhysicalDeviceExternalImageFormatPropertiesNV = cast[proc(physicalDevice: VkPhysicalDevice, format: VkFormat, `type`: VkImageType, tiling: VkImageTiling, usage: VkImageUsageFlags, flags: VkImageCreateFlags, externalHandleType: VkExternalMemoryHandleTypeFlagsNV, pExternalImageFormatProperties: ptr VkExternalImageFormatPropertiesNV ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceExternalImageFormatPropertiesNV"))
+
+# Load VK_NV_external_memory_win32
+proc loadVK_NV_external_memory_win32*() =
+  vkGetMemoryWin32HandleNV = cast[proc(device: VkDevice, memory: VkDeviceMemory, handleType: VkExternalMemoryHandleTypeFlagsNV, pHandle: ptr HANDLE ): VkResult {.stdcall.}](vkGetProc("vkGetMemoryWin32HandleNV"))
+
+# Load VK_KHR_device_group
+proc loadVK_KHR_device_group*() =
+  vkGetDeviceGroupPresentCapabilitiesKHR = cast[proc(device: VkDevice, pDeviceGroupPresentCapabilities: ptr VkDeviceGroupPresentCapabilitiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDeviceGroupPresentCapabilitiesKHR"))
+  vkGetDeviceGroupSurfacePresentModesKHR = cast[proc(device: VkDevice, surface: VkSurfaceKHR, pModes: ptr VkDeviceGroupPresentModeFlagsKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDeviceGroupSurfacePresentModesKHR"))
+  vkGetPhysicalDevicePresentRectanglesKHR = cast[proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pRectCount: ptr uint32 , pRects: ptr VkRect2D ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDevicePresentRectanglesKHR"))
+  vkAcquireNextImage2KHR = cast[proc(device: VkDevice, pAcquireInfo: ptr VkAcquireNextImageInfoKHR , pImageIndex: ptr uint32 ): VkResult {.stdcall.}](vkGetProc("vkAcquireNextImage2KHR"))
+
+# Load VK_NN_vi_surface
+proc loadVK_NN_vi_surface*() =
+  vkCreateViSurfaceNN = cast[proc(instance: VkInstance, pCreateInfo: ptr VkViSurfaceCreateInfoNN , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateViSurfaceNN"))
+
+# Load VK_KHR_external_memory_win32
+proc loadVK_KHR_external_memory_win32*() =
+  vkGetMemoryWin32HandleKHR = cast[proc(device: VkDevice, pGetWin32HandleInfo: ptr VkMemoryGetWin32HandleInfoKHR , pHandle: ptr HANDLE ): VkResult {.stdcall.}](vkGetProc("vkGetMemoryWin32HandleKHR"))
+  vkGetMemoryWin32HandlePropertiesKHR = cast[proc(device: VkDevice, handleType: VkExternalMemoryHandleTypeFlagBits, handle: HANDLE, pMemoryWin32HandleProperties: ptr VkMemoryWin32HandlePropertiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetMemoryWin32HandlePropertiesKHR"))
+
+# Load VK_KHR_external_memory_fd
+proc loadVK_KHR_external_memory_fd*() =
+  vkGetMemoryFdKHR = cast[proc(device: VkDevice, pGetFdInfo: ptr VkMemoryGetFdInfoKHR , pFd: ptr int ): VkResult {.stdcall.}](vkGetProc("vkGetMemoryFdKHR"))
+  vkGetMemoryFdPropertiesKHR = cast[proc(device: VkDevice, handleType: VkExternalMemoryHandleTypeFlagBits, fd: int, pMemoryFdProperties: ptr VkMemoryFdPropertiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetMemoryFdPropertiesKHR"))
+
+# Load VK_KHR_external_semaphore_win32
+proc loadVK_KHR_external_semaphore_win32*() =
+  vkImportSemaphoreWin32HandleKHR = cast[proc(device: VkDevice, pImportSemaphoreWin32HandleInfo: ptr VkImportSemaphoreWin32HandleInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkImportSemaphoreWin32HandleKHR"))
+  vkGetSemaphoreWin32HandleKHR = cast[proc(device: VkDevice, pGetWin32HandleInfo: ptr VkSemaphoreGetWin32HandleInfoKHR , pHandle: ptr HANDLE ): VkResult {.stdcall.}](vkGetProc("vkGetSemaphoreWin32HandleKHR"))
+
+# Load VK_KHR_external_semaphore_fd
+proc loadVK_KHR_external_semaphore_fd*() =
+  vkImportSemaphoreFdKHR = cast[proc(device: VkDevice, pImportSemaphoreFdInfo: ptr VkImportSemaphoreFdInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkImportSemaphoreFdKHR"))
+  vkGetSemaphoreFdKHR = cast[proc(device: VkDevice, pGetFdInfo: ptr VkSemaphoreGetFdInfoKHR , pFd: ptr int ): VkResult {.stdcall.}](vkGetProc("vkGetSemaphoreFdKHR"))
+
+# Load VK_KHR_push_descriptor
+proc loadVK_KHR_push_descriptor*() =
+  vkCmdPushDescriptorSetKHR = cast[proc(commandBuffer: VkCommandBuffer, pipelineBindPoint: VkPipelineBindPoint, layout: VkPipelineLayout, set: uint32, descriptorWriteCount: uint32, pDescriptorWrites: ptr VkWriteDescriptorSet ): void {.stdcall.}](vkGetProc("vkCmdPushDescriptorSetKHR"))
+  vkCmdPushDescriptorSetWithTemplateKHR = cast[proc(commandBuffer: VkCommandBuffer, descriptorUpdateTemplate: VkDescriptorUpdateTemplate, layout: VkPipelineLayout, set: uint32, pData: pointer ): void {.stdcall.}](vkGetProc("vkCmdPushDescriptorSetWithTemplateKHR"))
+  vkCmdPushDescriptorSetWithTemplateKHR = cast[proc(commandBuffer: VkCommandBuffer, descriptorUpdateTemplate: VkDescriptorUpdateTemplate, layout: VkPipelineLayout, set: uint32, pData: pointer ): void {.stdcall.}](vkGetProc("vkCmdPushDescriptorSetWithTemplateKHR"))
+
+# Load VK_EXT_conditional_rendering
+proc loadVK_EXT_conditional_rendering*() =
+  vkCmdBeginConditionalRenderingEXT = cast[proc(commandBuffer: VkCommandBuffer, pConditionalRenderingBegin: ptr VkConditionalRenderingBeginInfoEXT ): void {.stdcall.}](vkGetProc("vkCmdBeginConditionalRenderingEXT"))
+  vkCmdEndConditionalRenderingEXT = cast[proc(commandBuffer: VkCommandBuffer): void {.stdcall.}](vkGetProc("vkCmdEndConditionalRenderingEXT"))
+
+# Load VK_KHR_descriptor_update_template
+proc loadVK_KHR_descriptor_update_template*() =
+  vkCmdPushDescriptorSetWithTemplateKHR = cast[proc(commandBuffer: VkCommandBuffer, descriptorUpdateTemplate: VkDescriptorUpdateTemplate, layout: VkPipelineLayout, set: uint32, pData: pointer ): void {.stdcall.}](vkGetProc("vkCmdPushDescriptorSetWithTemplateKHR"))
+
+# Load VK_NV_clip_space_w_scaling
+proc loadVK_NV_clip_space_w_scaling*() =
+  vkCmdSetViewportWScalingNV = cast[proc(commandBuffer: VkCommandBuffer, firstViewport: uint32, viewportCount: uint32, pViewportWScalings: ptr VkViewportWScalingNV ): void {.stdcall.}](vkGetProc("vkCmdSetViewportWScalingNV"))
+
+# Load VK_EXT_direct_mode_display
+proc loadVK_EXT_direct_mode_display*() =
+  vkReleaseDisplayEXT = cast[proc(physicalDevice: VkPhysicalDevice, display: VkDisplayKHR): VkResult {.stdcall.}](vkGetProc("vkReleaseDisplayEXT"))
+
+# Load VK_EXT_acquire_xlib_display
+proc loadVK_EXT_acquire_xlib_display*() =
+  vkAcquireXlibDisplayEXT = cast[proc(physicalDevice: VkPhysicalDevice, dpy: ptr Display , display: VkDisplayKHR): VkResult {.stdcall.}](vkGetProc("vkAcquireXlibDisplayEXT"))
+  vkGetRandROutputDisplayEXT = cast[proc(physicalDevice: VkPhysicalDevice, dpy: ptr Display , rrOutput: RROutput, pDisplay: ptr VkDisplayKHR ): VkResult {.stdcall.}](vkGetProc("vkGetRandROutputDisplayEXT"))
+
+# Load VK_EXT_display_surface_counter
+proc loadVK_EXT_display_surface_counter*() =
+  vkGetPhysicalDeviceSurfaceCapabilities2EXT = cast[proc(physicalDevice: VkPhysicalDevice, surface: VkSurfaceKHR, pSurfaceCapabilities: ptr VkSurfaceCapabilities2EXT ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSurfaceCapabilities2EXT"))
+
+# Load VK_EXT_display_control
+proc loadVK_EXT_display_control*() =
+  vkDisplayPowerControlEXT = cast[proc(device: VkDevice, display: VkDisplayKHR, pDisplayPowerInfo: ptr VkDisplayPowerInfoEXT ): VkResult {.stdcall.}](vkGetProc("vkDisplayPowerControlEXT"))
+  vkRegisterDeviceEventEXT = cast[proc(device: VkDevice, pDeviceEventInfo: ptr VkDeviceEventInfoEXT , pAllocator: ptr VkAllocationCallbacks , pFence: ptr VkFence ): VkResult {.stdcall.}](vkGetProc("vkRegisterDeviceEventEXT"))
+  vkRegisterDisplayEventEXT = cast[proc(device: VkDevice, display: VkDisplayKHR, pDisplayEventInfo: ptr VkDisplayEventInfoEXT , pAllocator: ptr VkAllocationCallbacks , pFence: ptr VkFence ): VkResult {.stdcall.}](vkGetProc("vkRegisterDisplayEventEXT"))
+  vkGetSwapchainCounterEXT = cast[proc(device: VkDevice, swapchain: VkSwapchainKHR, counter: VkSurfaceCounterFlagBitsEXT, pCounterValue: ptr uint64 ): VkResult {.stdcall.}](vkGetProc("vkGetSwapchainCounterEXT"))
+
+# Load VK_GOOGLE_display_timing
+proc loadVK_GOOGLE_display_timing*() =
+  vkGetRefreshCycleDurationGOOGLE = cast[proc(device: VkDevice, swapchain: VkSwapchainKHR, pDisplayTimingProperties: ptr VkRefreshCycleDurationGOOGLE ): VkResult {.stdcall.}](vkGetProc("vkGetRefreshCycleDurationGOOGLE"))
+  vkGetPastPresentationTimingGOOGLE = cast[proc(device: VkDevice, swapchain: VkSwapchainKHR, pPresentationTimingCount: ptr uint32 , pPresentationTimings: ptr VkPastPresentationTimingGOOGLE ): VkResult {.stdcall.}](vkGetProc("vkGetPastPresentationTimingGOOGLE"))
+
+# Load VK_EXT_discard_rectangles
+proc loadVK_EXT_discard_rectangles*() =
+  vkCmdSetDiscardRectangleEXT = cast[proc(commandBuffer: VkCommandBuffer, firstDiscardRectangle: uint32, discardRectangleCount: uint32, pDiscardRectangles: ptr VkRect2D ): void {.stdcall.}](vkGetProc("vkCmdSetDiscardRectangleEXT"))
+
+# Load VK_EXT_hdr_metadata
+proc loadVK_EXT_hdr_metadata*() =
+  vkSetHdrMetadataEXT = cast[proc(device: VkDevice, swapchainCount: uint32, pSwapchains: ptr VkSwapchainKHR , pMetadata: ptr VkHdrMetadataEXT ): void {.stdcall.}](vkGetProc("vkSetHdrMetadataEXT"))
+
+# Load VK_KHR_shared_presentable_image
+proc loadVK_KHR_shared_presentable_image*() =
+  vkGetSwapchainStatusKHR = cast[proc(device: VkDevice, swapchain: VkSwapchainKHR): VkResult {.stdcall.}](vkGetProc("vkGetSwapchainStatusKHR"))
+
+# Load VK_KHR_external_fence_win32
+proc loadVK_KHR_external_fence_win32*() =
+  vkImportFenceWin32HandleKHR = cast[proc(device: VkDevice, pImportFenceWin32HandleInfo: ptr VkImportFenceWin32HandleInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkImportFenceWin32HandleKHR"))
+  vkGetFenceWin32HandleKHR = cast[proc(device: VkDevice, pGetWin32HandleInfo: ptr VkFenceGetWin32HandleInfoKHR , pHandle: ptr HANDLE ): VkResult {.stdcall.}](vkGetProc("vkGetFenceWin32HandleKHR"))
+
+# Load VK_KHR_external_fence_fd
+proc loadVK_KHR_external_fence_fd*() =
+  vkImportFenceFdKHR = cast[proc(device: VkDevice, pImportFenceFdInfo: ptr VkImportFenceFdInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkImportFenceFdKHR"))
+  vkGetFenceFdKHR = cast[proc(device: VkDevice, pGetFdInfo: ptr VkFenceGetFdInfoKHR , pFd: ptr int ): VkResult {.stdcall.}](vkGetProc("vkGetFenceFdKHR"))
+
+# Load VK_KHR_performance_query
+proc loadVK_KHR_performance_query*() =
+  vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = cast[proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, pCounterCount: ptr uint32 , pCounters: ptr VkPerformanceCounterKHR , pCounterDescriptions: ptr VkPerformanceCounterDescriptionKHR ): VkResult {.stdcall.}](vkGetProc("vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"))
+  vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = cast[proc(physicalDevice: VkPhysicalDevice, pPerformanceQueryCreateInfo: ptr VkQueryPoolPerformanceCreateInfoKHR , pNumPasses: ptr uint32 ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"))
+  vkAcquireProfilingLockKHR = cast[proc(device: VkDevice, pInfo: ptr VkAcquireProfilingLockInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkAcquireProfilingLockKHR"))
+  vkReleaseProfilingLockKHR = cast[proc(device: VkDevice): void {.stdcall.}](vkGetProc("vkReleaseProfilingLockKHR"))
+
+# Load VK_KHR_get_surface_capabilities2
+proc loadVK_KHR_get_surface_capabilities2*() =
+  vkGetPhysicalDeviceSurfaceCapabilities2KHR = cast[proc(physicalDevice: VkPhysicalDevice, pSurfaceInfo: ptr VkPhysicalDeviceSurfaceInfo2KHR , pSurfaceCapabilities: ptr VkSurfaceCapabilities2KHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSurfaceCapabilities2KHR"))
+  vkGetPhysicalDeviceSurfaceFormats2KHR = cast[proc(physicalDevice: VkPhysicalDevice, pSurfaceInfo: ptr VkPhysicalDeviceSurfaceInfo2KHR , pSurfaceFormatCount: ptr uint32 , pSurfaceFormats: ptr VkSurfaceFormat2KHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSurfaceFormats2KHR"))
+
+# Load VK_KHR_get_display_properties2
+proc loadVK_KHR_get_display_properties2*() =
+  vkGetPhysicalDeviceDisplayProperties2KHR = cast[proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayProperties2KHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceDisplayProperties2KHR"))
+  vkGetPhysicalDeviceDisplayPlaneProperties2KHR = cast[proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayPlaneProperties2KHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceDisplayPlaneProperties2KHR"))
+  vkGetDisplayModeProperties2KHR = cast[proc(physicalDevice: VkPhysicalDevice, display: VkDisplayKHR, pPropertyCount: ptr uint32 , pProperties: ptr VkDisplayModeProperties2KHR ): VkResult {.stdcall.}](vkGetProc("vkGetDisplayModeProperties2KHR"))
+  vkGetDisplayPlaneCapabilities2KHR = cast[proc(physicalDevice: VkPhysicalDevice, pDisplayPlaneInfo: ptr VkDisplayPlaneInfo2KHR , pCapabilities: ptr VkDisplayPlaneCapabilities2KHR ): VkResult {.stdcall.}](vkGetProc("vkGetDisplayPlaneCapabilities2KHR"))
+
+# Load VK_MVK_ios_surface
+proc loadVK_MVK_ios_surface*() =
+  vkCreateIOSSurfaceMVK = cast[proc(instance: VkInstance, pCreateInfo: ptr VkIOSSurfaceCreateInfoMVK , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateIOSSurfaceMVK"))
+
+# Load VK_MVK_macos_surface
+proc loadVK_MVK_macos_surface*() =
+  vkCreateMacOSSurfaceMVK = cast[proc(instance: VkInstance, pCreateInfo: ptr VkMacOSSurfaceCreateInfoMVK , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateMacOSSurfaceMVK"))
+
+# Load VK_EXT_debug_utils
+proc loadVK_EXT_debug_utils*(instance: VkInstance) =
+  vkSetDebugUtilsObjectNameEXT = cast[proc(device: VkDevice, pNameInfo: ptr VkDebugUtilsObjectNameInfoEXT ): VkResult {.stdcall.}](vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectNameEXT"))
+  vkSetDebugUtilsObjectTagEXT = cast[proc(device: VkDevice, pTagInfo: ptr VkDebugUtilsObjectTagInfoEXT ): VkResult {.stdcall.}](vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectTagEXT"))
+  vkQueueBeginDebugUtilsLabelEXT = cast[proc(queue: VkQueue, pLabelInfo: ptr VkDebugUtilsLabelEXT ): void {.stdcall.}](vkGetInstanceProcAddr(instance, "vkQueueBeginDebugUtilsLabelEXT"))
+  vkQueueEndDebugUtilsLabelEXT = cast[proc(queue: VkQueue): void {.stdcall.}](vkGetInstanceProcAddr(instance, "vkQueueEndDebugUtilsLabelEXT"))
+  vkQueueInsertDebugUtilsLabelEXT = cast[proc(queue: VkQueue, pLabelInfo: ptr VkDebugUtilsLabelEXT ): void {.stdcall.}](vkGetInstanceProcAddr(instance, "vkQueueInsertDebugUtilsLabelEXT"))
+  vkCmdBeginDebugUtilsLabelEXT = cast[proc(commandBuffer: VkCommandBuffer, pLabelInfo: ptr VkDebugUtilsLabelEXT ): void {.stdcall.}](vkGetInstanceProcAddr(instance, "vkCmdBeginDebugUtilsLabelEXT"))
+  vkCmdEndDebugUtilsLabelEXT = cast[proc(commandBuffer: VkCommandBuffer): void {.stdcall.}](vkGetInstanceProcAddr(instance, "vkCmdEndDebugUtilsLabelEXT"))
+  vkCmdInsertDebugUtilsLabelEXT = cast[proc(commandBuffer: VkCommandBuffer, pLabelInfo: ptr VkDebugUtilsLabelEXT ): void {.stdcall.}](vkGetInstanceProcAddr(instance, "vkCmdInsertDebugUtilsLabelEXT"))
+  vkCreateDebugUtilsMessengerEXT = cast[proc(instance: VkInstance, pCreateInfo: ptr VkDebugUtilsMessengerCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pMessenger: ptr VkDebugUtilsMessengerEXT ): VkResult {.stdcall.}](vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT"))
+  vkDestroyDebugUtilsMessengerEXT = cast[proc(instance: VkInstance, messenger: VkDebugUtilsMessengerEXT, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT"))
+  vkSubmitDebugUtilsMessageEXT = cast[proc(instance: VkInstance, messageSeverity: VkDebugUtilsMessageSeverityFlagBitsEXT, messageTypes: VkDebugUtilsMessageTypeFlagsEXT, pCallbackData: ptr VkDebugUtilsMessengerCallbackDataEXT ): void {.stdcall.}](vkGetInstanceProcAddr(instance, "vkSubmitDebugUtilsMessageEXT"))
+
+# Load VK_ANDROID_external_memory_android_hardware_buffer
+proc loadVK_ANDROID_external_memory_android_hardware_buffer*() =
+  vkGetAndroidHardwareBufferPropertiesANDROID = cast[proc(device: VkDevice, buffer: ptr AHardwareBuffer , pProperties: ptr VkAndroidHardwareBufferPropertiesANDROID ): VkResult {.stdcall.}](vkGetProc("vkGetAndroidHardwareBufferPropertiesANDROID"))
+  vkGetMemoryAndroidHardwareBufferANDROID = cast[proc(device: VkDevice, pInfo: ptr VkMemoryGetAndroidHardwareBufferInfoANDROID , pBuffer: ptr ptr AHardwareBuffer ): VkResult {.stdcall.}](vkGetProc("vkGetMemoryAndroidHardwareBufferANDROID"))
+
+# Load VK_EXT_sample_locations
+proc loadVK_EXT_sample_locations*() =
+  vkCmdSetSampleLocationsEXT = cast[proc(commandBuffer: VkCommandBuffer, pSampleLocationsInfo: ptr VkSampleLocationsInfoEXT ): void {.stdcall.}](vkGetProc("vkCmdSetSampleLocationsEXT"))
+  vkGetPhysicalDeviceMultisamplePropertiesEXT = cast[proc(physicalDevice: VkPhysicalDevice, samples: VkSampleCountFlagBits, pMultisampleProperties: ptr VkMultisamplePropertiesEXT ): void {.stdcall.}](vkGetProc("vkGetPhysicalDeviceMultisamplePropertiesEXT"))
+
+# Load VK_KHR_ray_tracing
+proc loadVK_KHR_ray_tracing*() =
+  vkCreateAccelerationStructureKHR = cast[proc(device: VkDevice, pCreateInfo: ptr VkAccelerationStructureCreateInfoKHR        , pAllocator: ptr VkAllocationCallbacks       , pAccelerationStructure: ptr VkAccelerationStructureKHR                        ): VkResult {.stdcall.}](vkGetProc("vkCreateAccelerationStructureKHR"))
+  vkDestroyAccelerationStructureKHR = cast[proc(device: VkDevice, accelerationStructure: VkAccelerationStructureKHR, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyAccelerationStructureKHR"))
+  vkGetAccelerationStructureMemoryRequirementsKHR = cast[proc(device: VkDevice, pInfo: ptr VkAccelerationStructureMemoryRequirementsInfoKHR , pMemoryRequirements: ptr VkMemoryRequirements2 ): void {.stdcall.}](vkGetProc("vkGetAccelerationStructureMemoryRequirementsKHR"))
+  vkBindAccelerationStructureMemoryKHR = cast[proc(device: VkDevice, bindInfoCount: uint32, pBindInfos: ptr VkBindAccelerationStructureMemoryInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkBindAccelerationStructureMemoryKHR"))
+  vkCmdBuildAccelerationStructureKHR = cast[proc(commandBuffer: VkCommandBuffer, infoCount: uint32, pInfos: ptr VkAccelerationStructureBuildGeometryInfoKHR , ppOffsetInfos: ptr ptr VkAccelerationStructureBuildOffsetInfoKHR ): void {.stdcall.}](vkGetProc("vkCmdBuildAccelerationStructureKHR"))
+  vkCmdBuildAccelerationStructureIndirectKHR = cast[proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkAccelerationStructureBuildGeometryInfoKHR , indirectBuffer: VkBuffer, indirectOffset: VkDeviceSize, indirectStride: uint32): void {.stdcall.}](vkGetProc("vkCmdBuildAccelerationStructureIndirectKHR"))
+  vkBuildAccelerationStructureKHR = cast[proc(device: VkDevice, infoCount: uint32, pInfos: ptr VkAccelerationStructureBuildGeometryInfoKHR , ppOffsetInfos: ptr ptr VkAccelerationStructureBuildOffsetInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkBuildAccelerationStructureKHR"))
+  vkCopyAccelerationStructureKHR = cast[proc(device: VkDevice, pInfo: ptr VkCopyAccelerationStructureInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkCopyAccelerationStructureKHR"))
+  vkCopyAccelerationStructureToMemoryKHR = cast[proc(device: VkDevice, pInfo: ptr VkCopyAccelerationStructureToMemoryInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkCopyAccelerationStructureToMemoryKHR"))
+  vkCopyMemoryToAccelerationStructureKHR = cast[proc(device: VkDevice, pInfo: ptr VkCopyMemoryToAccelerationStructureInfoKHR ): VkResult {.stdcall.}](vkGetProc("vkCopyMemoryToAccelerationStructureKHR"))
+  vkWriteAccelerationStructuresPropertiesKHR = cast[proc(device: VkDevice, accelerationStructureCount: uint32, pAccelerationStructures: ptr VkAccelerationStructureKHR , queryType: VkQueryType, dataSize: uint, pData: pointer , stride: uint): VkResult {.stdcall.}](vkGetProc("vkWriteAccelerationStructuresPropertiesKHR"))
+  vkCmdCopyAccelerationStructureKHR = cast[proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkCopyAccelerationStructureInfoKHR ): void {.stdcall.}](vkGetProc("vkCmdCopyAccelerationStructureKHR"))
+  vkCmdCopyAccelerationStructureToMemoryKHR = cast[proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkCopyAccelerationStructureToMemoryInfoKHR ): void {.stdcall.}](vkGetProc("vkCmdCopyAccelerationStructureToMemoryKHR"))
+  vkCmdCopyMemoryToAccelerationStructureKHR = cast[proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkCopyMemoryToAccelerationStructureInfoKHR ): void {.stdcall.}](vkGetProc("vkCmdCopyMemoryToAccelerationStructureKHR"))
+  vkCmdTraceRaysKHR = cast[proc(commandBuffer: VkCommandBuffer, pRaygenShaderBindingTable: ptr VkStridedBufferRegionKHR , pMissShaderBindingTable: ptr VkStridedBufferRegionKHR , pHitShaderBindingTable: ptr VkStridedBufferRegionKHR , pCallableShaderBindingTable: ptr VkStridedBufferRegionKHR , width: uint32, height: uint32, depth: uint32): void {.stdcall.}](vkGetProc("vkCmdTraceRaysKHR"))
+  vkCreateRayTracingPipelinesKHR = cast[proc(device: VkDevice, pipelineCache: VkPipelineCache, createInfoCount: uint32, pCreateInfos: ptr VkRayTracingPipelineCreateInfoKHR , pAllocator: ptr VkAllocationCallbacks , pPipelines: ptr VkPipeline ): VkResult {.stdcall.}](vkGetProc("vkCreateRayTracingPipelinesKHR"))
+  vkGetRayTracingShaderGroupHandlesKHR = cast[proc(device: VkDevice, pipeline: VkPipeline, firstGroup: uint32, groupCount: uint32, dataSize: uint, pData: pointer ): VkResult {.stdcall.}](vkGetProc("vkGetRayTracingShaderGroupHandlesKHR"))
+  vkGetAccelerationStructureDeviceAddressKHR = cast[proc(device: VkDevice, pInfo: ptr VkAccelerationStructureDeviceAddressInfoKHR ): VkDeviceAddress {.stdcall.}](vkGetProc("vkGetAccelerationStructureDeviceAddressKHR"))
+  vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = cast[proc(device: VkDevice, pipeline: VkPipeline, firstGroup: uint32, groupCount: uint32, dataSize: uint, pData: pointer ): VkResult {.stdcall.}](vkGetProc("vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"))
+  vkCmdWriteAccelerationStructuresPropertiesKHR = cast[proc(commandBuffer: VkCommandBuffer, accelerationStructureCount: uint32, pAccelerationStructures: ptr VkAccelerationStructureKHR , queryType: VkQueryType, queryPool: VkQueryPool, firstQuery: uint32): void {.stdcall.}](vkGetProc("vkCmdWriteAccelerationStructuresPropertiesKHR"))
+  vkCmdTraceRaysIndirectKHR = cast[proc(commandBuffer: VkCommandBuffer, pRaygenShaderBindingTable: ptr VkStridedBufferRegionKHR , pMissShaderBindingTable: ptr VkStridedBufferRegionKHR , pHitShaderBindingTable: ptr VkStridedBufferRegionKHR , pCallableShaderBindingTable: ptr VkStridedBufferRegionKHR , buffer: VkBuffer, offset: VkDeviceSize): void {.stdcall.}](vkGetProc("vkCmdTraceRaysIndirectKHR"))
+  vkGetDeviceAccelerationStructureCompatibilityKHR = cast[proc(device: VkDevice, version: ptr VkAccelerationStructureVersionKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDeviceAccelerationStructureCompatibilityKHR"))
+
+# Load VK_EXT_image_drm_format_modifier
+proc loadVK_EXT_image_drm_format_modifier*() =
+  vkGetImageDrmFormatModifierPropertiesEXT = cast[proc(device: VkDevice, image: VkImage, pProperties: ptr VkImageDrmFormatModifierPropertiesEXT ): VkResult {.stdcall.}](vkGetProc("vkGetImageDrmFormatModifierPropertiesEXT"))
+
+# Load VK_EXT_validation_cache
+proc loadVK_EXT_validation_cache*() =
+  vkCreateValidationCacheEXT = cast[proc(device: VkDevice, pCreateInfo: ptr VkValidationCacheCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pValidationCache: ptr VkValidationCacheEXT ): VkResult {.stdcall.}](vkGetProc("vkCreateValidationCacheEXT"))
+  vkDestroyValidationCacheEXT = cast[proc(device: VkDevice, validationCache: VkValidationCacheEXT, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyValidationCacheEXT"))
+  vkMergeValidationCachesEXT = cast[proc(device: VkDevice, dstCache: VkValidationCacheEXT, srcCacheCount: uint32, pSrcCaches: ptr VkValidationCacheEXT ): VkResult {.stdcall.}](vkGetProc("vkMergeValidationCachesEXT"))
+  vkGetValidationCacheDataEXT = cast[proc(device: VkDevice, validationCache: VkValidationCacheEXT, pDataSize: ptr uint , pData: pointer ): VkResult {.stdcall.}](vkGetProc("vkGetValidationCacheDataEXT"))
+
+# Load VK_NV_shading_rate_image
+proc loadVK_NV_shading_rate_image*() =
+  vkCmdBindShadingRateImageNV = cast[proc(commandBuffer: VkCommandBuffer, imageView: VkImageView, imageLayout: VkImageLayout): void {.stdcall.}](vkGetProc("vkCmdBindShadingRateImageNV"))
+  vkCmdSetViewportShadingRatePaletteNV = cast[proc(commandBuffer: VkCommandBuffer, firstViewport: uint32, viewportCount: uint32, pShadingRatePalettes: ptr VkShadingRatePaletteNV ): void {.stdcall.}](vkGetProc("vkCmdSetViewportShadingRatePaletteNV"))
+  vkCmdSetCoarseSampleOrderNV = cast[proc(commandBuffer: VkCommandBuffer, sampleOrderType: VkCoarseSampleOrderTypeNV, customSampleOrderCount: uint32, pCustomSampleOrders: ptr VkCoarseSampleOrderCustomNV ): void {.stdcall.}](vkGetProc("vkCmdSetCoarseSampleOrderNV"))
+
+# Load VK_NV_ray_tracing
+proc loadVK_NV_ray_tracing*() =
+  vkCreateAccelerationStructureNV = cast[proc(device: VkDevice, pCreateInfo: ptr VkAccelerationStructureCreateInfoNV , pAllocator: ptr VkAllocationCallbacks , pAccelerationStructure: ptr VkAccelerationStructureNV ): VkResult {.stdcall.}](vkGetProc("vkCreateAccelerationStructureNV"))
+  vkGetAccelerationStructureMemoryRequirementsNV = cast[proc(device: VkDevice, pInfo: ptr VkAccelerationStructureMemoryRequirementsInfoNV , pMemoryRequirements: ptr VkMemoryRequirements2KHR ): void {.stdcall.}](vkGetProc("vkGetAccelerationStructureMemoryRequirementsNV"))
+  vkCmdBuildAccelerationStructureNV = cast[proc(commandBuffer: VkCommandBuffer, pInfo: ptr VkAccelerationStructureInfoNV , instanceData: VkBuffer, instanceOffset: VkDeviceSize, update: VkBool32, dst: VkAccelerationStructureKHR, src: VkAccelerationStructureKHR, scratch: VkBuffer, scratchOffset: VkDeviceSize): void {.stdcall.}](vkGetProc("vkCmdBuildAccelerationStructureNV"))
+  vkCmdCopyAccelerationStructureNV = cast[proc(commandBuffer: VkCommandBuffer, dst: VkAccelerationStructureKHR, src: VkAccelerationStructureKHR, mode: VkCopyAccelerationStructureModeKHR): void {.stdcall.}](vkGetProc("vkCmdCopyAccelerationStructureNV"))
+  vkCmdTraceRaysNV = cast[proc(commandBuffer: VkCommandBuffer, raygenShaderBindingTableBuffer: VkBuffer, raygenShaderBindingOffset: VkDeviceSize, missShaderBindingTableBuffer: VkBuffer, missShaderBindingOffset: VkDeviceSize, missShaderBindingStride: VkDeviceSize, hitShaderBindingTableBuffer: VkBuffer, hitShaderBindingOffset: VkDeviceSize, hitShaderBindingStride: VkDeviceSize, callableShaderBindingTableBuffer: VkBuffer, callableShaderBindingOffset: VkDeviceSize, callableShaderBindingStride: VkDeviceSize, width: uint32, height: uint32, depth: uint32): void {.stdcall.}](vkGetProc("vkCmdTraceRaysNV"))
+  vkCreateRayTracingPipelinesNV = cast[proc(device: VkDevice, pipelineCache: VkPipelineCache, createInfoCount: uint32, pCreateInfos: ptr VkRayTracingPipelineCreateInfoNV , pAllocator: ptr VkAllocationCallbacks , pPipelines: ptr VkPipeline ): VkResult {.stdcall.}](vkGetProc("vkCreateRayTracingPipelinesNV"))
+  vkGetAccelerationStructureHandleNV = cast[proc(device: VkDevice, accelerationStructure: VkAccelerationStructureKHR, dataSize: uint, pData: pointer ): VkResult {.stdcall.}](vkGetProc("vkGetAccelerationStructureHandleNV"))
+  vkCompileDeferredNV = cast[proc(device: VkDevice, pipeline: VkPipeline, shader: uint32): VkResult {.stdcall.}](vkGetProc("vkCompileDeferredNV"))
+
+# Load VK_EXT_external_memory_host
+proc loadVK_EXT_external_memory_host*() =
+  vkGetMemoryHostPointerPropertiesEXT = cast[proc(device: VkDevice, handleType: VkExternalMemoryHandleTypeFlagBits, pHostPointer: pointer , pMemoryHostPointerProperties: ptr VkMemoryHostPointerPropertiesEXT ): VkResult {.stdcall.}](vkGetProc("vkGetMemoryHostPointerPropertiesEXT"))
+
+# Load VK_AMD_buffer_marker
+proc loadVK_AMD_buffer_marker*() =
+  vkCmdWriteBufferMarkerAMD = cast[proc(commandBuffer: VkCommandBuffer, pipelineStage: VkPipelineStageFlagBits, dstBuffer: VkBuffer, dstOffset: VkDeviceSize, marker: uint32): void {.stdcall.}](vkGetProc("vkCmdWriteBufferMarkerAMD"))
+
+# Load VK_EXT_calibrated_timestamps
+proc loadVK_EXT_calibrated_timestamps*() =
+  vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = cast[proc(physicalDevice: VkPhysicalDevice, pTimeDomainCount: ptr uint32 , pTimeDomains: ptr VkTimeDomainEXT ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"))
+  vkGetCalibratedTimestampsEXT = cast[proc(device: VkDevice, timestampCount: uint32, pTimestampInfos: ptr VkCalibratedTimestampInfoEXT , pTimestamps: ptr uint64 , pMaxDeviation: ptr uint64 ): VkResult {.stdcall.}](vkGetProc("vkGetCalibratedTimestampsEXT"))
+
+# Load VK_NV_mesh_shader
+proc loadVK_NV_mesh_shader*() =
+  vkCmdDrawMeshTasksNV = cast[proc(commandBuffer: VkCommandBuffer, taskCount: uint32, firstTask: uint32): void {.stdcall.}](vkGetProc("vkCmdDrawMeshTasksNV"))
+  vkCmdDrawMeshTasksIndirectNV = cast[proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, drawCount: uint32, stride: uint32): void {.stdcall.}](vkGetProc("vkCmdDrawMeshTasksIndirectNV"))
+  vkCmdDrawMeshTasksIndirectCountNV = cast[proc(commandBuffer: VkCommandBuffer, buffer: VkBuffer, offset: VkDeviceSize, countBuffer: VkBuffer, countBufferOffset: VkDeviceSize, maxDrawCount: uint32, stride: uint32): void {.stdcall.}](vkGetProc("vkCmdDrawMeshTasksIndirectCountNV"))
+
+# Load VK_NV_scissor_exclusive
+proc loadVK_NV_scissor_exclusive*() =
+  vkCmdSetExclusiveScissorNV = cast[proc(commandBuffer: VkCommandBuffer, firstExclusiveScissor: uint32, exclusiveScissorCount: uint32, pExclusiveScissors: ptr VkRect2D ): void {.stdcall.}](vkGetProc("vkCmdSetExclusiveScissorNV"))
+
+# Load VK_NV_device_diagnostic_checkpoints
+proc loadVK_NV_device_diagnostic_checkpoints*() =
+  vkCmdSetCheckpointNV = cast[proc(commandBuffer: VkCommandBuffer, pCheckpointMarker: pointer ): void {.stdcall.}](vkGetProc("vkCmdSetCheckpointNV"))
+  vkGetQueueCheckpointDataNV = cast[proc(queue: VkQueue, pCheckpointDataCount: ptr uint32 , pCheckpointData: ptr VkCheckpointDataNV ): void {.stdcall.}](vkGetProc("vkGetQueueCheckpointDataNV"))
+
+# Load VK_INTEL_performance_query
+proc loadVK_INTEL_performance_query*() =
+  vkInitializePerformanceApiINTEL = cast[proc(device: VkDevice, pInitializeInfo: ptr VkInitializePerformanceApiInfoINTEL ): VkResult {.stdcall.}](vkGetProc("vkInitializePerformanceApiINTEL"))
+  vkUninitializePerformanceApiINTEL = cast[proc(device: VkDevice): void {.stdcall.}](vkGetProc("vkUninitializePerformanceApiINTEL"))
+  vkCmdSetPerformanceMarkerINTEL = cast[proc(commandBuffer: VkCommandBuffer, pMarkerInfo: ptr VkPerformanceMarkerInfoINTEL ): VkResult {.stdcall.}](vkGetProc("vkCmdSetPerformanceMarkerINTEL"))
+  vkCmdSetPerformanceStreamMarkerINTEL = cast[proc(commandBuffer: VkCommandBuffer, pMarkerInfo: ptr VkPerformanceStreamMarkerInfoINTEL ): VkResult {.stdcall.}](vkGetProc("vkCmdSetPerformanceStreamMarkerINTEL"))
+  vkCmdSetPerformanceOverrideINTEL = cast[proc(commandBuffer: VkCommandBuffer, pOverrideInfo: ptr VkPerformanceOverrideInfoINTEL ): VkResult {.stdcall.}](vkGetProc("vkCmdSetPerformanceOverrideINTEL"))
+  vkAcquirePerformanceConfigurationINTEL = cast[proc(device: VkDevice, pAcquireInfo: ptr VkPerformanceConfigurationAcquireInfoINTEL , pConfiguration: ptr VkPerformanceConfigurationINTEL ): VkResult {.stdcall.}](vkGetProc("vkAcquirePerformanceConfigurationINTEL"))
+  vkReleasePerformanceConfigurationINTEL = cast[proc(device: VkDevice, configuration: VkPerformanceConfigurationINTEL): VkResult {.stdcall.}](vkGetProc("vkReleasePerformanceConfigurationINTEL"))
+  vkQueueSetPerformanceConfigurationINTEL = cast[proc(queue: VkQueue, configuration: VkPerformanceConfigurationINTEL): VkResult {.stdcall.}](vkGetProc("vkQueueSetPerformanceConfigurationINTEL"))
+  vkGetPerformanceParameterINTEL = cast[proc(device: VkDevice, parameter: VkPerformanceParameterTypeINTEL, pValue: ptr VkPerformanceValueINTEL ): VkResult {.stdcall.}](vkGetProc("vkGetPerformanceParameterINTEL"))
+
+# Load VK_AMD_display_native_hdr
+proc loadVK_AMD_display_native_hdr*() =
+  vkSetLocalDimmingAMD = cast[proc(device: VkDevice, swapChain: VkSwapchainKHR, localDimmingEnable: VkBool32): void {.stdcall.}](vkGetProc("vkSetLocalDimmingAMD"))
+
+# Load VK_FUCHSIA_imagepipe_surface
+proc loadVK_FUCHSIA_imagepipe_surface*() =
+  vkCreateImagePipeSurfaceFUCHSIA = cast[proc(instance: VkInstance, pCreateInfo: ptr VkImagePipeSurfaceCreateInfoFUCHSIA , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateImagePipeSurfaceFUCHSIA"))
+
+# Load VK_EXT_metal_surface
+proc loadVK_EXT_metal_surface*() =
+  vkCreateMetalSurfaceEXT = cast[proc(instance: VkInstance, pCreateInfo: ptr VkMetalSurfaceCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateMetalSurfaceEXT"))
+
+# Load VK_EXT_tooling_info
+proc loadVK_EXT_tooling_info*() =
+  vkGetPhysicalDeviceToolPropertiesEXT = cast[proc(physicalDevice: VkPhysicalDevice, pToolCount: ptr uint32 , pToolProperties: ptr VkPhysicalDeviceToolPropertiesEXT ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceToolPropertiesEXT"))
+
+# Load VK_NV_cooperative_matrix
+proc loadVK_NV_cooperative_matrix*() =
+  vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = cast[proc(physicalDevice: VkPhysicalDevice, pPropertyCount: ptr uint32 , pProperties: ptr VkCooperativeMatrixPropertiesNV ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"))
+
+# Load VK_NV_coverage_reduction_mode
+proc loadVK_NV_coverage_reduction_mode*() =
+  vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = cast[proc(physicalDevice: VkPhysicalDevice, pCombinationCount: ptr uint32 , pCombinations: ptr VkFramebufferMixedSamplesCombinationNV ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"))
+
+# Load VK_EXT_full_screen_exclusive
+proc loadVK_EXT_full_screen_exclusive*() =
+  vkGetPhysicalDeviceSurfacePresentModes2EXT = cast[proc(physicalDevice: VkPhysicalDevice, pSurfaceInfo: ptr VkPhysicalDeviceSurfaceInfo2KHR , pPresentModeCount: ptr uint32 , pPresentModes: ptr VkPresentModeKHR ): VkResult {.stdcall.}](vkGetProc("vkGetPhysicalDeviceSurfacePresentModes2EXT"))
+  vkAcquireFullScreenExclusiveModeEXT = cast[proc(device: VkDevice, swapchain: VkSwapchainKHR): VkResult {.stdcall.}](vkGetProc("vkAcquireFullScreenExclusiveModeEXT"))
+  vkReleaseFullScreenExclusiveModeEXT = cast[proc(device: VkDevice, swapchain: VkSwapchainKHR): VkResult {.stdcall.}](vkGetProc("vkReleaseFullScreenExclusiveModeEXT"))
+  vkGetDeviceGroupSurfacePresentModes2EXT = cast[proc(device: VkDevice, pSurfaceInfo: ptr VkPhysicalDeviceSurfaceInfo2KHR , pModes: ptr VkDeviceGroupPresentModeFlagsKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDeviceGroupSurfacePresentModes2EXT"))
+  vkGetDeviceGroupSurfacePresentModes2EXT = cast[proc(device: VkDevice, pSurfaceInfo: ptr VkPhysicalDeviceSurfaceInfo2KHR , pModes: ptr VkDeviceGroupPresentModeFlagsKHR ): VkResult {.stdcall.}](vkGetProc("vkGetDeviceGroupSurfacePresentModes2EXT"))
+
+# Load VK_EXT_headless_surface
+proc loadVK_EXT_headless_surface*() =
+  vkCreateHeadlessSurfaceEXT = cast[proc(instance: VkInstance, pCreateInfo: ptr VkHeadlessSurfaceCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateHeadlessSurfaceEXT"))
+
+# Load VK_EXT_line_rasterization
+proc loadVK_EXT_line_rasterization*() =
+  vkCmdSetLineStippleEXT = cast[proc(commandBuffer: VkCommandBuffer, lineStippleFactor: uint32, lineStipplePattern: uint16): void {.stdcall.}](vkGetProc("vkCmdSetLineStippleEXT"))
+
+# Load VK_EXT_extended_dynamic_state
+proc loadVK_EXT_extended_dynamic_state*() =
+  vkCmdSetCullModeEXT = cast[proc(commandBuffer: VkCommandBuffer, cullMode: VkCullModeFlags): void {.stdcall.}](vkGetProc("vkCmdSetCullModeEXT"))
+  vkCmdSetFrontFaceEXT = cast[proc(commandBuffer: VkCommandBuffer, frontFace: VkFrontFace): void {.stdcall.}](vkGetProc("vkCmdSetFrontFaceEXT"))
+  vkCmdSetPrimitiveTopologyEXT = cast[proc(commandBuffer: VkCommandBuffer, primitiveTopology: VkPrimitiveTopology): void {.stdcall.}](vkGetProc("vkCmdSetPrimitiveTopologyEXT"))
+  vkCmdSetViewportWithCountEXT = cast[proc(commandBuffer: VkCommandBuffer, viewportCount: uint32, pViewports: ptr VkViewport ): void {.stdcall.}](vkGetProc("vkCmdSetViewportWithCountEXT"))
+  vkCmdSetScissorWithCountEXT = cast[proc(commandBuffer: VkCommandBuffer, scissorCount: uint32, pScissors: ptr VkRect2D ): void {.stdcall.}](vkGetProc("vkCmdSetScissorWithCountEXT"))
+  vkCmdBindVertexBuffers2EXT = cast[proc(commandBuffer: VkCommandBuffer, firstBinding: uint32, bindingCount: uint32, pBuffers: ptr VkBuffer , pOffsets: ptr VkDeviceSize , pSizes: ptr VkDeviceSize , pStrides: ptr VkDeviceSize ): void {.stdcall.}](vkGetProc("vkCmdBindVertexBuffers2EXT"))
+  vkCmdSetDepthTestEnableEXT = cast[proc(commandBuffer: VkCommandBuffer, depthTestEnable: VkBool32): void {.stdcall.}](vkGetProc("vkCmdSetDepthTestEnableEXT"))
+  vkCmdSetDepthWriteEnableEXT = cast[proc(commandBuffer: VkCommandBuffer, depthWriteEnable: VkBool32): void {.stdcall.}](vkGetProc("vkCmdSetDepthWriteEnableEXT"))
+  vkCmdSetDepthCompareOpEXT = cast[proc(commandBuffer: VkCommandBuffer, depthCompareOp: VkCompareOp): void {.stdcall.}](vkGetProc("vkCmdSetDepthCompareOpEXT"))
+  vkCmdSetDepthBoundsTestEnableEXT = cast[proc(commandBuffer: VkCommandBuffer, depthBoundsTestEnable: VkBool32): void {.stdcall.}](vkGetProc("vkCmdSetDepthBoundsTestEnableEXT"))
+  vkCmdSetStencilTestEnableEXT = cast[proc(commandBuffer: VkCommandBuffer, stencilTestEnable: VkBool32): void {.stdcall.}](vkGetProc("vkCmdSetStencilTestEnableEXT"))
+  vkCmdSetStencilOpEXT = cast[proc(commandBuffer: VkCommandBuffer, faceMask: VkStencilFaceFlags, failOp: VkStencilOp, passOp: VkStencilOp, depthFailOp: VkStencilOp, compareOp: VkCompareOp): void {.stdcall.}](vkGetProc("vkCmdSetStencilOpEXT"))
+
+# Load VK_KHR_deferred_host_operations
+proc loadVK_KHR_deferred_host_operations*() =
+  vkCreateDeferredOperationKHR = cast[proc(device: VkDevice, pAllocator: ptr VkAllocationCallbacks , pDeferredOperation: ptr VkDeferredOperationKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateDeferredOperationKHR"))
+  vkDestroyDeferredOperationKHR = cast[proc(device: VkDevice, operation: VkDeferredOperationKHR, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyDeferredOperationKHR"))
+  vkGetDeferredOperationMaxConcurrencyKHR = cast[proc(device: VkDevice, operation: VkDeferredOperationKHR): uint32 {.stdcall.}](vkGetProc("vkGetDeferredOperationMaxConcurrencyKHR"))
+  vkGetDeferredOperationResultKHR = cast[proc(device: VkDevice, operation: VkDeferredOperationKHR): VkResult {.stdcall.}](vkGetProc("vkGetDeferredOperationResultKHR"))
+  vkDeferredOperationJoinKHR = cast[proc(device: VkDevice, operation: VkDeferredOperationKHR): VkResult {.stdcall.}](vkGetProc("vkDeferredOperationJoinKHR"))
+
+# Load VK_KHR_pipeline_executable_properties
+proc loadVK_KHR_pipeline_executable_properties*() =
+  vkGetPipelineExecutablePropertiesKHR = cast[proc(device: VkDevice, pPipelineInfo: ptr VkPipelineInfoKHR        , pExecutableCount: ptr uint32 , pProperties: ptr VkPipelineExecutablePropertiesKHR ): VkResult {.stdcall.}](vkGetProc("vkGetPipelineExecutablePropertiesKHR"))
+  vkGetPipelineExecutableStatisticsKHR = cast[proc(device: VkDevice, pExecutableInfo: ptr VkPipelineExecutableInfoKHR  , pStatisticCount: ptr uint32 , pStatistics: ptr VkPipelineExecutableStatisticKHR ): VkResult {.stdcall.}](vkGetProc("vkGetPipelineExecutableStatisticsKHR"))
+  vkGetPipelineExecutableInternalRepresentationsKHR = cast[proc(device: VkDevice, pExecutableInfo: ptr VkPipelineExecutableInfoKHR  , pInternalRepresentationCount: ptr uint32 , pInternalRepresentations: ptr VkPipelineExecutableInternalRepresentationKHR ): VkResult {.stdcall.}](vkGetProc("vkGetPipelineExecutableInternalRepresentationsKHR"))
+
+# Load VK_NV_device_generated_commands
+proc loadVK_NV_device_generated_commands*() =
+  vkGetGeneratedCommandsMemoryRequirementsNV = cast[proc(device: VkDevice, pInfo: ptr VkGeneratedCommandsMemoryRequirementsInfoNV , pMemoryRequirements: ptr VkMemoryRequirements2 ): void {.stdcall.}](vkGetProc("vkGetGeneratedCommandsMemoryRequirementsNV"))
+  vkCmdPreprocessGeneratedCommandsNV = cast[proc(commandBuffer: VkCommandBuffer, pGeneratedCommandsInfo: ptr VkGeneratedCommandsInfoNV ): void {.stdcall.}](vkGetProc("vkCmdPreprocessGeneratedCommandsNV"))
+  vkCmdExecuteGeneratedCommandsNV = cast[proc(commandBuffer: VkCommandBuffer, isPreprocessed: VkBool32, pGeneratedCommandsInfo: ptr VkGeneratedCommandsInfoNV ): void {.stdcall.}](vkGetProc("vkCmdExecuteGeneratedCommandsNV"))
+  vkCmdBindPipelineShaderGroupNV = cast[proc(commandBuffer: VkCommandBuffer, pipelineBindPoint: VkPipelineBindPoint, pipeline: VkPipeline, groupIndex: uint32): void {.stdcall.}](vkGetProc("vkCmdBindPipelineShaderGroupNV"))
+  vkCreateIndirectCommandsLayoutNV = cast[proc(device: VkDevice, pCreateInfo: ptr VkIndirectCommandsLayoutCreateInfoNV , pAllocator: ptr VkAllocationCallbacks , pIndirectCommandsLayout: ptr VkIndirectCommandsLayoutNV ): VkResult {.stdcall.}](vkGetProc("vkCreateIndirectCommandsLayoutNV"))
+  vkDestroyIndirectCommandsLayoutNV = cast[proc(device: VkDevice, indirectCommandsLayout: VkIndirectCommandsLayoutNV, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyIndirectCommandsLayoutNV"))
+
+# Load VK_EXT_private_data
+proc loadVK_EXT_private_data*() =
+  vkCreatePrivateDataSlotEXT = cast[proc(device: VkDevice, pCreateInfo: ptr VkPrivateDataSlotCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pPrivateDataSlot: ptr VkPrivateDataSlotEXT ): VkResult {.stdcall.}](vkGetProc("vkCreatePrivateDataSlotEXT"))
+  vkDestroyPrivateDataSlotEXT = cast[proc(device: VkDevice, privateDataSlot: VkPrivateDataSlotEXT, pAllocator: ptr VkAllocationCallbacks ): void {.stdcall.}](vkGetProc("vkDestroyPrivateDataSlotEXT"))
+  vkSetPrivateDataEXT = cast[proc(device: VkDevice, objectType: VkObjectType, objectHandle: uint64, privateDataSlot: VkPrivateDataSlotEXT, data: uint64): VkResult {.stdcall.}](vkGetProc("vkSetPrivateDataEXT"))
+  vkGetPrivateDataEXT = cast[proc(device: VkDevice, objectType: VkObjectType, objectHandle: uint64, privateDataSlot: VkPrivateDataSlotEXT, pData: ptr uint64 ): void {.stdcall.}](vkGetProc("vkGetPrivateDataEXT"))
+
+# Load VK_EXT_directfb_surface
+proc loadVK_EXT_directfb_surface*() =
+  vkCreateDirectFBSurfaceEXT = cast[proc(instance: VkInstance, pCreateInfo: ptr VkDirectFBSurfaceCreateInfoEXT , pAllocator: ptr VkAllocationCallbacks , pSurface: ptr VkSurfaceKHR ): VkResult {.stdcall.}](vkGetProc("vkCreateDirectFBSurfaceEXT"))
+  vkGetPhysicalDeviceDirectFBPresentationSupportEXT = cast[proc(physicalDevice: VkPhysicalDevice, queueFamilyIndex: uint32, dfb: ptr IDirectFB ): VkBool32 {.stdcall.}](vkGetProc("vkGetPhysicalDeviceDirectFBPresentationSupportEXT"))
+
+proc vkInit*(load1_0: bool = true, load1_1: bool = true): bool =
+  if load1_0:
+    vkLoad1_0()
+  when not defined(macosx):
+    if load1_1:
+      vkLoad1_1()
+  return true
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/vulkan_helpers.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,259 @@
+import std/tables
+import std/strutils
+import std/strformat
+import std/logging
+
+import ./glslang/glslang
+import ./vulkan
+import ./window
+
+when defined(release):
+  const ENABLEVULKANVALIDATIONLAYERS* = false
+else:
+  const ENABLEVULKANVALIDATIONLAYERS* = true
+
+
+template checkVkResult*(call: untyped) =
+  when defined(release):
+    discard call
+  else:
+    debug(&"CALLING vulkan: {astToStr(call)}")
+    let value = call
+    if value != VK_SUCCESS:
+      raise newException(Exception, "Vulkan error: " & astToStr(call) & " returned " & $value)
+
+func addrOrNil[T](obj: var openArray[T]): ptr T =
+  if obj.len > 0: addr(obj[0]) else: nil
+
+proc VK_MAKE_API_VERSION*(variant: uint32, major: uint32, minor: uint32, patch: uint32): uint32 {.compileTime.} =
+  (variant shl 29) or (major shl 22) or (minor shl 12) or patch
+
+
+proc filterForSurfaceFormat*(formats: seq[VkSurfaceFormatKHR]): seq[VkSurfaceFormatKHR] =
+  for format in formats:
+    if format.format == VK_FORMAT_B8G8R8A8_SRGB and format.colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:
+      result.add(format)
+
+proc getSuitableSurfaceFormat*(formats: seq[VkSurfaceFormatKHR]): VkSurfaceFormatKHR =
+  let usableSurfaceFormats = filterForSurfaceFormat(formats)
+  if len(usableSurfaceFormats) == 0:
+    raise newException(Exception, "No suitable surface formats found")
+  return usableSurfaceFormats[0]
+
+
+proc cleanString*(str: openArray[char]): string =
+  for i in 0 ..< len(str):
+    if str[i] == char(0):
+      result = join(str[0 ..< i])
+      break
+
+proc getInstanceExtensions*(): seq[string] =
+  var extensionCount: uint32
+  checkVkResult vkEnumerateInstanceExtensionProperties(nil, addr(extensionCount), nil)
+  var extensions = newSeq[VkExtensionProperties](extensionCount)
+  checkVkResult vkEnumerateInstanceExtensionProperties(nil, addr(extensionCount), addrOrNil(extensions))
+
+  for extension in extensions:
+    result.add(cleanString(extension.extensionName))
+
+
+proc getDeviceExtensions*(device: VkPhysicalDevice): seq[string] =
+  var extensionCount: uint32
+  checkVkResult vkEnumerateDeviceExtensionProperties(device, nil, addr(extensionCount), nil)
+  var extensions = newSeq[VkExtensionProperties](extensionCount)
+  checkVkResult vkEnumerateDeviceExtensionProperties(device, nil, addr(extensionCount), addrOrNil(extensions))
+
+  for extension in extensions:
+    result.add(cleanString(extension.extensionName))
+
+
+proc getValidationLayers*(): seq[string] =
+  var n_layers: uint32
+  checkVkResult vkEnumerateInstanceLayerProperties(addr(n_layers), nil)
+  var layers = newSeq[VkLayerProperties](n_layers)
+  checkVkResult vkEnumerateInstanceLayerProperties(addr(n_layers), addrOrNil(layers))
+
+  for layer in layers:
+    result.add(cleanString(layer.layerName))
+
+
+proc getVulkanPhysicalDevices*(instance: VkInstance): seq[VkPhysicalDevice] =
+  var n_devices: uint32
+  checkVkResult vkEnumeratePhysicalDevices(instance, addr(n_devices), nil)
+  result = newSeq[VkPhysicalDevice](n_devices)
+  checkVkResult vkEnumeratePhysicalDevices(instance, addr(n_devices), addrOrNil(result))
+
+
+proc getQueueFamilies*(device: VkPhysicalDevice): seq[VkQueueFamilyProperties] =
+  var n_queuefamilies: uint32
+  vkGetPhysicalDeviceQueueFamilyProperties(device, addr(n_queuefamilies), nil)
+  result = newSeq[VkQueueFamilyProperties](n_queuefamilies)
+  vkGetPhysicalDeviceQueueFamilyProperties(device, addr(n_queuefamilies), addrOrNil(result))
+
+
+proc getDeviceSurfaceFormats*(device: VkPhysicalDevice, surface: VkSurfaceKHR): seq[VkSurfaceFormatKHR] =
+  var n_formats: uint32
+  checkVkResult vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, addr(n_formats), nil);
+  result = newSeq[VkSurfaceFormatKHR](n_formats)
+  checkVkResult vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, addr(n_formats), addrOrNil(result))
+
+
+proc getDeviceSurfacePresentModes*(device: VkPhysicalDevice, surface: VkSurfaceKHR): seq[VkPresentModeKHR] =
+  var n_modes: uint32
+  checkVkResult vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, addr(n_modes), nil);
+  result = newSeq[VkPresentModeKHR](n_modes)
+  checkVkResult vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, addr(n_modes), addrOrNil(result))
+
+
+proc getSwapChainImages*(device: VkDevice, swapChain: VkSwapchainKHR): seq[VkImage] =
+  var n_images: uint32
+  checkVkResult vkGetSwapchainImagesKHR(device, swapChain, addr(n_images), nil);
+  result = newSeq[VkImage](n_images)
+  checkVkResult vkGetSwapchainImagesKHR(device, swapChain, addr(n_images), addrOrNil(result));
+
+
+proc getPresentMode*(modes: seq[VkPresentModeKHR]): VkPresentModeKHR =
+  let preferredModes = [
+    VK_PRESENT_MODE_MAILBOX_KHR, # triple buffering
+    VK_PRESENT_MODE_FIFO_RELAXED_KHR, # double duffering
+    VK_PRESENT_MODE_FIFO_KHR, # double duffering
+    VK_PRESENT_MODE_IMMEDIATE_KHR, # single buffering
+  ]
+  for preferredMode in preferredModes:
+    for mode in modes:
+      if preferredMode == mode:
+        return mode
+  # should never be reached, but seems to be garuanteed by vulkan specs to always be available
+  return VK_PRESENT_MODE_FIFO_KHR
+
+
+proc createVulkanInstance*(vulkanVersion: uint32): VkInstance =
+  var requiredExtensions = [
+    "VK_EXT_acquire_xlib_display".cstring,
+    "VK_EXT_direct_mode_display".cstring,
+    "VK_KHR_display".cstring,
+    "VK_KHR_surface".cstring,
+    "VK_KHR_xlib_surface".cstring,
+    "VK_EXT_debug_utils".cstring,
+  ]
+  let availableExtensions = getInstanceExtensions()
+  for extension in requiredExtensions:
+    assert $extension in availableExtensions
+
+  let desiredLayers = ["VK_LAYER_KHRONOS_validation".cstring, "VK_LAYER_MESA_overlay".cstring]
+  let availableLayers = getValidationLayers()
+  var usableLayers = newSeq[cstring]()
+
+  when ENABLEVULKANVALIDATIONLAYERS:
+    for layer in desiredLayers:
+      if $layer in availableLayers:
+        usableLayers.add(layer)
+
+  echo "Available validation layers: ", availableLayers
+  echo "Using validation layers: ", usableLayers
+  echo "Available extensions: ", availableExtensions
+  echo "Using extensions: ", requiredExtensions
+
+  var appinfo = VkApplicationInfo(
+    sType: VK_STRUCTURE_TYPE_APPLICATION_INFO,
+    pApplicationName: "Hello Triangle",
+    pEngineName: "Custom engine",
+    apiVersion: vulkanVersion,
+  )
+  var createinfo = VkInstanceCreateInfo(
+    sType: VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
+    pApplicationInfo: addr(appinfo),
+    enabledLayerCount: usableLayers.len.uint32,
+    ppEnabledLayerNames: cast[ptr UncheckedArray[cstring]](addrOrNil(usableLayers)),
+    enabledExtensionCount: requiredExtensions.len.uint32,
+    ppEnabledExtensionNames: cast[ptr UncheckedArray[cstring]](addr(requiredExtensions))
+  )
+  checkVkResult vkCreateInstance(addr(createinfo), nil, addr(result))
+
+  loadVK_KHR_surface()
+  loadVK_KHR_xlib_surface()
+  loadVK_KHR_swapchain()
+  when ENABLEVULKANVALIDATIONLAYERS:
+    loadVK_EXT_debug_utils(result)
+
+
+proc getVulcanDevice*(
+  physicalDevice: var VkPhysicalDevice,
+  features: var VkPhysicalDeviceFeatures,
+  graphicsQueueFamily: uint32,
+  presentationQueueFamily: uint32,
+): (VkDevice, VkQueue, VkQueue) =
+  # setup queue and device
+  # TODO: need check this, possibly wrong logic, see Vulkan tutorial
+  var priority = 1.0'f32
+  var queueCreateInfo = [
+    VkDeviceQueueCreateInfo(
+      sType: VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
+      queueFamilyIndex: graphicsQueueFamily,
+      queueCount: 1,
+      pQueuePriorities: addr(priority),
+    ),
+  ]
+
+  var requiredExtensions = ["VK_KHR_swapchain".cstring]
+  var deviceCreateInfo = VkDeviceCreateInfo(
+    sType: VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
+    queueCreateInfoCount: uint32(queueCreateInfo.len),
+    pQueueCreateInfos: addrOrNil(queueCreateInfo),
+    pEnabledFeatures: addr(features),
+    enabledExtensionCount: requiredExtensions.len.uint32,
+    ppEnabledExtensionNames: cast[ptr UncheckedArray[cstring]](addr(requiredExtensions))
+  )
+  checkVkResult vkCreateDevice(physicalDevice, addr(deviceCreateInfo), nil, addr(result[0]))
+  vkGetDeviceQueue(result[0], graphicsQueueFamily, 0'u32, addr(result[1]));
+  vkGetDeviceQueue(result[0], presentationQueueFamily, 0'u32, addr(result[2]));
+
+proc createShaderStage*(device: VkDevice, stage: VkShaderStageFlagBits, shader: string): VkPipelineShaderStageCreateInfo =
+  const VK_GLSL_MAP = {
+    VK_SHADER_STAGE_VERTEX_BIT: GLSLANG_STAGE_VERTEX,
+    VK_SHADER_STAGE_FRAGMENT_BIT: GLSLANG_STAGE_FRAGMENT,
+  }.toTable()
+  var code = compileGLSLToSPIRV(VK_GLSL_MAP[stage], shader, "<memory-shader>")
+  var createInfo = VkShaderModuleCreateInfo(
+    sType: VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
+    codeSize: uint(code.len * sizeof(uint32)),
+    pCode: addrOrNil(code),
+  )
+  var shaderModule: VkShaderModule
+  checkVkResult vkCreateShaderModule(device, addr(createInfo), nil, addr(shaderModule))
+
+  return VkPipelineShaderStageCreateInfo(
+    sType: VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+    stage: stage,
+    module: shaderModule,
+    pName: "main", # entry point for shader
+  )
+
+proc debugCallback*(
+  messageSeverity: VkDebugUtilsMessageSeverityFlagBitsEXT,
+  messageTypes: VkDebugUtilsMessageTypeFlagsEXT,
+  pCallbackData: VkDebugUtilsMessengerCallbackDataEXT,
+  userData: pointer
+): VkBool32 {.cdecl.} =
+  echo &"{messageSeverity}: {VkDebugUtilsMessageTypeFlagBitsEXT(messageTypes)}: {pCallbackData.pMessage}"
+  return VK_FALSE
+
+proc getSurfaceCapabilities*(device: VkPhysicalDevice, surface: VkSurfaceKHR): VkSurfaceCapabilitiesKHR =
+    checkVkResult device.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(surface, addr(result))
+
+when defined(linux):
+  proc createVulkanSurface*(instance: VkInstance, window: NativeWindow): VkSurfaceKHR =
+    var surfaceCreateInfo = VkXlibSurfaceCreateInfoKHR(
+      sType: VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
+      dpy: window.display,
+      window: window.window,
+    )
+    checkVkResult vkCreateXlibSurfaceKHR(instance, addr(surfaceCreateInfo), nil, addr(result))
+when defined(windows):
+  proc createVulkanSurface*(instance: VkInstance, window: NativeWindow): VkSurfaceKHR =
+    var surfaceCreateInfo = VkWin32SurfaceCreateInfoKHR(
+      sType: VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
+      hinstance: window.hinstance,
+      hwnd: window.hwnd,
+    )
+    checkVkResult vkCreateWin32SurfaceKHR(instance, addr(surfaceCreateInfo), nil, addr(result))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/window.nim	Thu Dec 22 19:33:00 2022 +0700
@@ -0,0 +1,6 @@
+when defined(linux):
+  import ./platform/linux/xlib
+  export xlib
+elif defined(windows):
+  import ./platform/windows/win32
+  export win32