Add GetPhysicalDeviceExtensionInfo() function to API
authorTobin Ehlis <tobin@lunarg.com>
Thu, 16 Apr 2015 18:51:37 +0000 (12:51 -0600)
committerTobin Ehlis <tobin@lunarg.com>
Thu, 16 Apr 2015 18:54:48 +0000 (12:54 -0600)
Added function to driver, currently returning a count of 0 and VK_ERROR_INVALID_VALUE if an attempt it made to retrieve extension properties.
This change is slightly leading another so the first paramter is currently "VkPhysicalGpu" but should be migrated to "VkPhysicalDevice" when that change comes in.

icd/nulldrv/nulldrv.c
include/vkLayer.h
include/vkWsiX11Ext.h
include/vulkan.h
vulkan.py

index 38102c1..1d36ff6 100644 (file)
@@ -1332,11 +1332,35 @@ ICD_EXPORT VkResult VKAPI vkGetGlobalExtensionInfo(
     return VK_SUCCESS;
 }
 
-ICD_EXPORT VkResult VKAPI vkGetExtensionSupport(
-    VkPhysicalGpu                               gpu_,
-    const char*                                 pExtName)
+VkResult VKAPI vkGetPhysicalDeviceExtensionInfo(
+                                               VkPhysicalGpu gpu,
+                                               VkExtensionInfoType infoType,
+                                               uint32_t extensionIndex,
+                                               size_t*  pDataSize,
+                                               void*    pData)
 {
-    NULLDRV_LOG_FUNC;
+    uint32_t *count;
+
+    if (pDataSize == NULL)
+        return VK_ERROR_INVALID_POINTER;
+
+    switch (infoType) {
+        case VK_EXTENSION_INFO_TYPE_COUNT:
+            *pDataSize = sizeof(uint32_t);
+            if (pData == NULL)
+                return VK_SUCCESS;
+            count = (uint32_t *) pData;
+            *count = 0;
+            break;
+        case VK_EXTENSION_INFO_TYPE_PROPERTIES:
+            *pDataSize = 0;
+            if (pData == NULL)
+                return VK_SUCCESS;
+            return VK_ERROR_INVALID_EXTENSION;
+            break;
+        default:
+            return VK_ERROR_INVALID_VALUE;
+    };
     return VK_SUCCESS;
 }
 
index ba2e43b..813e687 100644 (file)
@@ -35,7 +35,7 @@ typedef struct VkLayerDispatchTable_
     PFN_vkCreateDevice CreateDevice;
     PFN_vkDestroyDevice DestroyDevice;
     PFN_vkGetGlobalExtensionInfo GetGlobalExtensionInfo;
-    PFN_vkGetExtensionSupport GetExtensionSupport;
+    PFN_vkGetPhysicalDeviceExtensionInfo GetPhysicalDeviceExtensionInfo;
     PFN_vkEnumerateLayers EnumerateLayers;
     PFN_vkGetDeviceQueue GetDeviceQueue;
     PFN_vkQueueSubmit QueueSubmit;
index 2f1d623..f260f9f 100644 (file)
@@ -94,7 +94,7 @@ typedef VkResult (VKAPI *PFN_vkWsiX11QueuePresent)(VkQueue queue, const VK_WSI_X
  * without having a GPU as the first parameter, the loader could not find the
  * dispatch table.
  *
- * This function is available when vkGetExtensionSupport says "VK_WSI_X11"
+ * This function is available when vkGetGlobalExtensionInfo says "VK_WSI_X11"
  * is supported.
  */
 VkResult VKAPI vkWsiX11AssociateConnection(
index 9e0fcf1..185db92 100644 (file)
@@ -2205,7 +2205,7 @@ typedef void *   (VKAPI *PFN_vkGetProcAddr)(VkPhysicalGpu gpu, const char * pNam
 typedef VkResult (VKAPI *PFN_vkCreateDevice)(VkPhysicalGpu gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice);
 typedef VkResult (VKAPI *PFN_vkDestroyDevice)(VkDevice device);
 typedef VkResult (VKAPI *PFN_vkGetGlobalExtensionInfo)(VkExtensionInfoType infoType, uint32_t extensionIndex, size_t* pDataSize, void* pData);
-typedef VkResult (VKAPI *PFN_vkGetExtensionSupport)(VkPhysicalGpu gpu, const char* pExtName);
+typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceExtensionInfo)(VkPhysicalGpu gpu, VkExtensionInfoType infoType, uint32_t extensionIndex, size_t* pDataSize, void* pData);
 typedef VkResult (VKAPI *PFN_vkEnumerateLayers)(VkPhysicalGpu gpu, size_t maxLayerCount, size_t maxStringSize, size_t* pOutLayerCount, char* const* pOutLayers, void* pReserved);
 typedef VkResult (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue);
 typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence);
@@ -2358,9 +2358,12 @@ VkResult VKAPI vkGetGlobalExtensionInfo(
                                                size_t*  pDataSize,
                                                void*    pData);
 
-VkResult VKAPI vkGetExtensionSupport(
-    VkPhysicalGpu                               gpu,
-    const char*                                 pExtName);
+VkResult VKAPI vkGetPhysicalDeviceExtensionInfo(
+                                               VkPhysicalGpu gpu,
+                                               VkExtensionInfoType infoType,
+                                               uint32_t extensionIndex,
+                                               size_t*  pDataSize,
+                                               void*    pData);
 
 // Layer discovery functions
 
index d921bef..6d5bd58 100755 (executable)
--- a/vulkan.py
+++ b/vulkan.py
@@ -255,6 +255,13 @@ core = Extension(
              Param("size_t*", "pDataSize"),
              Param("void*", "pData")]),
 
+        Proto("VkResult", "GetPhysicalDeviceExtensionInfo",
+            [Param("VkPhysicalGpu", "gpu"),
+             Param("VkExtensionInfoType", "infoType"),
+             Param("uint32_t", "extensionIndex"),
+             Param("size_t*", "pDataSize"),
+             Param("void*", "pData")]),
+
         Proto("VkResult", "EnumerateLayers",
             [Param("VkPhysicalGpu", "gpu"),
              Param("size_t", "maxLayerCount"),