From: Pyry Haulos Date: Mon, 19 Sep 2016 20:45:45 +0000 (-0700) Subject: Validate KHR extensions reported by the driver X-Git-Tag: upstream/0.1.0~662^2~27 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e9e21088823d9174eb0a61de765c42c00389f903;p=platform%2Fupstream%2FVK-GL-CTS.git Validate KHR extensions reported by the driver Change-Id: I30f1c86cd0b4db63b7adf0860cfbc32a0d8b75ee --- diff --git a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp index 3e144b1..6cec3f8 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp @@ -508,38 +508,83 @@ void collectDuplicates (set& duplicates, const vector& values) } } -bool checkDuplicates (TestLog& log, const char* what, const vector& values) +void checkDuplicates (tcu::ResultCollector& results, const char* what, const vector& values) { set duplicates; collectDuplicates(duplicates, values); - if (duplicates.empty()) + for (set::const_iterator iter = duplicates.begin(); iter != duplicates.end(); ++iter) { - return true; + std::ostringstream msg; + msg << "Duplicate " << what << ": " << *iter; + results.fail(msg.str()); } - else - { - for (set::const_iterator iter = duplicates.begin(); iter != duplicates.end(); ++iter) - log << TestLog::Message << "Duplicate " << what << ": " << *iter << TestLog::EndMessage; +} - return false; +void checkDuplicateExtensions (tcu::ResultCollector& results, const vector& extensions) +{ + checkDuplicates(results, "extension", extensions); +} + +void checkDuplicateLayers (tcu::ResultCollector& results, const vector& layers) +{ + checkDuplicates(results, "layer", layers); +} + +void checkKhrExtensions (tcu::ResultCollector& results, + const vector& extensions, + const int numAllowedKhrExtensions, + const char* const* allowedKhrExtensions) +{ + const set allowedExtSet (allowedKhrExtensions, allowedKhrExtensions+numAllowedKhrExtensions); + + 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_")) && + !de::contains(allowedExtSet, *extIter)) + { + results.fail("Unknown KHR extension " + *extIter); + } } } -bool checkDuplicateExtensions (TestLog& log, const vector& extensions) +void checkInstanceExtensions (tcu::ResultCollector& results, const vector& extensions) { - return checkDuplicates(log, "extension", extensions); + static const char* s_allowedInstanceKhrExtensions[] = + { + "VK_KHR_surface", + "VK_KHR_display", + "VK_KHR_android_surface", + "VK_KHR_mir_surface", + "VK_KHR_wayland_surface", + "VK_KHR_win32_surface", + "VK_KHR_xcb_surface", + "VK_KHR_xlib_surface", + }; + + checkKhrExtensions(results, extensions, DE_LENGTH_OF_ARRAY(s_allowedInstanceKhrExtensions), s_allowedInstanceKhrExtensions); + checkDuplicateExtensions(results, extensions); } -bool checkDuplicateLayers (TestLog& log, const vector& layers) +void checkDeviceExtensions (tcu::ResultCollector& results, const vector& extensions) { - return checkDuplicates(log, "layer", layers); + static const char* s_allowedInstanceKhrExtensions[] = + { + "VK_KHR_swapchain", + "VK_KHR_display_swapchain", + "VK_KHR_sampler_mirror_clamp_to_edge" + }; + + checkKhrExtensions(results, extensions, DE_LENGTH_OF_ARRAY(s_allowedInstanceKhrExtensions), s_allowedInstanceKhrExtensions); + checkDuplicateExtensions(results, extensions); } tcu::TestStatus enumerateInstanceLayers (Context& context) { TestLog& log = context.getTestContext().getLog(); + tcu::ResultCollector results (log); const vector properties = enumerateInstanceLayerProperties(context.getPlatformInterface()); vector layerNames; @@ -550,16 +595,15 @@ tcu::TestStatus enumerateInstanceLayers (Context& context) layerNames.push_back(properties[ndx].layerName); } - if (checkDuplicateLayers(log, layerNames)) - return tcu::TestStatus::pass("Enumerating layers succeeded"); - else - return tcu::TestStatus::fail("Duplicate layers"); + checkDuplicateLayers(results, layerNames); + + return tcu::TestStatus(results.getResult(), results.getMessage()); } tcu::TestStatus enumerateInstanceExtensions (Context& context) { - TestLog& log = context.getTestContext().getLog(); - bool hasDuplicateExtensions = false; + TestLog& log = context.getTestContext().getLog(); + tcu::ResultCollector results (log); { const ScopedLogSection section (log, "Global", "Global Extensions"); @@ -573,8 +617,7 @@ tcu::TestStatus enumerateInstanceExtensions (Context& context) extensionNames.push_back(properties[ndx].extensionName); } - if (!checkDuplicateExtensions(log, extensionNames)) - hasDuplicateExtensions = true; + checkInstanceExtensions(results, extensionNames); } { @@ -593,20 +636,17 @@ tcu::TestStatus enumerateInstanceExtensions (Context& context) extensionNames.push_back(properties[extNdx].extensionName); } - if (!checkDuplicateExtensions(log, extensionNames)) - hasDuplicateExtensions = true; + checkInstanceExtensions(results, extensionNames); } } - if (hasDuplicateExtensions) - return tcu::TestStatus::fail("Duplicate extensions"); - else - return tcu::TestStatus::pass("Enumerating extensions succeeded"); + return tcu::TestStatus(results.getResult(), results.getMessage()); } tcu::TestStatus enumerateDeviceLayers (Context& context) { TestLog& log = context.getTestContext().getLog(); + tcu::ResultCollector results (log); const vector properties = vk::enumerateDeviceLayerProperties(context.getInstanceInterface(), context.getPhysicalDevice()); vector layerNames; @@ -617,16 +657,15 @@ tcu::TestStatus enumerateDeviceLayers (Context& context) layerNames.push_back(properties[ndx].layerName); } - if (checkDuplicateLayers(log, layerNames)) - return tcu::TestStatus::pass("Enumerating layers succeeded"); - else - return tcu::TestStatus::fail("Duplicate layers"); + checkDuplicateLayers(results, layerNames); + + return tcu::TestStatus(results.getResult(), results.getMessage()); } tcu::TestStatus enumerateDeviceExtensions (Context& context) { - TestLog& log = context.getTestContext().getLog(); - bool hasDuplicateExtensions = false; + TestLog& log = context.getTestContext().getLog(); + tcu::ResultCollector results (log); { const ScopedLogSection section (log, "Global", "Global Extensions"); @@ -640,8 +679,7 @@ tcu::TestStatus enumerateDeviceExtensions (Context& context) extensionNames.push_back(properties[ndx].extensionName); } - if (!checkDuplicateExtensions(log, extensionNames)) - hasDuplicateExtensions = true; + checkDeviceExtensions(results, extensionNames); } { @@ -661,15 +699,11 @@ tcu::TestStatus enumerateDeviceExtensions (Context& context) extensionNames.push_back(properties[extNdx].extensionName); } - if (!checkDuplicateExtensions(log, extensionNames)) - hasDuplicateExtensions = true; + checkDeviceExtensions(results, extensionNames); } } - if (hasDuplicateExtensions) - return tcu::TestStatus::fail("Duplicate extensions"); - else - return tcu::TestStatus::pass("Enumerating extensions succeeded"); + return tcu::TestStatus(results.getResult(), results.getMessage()); } #define VK_SIZE_OF(STRUCT, MEMBER) (sizeof(((STRUCT*)0)->MEMBER))