diff --git a/vulkan/api/vulkan.api b/vulkan/api/vulkan.api
index 2b499fd..7844f63 100644
--- a/vulkan/api/vulkan.api
+++ b/vulkan/api/vulkan.api
@@ -27,7 +27,7 @@
 
 // API version (major.minor.patch)
 define VERSION_MAJOR 0
-define VERSION_MINOR 177
+define VERSION_MINOR 179
 define VERSION_PATCH 0
 
 // API limits
@@ -621,7 +621,8 @@
     VK_ERROR_MEMORY_MAP_FAILED                              = 0xFFFFFFFB,
     VK_ERROR_LAYER_NOT_PRESENT                              = 0xFFFFFFFA,
     VK_ERROR_EXTENSION_NOT_PRESENT                          = 0xFFFFFFF9,
-    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF8,
+    VK_ERROR_FEATURE_NOT_PRESENT                            = 0xFFFFFFF8,
+    VK_ERROR_INCOMPATIBLE_DRIVER                            = 0xFFFFFFF7,
 }
 
 enum VkDynamicState {
@@ -2157,18 +2158,16 @@
     return ?
 }
 
-cmd VkResult vkGetPhysicalDeviceProperties(
+cmd void vkGetPhysicalDeviceProperties(
         VkPhysicalDevice                            physicalDevice,
         VkPhysicalDeviceProperties*                 pProperties) {
     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
 
     properties := ?
     pProperties[0] = properties
-
-    return ?
 }
 
-cmd VkResult vkGetPhysicalDeviceQueueFamilyProperties(
+cmd void vkGetPhysicalDeviceQueueFamilyProperties(
         VkPhysicalDevice                            physicalDevice,
         u32*                                        pCount,
         VkQueueFamilyProperties*                    pQueueFamilyProperties) {
@@ -2187,32 +2186,27 @@
     //     count := ?
     //     pCount[0] = count
     // }
-    return ?
 }
 
-cmd VkResult vkGetPhysicalDeviceMemoryProperties(
+cmd void vkGetPhysicalDeviceMemoryProperties(
         VkPhysicalDevice                            physicalDevice,
         VkPhysicalDeviceMemoryProperties*           pMemoryProperties) {
     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
 
     memoryProperties := ?
     pMemoryProperties[0] = memoryProperties
-
-    return ?
 }
 
-cmd VkResult vkGetPhysicalDeviceFeatures(
+cmd void vkGetPhysicalDeviceFeatures(
         VkPhysicalDevice                            physicalDevice,
         VkPhysicalDeviceFeatures*                   pFeatures) {
     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
 
     features := ?
     pFeatures[0] = features
-
-    return ?
 }
 
-cmd VkResult vkGetPhysicalDeviceFormatProperties(
+cmd void vkGetPhysicalDeviceFormatProperties(
         VkPhysicalDevice                            physicalDevice,
         VkFormat                                    format,
         VkFormatProperties*                         pFormatProperties) {
@@ -2220,11 +2214,9 @@
 
     formatProperties := ?
     pFormatProperties[0] = formatProperties
-
-    return ?
 }
 
-cmd VkResult vkGetPhysicalDeviceImageFormatProperties(
+cmd void vkGetPhysicalDeviceImageFormatProperties(
         VkPhysicalDevice                            physicalDevice,
         VkFormat                                    format,
         VkImageType                                 type,
@@ -2236,8 +2228,6 @@
 
     imageFormatProperties := ?
     pImageFormatProperties[0] = imageFormatProperties
-
-    return ?
 }
 
 
@@ -2340,7 +2330,7 @@
 // Queue functions
 
 @threadSafety("system")
-cmd VkResult vkGetDeviceQueue(
+cmd void vkGetDeviceQueue(
         VkDevice                                    device,
         u32                                         queueFamilyIndex,
         u32                                         queueIndex,
@@ -2353,8 +2343,6 @@
     if !(queue in State.Queues) {
         State.Queues[queue] = new!QueueObject(device: device)
     }
-
-    return ?
 }
 
 @threadSafety("app")
@@ -2499,7 +2487,7 @@
 
 // Memory management API functions
 
-cmd VkResult vkGetDeviceMemoryCommitment(
+cmd void vkGetDeviceMemoryCommitment(
         VkDevice                                    device,
         VkDeviceMemory                              memory,
         VkDeviceSize*                               pCommittedMemoryInBytes) {
@@ -2512,19 +2500,15 @@
 
     committedMemoryInBytes := ?
     pCommittedMemoryInBytes[0] = committedMemoryInBytes
-
-    return ?
 }
 
-cmd VkResult vkGetBufferMemoryRequirements(
+cmd void vkGetBufferMemoryRequirements(
         VkDevice                                    device,
         VkBuffer                                    buffer,
         VkMemoryRequirements*                       pMemoryRequirements) {
     deviceObject := GetDevice(device)
     bufferObject := GetBuffer(buffer)
     assert(bufferObject.device == device)
-
-    return ?
 }
 
 cmd VkResult vkBindBufferMemory(
@@ -2554,15 +2538,13 @@
     return ?
 }
 
-cmd VkResult vkGetImageMemoryRequirements(
+cmd void vkGetImageMemoryRequirements(
         VkDevice                                    device,
         VkImage                                     image,
         VkMemoryRequirements*                       pMemoryRequirements) {
     deviceObject := GetDevice(device)
     imageObject := GetImage(image)
     assert(imageObject.device == device)
-
-    return ?
 }
 
 cmd VkResult vkBindImageMemory(
@@ -2592,7 +2574,7 @@
     return ?
 }
 
-cmd VkResult vkGetImageSparseMemoryRequirements(
+cmd void vkGetImageSparseMemoryRequirements(
         VkDevice                                    device,
         VkImage                                     image,
         u32*                                        pNumRequirements,
@@ -2600,11 +2582,9 @@
     deviceObject := GetDevice(device)
     imageObject := GetImage(image)
     assert(imageObject.device == device)
-
-    return ?
 }
 
-cmd VkResult vkGetPhysicalDeviceSparseImageFormatProperties(
+cmd void vkGetPhysicalDeviceSparseImageFormatProperties(
         VkPhysicalDevice                            physicalDevice,
         VkFormat                                    format,
         VkImageType                                 type,
@@ -2614,8 +2594,6 @@
         u32*                                        pNumProperties,
         VkSparseImageFormatProperties*              pProperties) {
     physicalDeviceObject := GetPhysicalDevice(physicalDevice)
-
-    return ?
 }
 
 cmd VkResult vkQueueBindSparseBufferMemory(
@@ -2985,7 +2963,7 @@
     State.Images[image] = null
 }
 
-cmd VkResult vkGetImageSubresourceLayout(
+cmd void vkGetImageSubresourceLayout(
         VkDevice                                    device,
         VkImage                                     image,
         const VkImageSubresource*                   pSubresource,
@@ -2993,8 +2971,6 @@
     deviceObject := GetDevice(device)
     imageObject := GetImage(image)
     assert(imageObject.device == device)
-
-    return ?
 }
 
 
@@ -3122,6 +3098,7 @@
 cmd VkResult vkGetPipelineCacheData(
         VkDevice                                    device,
         VkPipelineCache                             pipelineCache,
+        platform.size_t                             dataSize,
         void*                                       pData) {
     deviceObject := GetDevice(device)
     pipelineCacheObject := GetPipelineCache(pipelineCache)
@@ -3458,7 +3435,7 @@
     State.RenderPasses[renderPass] = null
 }
 
-cmd VkResult vkGetRenderAreaGranularity(
+cmd void vkGetRenderAreaGranularity(
         VkDevice                                    device,
         VkRenderPass                                renderPass,
         VkExtent2D*                                 pGranularity) {
@@ -3467,8 +3444,6 @@
 
     granularity := ?
     pGranularity[0] = granularity
-
-    return ?
 }
 
 // Command pool functions
