Invalid API version test updated for VK 1.1
Affects:
dEQP-VK.api.device_init.create_instance_invalid_api_version
Components: Vulkan
VK-GL-CTS issue: 671
Change-Id: I4f0b4d8a84ca4d9c5940f3d5f83878c9aba70315
(cherry picked from commit f332d70d1f73f0dc655c4bd44eb40a8074828f82)
diff --git a/external/vulkancts/modules/vulkan/api/vktApiDeviceInitializationTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiDeviceInitializationTests.cpp
index 4a82f15..821b0db 100644
--- a/external/vulkancts/modules/vulkan/api/vktApiDeviceInitializationTests.cpp
+++ b/external/vulkancts/modules/vulkan/api/vktApiDeviceInitializationTests.cpp
@@ -61,7 +61,7 @@
tcu::ResultCollector resultCollector (log);
const char* appNames[] = { "appName", DE_NULL, "", "app, name", "app(\"name\"", "app~!@#$%^&*()_+name", "app\nName", "app\r\nName" };
const char* engineNames[] = { "engineName", DE_NULL, "", "engine. name", "engine\"(name)", "eng~!@#$%^&*()_+name", "engine\nName", "engine\r\nName" };
- const int patchNumbers[] = { 0, 1, 2, 3, 4, 5, 13, 4094, 4095 };
+ const int patchNumbers[] = { 0, 1, 2, 3, 4, 5, 13, 4094, 4095 };
const deUint32 appVersions[] = { 0, 1, (deUint32)-1 };
const deUint32 engineVersions[] = { 0, 1, (deUint32)-1 };
const PlatformInterface& platformInterface = context.getPlatformInterface();
@@ -205,12 +205,17 @@
tcu::TestStatus createInstanceWithInvalidApiVersionTest (Context& context)
{
- tcu::TestLog& log = context.getTestContext().getLog();
- tcu::ResultCollector resultCollector (log);
- const PlatformInterface& platformInterface = context.getPlatformInterface();
- const ApiVersion apiVersion = unpackVersion(context.getUsedApiVersion());
- const deUint32 invalidMajorVersion = (1 << 10) - 1;
- const deUint32 invalidMinorVersion = (1 << 10) - 1;
+ tcu::TestLog& log = context.getTestContext().getLog();
+ tcu::ResultCollector resultCollector (log);
+ const PlatformInterface& platformInterface = context.getPlatformInterface();
+
+ deUint32 instanceApiVersion = 0u;
+ context.getPlatformInterface().enumerateInstanceVersion(&instanceApiVersion);
+
+ const ApiVersion apiVersion = unpackVersion(instanceApiVersion);
+
+ const deUint32 invalidMajorVersion = (1 << 10) - 1;
+ const deUint32 invalidMinorVersion = (1 << 10) - 1;
vector<ApiVersion> invalidApiVersions;
invalidApiVersions.push_back(ApiVersion(invalidMajorVersion, apiVersion.minorNum, apiVersion.patchNum));
@@ -242,29 +247,49 @@
log << TestLog::Message
- <<"VK_API_VERSION_" << apiVersion.majorNum << "_" << apiVersion.minorNum
- << " defined in vulkan.h: " << apiVersion
+ << "API version reported by enumerateInstanceVersion: " << apiVersion
<< ", api version used to create instance: " << invalidApiVersions[apiVersionNdx]
<< TestLog::EndMessage;
{
- VkInstance instance = (VkInstance)0;
- const VkResult result = platformInterface.createInstance(&instanceCreateInfo, DE_NULL/*pAllocator*/, &instance);
- const bool gotInstance = !!instance;
+ VkInstance instance = (VkInstance)0;
+ const VkResult result = platformInterface.createInstance(&instanceCreateInfo, DE_NULL/*pAllocator*/, &instance);
+ const bool gotInstance = !!instance;
if (instance)
{
- const InstanceDriver instanceIface (platformInterface, instance);
+ const InstanceDriver instanceIface(platformInterface, instance);
instanceIface.destroyInstance(instance, DE_NULL/*pAllocator*/);
}
- if (result == VK_ERROR_INCOMPATIBLE_DRIVER)
+ if (apiVersion.majorNum == 1 && apiVersion.minorNum == 0)
{
- TCU_CHECK(!gotInstance);
- log << TestLog::Message << "Pass, instance creation with invalid apiVersion is rejected" << TestLog::EndMessage;
+ if (result == VK_ERROR_INCOMPATIBLE_DRIVER)
+ {
+ TCU_CHECK(!gotInstance);
+ log << TestLog::Message << "Pass, instance creation with invalid apiVersion is rejected" << TestLog::EndMessage;
+ }
+ else
+ resultCollector.fail("Fail, instance creation with invalid apiVersion is not rejected");
}
- else
- resultCollector.fail("Fail, instance creation with invalid apiVersion is not rejected");
+ else if (apiVersion.majorNum == 1 && apiVersion.minorNum >= 1)
+ {
+ if (result == VK_SUCCESS)
+ {
+ TCU_CHECK(gotInstance);
+ log << TestLog::Message << "Pass, instance creation with nonstandard apiVersion succeeds for Vulkan 1.1" << TestLog::EndMessage;
+ }
+ else if (result == VK_ERROR_INCOMPATIBLE_DRIVER)
+ {
+ resultCollector.fail("Fail, In Vulkan 1.1 instance creation must not return VK_ERROR_INCOMPATIBLE_DRIVER.");
+ }
+ else
+ {
+ std::ostringstream message;
+ message << "Fail, createInstance failed with " << result;
+ resultCollector.fail(message.str().c_str());
+ }
+ }
}
}