X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=external%2Fvulkancts%2Fmodules%2Fvulkan%2Fapi%2FvktApiFeatureInfo.cpp;h=ae724ca58f00fe1bedfc09688a8398004f1d5c36;hb=68408cad8f37333a80caffb20383c07562131a16;hp=5d14006c780a8986f2c9b58f76326ba1c3cf6b8a;hpb=c0a99b09e9b462d6179324f874fee91db289c864;p=platform%2Fupstream%2FVK-GL-CTS.git diff --git a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp index 5d14006..ae724ca 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp @@ -635,7 +635,7 @@ void checkKhrExtensions (tcu::ResultCollector& results, for (vector::const_iterator extIter = extensions.begin(); extIter != extensions.end(); ++extIter) { // Only Khronos-controlled extensions are checked - if ((de::beginsWith(*extIter, "VK_KHR_") || de::beginsWith(*extIter, "VK_KHX_")) && + if (de::beginsWith(*extIter, "VK_KHR_") && !de::contains(allowedExtSet, *extIter)) { results.fail("Unknown KHR extension " + *extIter); @@ -1890,6 +1890,28 @@ bool isRequiredImageParameterCombination (const VkPhysicalDeviceFeatures& device DE_ASSERT(deviceFeatures.sparseBinding || (createFlags & (VK_IMAGE_CREATE_SPARSE_BINDING_BIT|VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)) == 0); DE_ASSERT(deviceFeatures.sparseResidencyAliased || (createFlags & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT) == 0); + if (createFlags & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) + { + if (isCompressedFormat(format)) + return false; + + if (isDepthStencilFormat(format)) + return false; + + if (!deIsPowerOfTwo32(mapVkFormat(format).getPixelSize())) + return false; + + switch (imageType) + { + case VK_IMAGE_TYPE_2D: + return (deviceFeatures.sparseResidencyImage2D == VK_TRUE); + case VK_IMAGE_TYPE_3D: + return (deviceFeatures.sparseResidencyImage3D == VK_TRUE); + default: + return false; + } + } + return true; } @@ -2086,12 +2108,28 @@ tcu::TestStatus imageFormatProperties (Context& context, const VkFormat format, results.check(imageType != VK_IMAGE_TYPE_3D || (properties.maxExtent.width >= 1 && properties.maxExtent.height >= 1 && properties.maxExtent.depth >= 1), "Invalid dimensions for 3D image"); results.check(imageType != VK_IMAGE_TYPE_3D || properties.maxArrayLayers == 1, "Invalid maxArrayLayers for 3D image"); - if (tiling == VK_IMAGE_TILING_OPTIMAL && imageType == VK_IMAGE_TYPE_2D && !(curCreateFlags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) && - ((supportedFeatures & (VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)) || - ((supportedFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) && deviceFeatures.shaderStorageImageMultisample))) + if (tiling == VK_IMAGE_TILING_OPTIMAL) { - const VkSampleCountFlags requiredSampleCounts = getRequiredOptimalTilingSampleCounts(deviceLimits, format, curUsageFlags); - results.check((properties.sampleCounts & requiredSampleCounts) == requiredSampleCounts, "Required sample counts not supported"); + // Vulkan API specification has changed since initial Android Nougat release. + // For NYC CTS we need to tolerate old behavior as well and issue compatibility + // warning instead. + // + // See spec issues 272, 282, 302, 445 and CTS issues 369, 440. + const bool requiredByNewSpec = (imageType == VK_IMAGE_TYPE_2D && !(curCreateFlags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) && + ((supportedFeatures & (VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)) || + ((supportedFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) && deviceFeatures.shaderStorageImageMultisample))); + + if (requiredByNewSpec) + { + const VkSampleCountFlags requiredSampleCounts = getRequiredOptimalTilingSampleCounts(deviceLimits, format, curUsageFlags); + + results.check((properties.sampleCounts & requiredSampleCounts) == requiredSampleCounts, "Required sample counts not supported"); + } + else if (properties.sampleCounts != VK_SAMPLE_COUNT_1_BIT) + { + results.addResult(QP_TEST_RESULT_COMPATIBILITY_WARNING, + "Implementation supports more sample counts than allowed by the spec"); + } } else results.check(properties.sampleCounts == VK_SAMPLE_COUNT_1_BIT, "sampleCounts != VK_SAMPLE_COUNT_1_BIT");