[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

vulkan: Changes to 'upstream-unstable'



Rebased ref, commits from common ancestor:
commit 77f8fc721521bc562c7cb385d3ea6e87b5d9e0a9
Author: Mark Young <marky@lunarg.com>
Date:   Mon Nov 21 16:20:06 2016 -0700

    loader: Fix debug report memory leaks
    
    Found a couple of memory leaks in the debug report code in the loader
    while testing out allocators in cube.
    
    Change-Id: I56b401394ca43bd8eb9b4f85baa52dfa597a6f49

diff --git a/loader/debug_report.c b/loader/debug_report.c
index 8ad4102..a54314a 100644
--- a/loader/debug_report.c
+++ b/loader/debug_report.c
@@ -215,14 +215,18 @@ VkResult util_CopyDebugReportCreateInfos(
             ((VkDebugReportCallbackEXT *)pAllocator->pfnAllocation(
                 pAllocator->pUserData, n * sizeof(VkDebugReportCallbackEXT),
                 sizeof(void *), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
+        if (!pCallbacks) {
+            pAllocator->pfnFree(pAllocator->pUserData, pInfos);
+            return VK_ERROR_OUT_OF_HOST_MEMORY;
+        }
     } else {
 #endif
         pCallbacks = *callbacks = ((VkDebugReportCallbackEXT *)malloc(
             n * sizeof(VkDebugReportCallbackEXT)));
-    }
-    if (!pCallbacks) {
-        free(pInfos);
-        return VK_ERROR_OUT_OF_HOST_MEMORY;
+        if (!pCallbacks) {
+            free(pInfos);
+            return VK_ERROR_OUT_OF_HOST_MEMORY;
+        }
     }
     // 4th, copy each VkDebugReportCallbackCreateInfoEXT for use by
     // vkDestroyInstance, and assign a unique handle to each callback (just
@@ -244,8 +248,17 @@ VkResult util_CopyDebugReportCreateInfos(
 void util_FreeDebugReportCreateInfos(const VkAllocationCallbacks *pAllocator,
                                      VkDebugReportCallbackCreateInfoEXT *infos,
                                      VkDebugReportCallbackEXT *callbacks) {
-    free(infos);
-    free(callbacks);
+#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
+                                         {
+#else
+    if (pAllocator != NULL) {
+         pAllocator->pfnFree(pAllocator->pUserData, infos);
+         pAllocator->pfnFree(pAllocator->pUserData, callbacks);
+    } else {
+#endif
+        free(infos);
+        free(callbacks);
+    }
 }
 
 VkResult util_CreateDebugReportCallbacks(
@@ -450,6 +463,16 @@ VKAPI_ATTR void VKAPI_CALL terminator_DestroyDebugReportCallback(
         }
         storage_idx++;
     }
+
+#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
+    {
+#else
+    if (pAllocator != NULL) {
+        pAllocator->pfnFree(pAllocator->pUserData, icd_info);
+    } else {
+#endif
+        free(icd_info);
+    }
 }
 
 /*

commit 8215e0d6c5c0ddd13a7ddc3d8f5965ed92fe0e24
Author: Mark Young <marky@lunarg.com>
Date:   Tue Nov 22 08:44:21 2016 -0700

    docs: Fix loader doc mention of linux dirs
    
    The Linux "Properly-Installed ICDs" section wasn't coming across
    into HTML properly.
    
    Change-Id: I2538b3c027c88ad5923d23f554bba1734c60ec06

diff --git a/loader/LoaderAndLayerInterface.md b/loader/LoaderAndLayerInterface.md
index 104eccc..c3492d3 100644
--- a/loader/LoaderAndLayerInterface.md
+++ b/loader/LoaderAndLayerInterface.md
@@ -464,11 +464,13 @@ Notice the semi-colon between "C:\\Windows\\System32\\vendorc\_icd.json" and
 In order to find properly-installed ICDs, the Vulkan loader will scan the files
 in the following Linux directories:
 
+```
     /usr/local/etc/vulkan/icd.d
     /usr/local/share/vulkan/icd.d
     /etc/vulkan/icd.d
     /usr/share/vulkan/icd.d
     $HOME/.local/share/vulkan/icd.d
+```
 
 The "/usr/local/*" directories can be configured to be other directories at build time.
 

commit 3fb0832efefc683ab475875a46390d5cbd213901
Author: Tony Barbour <tony@LunarG.com>
Date:   Mon Nov 21 12:56:25 2016 -0700

    demos: Set attachment description flag bits in cube
    
    Fixes a cubepp crash running on AMD
    
    Change-Id: Ie8ef8625a2e8a8a416bcbfe4a62871fef5e07f71

diff --git a/demos/cube.c b/demos/cube.c
index fb8b7c1..0cd7e0f 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -1549,6 +1549,7 @@ static void demo_prepare_render_pass(struct demo *demo) {
             [0] =
                 {
                  .format = demo->format,
+                 .flags = 0,
                  .samples = VK_SAMPLE_COUNT_1_BIT,
                  .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
                  .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
@@ -1560,6 +1561,7 @@ static void demo_prepare_render_pass(struct demo *demo) {
             [1] =
                 {
                  .format = demo->depth.format,
+                 .flags = 0,
                  .samples = VK_SAMPLE_COUNT_1_BIT,
                  .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
                  .storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
@@ -1593,6 +1595,7 @@ static void demo_prepare_render_pass(struct demo *demo) {
     const VkRenderPassCreateInfo rp_info = {
         .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
         .pNext = NULL,
+        .flags = 0,
         .attachmentCount = 2,
         .pAttachments = attachments,
         .subpassCount = 1,
diff --git a/demos/cube.cpp b/demos/cube.cpp
index e91b0c3..4c6acd3 100644
--- a/demos/cube.cpp
+++ b/demos/cube.cpp
@@ -1742,7 +1742,6 @@ struct Demo {
         // the renderpass, no barriers are necessary.
         const vk::AttachmentDescription attachments[2] = {
             vk::AttachmentDescription()
-                .setFlags(vk::AttachmentDescriptionFlagBits::eMayAlias)
                 .setFormat(format)
                 .setSamples(vk::SampleCountFlagBits::e1)
                 .setLoadOp(vk::AttachmentLoadOp::eClear)
@@ -1752,7 +1751,6 @@ struct Demo {
                 .setInitialLayout(vk::ImageLayout::eUndefined)
                 .setFinalLayout(vk::ImageLayout::ePresentSrcKHR),
             vk::AttachmentDescription()
-                .setFlags(vk::AttachmentDescriptionFlagBits::eMayAlias)
                 .setFormat(depth.format)
                 .setSamples(vk::SampleCountFlagBits::e1)
                 .setLoadOp(vk::AttachmentLoadOp::eClear)

commit 11259fc3c7ba493d7041f047f19d7ce39d7c379f
Author: David Pinedo <david@lunarg.com>
Date:   Thu Nov 17 15:03:16 2016 -0700

    codegen: change script to handle NV ext structs
    
    Modified vk_helper.py to handle NV-specific structures

diff --git a/vk_helper.py b/vk_helper.py
index 6d29063..9412650 100755
--- a/vk_helper.py
+++ b/vk_helper.py
@@ -377,8 +377,6 @@ def recreate_structs():
 def get_struct_name_from_struct_type(struct_type):
     # Note: All struct types are now camel-case
     # Debug Report has an inconsistency - so need special case.
-    if ("VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT" == struct_type):
-        return "VkDebugReportCallbackCreateInfoEXT"
     caps_struct_name = struct_type.replace("_STRUCTURE_TYPE", "")
     char_idx = 0
     struct_name = ''
@@ -391,6 +389,12 @@ def get_struct_name_from_struct_type(struct_type):
             struct_name += caps_struct_name[char_idx].lower()
         char_idx += 1
 
+    # Vendor extension structs ending in vendor TLA need to be uppercase.
+    if (caps_struct_name[-2:] == "NV"):
+        struct_name = struct_name[:-2] + caps_struct_name[-2:]
+    if ((caps_struct_name[-3:] == "AMD") or (caps_struct_name[-3:] == "IMG") or (caps_struct_name[-3:] == "EXT")):
+        struct_name = struct_name[:-3] + caps_struct_name[-3:]
+
     return struct_name
 
 # Emit an ifdef if incoming func matches a platform identifier
@@ -1163,12 +1167,16 @@ class StructWrapperGen:
                     struct_name = get_struct_name_from_struct_type(v)
                     if struct_name not in self.struct_dict:
                         continue
+                    if 'WIN32' in v:
+                        sh_funcs.append("#ifdef VK_USE_PLATFORM_WIN32_KHR")
                     print_func_name = self._get_sh_func_name(struct_name)
                     #sh_funcs.append('string %s(const %s* pStruct, const string prefix);' % (self._get_sh_func_name(s), typedef_fwd_dict[s]))
                     sh_funcs.append('        case %s:\n        {' % (v))
                     sh_funcs.append('            return %s((%s*)pStruct, indent);' % (print_func_name, struct_name))
                     sh_funcs.append('        }')
                     sh_funcs.append('        break;')
+                    if 'WIN32' in v:
+                        sh_funcs.append("#endif // VK_USE_PLATFORM_WIN32_KHR")
                 sh_funcs.append("        default:")
                 sh_funcs.append("        return string();")
         sh_funcs.append('%s' % lineinfo.get())
@@ -1418,7 +1426,7 @@ class StructWrapperGen:
                             sh_funcs.append('%s}' % (indent))
                         else:
                             sh_funcs.append('%sstructSize += pStruct->%s*sizeof(%s);' % (indent, self.struct_dict[s][m]['array_size'], self.struct_dict[s][m]['type']))
-                elif self.struct_dict[s][m]['ptr'] and 'pNext' != self.struct_dict[s][m]['name']:
+                elif self.struct_dict[s][m]['ptr'] and 'pNext' != self.struct_dict[s][m]['name'] and 'dpy' != self.struct_dict[s][m]['name']:
                     if 'char' in self.struct_dict[s][m]['type'].lower():
                         sh_funcs.append('%sstructSize += (pStruct->%s != NULL) ? sizeof(%s)*(1+strlen(pStruct->%s)) : 0;' % (indent, self.struct_dict[s][m]['name'], self.struct_dict[s][m]['type'], self.struct_dict[s][m]['name']))
                     elif is_type(self.struct_dict[s][m]['type'], 'struct'):
@@ -1460,6 +1468,8 @@ class StructWrapperGen:
                             if struct_name not in self.struct_dict:
                                 continue
 
+                            if 'WIN32' in v:
+                                sh_funcs.append("#ifdef VK_USE_PLATFORM_WIN32_KHR")
                             sh_funcs.append('%scase %s:' % (indent, v))
                             sh_funcs.append('%s{' % (indent))
                             indent += '    '
@@ -1467,6 +1477,8 @@ class StructWrapperGen:
                             sh_funcs.append('%sbreak;' % (indent))
                             indent = indent[:-4]
                             sh_funcs.append('%s}' % (indent))
+                            if 'WIN32' in v:
+                                sh_funcs.append("#endif // VK_USE_PLATFORM_WIN32_KHR")
                         sh_funcs.append('%sdefault:' % (indent))
                         indent += '    '
                         sh_funcs.append('%sassert(0);' % (indent))

commit 07467d23d3233ff1ea7efc702d0e9ebfc72f379c
Author: Mark Lobodzinski <mark@lunarg.com>
Date:   Thu Nov 17 10:20:12 2016 -0700

    Revert "layers: Update vulkan.py with new extensions"
    
    This reverts commit f504ff6e45bb15a0517a8de2e2d75e90df7e4627.
    This caused huge issues in the VulkanTools repo, reverting for
    now.

diff --git a/vulkan.py b/vulkan.py
index a42ca3b..9000765 100644
--- a/vulkan.py
+++ b/vulkan.py
@@ -1,8 +1,9 @@
-"""Vulkan API description"""
-# See vulkan_api_generator.py for modifications
+" ""VK API description"""
 
 # Copyright (c) 2015-2016 The Khronos Group Inc.
-# Copyright (c) 2015-2016 Valve Corporation# Copyright (c) 2015-2016 LunarG, Inc.# Copyright (c) 2015-2016 Google Inc.
+# Copyright (c) 2015-2016 Valve Corporation
+# Copyright (c) 2015-2016 LunarG, Inc.
+# Copyright (c) 2015-2016 Google Inc.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -22,11 +23,9 @@
 # Author: Tobin Ehlis <tobin@lunarg.com>
 # Author: Tony Barbour <tony@LunarG.com>
 # Author: Gwan-gyeong Mun <kk.moon@samsung.com>
-# Author: Mark Lobodzinski <mark@lunarg.com>
-#
 
 class Param(object):
-    """Function parameter"""
+    """A function parameter."""
 
     def __init__(self, ty, name):
         self.ty = ty
@@ -42,11 +41,33 @@ class Param(object):
         else:
             return "%s %s" % (self.ty, self.name)
 
+    def indirection_level(self):
+        """Return the level of indirection."""
+        return self.ty.count("*") + self.ty.count("[")
+
+    def dereferenced_type(self, level=0):
+        """Return the type after dereferencing."""
+        if not level:
+            level = self.indirection_level()
+
+        deref = self.ty if level else ""
+        while level > 0:
+            idx = deref.rfind("[")
+            if idx < 0:
+                idx = deref.rfind("*")
+            if idx < 0:
+                deref = ""
+                break
+            deref = deref[:idx]
+            level -= 1;
+
+        return deref.rstrip()
+
 class Proto(object):
-    """Function prototype"""
+    """A function prototype."""
 
     def __init__(self, ret, name, params=[]):
-        # Prototype has only a param
+        # the proto has only a param
         if not isinstance(params, list):
             params = [params]
 
@@ -89,11 +110,13 @@ class Proto(object):
             idx = param.ty.find("[")
             if idx < 0:
                 idx = len(param.ty)
+
             pad = 44 - idx
             if pad <= 0:
                 pad = 1
 
-            plist.append("    %s%s%s%s" % (param.ty[:idx], " " * pad, param.name, param.ty[idx:]))
+            plist.append("    %s%s%s%s" % (param.ty[:idx],
+                " " * pad, param.name, param.ty[idx:]))
 
         return "%s%s %s%s(\n%s)" % (
                 attr + "_ATTR " if attr else "",
@@ -114,13 +137,19 @@ class Proto(object):
         """Return the params that are simple VK objects and are inputs."""
         return [param for param in self.params if param.ty in objects]
 
+    def object_out_params(self):
+        """Return the params that are simple VK objects and are outputs."""
+        return [param for param in self.params
+                if param.dereferenced_type() in objects]
+
     def __repr__(self):
         param_strs = []
         for param in self.params:
             param_strs.append(str(param))
         param_str = "    [%s]" % (",\n     ".join(param_strs))
 
-        return "Proto(\"%s\", \"%s\",\n%s)" % (self.ret, self.name, param_str)
+        return "Proto(\"%s\", \"%s\",\n%s)" % \
+                (self.ret, self.name, param_str)
 
 class Extension(object):
     def __init__(self, name, headers, objects, protos, ifdef = None):
@@ -130,1537 +159,1262 @@ class Extension(object):
         self.protos = protos
         self.ifdef = ifdef
 
-
+# VK core API
 VK_VERSION_1_0 = Extension(
     name="VK_VERSION_1_0",
     headers=["vulkan/vulkan.h"],
-    ifdef="",
     objects=[
         "VkInstance",
         "VkPhysicalDevice",
         "VkDevice",
         "VkQueue",
+        "VkSemaphore",
+        "VkCommandBuffer",
         "VkFence",
         "VkDeviceMemory",
         "VkBuffer",
         "VkImage",
-        "VkSemaphore",
         "VkEvent",
         "VkQueryPool",
         "VkBufferView",
         "VkImageView",
         "VkShaderModule",
         "VkPipelineCache",
-        "VkPipeline",
         "VkPipelineLayout",
-        "VkSampler",
+        "VkRenderPass",
+        "VkPipeline",
         "VkDescriptorSetLayout",
+        "VkSampler",
         "VkDescriptorPool",
         "VkDescriptorSet",
         "VkFramebuffer",
-        "VkRenderPass",
         "VkCommandPool",
-        "VkCommandBuffer",
     ],
     protos=[
         Proto("VkResult", "CreateInstance",
-            [
-             Param("VkInstanceCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkInstance", "pInstance"),
-            ]),
+            [Param("const VkInstanceCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkInstance*", "pInstance")]),
+
         Proto("void", "DestroyInstance",
-            [
-             Param("VkInstance", "instance"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+            [Param("VkInstance", "instance"),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "EnumeratePhysicalDevices",
-            [
-             Param("VkInstance", "instance"),
-             Param("uint32_t", "pPhysicalDeviceCount"),
-             Param("VkPhysicalDevice", "pPhysicalDevices"),
-            ]),
+            [Param("VkInstance", "instance"),
+             Param("uint32_t*", "pPhysicalDeviceCount"),
+             Param("VkPhysicalDevice*", "pPhysicalDevices")]),
+
         Proto("void", "GetPhysicalDeviceFeatures",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
-             Param("VkPhysicalDeviceFeatures", "pFeatures"),
-            ]),
+            [Param("VkPhysicalDevice", "physicalDevice"),
+             Param("VkPhysicalDeviceFeatures*", "pFeatures")]),
+
         Proto("void", "GetPhysicalDeviceFormatProperties",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
+            [Param("VkPhysicalDevice", "physicalDevice"),
              Param("VkFormat", "format"),
-             Param("VkFormatProperties", "pFormatProperties"),
-            ]),
+             Param("VkFormatProperties*", "pFormatProperties")]),
+
         Proto("VkResult", "GetPhysicalDeviceImageFormatProperties",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
+            [Param("VkPhysicalDevice", "physicalDevice"),
              Param("VkFormat", "format"),
              Param("VkImageType", "type"),
              Param("VkImageTiling", "tiling"),
              Param("VkImageUsageFlags", "usage"),
              Param("VkImageCreateFlags", "flags"),
-             Param("VkImageFormatProperties", "pImageFormatProperties"),
-            ]),
+             Param("VkImageFormatProperties*", "pImageFormatProperties")]),
+
         Proto("void", "GetPhysicalDeviceProperties",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
-             Param("VkPhysicalDeviceProperties", "pProperties"),
-            ]),
+            [Param("VkPhysicalDevice", "physicalDevice"),
+             Param("VkPhysicalDeviceProperties*", "pProperties")]),
+
         Proto("void", "GetPhysicalDeviceQueueFamilyProperties",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
-             Param("uint32_t", "pQueueFamilyPropertyCount"),
-             Param("VkQueueFamilyProperties", "pQueueFamilyProperties"),
-            ]),
+            [Param("VkPhysicalDevice", "physicalDevice"),
+             Param("uint32_t*", "pQueueFamilyPropertyCount"),
+             Param("VkQueueFamilyProperties*", "pQueueFamilyProperties")]),
+
         Proto("void", "GetPhysicalDeviceMemoryProperties",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
-             Param("VkPhysicalDeviceMemoryProperties", "pMemoryProperties"),
-            ]),
+            [Param("VkPhysicalDevice", "physicalDevice"),
+             Param("VkPhysicalDeviceMemoryProperties*", "pMemoryProperties")]),
+
         Proto("PFN_vkVoidFunction", "GetInstanceProcAddr",
-            [
-             Param("VkInstance", "instance"),
-             Param("char", "pName"),
-            ]),
+            [Param("VkInstance", "instance"),
+             Param("const char*", "pName")]),
+
         Proto("PFN_vkVoidFunction", "GetDeviceProcAddr",
-            [
-             Param("VkDevice", "device"),
-             Param("char", "pName"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const char*", "pName")]),
+
         Proto("VkResult", "CreateDevice",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
-             Param("VkDeviceCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkDevice", "pDevice"),
-            ]),
+            [Param("VkPhysicalDevice", "physicalDevice"),
+             Param("const VkDeviceCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkDevice*", "pDevice")]),
+
         Proto("void", "DestroyDevice",
-            [
-             Param("VkDevice", "device"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "EnumerateInstanceExtensionProperties",
-            [
-             Param("char", "pLayerName"),
-             Param("uint32_t", "pPropertyCount"),
-             Param("VkExtensionProperties", "pProperties"),
-            ]),
+            [Param("const char*", "pLayerName"),
+             Param("uint32_t*", "pPropertyCount"),
+             Param("VkExtensionProperties*", "pProperties")]),
+
         Proto("VkResult", "EnumerateDeviceExtensionProperties",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
-             Param("char", "pLayerName"),
-             Param("uint32_t", "pPropertyCount"),
-             Param("VkExtensionProperties", "pProperties"),
-            ]),
+            [Param("VkPhysicalDevice", "physicalDevice"),
+             Param("const char*", "pLayerName"),
+             Param("uint32_t*", "pPropertyCount"),
+             Param("VkExtensionProperties*", "pProperties")]),
+
         Proto("VkResult", "EnumerateInstanceLayerProperties",
-            [
-             Param("uint32_t", "pPropertyCount"),
-             Param("VkLayerProperties", "pProperties"),
-            ]),
+            [Param("uint32_t*", "pPropertyCount"),
+             Param("VkLayerProperties*", "pProperties")]),
+
         Proto("VkResult", "EnumerateDeviceLayerProperties",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
-             Param("uint32_t", "pPropertyCount"),
-             Param("VkLayerProperties", "pProperties"),
-            ]),
+            [Param("VkPhysicalDevice", "physicalDevice"),
+             Param("uint32_t*", "pPropertyCount"),
+             Param("VkLayerProperties*", "pProperties")]),
+
         Proto("void", "GetDeviceQueue",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("uint32_t", "queueFamilyIndex"),
              Param("uint32_t", "queueIndex"),
-             Param("VkQueue", "pQueue"),
-            ]),
+             Param("VkQueue*", "pQueue")]),
+
         Proto("VkResult", "QueueSubmit",
-            [
-             Param("VkQueue", "queue"),
+            [Param("VkQueue", "queue"),
              Param("uint32_t", "submitCount"),
-             Param("VkSubmitInfo", "pSubmits"),
-             Param("VkFence", "fence"),
-            ]),
+             Param("const VkSubmitInfo*", "pSubmits"),
+             Param("VkFence", "fence")]),
+
         Proto("VkResult", "QueueWaitIdle",
-            [
-             Param("VkQueue", "queue"),
-            ]),
+            [Param("VkQueue", "queue")]),
+
         Proto("VkResult", "DeviceWaitIdle",
-            [
-             Param("VkDevice", "device"),
-            ]),
+            [Param("VkDevice", "device")]),
+
         Proto("VkResult", "AllocateMemory",
-            [
-             Param("VkDevice", "device"),
-             Param("VkMemoryAllocateInfo", "pAllocateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkDeviceMemory", "pMemory"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkMemoryAllocateInfo*", "pAllocateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkDeviceMemory*", "pMemory")]),
+
         Proto("void", "FreeMemory",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkDeviceMemory", "memory"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "MapMemory",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkDeviceMemory", "memory"),
              Param("VkDeviceSize", "offset"),
              Param("VkDeviceSize", "size"),
              Param("VkMemoryMapFlags", "flags"),
-             Param("void", "ppData"),
-            ]),
+             Param("void**", "ppData")]),
+
         Proto("void", "UnmapMemory",
-            [
-             Param("VkDevice", "device"),
-             Param("VkDeviceMemory", "memory"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("VkDeviceMemory", "memory")]),
+
         Proto("VkResult", "FlushMappedMemoryRanges",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("uint32_t", "memoryRangeCount"),
-             Param("VkMappedMemoryRange", "pMemoryRanges"),
-            ]),
+             Param("const VkMappedMemoryRange*", "pMemoryRanges")]),
+
         Proto("VkResult", "InvalidateMappedMemoryRanges",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("uint32_t", "memoryRangeCount"),
-             Param("VkMappedMemoryRange", "pMemoryRanges"),
-            ]),
+             Param("const VkMappedMemoryRange*", "pMemoryRanges")]),
+
         Proto("void", "GetDeviceMemoryCommitment",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkDeviceMemory", "memory"),
-             Param("VkDeviceSize", "pCommittedMemoryInBytes"),
-            ]),
+             Param("VkDeviceSize*", "pCommittedMemoryInBytes")]),
+
         Proto("VkResult", "BindBufferMemory",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkBuffer", "buffer"),
              Param("VkDeviceMemory", "memory"),
-             Param("VkDeviceSize", "memoryOffset"),
-            ]),
+             Param("VkDeviceSize", "memoryOffset")]),
+
         Proto("VkResult", "BindImageMemory",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkImage", "image"),
              Param("VkDeviceMemory", "memory"),
-             Param("VkDeviceSize", "memoryOffset"),
-            ]),
+             Param("VkDeviceSize", "memoryOffset")]),
+
         Proto("void", "GetBufferMemoryRequirements",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkBuffer", "buffer"),
-             Param("VkMemoryRequirements", "pMemoryRequirements"),
-            ]),
+             Param("VkMemoryRequirements*", "pMemoryRequirements")]),
+
         Proto("void", "GetImageMemoryRequirements",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkImage", "image"),
-             Param("VkMemoryRequirements", "pMemoryRequirements"),
-            ]),
+             Param("VkMemoryRequirements*", "pMemoryRequirements")]),
+
         Proto("void", "GetImageSparseMemoryRequirements",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkImage", "image"),
-             Param("uint32_t", "pSparseMemoryRequirementCount"),
-             Param("VkSparseImageMemoryRequirements", "pSparseMemoryRequirements"),
-            ]),
+             Param("uint32_t*", "pSparseMemoryRequirementCount"),
+             Param("VkSparseImageMemoryRequirements*", "pSparseMemoryRequirements")]),
+
         Proto("void", "GetPhysicalDeviceSparseImageFormatProperties",
-            [
-             Param("VkPhysicalDevice", "physicalDevice"),
+            [Param("VkPhysicalDevice", "physicalDevice"),
              Param("VkFormat", "format"),
              Param("VkImageType", "type"),
              Param("VkSampleCountFlagBits", "samples"),
              Param("VkImageUsageFlags", "usage"),
              Param("VkImageTiling", "tiling"),
-             Param("uint32_t", "pPropertyCount"),
-             Param("VkSparseImageFormatProperties", "pProperties"),
-            ]),
+             Param("uint32_t*", "pPropertyCount"),
+             Param("VkSparseImageFormatProperties*", "pProperties")]),
+
         Proto("VkResult", "QueueBindSparse",
-            [
-             Param("VkQueue", "queue"),
+            [Param("VkQueue", "queue"),
              Param("uint32_t", "bindInfoCount"),
-             Param("VkBindSparseInfo", "pBindInfo"),
-             Param("VkFence", "fence"),
-            ]),
+             Param("const VkBindSparseInfo*", "pBindInfo"),
+             Param("VkFence", "fence")]),
+
         Proto("VkResult", "CreateFence",
-            [
-             Param("VkDevice", "device"),
-             Param("VkFenceCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkFence", "pFence"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkFenceCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkFence*", "pFence")]),
+
         Proto("void", "DestroyFence",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkFence", "fence"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "ResetFences",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("uint32_t", "fenceCount"),
-             Param("VkFence", "pFences"),
-            ]),
+             Param("const VkFence*", "pFences")]),
+
         Proto("VkResult", "GetFenceStatus",
-            [
-             Param("VkDevice", "device"),
-             Param("VkFence", "fence"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("VkFence", "fence")]),
+
         Proto("VkResult", "WaitForFences",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("uint32_t", "fenceCount"),
-             Param("VkFence", "pFences"),
+             Param("const VkFence*", "pFences"),
              Param("VkBool32", "waitAll"),
-             Param("uint64_t", "timeout"),
-            ]),
+             Param("uint64_t", "timeout")]),
+
         Proto("VkResult", "CreateSemaphore",
-            [
-             Param("VkDevice", "device"),
-             Param("VkSemaphoreCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkSemaphore", "pSemaphore"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkSemaphoreCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkSemaphore*", "pSemaphore")]),
+
         Proto("void", "DestroySemaphore",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkSemaphore", "semaphore"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "CreateEvent",
-            [
-             Param("VkDevice", "device"),
-             Param("VkEventCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkEvent", "pEvent"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkEventCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkEvent*", "pEvent")]),
+
         Proto("void", "DestroyEvent",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkEvent", "event"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "GetEventStatus",
-            [
-             Param("VkDevice", "device"),
-             Param("VkEvent", "event"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("VkEvent", "event")]),
+
         Proto("VkResult", "SetEvent",
-            [
-             Param("VkDevice", "device"),
-             Param("VkEvent", "event"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("VkEvent", "event")]),
+
         Proto("VkResult", "ResetEvent",
-            [
-             Param("VkDevice", "device"),
-             Param("VkEvent", "event"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("VkEvent", "event")]),
+
         Proto("VkResult", "CreateQueryPool",
-            [
-             Param("VkDevice", "device"),
-             Param("VkQueryPoolCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkQueryPool", "pQueryPool"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkQueryPoolCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkQueryPool*", "pQueryPool")]),
+
         Proto("void", "DestroyQueryPool",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkQueryPool", "queryPool"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "GetQueryPoolResults",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkQueryPool", "queryPool"),
              Param("uint32_t", "firstQuery"),
              Param("uint32_t", "queryCount"),
              Param("size_t", "dataSize"),
-             Param("void", "pData"),
+             Param("void*", "pData"),
              Param("VkDeviceSize", "stride"),
-             Param("VkQueryResultFlags", "flags"),
-            ]),
+             Param("VkQueryResultFlags", "flags")]),
+
         Proto("VkResult", "CreateBuffer",
-            [
-             Param("VkDevice", "device"),
-             Param("VkBufferCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkBuffer", "pBuffer"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkBufferCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkBuffer*", "pBuffer")]),
+
         Proto("void", "DestroyBuffer",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkBuffer", "buffer"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "CreateBufferView",
-            [
-             Param("VkDevice", "device"),
-             Param("VkBufferViewCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkBufferView", "pView"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkBufferViewCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkBufferView*", "pView")]),
+
         Proto("void", "DestroyBufferView",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkBufferView", "bufferView"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "CreateImage",
-            [
-             Param("VkDevice", "device"),
-             Param("VkImageCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkImage", "pImage"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkImageCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkImage*", "pImage")]),
+
         Proto("void", "DestroyImage",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkImage", "image"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("void", "GetImageSubresourceLayout",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkImage", "image"),
-             Param("VkImageSubresource", "pSubresource"),
-             Param("VkSubresourceLayout", "pLayout"),
-            ]),
+             Param("const VkImageSubresource*", "pSubresource"),
+             Param("VkSubresourceLayout*", "pLayout")]),
+
         Proto("VkResult", "CreateImageView",
-            [
-             Param("VkDevice", "device"),
-             Param("VkImageViewCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkImageView", "pView"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkImageViewCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkImageView*", "pView")]),
+
         Proto("void", "DestroyImageView",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkImageView", "imageView"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-            ]),
+             Param("const VkAllocationCallbacks*", "pAllocator")]),
+
         Proto("VkResult", "CreateShaderModule",
-            [
-             Param("VkDevice", "device"),
-             Param("VkShaderModuleCreateInfo", "pCreateInfo"),
-             Param("VkAllocationCallbacks", "pAllocator"),
-             Param("VkShaderModule", "pShaderModule"),
-            ]),
+            [Param("VkDevice", "device"),
+             Param("const VkShaderModuleCreateInfo*", "pCreateInfo"),
+             Param("const VkAllocationCallbacks*", "pAllocator"),
+             Param("VkShaderModule*", "pShaderModule")]),
+
         Proto("void", "DestroyShaderModule",
-            [
-             Param("VkDevice", "device"),
+            [Param("VkDevice", "device"),
              Param("VkShaderModule", "shaderModule"),


Reply to: