Implement alloc/freeDescriptorSets in NullDriver.
authorJarkko Pöyry <jpoyry@google.com>
Tue, 28 Jul 2015 18:18:49 +0000 (11:18 -0700)
committerJarkko Pöyry <jpoyry@google.com>
Tue, 28 Jul 2015 19:59:30 +0000 (12:59 -0700)
Change-Id: I0a5e0965268a07ba09b53d202c2db159eea0f88d

external/vulkancts/framework/vulkan/vkNullDriver.cpp
external/vulkancts/framework/vulkan/vkNullDriverImpl.inl
external/vulkancts/gen_framework.py

index 5e09761..8844990 100644 (file)
@@ -96,6 +96,12 @@ public:
        DescriptorPool (VkDevice, VkDescriptorPoolUsage, deUint32, const VkDescriptorPoolCreateInfo*) {}
 };
 
+class DescriptorSet
+{
+public:
+       DescriptorSet (VkDevice, VkDescriptorPool, VkDescriptorSetUsage, VkDescriptorSetLayout) {}
+};
+
 class Pipeline
 {
 public:
@@ -283,6 +289,41 @@ VkResult mapMemory (VkDevice, VkDeviceMemory memHandle, VkDeviceSize offset, VkD
        return VK_SUCCESS;
 }
 
+VkResult allocDescriptorSets (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, deUint32 count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, deUint32* pCount)
+{
+       for (deUint32 ndx = 0; ndx < count; ++ndx)
+       {
+               try
+               {
+                       pDescriptorSets[ndx] = VkDescriptorSet((deUint64)(deUintptr)new DescriptorSet(device, descriptorPool, setUsage, pSetLayouts[ndx]));
+               }
+               catch (const std::bad_alloc&)
+               {
+                       *pCount = ndx;
+                       return VK_ERROR_OUT_OF_HOST_MEMORY;
+               }
+               catch (VkResult res)
+               {
+                       *pCount = ndx;
+                       return res;
+               }
+       }
+
+       *pCount = count;
+       return VK_SUCCESS;
+}
+
+VkResult freeDescriptorSets (VkDevice, VkDescriptorPool, deUint32 count, const VkDescriptorSet* pDescriptorSets)
+{
+       for (deUint32 ndx = 0; ndx < count; ++ndx)
+       {
+               // \note: delete cannot fail
+               delete reinterpret_cast<DescriptorSet*>((deUintptr)pDescriptorSets[ndx].getInternal());
+       }
+
+       return VK_SUCCESS;
+}
+
 #include "vkNullDriverImpl.inl"
 
 } // extern "C"
index 67d23b7..31521a3 100644 (file)
@@ -607,27 +607,6 @@ VkResult resetDescriptorPool (VkDevice device, VkDescriptorPool descriptorPool)
        return VK_SUCCESS;
 }
 
-VkResult allocDescriptorSets (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, deUint32 count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, deUint32* pCount)
-{
-       DE_UNREF(device);
-       DE_UNREF(descriptorPool);
-       DE_UNREF(setUsage);
-       DE_UNREF(count);
-       DE_UNREF(pSetLayouts);
-       DE_UNREF(pDescriptorSets);
-       DE_UNREF(pCount);
-       return VK_SUCCESS;
-}
-
-VkResult freeDescriptorSets (VkDevice device, VkDescriptorPool descriptorPool, deUint32 count, const VkDescriptorSet* pDescriptorSets)
-{
-       DE_UNREF(device);
-       DE_UNREF(descriptorPool);
-       DE_UNREF(count);
-       DE_UNREF(pDescriptorSets);
-       return VK_SUCCESS;
-}
-
 VkResult updateDescriptorSets (VkDevice device, deUint32 writeCount, const VkWriteDescriptorSet* pDescriptorWrites, deUint32 copyCount, const VkCopyDescriptorSet* pDescriptorCopies)
 {
        DE_UNREF(device);
index adabe40..b80703c 100644 (file)
@@ -576,7 +576,9 @@ def writeNullDriverImpl (api, filename):
                                "vkGetPhysicalDeviceMemoryProperties",
                                "vkGetBufferMemoryRequirements",
                                "vkGetImageMemoryRequirements",
-                               "vkMapMemory"
+                               "vkMapMemory",
+                               "vkAllocDescriptorSets",
+                               "vkFreeDescriptorSets",
                        ]
                specialFuncs            = [f for f in api.functions if f.name in specialFuncNames]
                createFuncs                     = [f for f in api.functions if (f.name[:8] == "vkCreate" or f.name == "vkAllocMemory") and not f in specialFuncs]