X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=external%2Fvulkancts%2Fmodules%2Fvulkan%2Fapi%2FvktApiFeatureInfo.cpp;h=ae724ca58f00fe1bedfc09688a8398004f1d5c36;hb=68408cad8f37333a80caffb20383c07562131a16;hp=4c9c20f1af0a5c0a8ceeae39de7b8a6ec3c908af;hpb=8ceb3d60e04df988e54a330def06237c2bf7eaec;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 4c9c20f..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); @@ -664,15 +664,16 @@ void checkInstanceExtensions (tcu::ResultCollector& results, const vector& extensions) { - static const char* s_allowedInstanceKhrExtensions[] = + static const char* s_allowedDeviceKhrExtensions[] = { "VK_KHR_swapchain", "VK_KHR_display_swapchain", "VK_KHR_sampler_mirror_clamp_to_edge", "VK_KHR_shader_draw_parameters", + "VK_KHR_maintenance1", }; - checkKhrExtensions(results, extensions, DE_LENGTH_OF_ARRAY(s_allowedInstanceKhrExtensions), s_allowedInstanceKhrExtensions); + checkKhrExtensions(results, extensions, DE_LENGTH_OF_ARRAY(s_allowedDeviceKhrExtensions), s_allowedDeviceKhrExtensions); checkDuplicateExtensions(results, extensions); } @@ -1889,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; } @@ -2085,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");