#include "vkBarrierUtil.hpp"
#include "deStringUtil.hpp"
#include <set>
+#include <limits>
namespace vkt
{
const VkExtent3D& extent,
const VkFormat format,
const VkImageUsageFlags usage,
- const VkSampleCountFlagBits samples)
+ const VkSampleCountFlagBits samples,
+ const VkImageTiling tiling)
{
return
{
1u, // uint32_t mipLevels;
1u, // uint32_t arrayLayers;
samples, // VkSampleCountFlagBits samples;
- VK_IMAGE_TILING_OPTIMAL, // VkImageTiling tiling;
+ tiling, // VkImageTiling tiling;
usage, // VkImageUsageFlags usage;
VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode;
0u, // uint32_t queueFamilyIndexCount;
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");
}
};
}
-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
};
};