Use proper image tiling in synchronization test support checks
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / modules / vulkan / synchronization / vktSynchronizationUtil.cpp
index 1ee8e00..9b6c58d 100644 (file)
@@ -27,6 +27,7 @@
 #include "vkBarrierUtil.hpp"
 #include "deStringUtil.hpp"
 #include <set>
+#include <limits>
 
 namespace vkt
 {
@@ -86,9 +87,14 @@ Move<VkPipeline> makeComputePipeline (const DeviceInterface&         vk,
        }
 }
 
-VkImageCreateInfo makeImageCreateInfo (const VkImageType imageType, const VkExtent3D& extent, const VkFormat format, const VkImageUsageFlags usage)
+VkImageCreateInfo makeImageCreateInfo (const VkImageType                       imageType,
+                                                                          const VkExtent3D&                    extent,
+                                                                          const VkFormat                               format,
+                                                                          const VkImageUsageFlags              usage,
+                                                                          const VkSampleCountFlagBits  samples,
+                                                                          const VkImageTiling                  tiling)
 {
-       const VkImageCreateInfo imageInfo =
+       return
        {
                VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,            // VkStructureType          sType;
                DE_NULL,                                                                        // const void*              pNext;
@@ -98,15 +104,14 @@ VkImageCreateInfo makeImageCreateInfo (const VkImageType imageType, const VkExte
                extent,                                                                         // VkExtent3D               extent;
                1u,                                                                                     // uint32_t                 mipLevels;
                1u,                                                                                     // uint32_t                 arrayLayers;
-               VK_SAMPLE_COUNT_1_BIT,                                          // VkSampleCountFlagBits    samples;
-               VK_IMAGE_TILING_OPTIMAL,                                        // VkImageTiling            tiling;
+               samples,                                                                        // VkSampleCountFlagBits    samples;
+               tiling,                                                                         // VkImageTiling            tiling;
                usage,                                                                          // VkImageUsageFlags        usage;
                VK_SHARING_MODE_EXCLUSIVE,                                      // VkSharingMode            sharingMode;
                0u,                                                                                     // uint32_t                 queueFamilyIndexCount;
                DE_NULL,                                                                        // const uint32_t*          pQueueFamilyIndices;
                VK_IMAGE_LAYOUT_UNDEFINED,                                      // VkImageLayout            initialLayout;
        };
-       return imageInfo;
 }
 
 void beginRenderPassWithRasterizationDisabled (const DeviceInterface&  vk,
@@ -984,10 +989,12 @@ void requireFeatures (const InstanceInterface& vki, const VkPhysicalDevice physD
                throw tcu::NotSupportedError("Tessellation and geometry shaders don't support PointSize built-in");
 }
 
-void requireStorageImageSupport(const InstanceInterface& vki, const VkPhysicalDevice physDevice, const VkFormat fmt)
+void requireStorageImageSupport(const InstanceInterface& vki, const VkPhysicalDevice physDevice, const VkFormat fmt, const VkImageTiling tiling)
 {
-       const VkFormatProperties p = getPhysicalDeviceFormatProperties(vki, physDevice, fmt);
-       if ((p.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) == 0)
+       const VkFormatProperties        p                       = getPhysicalDeviceFormatProperties(vki, physDevice, fmt);
+       const auto&                                     features        = ((tiling == VK_IMAGE_TILING_LINEAR) ? p.linearTilingFeatures : p.optimalTilingFeatures);
+
+       if ((features & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) == 0)
                throw tcu::NotSupportedError("Storage image format not supported");
 }
 
@@ -995,8 +1002,11 @@ std::string getResourceName (const ResourceDescription& resource)
 {
        std::ostringstream str;
 
-       if (resource.type == RESOURCE_TYPE_BUFFER)
+       if ((resource.type == RESOURCE_TYPE_BUFFER) ||
+               (resource.type == RESOURCE_TYPE_INDEX_BUFFER))
+       {
                str << "buffer_" << resource.size.x();
+       }
        else if (resource.type == RESOURCE_TYPE_IMAGE)
        {
                str << "image_" << resource.size.x()
@@ -1050,19 +1060,20 @@ VkSemaphoreSubmitInfoKHR makeCommonSemaphoreSubmitInfo(VkSemaphore semaphore, de
        };
 }
 
-VkDependencyInfoKHR makeCommonDependencyInfo(const VkMemoryBarrier2KHR* pMemoryBarrier, const VkBufferMemoryBarrier2KHR* pBufferMemoryBarrier, const VkImageMemoryBarrier2KHR* pImageMemoryBarrier)
+VkDependencyInfoKHR makeCommonDependencyInfo(const VkMemoryBarrier2KHR* pMemoryBarrier, const VkBufferMemoryBarrier2KHR* pBufferMemoryBarrier, const VkImageMemoryBarrier2KHR* pImageMemoryBarrier,
+                                                                                        bool eventDependency)
 {
        return
        {
-               VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR,          // VkStructureType                                      sType
-               DE_NULL,                                                                        // const void*                                          pNext
-               VK_DEPENDENCY_BY_REGION_BIT,                            // VkDependencyFlags                            dependencyFlags
-               !!pMemoryBarrier,                                                       // deUint32                                                     memoryBarrierCount
-               pMemoryBarrier,                                                         // const VkMemoryBarrier2KHR*           pMemoryBarriers
-               !!pBufferMemoryBarrier,                                         // deUint32                                                     bufferMemoryBarrierCount
-               pBufferMemoryBarrier,                                           // const VkBufferMemoryBarrier2KHR* pBufferMemoryBarriers
-               !!pImageMemoryBarrier,                                          // deUint32                                                     imageMemoryBarrierCount
-               pImageMemoryBarrier                                                     // const VkImageMemoryBarrier2KHR*      pImageMemoryBarriers
+               VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR,                          // VkStructureType                                      sType
+               DE_NULL,                                                                                        // const void*                                          pNext
+               eventDependency ? (VkDependencyFlags)0u : (VkDependencyFlags)VK_DEPENDENCY_BY_REGION_BIT,       // VkDependencyFlags                            dependencyFlags
+               !!pMemoryBarrier,                                                                       // deUint32                                                     memoryBarrierCount
+               pMemoryBarrier,                                                                         // const VkMemoryBarrier2KHR*           pMemoryBarriers
+               !!pBufferMemoryBarrier,                                                         // deUint32                                                     bufferMemoryBarrierCount
+               pBufferMemoryBarrier,                                                           // const VkBufferMemoryBarrier2KHR* pBufferMemoryBarriers
+               !!pImageMemoryBarrier,                                                          // deUint32                                                     imageMemoryBarrierCount
+               pImageMemoryBarrier                                                                     // const VkImageMemoryBarrier2KHR*      pImageMemoryBarriers
        };
 };