Merge vk-gl-cts/vulkan-cts-1.1.0 into vk-gl-cts/vulkan-cts-1.1.1
Change-Id: I4b35a41d666a707410f88f222c93b661f7d983a1
diff --git a/external/vulkancts/modules/vulkan/api/vktApiGetMemoryCommitment.cpp b/external/vulkancts/modules/vulkan/api/vktApiGetMemoryCommitment.cpp
index 7dd59a9..cfedca0 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiGetMemoryCommitment.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiGetMemoryCommitment.cpp
@@ -488,7 +488,7 @@
const VkClearRect clearRect =
{
rect,
- 1u, // baseArrayLayer
+ 0u, // baseArrayLayer
1u // layerCount
};
diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp
index 2ac1510..229ad73 100644
--- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp
+++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp
@@ -204,6 +204,7 @@
std::vector<vk::VkSwapchainCreateInfoKHR> generateSwapchainParameterCases (vk::wsi::Type wsiType,
TestDimension dimension,
+ const ProtectedContext& context,
const vk::VkSurfaceCapabilitiesKHR& capabilities,
const std::vector<vk::VkSurfaceFormatKHR>& formats,
const std::vector<vk::VkPresentModeKHR>& presentModes)
@@ -239,8 +240,62 @@
{
case TEST_DIMENSION_MIN_IMAGE_COUNT:
{
- const deUint32 maxImageCountToTest = de::clamp(16u, capabilities.minImageCount, (capabilities.maxImageCount > 0) ? capabilities.maxImageCount : capabilities.minImageCount + 16u);
+ // Estimate how much memory each swapchain image consumes. This isn't perfect, since
+ // swapchain images may have additional constraints that equivalent non-swapchain
+ // images don't have. But it's the best we can do.
+ const vk::DeviceInterface& vkd = context.getDeviceInterface();
+ vk::VkDevice device = context.getDevice();
+ vk::VkMemoryRequirements memoryRequirements;
+ {
+ const vk::VkImageCreateInfo imageInfo =
+ {
+ vk::VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
+ DE_NULL,
+ vk::VK_IMAGE_CREATE_PROTECTED_BIT,
+ vk::VK_IMAGE_TYPE_2D,
+ baseParameters.imageFormat,
+ {
+ baseParameters.imageExtent.width,
+ baseParameters.imageExtent.height,
+ 1,
+ },
+ 1, // mipLevels
+ baseParameters.imageArrayLayers,
+ vk::VK_SAMPLE_COUNT_1_BIT,
+ vk::VK_IMAGE_TILING_OPTIMAL,
+ baseParameters.imageUsage,
+ baseParameters.imageSharingMode,
+ baseParameters.queueFamilyIndexCount,
+ baseParameters.pQueueFamilyIndices,
+ vk::VK_IMAGE_LAYOUT_UNDEFINED
+ };
+ vk::Move<vk::VkImage> image = vk::createImage(vkd, device, &imageInfo);
+ memoryRequirements = vk::getImageMemoryRequirements(vkd, device, *image);
+ }
+
+ // Determine the maximum memory heap space available for protected images
+ vk::VkPhysicalDeviceMemoryProperties memoryProperties = vk::getPhysicalDeviceMemoryProperties(context.getInstanceDriver(), context.getPhysicalDevice());
+ vk::VkDeviceSize protectedHeapSize = 0;
+ deUint32 protectedHeapMask = 0;
+ for (deUint32 memType = 0; memType < memoryProperties.memoryTypeCount; memType++)
+ {
+ deUint32 heapIndex = memoryProperties.memoryTypes[memType].heapIndex;
+ if ((memoryRequirements.memoryTypeBits & (1u << memType)) != 0 &&
+ (memoryProperties.memoryTypes[memType].propertyFlags & vk::VK_MEMORY_PROPERTY_PROTECTED_BIT) != 0 &&
+ (protectedHeapMask & (1u << heapIndex)) == 0)
+ {
+ protectedHeapSize = de::max(protectedHeapSize, memoryProperties.memoryHeaps[heapIndex].size);
+ protectedHeapMask |= 1u << heapIndex;
+ }
+ }
+
+ // If the implementation doesn't have a max image count, min+16 means we won't clamp.
+ // Limit it to how many protected images we estimate can be allocated, with one image
+ // worth of slack for alignment, swapchain-specific constraints, etc.
+ const deUint32 maxImageCount = de::min((capabilities.maxImageCount > 0) ? capabilities.maxImageCount : capabilities.minImageCount + 16u,
+ deUint32(protectedHeapSize / memoryRequirements.size) - 1);
+ const deUint32 maxImageCountToTest = de::clamp(16u, capabilities.minImageCount, maxImageCount);
for (deUint32 imageCount = capabilities.minImageCount; imageCount <= maxImageCountToTest; ++imageCount)
{
cases.push_back(baseParameters);
@@ -404,10 +459,11 @@
std::vector<vk::VkSwapchainCreateInfoKHR> generateSwapchainParameterCases (vk::wsi::Type wsiType,
TestDimension dimension,
- const vk::InstanceInterface& vki,
- vk::VkPhysicalDevice physicalDevice,
+ const ProtectedContext& context,
vk::VkSurfaceKHR surface)
{
+ const vk::InstanceInterface& vki = context.getInstanceDriver();
+ vk::VkPhysicalDevice physicalDevice = context.getPhysicalDevice();
const vk::VkSurfaceCapabilitiesKHR capabilities = vk::wsi::getPhysicalDeviceSurfaceCapabilities(vki,
physicalDevice,
surface);
@@ -418,7 +474,7 @@
physicalDevice,
surface);
- return generateSwapchainParameterCases(wsiType, dimension, capabilities, formats, presentModes);
+ return generateSwapchainParameterCases(wsiType, dimension, context, capabilities, formats, presentModes);
}
tcu::TestStatus createSwapchainTest (Context& baseCtx, TestParameters params)
@@ -432,10 +488,9 @@
ProtectedContext context (baseCtx, params.wsiType, *native.display, *native.window, instExts, devExts);
vk::VkSurfaceKHR surface = context.getSurface();
const std::vector<vk::VkSwapchainCreateInfoKHR> cases (generateSwapchainParameterCases(params.wsiType,
- params.dimension,
- context.getInstanceDriver(),
- context.getPhysicalDevice(),
- surface));
+ params.dimension,
+ context,
+ surface));
deUint32 queueIdx = context.getQueueFamilyIndex();
for (size_t caseNdx = 0; caseNdx < cases.size(); ++caseNdx)
{