#include "vkBarrierUtil.hpp"
#include "deStringUtil.hpp"
#include <set>
+#include <limits>
namespace vkt
{
}
}
-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;
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,
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");
}
{
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()
};
}
-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
};
};