vk: Implement allocation count query
authorKristian Høgsberg <kristian.h.kristensen@intel.com>
Mon, 18 May 2015 02:25:28 +0000 (19:25 -0700)
committerKristian Høgsberg <kristian.h.kristensen@intel.com>
Mon, 18 May 2015 17:27:07 +0000 (10:27 -0700)
src/vulkan/device.c

index c76a8f73c4e781549866d1d90ab2f2c45e60ee28..6faa0b04eb4848ea7d5317db88dac410584a34a1 100644 (file)
@@ -999,6 +999,18 @@ fill_memory_requirements(
    }
 }
 
+static uint32_t
+get_allocation_count(VkObjectType objType)
+{
+   switch (objType) {
+   case VK_OBJECT_TYPE_BUFFER:
+   case VK_OBJECT_TYPE_IMAGE:
+      return 1;
+   default:
+      return 0;
+   }
+}
+
 VkResult anv_GetObjectInfo(
     VkDevice                                    _device,
     VkObjectType                                objType,
@@ -1008,6 +1020,7 @@ VkResult anv_GetObjectInfo(
     void*                                       pData)
 {
    VkMemoryRequirements memory_requirements;
+   uint32_t count;
 
    switch (infoType) {
    case VK_OBJECT_INFO_TYPE_MEMORY_REQUIREMENTS:
@@ -1018,10 +1031,16 @@ VkResult anv_GetObjectInfo(
       fill_memory_requirements(objType, object, &memory_requirements);
       memcpy(pData, &memory_requirements,
              MIN2(*pDataSize, sizeof(memory_requirements)));
-      *pDataSize = sizeof(memory_requirements);
       return VK_SUCCESS;
 
    case VK_OBJECT_INFO_TYPE_MEMORY_ALLOCATION_COUNT:
+      *pDataSize = sizeof(count);
+      if (pData == NULL)
+         return VK_SUCCESS;
+
+      count = get_allocation_count(objType);
+      return VK_SUCCESS;
+
    default:
       return VK_UNSUPPORTED;
    }