From 10342d15539ed935ddd0cb3cce5484d1636683a2 Mon Sep 17 00:00:00 2001 From: Pyry Haulos Date: Tue, 24 Nov 2015 13:11:34 -0800 Subject: [PATCH] Fix a few null driver bugs * vkAllocDescriptorSets() still had pCounts return variable that was supposed to be removed in latest API update. * vkGetPhysicalDeviceFormatFeatures() didn't return sensible properties leading to several tests unnecessarily reporting NotSupported. Change-Id: I515422dbd7fc76bf409212d816fe5ab23b937efd --- .../vulkancts/framework/vulkan/vkNullDriver.cpp | 33 +++++++++++++++++++--- .../framework/vulkan/vkNullDriverImpl.inl | 8 ------ external/vulkancts/gen_framework.py | 1 + 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/external/vulkancts/framework/vulkan/vkNullDriver.cpp b/external/vulkancts/framework/vulkan/vkNullDriver.cpp index 726600a..7ee23f9 100644 --- a/external/vulkancts/framework/vulkan/vkNullDriver.cpp +++ b/external/vulkancts/framework/vulkan/vkNullDriver.cpp @@ -238,6 +238,28 @@ VkResult getPhysicalDeviceMemoryProperties (VkPhysicalDevice, VkPhysicalDeviceMe return VK_SUCCESS; } +VkResult getPhysicalDeviceFormatProperties (VkPhysicalDevice, VkFormat, VkFormatProperties* pFormatProperties) +{ + const VkFormatFeatureFlags allFeatures = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT + | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT + | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT + | VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT + | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT + | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT + | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT + | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT + | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT + | VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT + | VK_FORMAT_FEATURE_BLIT_SOURCE_BIT + | VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT; + + pFormatProperties->linearTilingFeatures = allFeatures; + pFormatProperties->optimalTilingFeatures = allFeatures; + pFormatProperties->bufferFeatures = allFeatures; + + return VK_SUCCESS; +} + VkResult getBufferMemoryRequirements (VkDevice, VkBuffer bufferHandle, VkMemoryRequirements* requirements) { const Buffer* buffer = reinterpret_cast(bufferHandle.getInternal()); @@ -270,7 +292,7 @@ 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) +VkResult allocDescriptorSets (VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, deUint32 count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets) { for (deUint32 ndx = 0; ndx < count; ++ndx) { @@ -280,17 +302,20 @@ VkResult allocDescriptorSets (VkDevice device, VkDescriptorPool descriptorPool, } catch (const std::bad_alloc&) { - *pCount = ndx; + for (deUint32 freeNdx = 0; freeNdx < ndx; freeNdx++) + delete reinterpret_cast((deUintptr)pDescriptorSets[freeNdx].getInternal()); + return VK_ERROR_OUT_OF_HOST_MEMORY; } catch (VkResult res) { - *pCount = ndx; + for (deUint32 freeNdx = 0; freeNdx < ndx; freeNdx++) + delete reinterpret_cast((deUintptr)pDescriptorSets[freeNdx].getInternal()); + return res; } } - *pCount = count; return VK_SUCCESS; } diff --git a/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl b/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl index cdce08b..a303e31 100644 --- a/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl +++ b/external/vulkancts/framework/vulkan/vkNullDriverImpl.inl @@ -254,14 +254,6 @@ VkResult getPhysicalDeviceFeatures (VkPhysicalDevice physicalDevice, VkPhysicalD return VK_SUCCESS; } -VkResult getPhysicalDeviceFormatProperties (VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) -{ - DE_UNREF(physicalDevice); - DE_UNREF(format); - DE_UNREF(pFormatProperties); - return VK_SUCCESS; -} - VkResult getPhysicalDeviceImageFormatProperties (VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) { DE_UNREF(physicalDevice); diff --git a/external/vulkancts/gen_framework.py b/external/vulkancts/gen_framework.py index 2e799fa..77d0cb6 100644 --- a/external/vulkancts/gen_framework.py +++ b/external/vulkancts/gen_framework.py @@ -617,6 +617,7 @@ def writeNullDriverImpl (api, filename): "vkGetPhysicalDeviceProperties", "vkGetPhysicalDeviceQueueFamilyProperties", "vkGetPhysicalDeviceMemoryProperties", + "vkGetPhysicalDeviceFormatProperties", "vkGetBufferMemoryRequirements", "vkGetImageMemoryRequirements", "vkMapMemory", -- 2.7.4