Bug 13632 Header 84 Assorted questions and comments on vulkan.h
diff --git a/vk-layer-generate.py b/vk-layer-generate.py
index 44c0b36..749e6d5 100755
--- a/vk-layer-generate.py
+++ b/vk-layer-generate.py
@@ -151,7 +151,7 @@
         r_body.append('    // This layer intercepts callbacks')
         r_body.append('    VK_LAYER_DBG_FUNCTION_NODE *pNewDbgFuncNode = (VK_LAYER_DBG_FUNCTION_NODE*)malloc(sizeof(VK_LAYER_DBG_FUNCTION_NODE));')
         r_body.append('    if (!pNewDbgFuncNode)')
-        r_body.append('        return VK_ERROR_OUT_OF_MEMORY;')
+        r_body.append('        return VK_ERROR_OUT_OF_HOST_MEMORY;')
         r_body.append('    pNewDbgFuncNode->pfnMsgCallback = pfnMsgCallback;')
         r_body.append('    pNewDbgFuncNode->pUserData = pUserData;')
         r_body.append('    pNewDbgFuncNode->pNext = g_pDbgFunctionHead;')
@@ -258,6 +258,28 @@
         ggei_body.append('}')
         return "\n".join(ggei_body)
 
+    def _gen_layer_get_extension_support(self, layer="Generic"):
+        ges_body = []
+        ges_body.append('VK_LAYER_EXPORT VkResult VKAPI xglGetExtensionSupport(VkPhysicalDevice gpu, const char* pExtName)')
+        ges_body.append('{')
+        ges_body.append('    VkResult result;')
+        ges_body.append('    VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;')
+        ges_body.append('')
+        ges_body.append('    /* This entrypoint is NOT going to init its own dispatch table since loader calls here early */')
+        ges_body.append('    if (!strncmp(pExtName, "%s", strlen("%s")))' % (layer, layer))
+        ges_body.append('    {')
+        ges_body.append('        result = VK_SUCCESS;')
+        ges_body.append('    } else if (nextTable.GetExtensionSupport != NULL)')
+        ges_body.append('    {')
+        ges_body.append('        result = nextTable.GetExtensionSupport((VkPhysicalDevice)gpuw->nextObject, pExtName);')
+        ges_body.append('    } else')
+        ges_body.append('    {')
+        ges_body.append('        result = VK_ERROR_INVALID_EXTENSION;')
+        ges_body.append('    }')
+        ges_body.append('    return result;')
+        ges_body.append('}')
+        return "\n".join(ges_body)
+
     def _generate_dispatch_entrypoints(self, qual=""):
         if qual:
             qual += " "
@@ -354,7 +376,7 @@
 
     def _generate_layer_gpa_function(self, extensions=[]):
         func_body = []
-        func_body.append("VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalGpu gpu, const char* funcName)\n"
+        func_body.append("VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char* funcName)\n"
                          "{\n"
                          "    VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;\n"
                          "    void* addr;\n"
@@ -373,7 +395,7 @@
         func_body.append("    else {\n"
                          "        if (gpuw->pGPA == NULL)\n"
                          "            return NULL;\n"
-                         "        return gpuw->pGPA((VkPhysicalGpu)gpuw->nextObject, funcName);\n"
+                         "        return gpuw->pGPA((VkPhysicalDevice)gpuw->nextObject, funcName);\n"
                          "    }\n"
                          "}\n")
         return "\n".join(func_body)
@@ -403,7 +425,7 @@
                          '    fpNextGPA = pCurObj->pGPA;\n'
                          '    assert(fpNextGPA);\n')
 
-        func_body.append("    layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalGpu) pCurObj->nextObject);")
+        func_body.append("    layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);")
         if lockname is not None:
             func_body.append("    if (!%sLockInitialized)" % lockname)
             func_body.append("    {")
@@ -422,7 +444,7 @@
                          '    fpNextGPA = pCurObj->pGPA;\n'
                          '    assert(fpNextGPA);\n' % self.layer_name)
 
-        func_body.append("    layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalGpu) pCurObj->nextObject);\n")
+        func_body.append("    layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);\n")
         func_body.append("    if (!printLockInitialized)")
         func_body.append("    {")
         func_body.append("        // TODO/TBD: Need to delete this mutex sometime.  How???")
@@ -624,7 +646,7 @@
         func_body.append('    PFN_vkGetProcAddr fpNextGPA;')
         func_body.append('    fpNextGPA = pCurObj->pGPA;')
         func_body.append('    assert(fpNextGPA);')
-        func_body.append('    layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalGpu) pCurObj->nextObject);')
+        func_body.append('    layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);')
         func_body.append('')
         func_body.append('    if (!printLockInitialized)')
         func_body.append('    {')
@@ -732,7 +754,7 @@
         if 'WsiX11AssociateConnection' == proto.name:
             funcs.append("#if defined(__linux__) || defined(XCB_NVIDIA)")
         if proto.name == "EnumerateLayers":
-            c_call = proto.c_call().replace("(" + proto.params[0].name, "((VkPhysicalGpu)gpuw->nextObject", 1)
+            c_call = proto.c_call().replace("(" + proto.params[0].name, "((VkPhysicalDevice)gpuw->nextObject", 1)
             funcs.append('%s%s\n'
                      '{\n'
                      '    using namespace StreamControl;\n'
@@ -751,6 +773,36 @@
                      '        return VK_SUCCESS;\n'
                      '    }\n'
                          '}' % (qual, decl, self.layer_name, ret_val, proto.c_call(),f_open, log_func, f_close, stmt, self.layer_name))
+        elif 'GetExtensionSupport' == proto.name:
+            funcs.append('%s%s\n'
+                         '{\n'
+                         '    VkResult result;\n'
+                         '    /* This entrypoint is NOT going to init its own dispatch table since loader calls here early */\n'
+                         '    if (!strncmp(pExtName, "%s", strlen("%s")))\n'
+                         '    {\n'
+                         '        result = VK_SUCCESS;\n'
+                         '    } else if (nextTable.GetExtensionSupport != NULL)\n'
+                         '    {\n'
+                         '        result = nextTable.%s;\n'
+                         '        %s    %s        %s\n'
+                         '    } else\n'
+                         '    {\n'
+                         '        result = VK_ERROR_INVALID_EXTENSION;\n'
+                         '    }\n'
+                         '%s'
+                         '}' % (qual, decl, self.layer_name, self.layer_name, proto.c_call(), f_open, log_func, f_close, stmt))
+#        elif 'vkphysicalgpu' == proto.params[0].ty.lower():
+#            c_call = proto.c_call().replace("(" + proto.params[0].name, "((VkPhysicalDevice)gpuw->nextObject", 1)
+#            funcs.append('%s%s\n'
+#                     '{\n'
+#                     '    using namespace StreamControl;\n'
+#                     '    VkBaseLayerObject* gpuw = (VkBaseLayerObject *) %s;\n'
+#                     '    pCurObj = gpuw;\n'
+#                     '    loader_platform_thread_once(&tabOnce, init%s);\n'
+#                     '    %snextTable.%s;\n'
+#                     '    %s%s%s\n'
+#                     '%s'
+#                     '}' % (qual, decl, proto.params[0].name, self.layer_name, ret_val, c_call, f_open, log_func, f_close, stmt))
         else:
             funcs.append('%s%s\n'
                      '{\n'
@@ -801,7 +853,7 @@
         header_txt.append('')
         header_txt.append('// For each Queue\'s doubly linked-list of mem refs')
         header_txt.append('typedef struct _OT_MEM_INFO {')
-        header_txt.append('    VkGpuMemory        mem;')
+        header_txt.append('    VkDeviceMemory        mem;')
         header_txt.append('    struct _OT_MEM_INFO *pNextMI;')
         header_txt.append('    struct _OT_MEM_INFO *pPrevMI;')
         header_txt.append('')
@@ -831,7 +883,7 @@
         header_txt.append('    }')
         header_txt.append('    else {')
         header_txt.append('        char str[1024];')
-        header_txt.append('        sprintf(str, "ERROR:  VK_ERROR_OUT_OF_MEMORY -- could not allocate memory for Queue Information");')
+        header_txt.append('        sprintf(str, "ERROR:  VK_ERROR_OUT_OF_HOST_MEMORY -- could not allocate memory for Queue Information");')
         header_txt.append('        layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, queue, 0, OBJTRACK_INTERNAL_ERROR, "OBJTRACK", str);')
         header_txt.append('    }')
         header_txt.append('}')
@@ -1017,13 +1069,13 @@
         header_txt.append('')
         header_txt.append('    while (pTrav) {')
         header_txt.append('        if (pTrav->obj.pObj == pObj) {')
-        header_txt.append('            if (stateBindPoint == VK_STATE_BIND_VIEWPORT) {')
+        header_txt.append('            if (stateBindPoint == VK_STATE_BIND_POINT_VIEWPORT) {')
         header_txt.append('                pTrav->obj.status |= OBJSTATUS_VIEWPORT_BOUND;')
-        header_txt.append('            } else if (stateBindPoint == VK_STATE_BIND_RASTER) {')
+        header_txt.append('            } else if (stateBindPoint == VK_STATE_BIND_POINT_RASTER) {')
         header_txt.append('                pTrav->obj.status |= OBJSTATUS_RASTER_BOUND;')
-        header_txt.append('            } else if (stateBindPoint == VK_STATE_BIND_COLOR_BLEND) {')
+        header_txt.append('            } else if (stateBindPoint == VK_STATE_BIND_POINT_COLOR_BLEND) {')
         header_txt.append('                pTrav->obj.status |= OBJSTATUS_COLOR_BLEND_BOUND;')
-        header_txt.append('            } else if (stateBindPoint == VK_STATE_BIND_DEPTH_STENCIL) {')
+        header_txt.append('            } else if (stateBindPoint == VK_STATE_BIND_POINT_DEPTH_STENCIL) {')
         header_txt.append('                pTrav->obj.status |= OBJSTATUS_DEPTH_STENCIL_BOUND;')
         header_txt.append('            }')
         header_txt.append('            return;')
@@ -1084,7 +1136,7 @@
         header_txt.append('}')
         header_txt.append('')
         header_txt.append('static void setGpuQueueInfoState(void *pData) {')
-        header_txt.append('    maxMemReferences = ((VkPhysicalGpuQueueProperties *)pData)->maxMemReferences;')
+        header_txt.append('    maxMemReferences = ((VkPhysicalDeviceQueueProperties *)pData)->maxMemReferences;')
         header_txt.append('}')
         return "\n".join(header_txt)
 
@@ -1128,9 +1180,9 @@
         elif 'CmdDraw' in proto.name:
             using_line += '    validate_draw_state_flags((void *)cmdBuffer);\n'
         elif 'MapMemory' in proto.name:
-            using_line += '    set_status((void*)mem, VkObjectTypeGpuMemory, OBJSTATUS_GPU_MEM_MAPPED);\n'
+            using_line += '    set_status((void*)mem, VkObjectTypeDeviceMemory, OBJSTATUS_GPU_MEM_MAPPED);\n'
         elif 'UnmapMemory' in proto.name:
-            using_line += '    reset_status((void*)mem, VkObjectTypeGpuMemory, OBJSTATUS_GPU_MEM_MAPPED);\n'
+            using_line += '    reset_status((void*)mem, VkObjectTypeDeviceMemory, OBJSTATUS_GPU_MEM_MAPPED);\n'
         if 'AllocDescriptor' in proto.name: # Allocates array of DSs
             create_line =  '    for (uint32_t i = 0; i < *pCount; i++) {\n'
             create_line += '        loader_platform_thread_lock_mutex(&objLock);\n'
@@ -1201,8 +1253,28 @@
                      '        return VK_SUCCESS;\n'
                      '    }\n'
                          '}' % (qual, decl, using_line, self.layer_name, ret_val, proto.c_call(), create_line, destroy_line, stmt, self.layer_name))
-        elif 'GetGpuInfo' in proto.name:
-            gpu_state =  '    if (infoType == VK_INFO_TYPE_PHYSICAL_GPU_QUEUE_PROPERTIES) {\n'
+        elif 'GetExtensionSupport' == proto.name:
+            funcs.append('%s%s\n'
+                     '{\n'
+                     '    VkResult result;\n'
+                     '    /* This entrypoint is NOT going to init its own dispatch table since loader calls this early */\n'
+                     '    if (!strncmp(pExtName, "%s", strlen("%s")) ||\n'
+                     '        !strncmp(pExtName, "objTrackGetObjectCount", strlen("objTrackGetObjectCount")) ||\n'
+                     '        !strncmp(pExtName, "objTrackGetObjects", strlen("objTrackGetObjects")))\n'
+                     '    {\n'
+                     '        result = VK_SUCCESS;\n'
+                     '    } else if (nextTable.GetExtensionSupport != NULL)\n'
+                     '    {\n'
+                     '    %s'
+                     '        result = nextTable.%s;\n'
+                     '    } else\n'
+                     '    {\n'
+                     '        result = VK_ERROR_INVALID_EXTENSION;\n'
+                     '    }\n'
+                     '%s'
+                     '}' % (qual, decl, self.layer_name, self.layer_name, using_line, proto.c_call(),  stmt))
+        elif 'GetPhysicalDeviceInfo' in proto.name:
+            gpu_state =  '    if (infoType == VK_PHYSICAL_DEVICE_INFO_TYPE_QUEUE_PROPERTIES) {\n'
             gpu_state += '        if (pData != NULL) {\n'
             gpu_state += '            setGpuQueueInfoState(pData);\n'
             gpu_state += '        }\n'
@@ -1335,7 +1407,7 @@
         # Only watch core objects passed as first parameter
         elif proto.params[0].ty not in vulkan.core.objects:
             return None
-        elif proto.params[0].ty != "VkPhysicalGpu":
+        elif proto.params[0].ty != "VkPhysicalDevice":
             funcs.append('%s%s\n'
                      '{\n'
                      '    useObject((VkObject) %s, "%s");\n'