From 47239351c6d36f73a0cf89292d81e5d9f772056b Mon Sep 17 00:00:00 2001 From: Ricardo Garcia Date: Thu, 13 Jun 2019 11:43:52 +0200 Subject: [PATCH] Enable validation layers for custom devices and instances Honor the --deqp-validation=enable command line option in tests using custom devices and instances. Affected tests: dEQP-VK.api.buffer.* dEQP-VK.api.device_init.* dEQP-VK.api.external.memory.* dEQP-VK.api.info.* dEQP-VK.api.object_management.* dEQP-VK.api.version_check.* dEQP-VK.compute.basic.* dEQP-VK.compute.device_group.* dEQP-VK.device_group.* dEQP-VK.image.swapchain_mutable.* dEQP-VK.memory.allocation.* dEQP-VK.memory.device_group_allocation.* dEQP-VK.multiview.* dEQP-VK.pipeline.push_descriptor.* dEQP-VK.protected_memory.* dEQP-VK.robustness.* dEQP-VK.sparse_resources.* dEQP-VK.synchronization.basic.semaphore.* dEQP-VK.synchronization.cross_instance.* dEQP-VK.synchronization.internally_synchronized_objects.* dEQP-VK.synchronization.op.multi_queue.* dEQP-VK.synchronization.smoke.* dEQP-VK.synchronization.win32_keyed_mutex.* dEQP-VK.wsi.* dEQP-VK.ycbcr.format.* Components: Vulkan VK-GL-CTS issue: 1831 Change-Id: Id4f8f1d5053807740f3cb850554e9e80f5d7319b --- AndroidGen.mk | 1 + .../vulkancts/framework/vulkan/vkDeviceUtil.cpp | 58 +-- .../vulkancts/framework/vulkan/vkDeviceUtil.hpp | 8 - external/vulkancts/modules/vulkan/CMakeLists.txt | 2 + .../vulkan/api/vktApiDeviceInitializationTests.cpp | 160 +++--- .../vulkan/api/vktApiExternalMemoryTests.cpp | 547 +++++++++++---------- .../modules/vulkan/api/vktApiFeatureInfo.cpp | 56 +-- .../vulkan/api/vktApiObjectManagementTests.cpp | 42 +- .../modules/vulkan/api/vktApiVersionCheck.cpp | 91 ++-- .../compute/vktComputeBasicComputeShaderTests.cpp | 18 +- .../device_group/vktDeviceGroupRendering.cpp | 25 +- .../modules/vulkan/image/vktImageMutableTests.cpp | 35 +- .../vulkan/memory/vktMemoryAllocationTests.cpp | 12 +- .../vulkan/multiview/vktMultiViewRenderTests.cpp | 5 +- .../pipeline/vktPipelinePushDescriptorTests.cpp | 127 +++-- .../protected_memory/vktProtectedMemContext.cpp | 22 +- .../protected_memory/vktProtectedMemContext.hpp | 7 +- .../protected_memory/vktProtectedMemUtils.cpp | 31 +- .../protected_memory/vktProtectedMemUtils.hpp | 7 +- .../vulkan/robustness/vktRobustnessUtil.cpp | 10 +- .../sparse_resources/vktSparseResourcesBase.cpp | 9 +- .../sparse_resources/vktSparseResourcesBase.hpp | 3 +- .../vktSynchronizationBasicSemaphoreTests.cpp | 5 +- ...vktSynchronizationCrossInstanceSharingTests.cpp | 226 +++------ ...onizationInternallySynchronizedObjectsTests.cpp | 4 +- .../vktSynchronizationOperationMultiQueueTests.cpp | 4 +- .../vktSynchronizationSmokeTests.cpp | 8 +- .../vktSynchronizationWin32KeyedMutexTests.cpp | 89 ++-- .../modules/vulkan/vktCustomInstancesDevices.cpp | 364 ++++++++++++++ .../modules/vulkan/vktCustomInstancesDevices.hpp | 119 +++++ external/vulkancts/modules/vulkan/vktTestCase.cpp | 107 ++-- external/vulkancts/modules/vulkan/vktTestCase.hpp | 13 +- .../vulkancts/modules/vulkan/vktTestPackage.cpp | 43 +- .../modules/vulkan/wsi/vktWsiColorSpaceTests.cpp | 46 +- .../vulkan/wsi/vktWsiDisplayTimingTests.cpp | 30 +- .../vulkan/wsi/vktWsiIncrementalPresentTests.cpp | 30 +- .../wsi/vktWsiSharedPresentableImageTests.cpp | 31 +- .../modules/vulkan/wsi/vktWsiSurfaceTests.cpp | 100 ++-- .../modules/vulkan/wsi/vktWsiSwapchainTests.cpp | 91 ++-- .../modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp | 6 +- 40 files changed, 1488 insertions(+), 1104 deletions(-) create mode 100644 external/vulkancts/modules/vulkan/vktCustomInstancesDevices.cpp create mode 100644 external/vulkancts/modules/vulkan/vktCustomInstancesDevices.hpp diff --git a/AndroidGen.mk b/AndroidGen.mk index eeff64e..084daa6 100644 --- a/AndroidGen.mk +++ b/AndroidGen.mk @@ -393,6 +393,7 @@ LOCAL_SRC_FILES := \ external/vulkancts/modules/vulkan/ubo/vktUniformBlockTests.cpp \ external/vulkancts/modules/vulkan/util/vktDrawUtil.cpp \ external/vulkancts/modules/vulkan/util/vktExternalMemoryUtil.cpp \ + external/vulkancts/modules/vulkan/vktCustomInstancesDevices.cpp \ external/vulkancts/modules/vulkan/vktInfoTests.cpp \ external/vulkancts/modules/vulkan/vktShaderLibrary.cpp \ external/vulkancts/modules/vulkan/vktTestCase.cpp \ diff --git a/external/vulkancts/framework/vulkan/vkDeviceUtil.cpp b/external/vulkancts/framework/vulkan/vkDeviceUtil.cpp index b76a208..0ffdf7e 100644 --- a/external/vulkancts/framework/vulkan/vkDeviceUtil.cpp +++ b/external/vulkancts/framework/vulkan/vkDeviceUtil.cpp @@ -21,10 +21,12 @@ * \brief Instance and device initialization utilities. *//*--------------------------------------------------------------------*/ +#include "deSTLUtil.hpp" #include "vkDeviceUtil.hpp" #include "vkQueryUtil.hpp" #include "vkRefUtil.hpp" #include "vkApiVersion.hpp" +#include "vkDebugReportUtil.hpp" #include "tcuCommandLine.hpp" @@ -42,8 +44,27 @@ Move createDefaultInstance (const PlatformInterface& vkPlatform, const vector& enabledExtensions, const VkAllocationCallbacks* pAllocator) { + bool validationEnabled = (!enabledLayers.empty()); + vector actualExtensions = enabledExtensions; + + if (validationEnabled) + { + // Make sure the debug report extension is enabled when validation is enabled. + if (!isDebugReportSupported(vkPlatform)) + TCU_THROW(NotSupportedError, "VK_EXT_debug_report is not supported"); + + if (!de::contains(begin(actualExtensions), end(actualExtensions), "VK_EXT_debug_report")) + actualExtensions.push_back("VK_EXT_debug_report"); + } + vector layerNamePtrs (enabledLayers.size()); - vector extensionNamePtrs (enabledExtensions.size()); + vector extensionNamePtrs (actualExtensions.size()); + + for (size_t ndx = 0; ndx < enabledLayers.size(); ++ndx) + layerNamePtrs[ndx] = enabledLayers[ndx].c_str(); + + for (size_t ndx = 0; ndx < actualExtensions.size(); ++ndx) + extensionNamePtrs[ndx] = actualExtensions[ndx].c_str(); const struct VkApplicationInfo appInfo = { @@ -62,17 +83,11 @@ Move createDefaultInstance (const PlatformInterface& vkPlatform, (VkInstanceCreateFlags)0, &appInfo, (deUint32)layerNamePtrs.size(), - layerNamePtrs.empty() ? DE_NULL : &layerNamePtrs[0], + (validationEnabled ? layerNamePtrs.data() : DE_NULL), (deUint32)extensionNamePtrs.size(), - extensionNamePtrs.empty() ? DE_NULL : &extensionNamePtrs[0], + (extensionNamePtrs.empty() ? DE_NULL : extensionNamePtrs.data()), }; - for (size_t ndx = 0; ndx < enabledLayers.size(); ++ndx) - layerNamePtrs[ndx] = enabledLayers[ndx].c_str(); - - for (size_t ndx = 0; ndx < enabledExtensions.size(); ++ndx) - extensionNamePtrs[ndx] = enabledExtensions[ndx].c_str(); - return createInstance(vkPlatform, &instanceInfo, pAllocator); } @@ -81,31 +96,6 @@ Move createDefaultInstance (const PlatformInterface& vkPlatform, deU return createDefaultInstance(vkPlatform, apiVersion, vector(), vector(), DE_NULL); } -Move createInstanceWithExtensions (const PlatformInterface& vkp, - const deUint32 version, - const std::vector requiredExtensions) -{ - std::vector extensionPtrs; - const std::vector availableExtensions = enumerateInstanceExtensionProperties(vkp, DE_NULL); - for (size_t extensionID = 0; extensionID < requiredExtensions.size(); extensionID++) - { - if (!isInstanceExtensionSupported(version, availableExtensions, RequiredExtension(requiredExtensions[extensionID]))) - TCU_THROW(NotSupportedError, (requiredExtensions[extensionID] + " is not supported").c_str()); - - if (!isCoreInstanceExtension(version, requiredExtensions[extensionID])) - extensionPtrs.push_back(requiredExtensions[extensionID]); - } - - return createDefaultInstance(vkp, version, std::vector() /* layers */, extensionPtrs, DE_NULL); -} - -Move createInstanceWithExtension (const PlatformInterface& vkp, - const deUint32 version, - const std::string requiredExtension) -{ - return createInstanceWithExtensions(vkp, version, std::vector(1, requiredExtension)); -} - deUint32 chooseDeviceIndex (const InstanceInterface& vkInstance, const VkInstance instance, const tcu::CommandLine& cmdLine) { const vector devices = enumeratePhysicalDevices(vkInstance, instance); diff --git a/external/vulkancts/framework/vulkan/vkDeviceUtil.hpp b/external/vulkancts/framework/vulkan/vkDeviceUtil.hpp index f719202..cebdf15 100644 --- a/external/vulkancts/framework/vulkan/vkDeviceUtil.hpp +++ b/external/vulkancts/framework/vulkan/vkDeviceUtil.hpp @@ -46,14 +46,6 @@ Move createDefaultInstance (const PlatformInterface& vkPlatform, const std::vector& enabledExtensions, const VkAllocationCallbacks* pAllocator = DE_NULL); -Move createInstanceWithExtensions (const PlatformInterface& vkp, - const deUint32 version, - const std::vector requiredExtensions); - -Move createInstanceWithExtension (const PlatformInterface& vkp, - const deUint32 version, - const std::string requiredExtension); - deUint32 chooseDeviceIndex (const InstanceInterface& vkInstance, const VkInstance instance, const tcu::CommandLine& cmdLine); diff --git a/external/vulkancts/modules/vulkan/CMakeLists.txt b/external/vulkancts/modules/vulkan/CMakeLists.txt index 96902c8..c2234b0 100644 --- a/external/vulkancts/modules/vulkan/CMakeLists.txt +++ b/external/vulkancts/modules/vulkan/CMakeLists.txt @@ -94,6 +94,8 @@ set(DEQP_VK_SRCS vktTestGroupUtil.hpp vktInfoTests.cpp vktInfoTests.hpp + vktCustomInstancesDevices.cpp + vktCustomInstancesDevices.hpp ) set(DEQP_VK_LIBS diff --git a/external/vulkancts/modules/vulkan/api/vktApiDeviceInitializationTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiDeviceInitializationTests.cpp index eff193d..41adc97 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiDeviceInitializationTests.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiDeviceInitializationTests.cpp @@ -23,6 +23,7 @@ #include "vktApiDeviceInitializationTests.hpp" #include "vktTestCaseUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkPlatform.hpp" @@ -65,7 +66,6 @@ tcu::TestStatus createInstanceTest (Context& context) 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(); const deUint32 apiVersion = context.getUsedApiVersion(); vector appInfos; @@ -192,7 +192,7 @@ tcu::TestStatus createInstanceTest (Context& context) try { - const Unique instance(createInstance(platformInterface, &instanceCreateInfo)); + CustomInstance instance = createCustomInstanceFromInfo(context, &instanceCreateInfo); log << TestLog::Message << "Succeeded" << TestLog::EndMessage; } catch (const vk::Error& err) @@ -211,7 +211,7 @@ tcu::TestStatus createInstanceWithInvalidApiVersionTest (Context& context) const PlatformInterface& platformInterface = context.getPlatformInterface(); deUint32 instanceApiVersion = 0u; - context.getPlatformInterface().enumerateInstanceVersion(&instanceApiVersion); + platformInterface.enumerateInstanceVersion(&instanceApiVersion); const ApiVersion apiVersion = unpackVersion(instanceApiVersion); @@ -234,7 +234,7 @@ tcu::TestStatus createInstanceWithInvalidApiVersionTest (Context& context) 0u, // deUint32 engineVersion; pack(invalidApiVersions[apiVersionNdx]), // deUint32 apiVersion; }; - const VkInstanceCreateInfo instanceCreateInfo = + const VkInstanceCreateInfo instanceCreateInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // VkStructureType sType; DE_NULL, // const void* pNext; @@ -246,28 +246,20 @@ tcu::TestStatus createInstanceWithInvalidApiVersionTest (Context& context) DE_NULL, // const char*const* ppEnabledExtensionNames; }; - log << TestLog::Message << "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; - - if (instance) - { - const InstanceDriver instanceIface(platformInterface, instance); - instanceIface.destroyInstance(instance, DE_NULL/*pAllocator*/); - } + UncheckedInstance instance; + const VkResult result = createUncheckedInstance(context, &instanceCreateInfo, DE_NULL, &instance); if (apiVersion.majorNum == 1 && apiVersion.minorNum == 0) { if (result == VK_ERROR_INCOMPATIBLE_DRIVER) { - TCU_CHECK(!gotInstance); + TCU_CHECK(!static_cast(instance)); log << TestLog::Message << "Pass, instance creation with invalid apiVersion is rejected" << TestLog::EndMessage; } else @@ -277,7 +269,7 @@ tcu::TestStatus createInstanceWithInvalidApiVersionTest (Context& context) { if (result == VK_SUCCESS) { - TCU_CHECK(gotInstance); + TCU_CHECK(static_cast(instance)); log << TestLog::Message << "Pass, instance creation with nonstandard apiVersion succeeds for Vulkan 1.1" << TestLog::EndMessage; } else if (result == VK_ERROR_INCOMPATIBLE_DRIVER) @@ -301,9 +293,8 @@ tcu::TestStatus createInstanceWithNullApplicationInfoTest (Context& context) { tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); - const PlatformInterface& platformInterface = context.getPlatformInterface(); - const VkInstanceCreateInfo instanceCreateInfo = + const VkInstanceCreateInfo instanceCreateInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // VkStructureType sType; DE_NULL, // const void* pNext; @@ -319,7 +310,7 @@ tcu::TestStatus createInstanceWithNullApplicationInfoTest (Context& context) try { - const Unique instance(createInstance(platformInterface, &instanceCreateInfo)); + CustomInstance instance = createCustomInstanceFromInfo(context, &instanceCreateInfo); log << TestLog::Message << "Succeeded" << TestLog::EndMessage; } catch (const vk::Error& err) @@ -333,7 +324,6 @@ tcu::TestStatus createInstanceWithNullApplicationInfoTest (Context& context) tcu::TestStatus createInstanceWithUnsupportedExtensionsTest (Context& context) { tcu::TestLog& log = context.getTestContext().getLog(); - const PlatformInterface& platformInterface = context.getPlatformInterface(); const char* enabledExtensions[] = {"VK_UNSUPPORTED_EXTENSION", "THIS_IS_NOT_AN_EXTENSION"}; const deUint32 apiVersion = context.getUsedApiVersion(); const VkApplicationInfo appInfo = @@ -346,6 +336,7 @@ tcu::TestStatus createInstanceWithUnsupportedExtensionsTest (Context& context) 0u, // deUint32 engineVersion; apiVersion, // deUint32 apiVersion; }; + const VkInstanceCreateInfo instanceCreateInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // VkStructureType sType; @@ -364,19 +355,12 @@ tcu::TestStatus createInstanceWithUnsupportedExtensionsTest (Context& context) log << TestLog::Message << enabledExtensions[ndx] << TestLog::EndMessage; { - 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); - instanceIface.destroyInstance(instance, DE_NULL/*pAllocator*/); - } + UncheckedInstance instance; + const VkResult result = createUncheckedInstance(context, &instanceCreateInfo, DE_NULL, &instance); if (result == VK_ERROR_EXTENSION_NOT_PRESENT) { - TCU_CHECK(!gotInstance); + TCU_CHECK(!static_cast(instance)); return tcu::TestStatus::pass("Pass, creating instance with unsupported extension was rejected."); } else @@ -463,7 +447,6 @@ string getUTF8AbuseString (int index) tcu::TestStatus createInstanceWithExtensionNameAbuseTest (Context& context) { - const PlatformInterface& platformInterface = context.getPlatformInterface(); const char* extensionList[1] = { 0 }; const deUint32 apiVersion = context.getUsedApiVersion(); deUint32 failCount = 0; @@ -497,20 +480,13 @@ tcu::TestStatus createInstanceWithExtensionNameAbuseTest (Context& context) }; { - 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); - instanceIface.destroyInstance(instance, DE_NULL/*pAllocator*/); - } + UncheckedInstance instance; + const VkResult result = createUncheckedInstance(context, &instanceCreateInfo, DE_NULL, &instance); if (result != VK_ERROR_EXTENSION_NOT_PRESENT) failCount++; - TCU_CHECK(!gotInstance); + TCU_CHECK(!static_cast(instance)); } } @@ -582,9 +558,9 @@ tcu::TestStatus createInstanceWithLayerNameAbuseTest (Context& context) tcu::TestStatus createDeviceTest (Context& context) { const PlatformInterface& platformInterface = context.getPlatformInterface(); - const Unique instance (createDefaultInstance(platformInterface, context.getUsedApiVersion())); - const InstanceDriver instanceDriver (platformInterface, instance.get()); - const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance.get(), context.getTestContext().getCommandLine()); + const CustomInstance instance (createCustomInstanceFromContext(context)); + const InstanceDriver& instanceDriver (instance.getDriver()); + const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const deUint32 queueIndex = 0; @@ -601,6 +577,7 @@ tcu::TestStatus createDeviceTest (Context& context) queueCount, //queueCount; &queuePriority, //pQueuePriorities; }; + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; @@ -615,8 +592,8 @@ tcu::TestStatus createDeviceTest (Context& context) DE_NULL, //pEnabledFeatures; }; - const Unique device (createDevice(platformInterface, *instance, instanceDriver, physicalDevice, &deviceCreateInfo)); - const DeviceDriver deviceDriver (platformInterface, instance.get(), device.get()); + const Unique device (createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), platformInterface, instance, instanceDriver, physicalDevice, &deviceCreateInfo)); + const DeviceDriver deviceDriver (platformInterface, instance, device.get()); const VkQueue queue = getDeviceQueue(deviceDriver, *device, queueFamilyIndex, queueIndex); VK_CHECK(deviceDriver.queueWaitIdle(queue)); @@ -630,9 +607,9 @@ tcu::TestStatus createMultipleDevicesTest (Context& context) tcu::ResultCollector resultCollector (log); const int numDevices = 5; const PlatformInterface& platformInterface = context.getPlatformInterface(); - const Unique instance (createDefaultInstance(platformInterface, context.getUsedApiVersion())); - const InstanceDriver instanceDriver (platformInterface, instance.get()); - const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance.get(), context.getTestContext().getCommandLine()); + const CustomInstance instance (createCustomInstanceFromContext(context)); + const InstanceDriver& instanceDriver (instance.getDriver()); + const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const vector queueFamilyProperties = getPhysicalDeviceQueueFamilyProperties(instanceDriver, physicalDevice); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; @@ -647,6 +624,7 @@ tcu::TestStatus createMultipleDevicesTest (Context& context) queueCount, //queueCount; &queuePriority, //pQueuePriorities; }; + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; @@ -660,13 +638,14 @@ tcu::TestStatus createMultipleDevicesTest (Context& context) DE_NULL, //ppEnabledExtensionNames; DE_NULL, //pEnabledFeatures; }; + vector devices(numDevices, (VkDevice)DE_NULL); try { for (int deviceNdx = 0; deviceNdx < numDevices; deviceNdx++) { - const VkResult result = instanceDriver.createDevice(physicalDevice, &deviceCreateInfo, DE_NULL/*pAllocator*/, &devices[deviceNdx]); + const VkResult result = createUncheckedDevice(context.getTestContext().getCommandLine().isValidationEnabled(), instanceDriver, physicalDevice, &deviceCreateInfo, DE_NULL/*pAllocator*/, &devices[deviceNdx]); if (result != VK_SUCCESS) { @@ -675,7 +654,7 @@ tcu::TestStatus createMultipleDevicesTest (Context& context) } { - const DeviceDriver deviceDriver (platformInterface, instance.get(), devices[deviceNdx]); + const DeviceDriver deviceDriver (platformInterface, instance, devices[deviceNdx]); const VkQueue queue = getDeviceQueue(deviceDriver, devices[deviceNdx], queueFamilyIndex, queueIndex); VK_CHECK(deviceDriver.queueWaitIdle(queue)); @@ -692,7 +671,7 @@ tcu::TestStatus createMultipleDevicesTest (Context& context) { if (devices[deviceNdx] != (VkDevice)DE_NULL) { - DeviceDriver deviceDriver(platformInterface, instance.get(), devices[deviceNdx]); + DeviceDriver deviceDriver(platformInterface, instance, devices[deviceNdx]); deviceDriver.destroyDevice(devices[deviceNdx], DE_NULL/*pAllocator*/); } } @@ -704,7 +683,7 @@ tcu::TestStatus createMultipleDevicesTest (Context& context) { if (devices[deviceNdx] != (VkDevice)DE_NULL) { - DeviceDriver deviceDriver(platformInterface, instance.get(), devices[deviceNdx]); + DeviceDriver deviceDriver(platformInterface, instance, devices[deviceNdx]); deviceDriver.destroyDevice(devices[deviceNdx], DE_NULL/*pAllocator*/); } } @@ -716,10 +695,10 @@ tcu::TestStatus createDeviceWithUnsupportedExtensionsTest (Context& context) { tcu::TestLog& log = context.getTestContext().getLog(); const PlatformInterface& platformInterface = context.getPlatformInterface(); - const Unique instance (createDefaultInstance(platformInterface, context.getUsedApiVersion())); - const InstanceDriver instanceDriver (platformInterface, instance.get()); + const CustomInstance instance (createCustomInstanceFromContext(context, DE_NULL, false)); + const InstanceDriver& instanceDriver (instance.getDriver()); const char* enabledExtensions[] = {"VK_UNSUPPORTED_EXTENSION", "THIS_IS_NOT_AN_EXTENSION", "VK_DONT_SUPPORT_ME"}; - const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance.get(), context.getTestContext().getCommandLine()); + const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const float queuePriority = 1.0f; const VkDeviceQueueCreateInfo deviceQueueCreateInfo = { @@ -730,6 +709,7 @@ tcu::TestStatus createDeviceWithUnsupportedExtensionsTest (Context& context) 1, //queueCount; &queuePriority, //pQueuePriorities; }; + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; @@ -751,12 +731,12 @@ tcu::TestStatus createDeviceWithUnsupportedExtensionsTest (Context& context) { VkDevice device = (VkDevice)0; - const VkResult result = instanceDriver.createDevice(physicalDevice, &deviceCreateInfo, DE_NULL/*pAllocator*/, &device); + const VkResult result = createUncheckedDevice(context.getTestContext().getCommandLine().isValidationEnabled(), instanceDriver, physicalDevice, &deviceCreateInfo, DE_NULL/*pAllocator*/, &device); const bool gotDevice = !!device; if (device) { - const DeviceDriver deviceIface (platformInterface, instance.get(), device); + const DeviceDriver deviceIface (platformInterface, instance, device); deviceIface.destroyDevice(device, DE_NULL/*pAllocator*/); } @@ -787,9 +767,9 @@ tcu::TestStatus createDeviceWithVariousQueueCountsTest (Context& context) tcu::TestLog& log = context.getTestContext().getLog(); const int queueCountDiff = 1; const PlatformInterface& platformInterface = context.getPlatformInterface(); - const Unique instance (createDefaultInstance(platformInterface, context.getUsedApiVersion())); - const InstanceDriver instanceDriver (platformInterface, instance.get()); - const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance.get(), context.getTestContext().getCommandLine()); + const CustomInstance instance (createCustomInstanceFromContext(context)); + const InstanceDriver& instanceDriver (instance.getDriver()); + const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const vector queueFamilyProperties = getPhysicalDeviceQueueFamilyProperties(instanceDriver, physicalDevice); const vector queuePriorities (getGlobalMaxQueueCount(queueFamilyProperties), 1.0f); vector deviceQueueCreateInfos; @@ -830,8 +810,9 @@ tcu::TestStatus createDeviceWithVariousQueueCountsTest (Context& context) DE_NULL, //ppEnabledExtensionNames; DE_NULL, //pEnabledFeatures; }; - const Unique device (createDevice(platformInterface, *instance, instanceDriver, physicalDevice, &deviceCreateInfo)); - const DeviceDriver deviceDriver (platformInterface, instance.get(), device.get()); + + const Unique device (createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), platformInterface, instance, instanceDriver, physicalDevice, &deviceCreateInfo)); + const DeviceDriver deviceDriver (platformInterface, instance, device.get()); const deUint32 queueFamilyIndex = deviceCreateInfo.pQueueCreateInfos->queueFamilyIndex; const deUint32 queueCount = deviceCreateInfo.pQueueCreateInfos->queueCount; @@ -860,17 +841,15 @@ tcu::TestStatus createDeviceWithVariousQueueCountsTest (Context& context) tcu::TestStatus createDeviceFeatures2Test (Context& context) { - const PlatformInterface& vkp = context.getPlatformInterface(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); - const InstanceDriver vki (vkp, instance.get()); - const VkPhysicalDevice physicalDevice = chooseDevice(vki, instance.get(), context.getTestContext().getCommandLine()); - const deUint32 queueFamilyIndex = 0; - const deUint32 queueCount = 1; - const deUint32 queueIndex = 0; - const float queuePriority = 1.0f; - - const InstanceDriver instanceDriver (vkp, instance.get()); - const vector queueFamilyProperties = getPhysicalDeviceQueueFamilyProperties(instanceDriver, physicalDevice); + const PlatformInterface& vkp = context.getPlatformInterface(); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); + const InstanceDriver& vki (instance.getDriver()); + const VkPhysicalDevice physicalDevice = chooseDevice(vki, instance, context.getTestContext().getCommandLine()); + const deUint32 queueFamilyIndex = 0; + const deUint32 queueCount = 1; + const deUint32 queueIndex = 0; + const float queuePriority = 1.0f; + const vector queueFamilyProperties = getPhysicalDeviceQueueFamilyProperties(vki, physicalDevice); VkPhysicalDeviceFeatures2 enabledFeatures; const VkDeviceQueueCreateInfo deviceQueueCreateInfo = @@ -882,6 +861,7 @@ tcu::TestStatus createDeviceFeatures2Test (Context& context) queueCount, &queuePriority, }; + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, @@ -889,7 +869,7 @@ tcu::TestStatus createDeviceFeatures2Test (Context& context) (VkDeviceCreateFlags)0u, 1, &deviceQueueCreateInfo, - 0, + 0u, DE_NULL, 0, DE_NULL, @@ -903,8 +883,8 @@ tcu::TestStatus createDeviceFeatures2Test (Context& context) vki.getPhysicalDeviceFeatures2(physicalDevice, &enabledFeatures); { - const Unique device (createDevice(vkp, *instance, vki, physicalDevice, &deviceCreateInfo)); - const DeviceDriver vkd (vkp, instance.get(), device.get()); + const Unique device (createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), vkp, instance, vki, physicalDevice, &deviceCreateInfo)); + const DeviceDriver vkd (vkp, instance, device.get()); const VkQueue queue = getDeviceQueue(vkd, *device, queueFamilyIndex, queueIndex); VK_CHECK(vkd.queueWaitIdle(queue)); @@ -925,10 +905,9 @@ tcu::TestStatus createDeviceWithUnsupportedFeaturesTest (Context& context) { tcu::TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector resultCollector (log); - const PlatformInterface& platformInterface = context.getPlatformInterface(); - const Move instance (createDefaultInstance(platformInterface, context.getUsedApiVersion())); - const InstanceDriver instanceDriver (platformInterface, instance.get()); - const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance.get(), context.getTestContext().getCommandLine()); + const CustomInstance instance (createCustomInstanceFromContext(context, DE_NULL, false)); + const InstanceDriver& instanceDriver (instance.getDriver()); + const VkPhysicalDevice physicalDevice = chooseDevice(instanceDriver, instance, context.getTestContext().getCommandLine()); const deUint32 queueFamilyIndex = 0; const deUint32 queueCount = 1; const float queuePriority = 1.0f; @@ -1027,7 +1006,7 @@ tcu::TestStatus createDeviceWithUnsupportedFeaturesTest (Context& context) (VkDeviceCreateFlags)0u, 1, &deviceQueueCreateInfo, - 0, + 0u, DE_NULL, 0, DE_NULL, @@ -1035,7 +1014,7 @@ tcu::TestStatus createDeviceWithUnsupportedFeaturesTest (Context& context) }; VkDevice device; - const VkResult res = instanceDriver.createDevice(physicalDevice, &deviceCreateInfo, DE_NULL, &device); + const VkResult res = createUncheckedDevice(false, instanceDriver, physicalDevice, &deviceCreateInfo, DE_NULL, &device); if (res != VK_ERROR_FEATURE_NOT_PRESENT) { @@ -1058,7 +1037,7 @@ tcu::TestStatus createDeviceQueue2Test (Context& context) const PlatformInterface& platformInterface = context.getPlatformInterface(); const VkInstance instance = context.getInstance(); - const InstanceDriver instanceDriver (platformInterface, instance); + const InstanceInterface& instanceDriver = context.getInstanceInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex(); const deUint32 queueCount = 1; @@ -1103,6 +1082,7 @@ tcu::TestStatus createDeviceQueue2Test (Context& context) DE_NULL, // const char* const* ppEnabledExtensionNames; DE_NULL, // const VkPhysicalDeviceFeatures* pEnabledFeatures; }; + const VkDeviceQueueInfo2 deviceQueueInfo2 = { VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2, // VkStructureType sType; @@ -1113,7 +1093,7 @@ tcu::TestStatus createDeviceQueue2Test (Context& context) }; { - const Unique device (createDevice(platformInterface, instance, instanceDriver, physicalDevice, &deviceCreateInfo)); + const Unique device (createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), platformInterface, instance, instanceDriver, physicalDevice, &deviceCreateInfo)); const DeviceDriver deviceDriver (platformInterface, instance, device.get()); const VkQueue queue2 = getDeviceQueue2(deviceDriver, *device, &deviceQueueInfo2); @@ -1130,7 +1110,7 @@ tcu::TestStatus createDeviceQueue2UnmatchedFlagsTest (Context& context) const PlatformInterface& platformInterface = context.getPlatformInterface(); const VkInstance instance = context.getInstance(); - const InstanceDriver instanceDriver (platformInterface, instance); + const InstanceInterface& instanceDriver = context.getInstanceInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); // Check if VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT flag can be used. @@ -1193,6 +1173,7 @@ tcu::TestStatus createDeviceQueue2UnmatchedFlagsTest (Context& context) DE_NULL, // const char* const* ppEnabledExtensionNames; DE_NULL, // const VkPhysicalDeviceFeatures* pEnabledFeatures; }; + const VkDeviceQueueInfo2 deviceQueueInfo2 = { VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2, // VkStructureType sType; @@ -1203,7 +1184,7 @@ tcu::TestStatus createDeviceQueue2UnmatchedFlagsTest (Context& context) }; { - const Unique device (createDevice(platformInterface, instance, instanceDriver, physicalDevice, &deviceCreateInfo)); + const Unique device (createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), platformInterface, instance, instanceDriver, physicalDevice, &deviceCreateInfo)); const DeviceDriver deviceDriver (platformInterface, instance, device.get()); const VkQueue queue2 = getDeviceQueue2(deviceDriver, *device, &deviceQueueInfo2); @@ -1414,6 +1395,7 @@ tcu::TestStatus createInstanceDeviceIntentionalAllocFail (Context& context) 0u, // engineVersion VK_API_VERSION_1_0 // apiVersion }; + const VkInstanceCreateInfo instanceCreateInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType @@ -1425,6 +1407,7 @@ tcu::TestStatus createInstanceDeviceIntentionalAllocFail (Context& context) 0u, // enabledExtensionCount DE_NULL // ppEnabledExtensionNames }; + deUint32 failIndex = 0; VkResult result = VK_SUCCESS; size_t max_allowed_alloc = 0; @@ -1530,6 +1513,7 @@ tcu::TestStatus createInstanceDeviceIntentionalAllocFail (Context& context) 1u, // queueCount &queuePriority // pQueuePriorities }; + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // sType @@ -1544,7 +1528,7 @@ tcu::TestStatus createInstanceDeviceIntentionalAllocFail (Context& context) DE_NULL // pEnabledFeatures }; - result = vki.createDevice(physicalDevices[chosenDevice], &deviceCreateInfo, &allocationCallbacks, &device); + result = createUncheckedDevice(context.getTestContext().getCommandLine().isValidationEnabled(), vki, physicalDevices[chosenDevice], &deviceCreateInfo, &allocationCallbacks, &device); if (result == VK_ERROR_OUT_OF_HOST_MEMORY) { diff --git a/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp index 415109b..5425125 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiExternalMemoryTests.cpp @@ -20,6 +20,7 @@ *//*--------------------------------------------------------------------*/ #include "vktApiExternalMemoryTests.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vktTestCaseUtil.hpp" #include "vkRefUtil.hpp" @@ -30,6 +31,7 @@ #include "vkApiVersion.hpp" #include "tcuTestLog.hpp" +#include "tcuCommandLine.hpp" #include "deUniquePtr.hpp" #include "deStringUtil.hpp" @@ -211,15 +213,14 @@ std::vector getInstanceExtensions (const deUint32 instanceVersion, return instanceExtensions; } -vk::Move createInstance (const vk::PlatformInterface& vkp, - const deUint32 version, - const vk::VkExternalSemaphoreHandleTypeFlags externalSemaphoreTypes, - const vk::VkExternalMemoryHandleTypeFlags externalMemoryTypes, - const vk::VkExternalFenceHandleTypeFlags externalFenceTypes) +CustomInstance createTestInstance (Context& context, + const vk::VkExternalSemaphoreHandleTypeFlags externalSemaphoreTypes, + const vk::VkExternalMemoryHandleTypeFlags externalMemoryTypes, + const vk::VkExternalFenceHandleTypeFlags externalFenceTypes) { try { - return vk::createDefaultInstance(vkp, version, std::vector(), getInstanceExtensions(version, externalSemaphoreTypes, externalMemoryTypes, externalFenceTypes)); + return vkt::createCustomInstanceWithExtensions(context, getInstanceExtensions(context.getUsedApiVersion(), externalSemaphoreTypes, externalMemoryTypes, externalFenceTypes)); } catch (const vk::Error& error) { @@ -230,20 +231,21 @@ vk::Move createInstance (const vk::PlatformInterface& vkp, } } -vk::Move createDevice (const deUint32 apiVersion, - const vk::PlatformInterface& vkp, - vk::VkInstance instance, - const vk::InstanceInterface& vki, - vk::VkPhysicalDevice physicalDevice, - const vk::VkExternalSemaphoreHandleTypeFlags externalSemaphoreTypes, - const vk::VkExternalMemoryHandleTypeFlags externalMemoryTypes, - const vk::VkExternalFenceHandleTypeFlags externalFenceTypes, - deUint32 queueFamilyIndex, - bool useDedicatedAllocs = false) +vk::Move createTestDevice (const Context& context, + const vk::PlatformInterface& vkp, + vk::VkInstance instance, + const vk::InstanceInterface& vki, + vk::VkPhysicalDevice physicalDevice, + const vk::VkExternalSemaphoreHandleTypeFlags externalSemaphoreTypes, + const vk::VkExternalMemoryHandleTypeFlags externalMemoryTypes, + const vk::VkExternalFenceHandleTypeFlags externalFenceTypes, + deUint32 queueFamilyIndex, + bool useDedicatedAllocs = false) { - bool useExternalSemaphore = false; - bool useExternalFence = false; - bool useExternalMemory = false; + const deUint32 apiVersion = context.getUsedApiVersion(); + bool useExternalSemaphore = false; + bool useExternalFence = false; + bool useExternalMemory = false; std::vector deviceExtensions; if ((externalSemaphoreTypes @@ -374,7 +376,7 @@ vk::Move createDevice (const deUint32 apiVersion, try { - return vk::createDevice(vkp, instance, vki, physicalDevice, &deviceCreateInfo); + return createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), vkp, instance, vki, physicalDevice, &deviceCreateInfo); } catch (const vk::Error& error) { @@ -748,10 +750,9 @@ void submitDummySignalAndGetFenceNative ( const vk::DeviceInterface& vk, tcu::TestStatus testSemaphoreQueries (Context& context, vk::VkExternalSemaphoreHandleTypeFlagBits externalType) { - const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice device (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice device (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); TestLog& log = context.getTestContext().getLog(); @@ -798,16 +799,16 @@ tcu::TestStatus testSemaphoreWin32Create (Context& context, #if (DE_OS == DE_OS_WIN32) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::VkExportSemaphoreWin32HandleInfoKHR win32ExportInfo = { @@ -869,16 +870,16 @@ tcu::TestStatus testSemaphoreImportTwice (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphore (createExportableSemaphore(vkd, *device, config.externalType)); NativeHandle handleA; @@ -916,16 +917,16 @@ tcu::TestStatus testSemaphoreImportReimport (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphoreA (createExportableSemaphore(vkd, *device, config.externalType)); @@ -962,16 +963,16 @@ tcu::TestStatus testSemaphoreSignalExportImportWait (Context& context, const SemaphoreTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphoreA (createExportableSemaphore(vkd, *device, config.externalType)); { @@ -996,9 +997,9 @@ tcu::TestStatus testSemaphoreExportSignalImportWait (Context& context, const SemaphoreTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); const vk::VkSemaphoreImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_SEMAPHORE_IMPORT_TEMPORARY_BIT : (vk::VkSemaphoreImportFlagBits)0u; @@ -1006,8 +1007,8 @@ tcu::TestStatus testSemaphoreExportSignalImportWait (Context& context, checkSemaphoreSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphoreA (createExportableSemaphore(vkd, *device, config.externalType)); @@ -1033,9 +1034,9 @@ tcu::TestStatus testSemaphoreExportImportSignalWait (Context& context, const SemaphoreTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); DE_ASSERT(getHandelTypeTransferences(config.externalType) == TRANSFERENCE_REFERENCE); @@ -1043,8 +1044,8 @@ tcu::TestStatus testSemaphoreExportImportSignalWait (Context& context, { const vk::VkSemaphoreImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_SEMAPHORE_IMPORT_TEMPORARY_BIT : (vk::VkSemaphoreImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphoreA (createExportableSemaphore(vkd, *device, config.externalType)); @@ -1068,17 +1069,17 @@ tcu::TestStatus testSemaphoreSignalImport (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { const vk::VkSemaphoreImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_SEMAPHORE_IMPORT_TEMPORARY_BIT : (vk::VkSemaphoreImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphoreA (createExportableSemaphore(vkd, *device, config.externalType)); @@ -1116,17 +1117,17 @@ tcu::TestStatus testSemaphoreSignalWaitImport (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { const vk::VkSemaphoreImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_SEMAPHORE_IMPORT_TEMPORARY_BIT : (vk::VkSemaphoreImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphoreA (createExportableSemaphore(vkd, *device, config.externalType)); @@ -1167,16 +1168,16 @@ tcu::TestStatus testSemaphoreMultipleExports (Context& context, const size_t exportCount = 4 * 1024; const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphore (createExportableSemaphore(vkd, *device, config.externalType)); @@ -1205,17 +1206,17 @@ tcu::TestStatus testSemaphoreMultipleImports (Context& context, const size_t importCount = 4 * 1024; const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { const vk::VkSemaphoreImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_SEMAPHORE_IMPORT_TEMPORARY_BIT : (vk::VkSemaphoreImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphoreA (createExportableSemaphore(vkd, *device, config.externalType)); NativeHandle handleA; @@ -1255,17 +1256,17 @@ tcu::TestStatus testSemaphoreTransference (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { const vk::VkSemaphoreImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_SEMAPHORE_IMPORT_TEMPORARY_BIT : (vk::VkSemaphoreImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique semaphoreA (createExportableSemaphore(vkd, *device, config.externalType)); @@ -1348,17 +1349,17 @@ tcu::TestStatus testSemaphoreFdDup (Context& context, #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { const vk::VkSemaphoreImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_SEMAPHORE_IMPORT_TEMPORARY_BIT : (vk::VkSemaphoreImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); TestLog& log = context.getTestContext().getLog(); @@ -1411,17 +1412,17 @@ tcu::TestStatus testSemaphoreFdDup2 (Context& context, #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { const vk::VkSemaphoreImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_SEMAPHORE_IMPORT_TEMPORARY_BIT : (vk::VkSemaphoreImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); TestLog& log = context.getTestContext().getLog(); @@ -1481,16 +1482,16 @@ tcu::TestStatus testSemaphoreFdDup3 (Context& context, #if (DE_OS == DE_OS_UNIX) && defined(_GNU_SOURCE) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); TestLog& log = context.getTestContext().getLog(); @@ -1551,16 +1552,16 @@ tcu::TestStatus testSemaphoreFdSendOverSocket (Context& context, #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), config.externalType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, config.externalType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkSemaphoreSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, config.externalType, 0u, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); TestLog& log = context.getTestContext().getLog(); @@ -1687,10 +1688,9 @@ tcu::TestStatus testSemaphoreFdSendOverSocket (Context& context, tcu::TestStatus testFenceQueries (Context& context, vk::VkExternalFenceHandleTypeFlagBits externalType) { - const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice device (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice device (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); TestLog& log = context.getTestContext().getLog(); @@ -1738,16 +1738,16 @@ tcu::TestStatus testFenceWin32Create (Context& context, #if (DE_OS == DE_OS_WIN32) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::VkExportFenceWin32HandleInfoKHR win32ExportInfo = { @@ -1809,16 +1809,16 @@ tcu::TestStatus testFenceImportTwice (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fence (createExportableFence(vkd, *device, config.externalType)); NativeHandle handleA; @@ -1856,16 +1856,16 @@ tcu::TestStatus testFenceImportReimport (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fenceA (createExportableFence(vkd, *device, config.externalType)); @@ -1902,16 +1902,16 @@ tcu::TestStatus testFenceSignalExportImportWait (Context& context, const FenceTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fenceA (createExportableFence(vkd, *device, config.externalType)); @@ -1937,9 +1937,9 @@ tcu::TestStatus testFenceExportSignalImportWait (Context& context, const FenceTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); const vk::VkFenceImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_FENCE_IMPORT_TEMPORARY_BIT : (vk::VkFenceImportFlagBits)0u; @@ -1947,8 +1947,8 @@ tcu::TestStatus testFenceExportSignalImportWait (Context& context, checkFenceSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fenceA (createExportableFence(vkd, *device, config.externalType)); @@ -1974,9 +1974,9 @@ tcu::TestStatus testFenceExportImportSignalWait (Context& context, const FenceTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); DE_ASSERT(getHandelTypeTransferences(config.externalType) == TRANSFERENCE_REFERENCE); @@ -1984,8 +1984,8 @@ tcu::TestStatus testFenceExportImportSignalWait (Context& context, { const vk::VkFenceImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_FENCE_IMPORT_TEMPORARY_BIT : (vk::VkFenceImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fenceA (createExportableFence(vkd, *device, config.externalType)); @@ -2009,17 +2009,17 @@ tcu::TestStatus testFenceSignalImport (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { const vk::VkFenceImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_FENCE_IMPORT_TEMPORARY_BIT : (vk::VkFenceImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fenceA (createExportableFence(vkd, *device, config.externalType)); @@ -2057,17 +2057,17 @@ tcu::TestStatus testFenceReset (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { const vk::VkFenceImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_FENCE_IMPORT_TEMPORARY_BIT : (vk::VkFenceImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fenceA (createExportableFence(vkd, *device, config.externalType)); @@ -2122,17 +2122,17 @@ tcu::TestStatus testFenceSignalWaitImport (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { const vk::VkFenceImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_FENCE_IMPORT_TEMPORARY_BIT : (vk::VkFenceImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fenceA (createExportableFence(vkd, *device, config.externalType)); @@ -2173,16 +2173,16 @@ tcu::TestStatus testFenceMultipleExports (Context& context, const size_t exportCount = 4 * 1024; const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fence (createExportableFence(vkd, *device, config.externalType)); @@ -2211,17 +2211,17 @@ tcu::TestStatus testFenceMultipleImports (Context& context, const size_t importCount = 4 * 1024; const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { const vk::VkFenceImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_FENCE_IMPORT_TEMPORARY_BIT : (vk::VkFenceImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fenceA (createExportableFence(vkd, *device, config.externalType)); NativeHandle handleA; @@ -2261,17 +2261,17 @@ tcu::TestStatus testFenceTransference (Context& context, { const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { const vk::VkFenceImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_FENCE_IMPORT_TEMPORARY_BIT : (vk::VkFenceImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); const vk::Unique fenceA (createExportableFence(vkd, *device, config.externalType)); @@ -2360,17 +2360,17 @@ tcu::TestStatus testFenceFdDup (Context& context, #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { const vk::VkFenceImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_FENCE_IMPORT_TEMPORARY_BIT : (vk::VkFenceImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); TestLog& log = context.getTestContext().getLog(); @@ -2423,17 +2423,17 @@ tcu::TestStatus testFenceFdDup2 (Context& context, #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { const vk::VkFenceImportFlags flags = config.permanence == PERMANENCE_TEMPORARY ? vk::VK_FENCE_IMPORT_TEMPORARY_BIT : (vk::VkFenceImportFlagBits)0u; - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); TestLog& log = context.getTestContext().getLog(); @@ -2493,16 +2493,16 @@ tcu::TestStatus testFenceFdDup3 (Context& context, #if (DE_OS == DE_OS_UNIX) && defined(_GNU_SOURCE) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); TestLog& log = context.getTestContext().getLog(); @@ -2563,16 +2563,16 @@ tcu::TestStatus testFenceFdSendOverSocket (Context& context, #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX) const Transference transference (getHandelTypeTransferences(config.externalType)); const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, 0u, config.externalType)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, 0u, config.externalType)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); checkFenceSupport(vki, physicalDevice, config.externalType); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, 0u, config.externalType, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkQueue queue (getQueue(vkd, *device, queueFamilyIndex)); TestLog& log = context.getTestContext().getLog(); @@ -2719,9 +2719,9 @@ tcu::TestStatus testBufferQueries (Context& context, vk::VkExternalMemoryHandleT vk::VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT }; const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const vk::VkPhysicalDeviceFeatures deviceFeatures (vk::getPhysicalDeviceFeatures(vki, physicalDevice)); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); @@ -2781,8 +2781,8 @@ tcu::TestStatus testBufferQueries (Context& context, vk::VkExternalMemoryHandleT // \note We need to re-create with dedicated mem extensions if previous device instance didn't have them try { - device = createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, externalType, 0u, queueFamilyIndex, requiresDedicated); - vkd = de::MovePtr(new vk::DeviceDriver(vkp, *instance, *device)); + device = createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, externalType, 0u, queueFamilyIndex, requiresDedicated); + vkd = de::MovePtr(new vk::DeviceDriver(vkp, instance, *device)); deviceHasDedicated = requiresDedicated; } catch (const tcu::NotSupportedError& e) @@ -2852,12 +2852,12 @@ tcu::TestStatus testMemoryWin32Create (Context& context, MemoryTestConfig config { #if (DE_OS == DE_OS_WIN32) const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const deUint32 seed = 1261033864u; const vk::VkDeviceSize bufferSize = 1024; @@ -2934,12 +2934,12 @@ tcu::TestStatus testMemoryWin32Create (Context& context, MemoryTestConfig config tcu::TestStatus testMemoryImportTwice (Context& context, MemoryTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const deUint32 seed = 1261033864u; const vk::VkDeviceSize bufferSize = 1024; @@ -2993,12 +2993,12 @@ tcu::TestStatus testMemoryMultipleImports (Context& context, MemoryTestConfig co { const size_t count = 4 * 1024; const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const vk::VkDeviceSize bufferSize = 1024; @@ -3029,12 +3029,12 @@ tcu::TestStatus testMemoryMultipleExports (Context& context, MemoryTestConfig co { const size_t count = 4 * 1024; const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const vk::VkDeviceSize bufferSize = 1024; @@ -3058,12 +3058,12 @@ tcu::TestStatus testMemoryMultipleExports (Context& context, MemoryTestConfig co tcu::TestStatus testMemoryFdProperties (Context& context, MemoryTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const vk::VkDeviceSize bufferSize = 1024; @@ -3079,6 +3079,7 @@ tcu::TestStatus testMemoryFdProperties (Context& context, MemoryTestConfig confi NativeHandle handle; getMemoryNative(vkd, *device, *memory, config.externalType, handle); + properties.sType = vk::VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR; vk::VkResult res = vkd.getMemoryFdPropertiesKHR(*device, config.externalType, handle.getFd(), &properties); switch (config.externalType) @@ -3099,14 +3100,14 @@ tcu::TestStatus testMemoryFdDup (Context& context, MemoryTestConfig config) { #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX) const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); TestLog& log = context.getTestContext().getLog(); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; @@ -3163,14 +3164,14 @@ tcu::TestStatus testMemoryFdDup2 (Context& context, MemoryTestConfig config) { #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX) const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); TestLog& log = context.getTestContext().getLog(); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; @@ -3228,14 +3229,14 @@ tcu::TestStatus testMemoryFdDup3 (Context& context, MemoryTestConfig config) { #if (DE_OS == DE_OS_UNIX) && defined(_GNU_SOURCE) const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); TestLog& log = context.getTestContext().getLog(); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; @@ -3293,14 +3294,14 @@ tcu::TestStatus testMemoryFdSendOverSocket (Context& context, MemoryTestConfig c { #if (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_UNIX) const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); { - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); TestLog& log = context.getTestContext().getLog(); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; @@ -3451,12 +3452,12 @@ tcu::TestStatus testBufferBindExportImportBind (Context& context, const BufferTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const vk::VkDeviceSize bufferSize = 1024; @@ -3489,12 +3490,12 @@ tcu::TestStatus testBufferExportBindImportBind (Context& context, const BufferTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const vk::VkDeviceSize bufferSize = 1024; @@ -3526,12 +3527,12 @@ tcu::TestStatus testBufferExportImportBindBind (Context& context, const BufferTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkBufferUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const vk::VkDeviceSize bufferSize = 1024; @@ -3584,9 +3585,9 @@ tcu::TestStatus testImageQueries (Context& context, vk::VkExternalMemoryHandleTy vk::VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT }; const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const vk::VkPhysicalDeviceFeatures deviceFeatures (vk::getPhysicalDeviceFeatures(vki, physicalDevice)); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); @@ -3669,8 +3670,8 @@ tcu::TestStatus testImageQueries (Context& context, vk::VkExternalMemoryHandleTy // \note We need to re-create with dedicated mem extensions if previous device instance didn't have them try { - device = createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, externalType, 0u, queueFamilyIndex, requiresDedicated); - vkd = de::MovePtr(new vk::DeviceDriver(vkp, *instance, *device)); + device = createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, externalType, 0u, queueFamilyIndex, requiresDedicated); + vkd = de::MovePtr(new vk::DeviceDriver(vkp, instance, *device)); deviceHasDedicated = requiresDedicated; } catch (const tcu::NotSupportedError& e) @@ -3727,12 +3728,12 @@ tcu::TestStatus testImageBindExportImportBind (Context& context, const ImageTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkImageUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const vk::VkFormat format = vk::VK_FORMAT_R8G8B8A8_UNORM; const deUint32 width = 64u; @@ -3767,12 +3768,12 @@ tcu::TestStatus testImageExportBindImportBind (Context& context, const ImageTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkImageUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const vk::VkFormat format = vk::VK_FORMAT_R8G8B8A8_UNORM; const deUint32 width = 64u; @@ -3806,12 +3807,12 @@ tcu::TestStatus testImageExportImportBindBind (Context& context, const ImageTestConfig config) { const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), 0u, config.externalType, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, 0u, config.externalType, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, config.externalType, 0u, queueFamilyIndex, config.dedicated)); + const vk::DeviceDriver vkd (vkp, instance, *device); const vk::VkImageUsageFlags usage = vk::VK_BUFFER_USAGE_TRANSFER_SRC_BIT|vk::VK_BUFFER_USAGE_TRANSFER_DST_BIT; const vk::VkFormat format = vk::VK_FORMAT_R8G8B8A8_UNORM; const deUint32 width = 64u; @@ -3971,12 +3972,12 @@ tcu::TestStatus testAndroidHardwareBufferImageFormat (Context& context, vk::VkF const vk::VkExternalMemoryHandleTypeFlagBits externalMemoryType = vk::VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID; const vk::PlatformInterface& vkp (context.getPlatformInterface()); - const vk::Unique instance (createInstance(vkp, context.getUsedApiVersion(), externalMemoryType, 0u, 0u)); - const vk::InstanceDriver vki (vkp, *instance); - const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, *instance, context.getTestContext().getCommandLine())); + const CustomInstance instance (createTestInstance(context, externalMemoryType, 0u, 0u)); + const vk::InstanceDriver& vki (instance.getDriver()); + const vk::VkPhysicalDevice physicalDevice (vk::chooseDevice(vki, instance, context.getTestContext().getCommandLine())); const deUint32 queueFamilyIndex (chooseQueueFamilyIndex(vki, physicalDevice, 0u)); - const vk::Unique device (createDevice(context.getUsedApiVersion(), vkp, *instance, vki, physicalDevice, 0u, externalMemoryType, 0u, queueFamilyIndex)); - const vk::DeviceDriver vkd (vkp, *instance, *device); + const vk::Unique device (createTestDevice(context, vkp, instance, vki, physicalDevice, 0u, externalMemoryType, 0u, queueFamilyIndex)); + const vk::DeviceDriver vkd (vkp, instance, *device); TestLog& log = context.getTestContext().getLog(); const vk::VkPhysicalDeviceLimits limits = getPhysicalDeviceProperties(vki, physicalDevice).limits; diff --git a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp index 62280d8..e32dd1d 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiFeatureInfo.cpp @@ -25,6 +25,7 @@ #include "vktTestCaseUtil.hpp" #include "vktTestGroupUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkPlatform.hpp" #include "vkStrUtil.hpp" @@ -619,10 +620,9 @@ tcu::TestStatus enumeratePhysicalDeviceGroups (Context& context) { TestLog& log = context.getTestContext().getLog(); tcu::ResultCollector results (log); - const PlatformInterface& vkp = context.getPlatformInterface(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_device_group_creation")); - const InstanceDriver vki (vkp, *instance); - const vector devicegroups = enumeratePhysicalDeviceGroups(vki, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_device_group_creation")); + const InstanceDriver& vki (instance.getDriver()); + const vector devicegroups = enumeratePhysicalDeviceGroups(vki, instance); log << TestLog::Integer("NumDevices", "Number of device groups", "", QP_KEY_TAG_NONE, deInt64(devicegroups.size())); @@ -1367,11 +1367,11 @@ tcu::TestStatus deviceGroupPeerMemoryFeatures (Context& context) { TestLog& log = context.getTestContext().getLog(); const PlatformInterface& vkp = context.getPlatformInterface(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_device_group_creation")); - const InstanceDriver vki (vkp, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_device_group_creation")); + const InstanceDriver& vki (instance.getDriver()); const tcu::CommandLine& cmdLine = context.getTestContext().getCommandLine(); const deUint32 devGroupIdx = cmdLine.getVKDeviceGroupId() - 1; - const deUint32 deviceIdx = vk::chooseDeviceIndex(context.getInstanceInterface(), *instance, cmdLine); + const deUint32 deviceIdx = vk::chooseDeviceIndex(context.getInstanceInterface(), instance, cmdLine); const float queuePriority = 1.0f; VkPhysicalDeviceMemoryProperties memProps; VkPeerMemoryFeatureFlags* peerMemFeatures; @@ -1379,7 +1379,7 @@ tcu::TestStatus deviceGroupPeerMemoryFeatures (Context& context) deUint32 numPhysicalDevices = 0; deUint32 queueFamilyIndex = 0; - const vector deviceGroupProps = enumeratePhysicalDeviceGroups(vki, *instance); + const vector deviceGroupProps = enumeratePhysicalDeviceGroups(vki, instance); std::vector deviceExtensions; deviceExtensions.push_back("VK_KHR_device_group"); @@ -1415,6 +1415,7 @@ tcu::TestStatus deviceGroupPeerMemoryFeatures (Context& context) deviceGroupProps[devGroupIdx].physicalDeviceCount, //physicalDeviceCount deviceGroupProps[devGroupIdx].physicalDevices //physicalDevices }; + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; @@ -1429,8 +1430,8 @@ tcu::TestStatus deviceGroupPeerMemoryFeatures (Context& context) DE_NULL, //pEnabledFeatures; }; - Move deviceGroup = createDevice(vkp, *instance, vki, deviceGroupProps[devGroupIdx].physicalDevices[deviceIdx], &deviceCreateInfo); - const DeviceDriver vk (vkp, *instance, *deviceGroup); + Move deviceGroup = createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), vkp, instance, vki, deviceGroupProps[devGroupIdx].physicalDevices[deviceIdx], &deviceCreateInfo); + const DeviceDriver vk (vkp, instance, *deviceGroup); context.getInstanceInterface().getPhysicalDeviceMemoryProperties(deviceGroupProps[devGroupIdx].physicalDevices[deviceIdx], &memProps); peerMemFeatures = reinterpret_cast(buffer); @@ -2650,10 +2651,9 @@ bool checkExtension (vector& properties, const char* exte tcu::TestStatus deviceFeatures2 (Context& context) { - const PlatformInterface& vkp = context.getPlatformInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); - const InstanceDriver vki (vkp, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); + const InstanceDriver& vki (instance.getDriver()); TestLog& log = context.getTestContext().getLog(); VkPhysicalDeviceFeatures coreFeatures; VkPhysicalDeviceFeatures2 extFeatures; @@ -2827,10 +2827,9 @@ tcu::TestStatus deviceFeatures2 (Context& context) tcu::TestStatus deviceProperties2 (Context& context) { - const PlatformInterface& vkp = context.getPlatformInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); - const InstanceDriver vki (vkp, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); + const InstanceDriver& vki (instance.getDriver()); TestLog& log = context.getTestContext().getLog(); VkPhysicalDeviceProperties coreProperties; VkPhysicalDeviceProperties2 extProperties; @@ -3135,10 +3134,9 @@ string toString (const VkFormatProperties2& value) tcu::TestStatus deviceFormatProperties2 (Context& context) { - const PlatformInterface& vkp = context.getPlatformInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); - const InstanceDriver vki (vkp, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); + const InstanceDriver& vki (instance.getDriver()); TestLog& log = context.getTestContext().getLog(); for (int formatNdx = 0; formatNdx < VK_CORE_FORMAT_LAST; ++formatNdx) @@ -3170,10 +3168,9 @@ tcu::TestStatus deviceFormatProperties2 (Context& context) tcu::TestStatus deviceQueueFamilyProperties2 (Context& context) { - const PlatformInterface& vkp = context.getPlatformInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); - const InstanceDriver vki (vkp, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); + const InstanceDriver& vki (instance.getDriver()); TestLog& log = context.getTestContext().getLog(); deUint32 numCoreQueueFamilies = ~0u; deUint32 numExtQueueFamilies = ~0u; @@ -3222,10 +3219,9 @@ tcu::TestStatus deviceQueueFamilyProperties2 (Context& context) tcu::TestStatus deviceMemoryProperties2 (Context& context) { - const PlatformInterface& vkp = context.getPlatformInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); - const InstanceDriver vki (vkp, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); + const InstanceDriver& vki (instance.getDriver()); TestLog& log = context.getTestContext().getLog(); VkPhysicalDeviceMemoryProperties coreProperties; VkPhysicalDeviceMemoryProperties2 extProperties; @@ -3258,10 +3254,9 @@ tcu::TestStatus imageFormatProperties2 (Context& context, const VkFormat format, TestLog& log = context.getTestContext().getLog(); - const PlatformInterface& vkp = context.getPlatformInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); - const InstanceDriver vki (vkp, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); + const InstanceDriver& vki (instance.getDriver()); const VkImageCreateFlags ycbcrFlags = isYCbCrFormat(format) ? (VkImageCreateFlags)VK_IMAGE_CREATE_DISJOINT_BIT_KHR : (VkImageCreateFlags)0u; const VkImageUsageFlags allUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT @@ -3332,10 +3327,9 @@ tcu::TestStatus sparseImageFormatProperties2 (Context& context, const VkFormat f { TestLog& log = context.getTestContext().getLog(); - const PlatformInterface& vkp = context.getPlatformInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); - const InstanceDriver vki (vkp, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); + const InstanceDriver& vki (instance.getDriver()); const VkImageUsageFlags allUsageFlags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT diff --git a/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp index 0b2d661..a4cbb16 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiObjectManagementTests.cpp @@ -23,6 +23,7 @@ #include "vktApiObjectManagementTests.hpp" #include "vktTestCaseUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkRef.hpp" @@ -234,6 +235,7 @@ struct Environment { const PlatformInterface& vkp; deUint32 apiVersion; + const InstanceInterface& instanceInterface; VkInstance instance; const DeviceInterface& vkd; VkDevice device; @@ -241,10 +243,12 @@ struct Environment const BinaryCollection& programBinaries; const VkAllocationCallbacks* allocationCallbacks; deUint32 maxResourceConsumers; // Maximum number of objects using same Object::Resources concurrently + const tcu::CommandLine& commandLine; Environment (Context& context, deUint32 maxResourceConsumers_) : vkp (context.getPlatformInterface()) , apiVersion (context.getUsedApiVersion()) + , instanceInterface (context.getInstanceInterface()) , instance (context.getInstance()) , vkd (context.getDeviceInterface()) , device (context.getDevice()) @@ -252,20 +256,24 @@ struct Environment , programBinaries (context.getBinaryCollection()) , allocationCallbacks (DE_NULL) , maxResourceConsumers (maxResourceConsumers_) + , commandLine (context.getTestContext().getCommandLine()) { } Environment (const PlatformInterface& vkp_, deUint32 apiVersion_, + const InstanceInterface& instanceInterface_, VkInstance instance_, const DeviceInterface& vkd_, VkDevice device_, deUint32 queueFamilyIndex_, const BinaryCollection& programBinaries_, const VkAllocationCallbacks* allocationCallbacks_, - deUint32 maxResourceConsumers_) + deUint32 maxResourceConsumers_, + const tcu::CommandLine& commandLine_) : vkp (vkp_) , apiVersion (apiVersion_) + , instanceInterface (instanceInterface_) , instance (instance_) , vkd (vkd_) , device (device_) @@ -273,6 +281,7 @@ struct Environment , programBinaries (programBinaries_) , allocationCallbacks (allocationCallbacks_) , maxResourceConsumers (maxResourceConsumers_) + , commandLine (commandLine_) { } }; @@ -350,13 +359,15 @@ size_t computeSystemMemoryUsage (Context& context, const typename Object::Parame AllocationCallbackRecorder allocRecorder (getSystemAllocator()); const Environment env (context.getPlatformInterface(), context.getUsedApiVersion(), + context.getInstanceInterface(), context.getInstance(), context.getDeviceInterface(), context.getDevice(), context.getUniversalQueueFamilyIndex(), context.getBinaryCollection(), allocRecorder.getCallbacks(), - 1u); + 1u, + context.getTestContext().getCommandLine()); const typename Object::Resources res (env, params); const size_t resourceMemoryUsage = getCurrentSystemMemoryUsage(allocRecorder); @@ -577,6 +588,7 @@ struct Device &queuePriority, // pQueuePriorities } }; + const VkDeviceCreateInfo deviceInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, @@ -591,7 +603,7 @@ struct Device DE_NULL, // pEnabledFeatures }; - return createDevice(env.vkp, env.instance, res.vki, res.physicalDevice, &deviceInfo, env.allocationCallbacks); + return createCustomDevice(env.commandLine.isValidationEnabled(), env.vkp, env.instance, res.vki, res.physicalDevice, &deviceInfo, env.allocationCallbacks); } }; @@ -704,7 +716,7 @@ struct DeviceGroup DE_NULL, // pEnabledFeatures }; - return createDevice(env.vkp, env.instance, res.vki, res.physicalDevices[params.deviceIndex], &deviceGroupCreateInfo, env.allocationCallbacks); + return createCustomDevice(env.commandLine.isValidationEnabled(), env.vkp, env.instance, res.vki, res.physicalDevices[params.deviceIndex], &deviceGroupCreateInfo, env.allocationCallbacks); } }; @@ -2441,7 +2453,7 @@ struct EnvClone : deviceRes (parent, deviceParams) , device (Device::create(parent, deviceRes, deviceParams)) , vkd (parent.vkp, parent.instance, *device) - , env (parent.vkp, parent.apiVersion, parent.instance, vkd, *device, deviceRes.queueFamilyIndex, parent.programBinaries, parent.allocationCallbacks, maxResourceConsumers) + , env (parent.vkp, parent.apiVersion, parent.instanceInterface, parent.instance, vkd, *device, deviceRes.queueFamilyIndex, parent.programBinaries, parent.allocationCallbacks, maxResourceConsumers, parent.commandLine) { } }; @@ -2493,13 +2505,15 @@ tcu::TestStatus createSingleAllocCallbacksTest (Context& context, typename Objec // Root environment still uses default instance and device, created without callbacks const Environment rootEnv (context.getPlatformInterface(), context.getUsedApiVersion(), + context.getInstanceInterface(), context.getInstance(), context.getDeviceInterface(), context.getDevice(), context.getUniversalQueueFamilyIndex(), context.getBinaryCollection(), resCallbacks.getCallbacks(), - 1u); + 1u, + context.getTestContext().getCommandLine()); { // Test env has instance & device created with callbacks @@ -2510,13 +2524,15 @@ tcu::TestStatus createSingleAllocCallbacksTest (Context& context, typename Objec AllocationCallbackRecorder objCallbacks(getSystemAllocator(), 128); const Environment objEnv (resEnv.env.vkp, resEnv.env.apiVersion, + resEnv.env.instanceInterface, resEnv.env.instance, resEnv.env.vkd, resEnv.env.device, resEnv.env.queueFamilyIndex, resEnv.env.programBinaries, objCallbacks.getCallbacks(), - resEnv.env.maxResourceConsumers); + resEnv.env.maxResourceConsumers, + resEnv.env.commandLine); { Unique obj (Object::create(objEnv, res, params)); @@ -2547,13 +2563,15 @@ tcu::TestStatus allocCallbackFailTest (Context& context, typename Object::Parame AllocationCallbackRecorder resCallbacks (getSystemAllocator(), 128); const Environment rootEnv (context.getPlatformInterface(), context.getUsedApiVersion(), + context.getInstanceInterface(), context.getInstance(), context.getDeviceInterface(), context.getDevice(), context.getUniversalQueueFamilyIndex(), context.getBinaryCollection(), resCallbacks.getCallbacks(), - 1u); + 1u, + context.getTestContext().getCommandLine()); deUint32 numPassingAllocs = 0; const deUint32 cmdLineIterCount = (deUint32)context.getTestContext().getCommandLine().getTestIterationCount(); const deUint32 maxTries = cmdLineIterCount != 0 ? cmdLineIterCount : getOomIterLimit(); @@ -2571,13 +2589,15 @@ tcu::TestStatus allocCallbackFailTest (Context& context, typename Object::Parame AllocationCallbackRecorder recorder (objAllocator.getCallbacks(), 128); const Environment objEnv (resEnv.env.vkp, resEnv.env.apiVersion, + resEnv.env.instanceInterface, resEnv.env.instance, resEnv.env.vkd, resEnv.env.device, resEnv.env.queueFamilyIndex, resEnv.env.programBinaries, recorder.getCallbacks(), - resEnv.env.maxResourceConsumers); + resEnv.env.maxResourceConsumers, + resEnv.env.commandLine); bool createOk = false; context.getTestContext().getLog() @@ -2660,13 +2680,15 @@ tcu::TestStatus allocCallbackFailMultipleObjectsTest (Context& context, typename AllocationCallbackRecorder recorder (objAllocator.getCallbacks(), 128); const Environment objEnv (context.getPlatformInterface(), context.getUsedApiVersion(), + context.getInstanceInterface(), context.getInstance(), context.getDeviceInterface(), context.getDevice(), context.getUniversalQueueFamilyIndex(), context.getBinaryCollection(), recorder.getCallbacks(), - numObjects); + numObjects, + context.getTestContext().getCommandLine()); context.getTestContext().getLog() << TestLog::Message diff --git a/external/vulkancts/modules/vulkan/api/vktApiVersionCheck.cpp b/external/vulkancts/modules/vulkan/api/vktApiVersionCheck.cpp index 80a863e..938382d 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiVersionCheck.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiVersionCheck.cpp @@ -31,6 +31,7 @@ #include "tcuTestLog.hpp" #include "tcuFunctionLibrary.hpp" #include "tcuPlatform.hpp" +#include "tcuCommandLine.hpp" #include "vkApiVersion.hpp" #include "vkDefs.hpp" @@ -38,6 +39,7 @@ #include "vktApiVersionCheck.hpp" #include "vktTestCase.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDeviceUtil.hpp" #include "vkQueryUtil.hpp" @@ -105,6 +107,14 @@ private: class APIEntryPointsTestInstance : public TestInstance { public: + struct APIContext + { + VkInstance instance; + VkDevice device; + GetInstanceProcAddrFunc getInstanceProcAddr; + GetDeviceProcAddrFunc getDeviceProcAddr; + }; + APIEntryPointsTestInstance (Context& ctx) : TestInstance (ctx) { @@ -122,10 +132,11 @@ public: // Tests with default instance and device without extensions { - instance = createDefaultInstance(m_context.getPlatformInterface(), m_context.getUsedApiVersion()); - device = createTestDevice(m_context.getPlatformInterface(), m_context.getInstanceInterface(), m_context.getPhysicalDevice()); - getInstanceProcAddr = reinterpret_cast(funcLibrary.getFunction("vkGetInstanceProcAddr")); - getDeviceProcAddr = reinterpret_cast(getInstanceProcAddr(*instance, "vkGetDeviceProcAddr")); + CustomInstance instance = createCustomInstanceFromContext(m_context, DE_NULL, false); + Move device = createTestDevice(m_context, instance, vector(), false); + GetInstanceProcAddrFunc getInstanceProcAddr = reinterpret_cast(funcLibrary.getFunction("vkGetInstanceProcAddr")); + GetDeviceProcAddrFunc getDeviceProcAddr = reinterpret_cast(getInstanceProcAddr(instance, "vkGetDeviceProcAddr")); + APIContext ctx = { instance, *device, getInstanceProcAddr, getDeviceProcAddr }; // Check entry points of core functions { @@ -140,11 +151,11 @@ public: } log << tcu::TestLog::Message << "Regular check - tries to get core functions from proper vkGet*ProcAddr." << tcu::TestLog::EndMessage; - const char* const regularResult = regularCheck(log, failsQuantity, lastGoodVersion->second) ? "Passed" : "Failed"; + const char* const regularResult = regularCheck(ctx, log, failsQuantity, lastGoodVersion->second) ? "Passed" : "Failed"; log << tcu::TestLog::Message << regularResult << tcu::TestLog::EndMessage; log << tcu::TestLog::Message << "Cross check - tries to get core functions from improper vkGet*ProcAddr." << tcu::TestLog::EndMessage; - const char* const mixupResult = mixupAddressProcCheck(log, failsQuantity, lastGoodVersion->second) ? "Passed" : "Failed"; + const char* const mixupResult = mixupAddressProcCheck(ctx, log, failsQuantity, lastGoodVersion->second) ? "Passed" : "Failed"; log << tcu::TestLog::Message << mixupResult << tcu::TestLog::EndMessage; } @@ -163,7 +174,7 @@ public: extFunctions.push_back(FunctionInfo("vkGetImageMemoryRequirements2KHR", FUNCTIONORIGIN_DEVICE)); log << tcu::TestLog::Message << "Disabled extensions check - tries to get functions of disabled extensions from proper vkGet*ProcAddr." << tcu::TestLog::EndMessage; - const char * const result = specialCasesCheck(log, failsQuantity, extFunctions) ? "Passed" : "Failed"; + const char * const result = specialCasesCheck(ctx, log, failsQuantity, extFunctions) ? "Passed" : "Failed"; log << tcu::TestLog::Message << result << tcu::TestLog::EndMessage; } @@ -179,17 +190,18 @@ public: } log << tcu::TestLog::Message << "Special check - tries to get some dummy functions from various vkGet*ProcAddr." << tcu::TestLog::EndMessage; - const char * const result = specialCasesCheck(log, failsQuantity, dummyFunctions) ? "Passed" : "Failed"; + const char * const result = specialCasesCheck(ctx, log, failsQuantity, dummyFunctions) ? "Passed" : "Failed"; log << tcu::TestLog::Message << result << tcu::TestLog::EndMessage; } } // Tests with instance and device with extensions { - instance = createInstanceWithExtensions(m_context.getPlatformInterface(), m_context.getUsedApiVersion(), getSupportedInstanceExtensions(apiVersion)); - device = createTestDevice(m_context.getPlatformInterface(), m_context.getInstanceInterface(), m_context.getPhysicalDevice(), getSupportedDeviceExtensions(apiVersion)); - getInstanceProcAddr = reinterpret_cast(funcLibrary.getFunction("vkGetInstanceProcAddr")); - getDeviceProcAddr = reinterpret_cast(getInstanceProcAddr(*instance, "vkGetDeviceProcAddr")); + CustomInstance instance = createCustomInstanceWithExtensions(m_context, getSupportedInstanceExtensions(apiVersion), DE_NULL, false); + Move device = createTestDevice(m_context, instance, getSupportedDeviceExtensions(apiVersion), false); + GetInstanceProcAddrFunc getInstanceProcAddr = reinterpret_cast(funcLibrary.getFunction("vkGetInstanceProcAddr")); + GetDeviceProcAddrFunc getDeviceProcAddr = reinterpret_cast(getInstanceProcAddr(instance, "vkGetDeviceProcAddr")); + APIContext ctx = { instance, *device, getInstanceProcAddr, getDeviceProcAddr }; // Check function entry points of enabled extensions { @@ -220,7 +232,7 @@ public: } log << tcu::TestLog::Message << "Enabled extensions check - tries to get functions of supported extensions from proper vkGet*ProcAddr." << tcu::TestLog::EndMessage; - const char * const result = regularCheck(log, failsQuantity, extFunctions) ? "Passed" : "Failed"; + const char * const result = regularCheck(ctx, log, failsQuantity, extFunctions) ? "Passed" : "Failed"; log << tcu::TestLog::Message << result << tcu::TestLog::EndMessage; } } @@ -233,11 +245,6 @@ public: private: - GetDeviceProcAddrFunc getDeviceProcAddr; - GetInstanceProcAddrFunc getInstanceProcAddr; - Move instance; - Move device; - deUint32 findQueueFamilyIndex(const InstanceInterface& vkInstance, VkPhysicalDevice physicalDevice, VkQueueFlags requiredCaps) { deUint32 numQueues = 0; @@ -305,8 +312,12 @@ private: return filterMultiAuthorExtensions(supportedExtensions); } - Move createTestDevice (const PlatformInterface& vkp, const InstanceInterface& vki, VkPhysicalDevice physicalDevice, vector extensions = vector()) + Move createTestDevice (const Context& context, VkInstance instance, vector extensions = vector(), bool allowLayers = true) { + auto& cmdLine = context.getTestContext().getCommandLine(); + const PlatformInterface& vkp = context.getPlatformInterface(); + const InstanceInterface& vki = context.getInstanceInterface(); + VkPhysicalDevice physicalDevice = chooseDevice(context.getInstanceInterface(), instance, cmdLine); vector extensionPtrs; const float queuePriority = 1.0f; const deUint32 queueIndex = findQueueFamilyIndex(vki, physicalDevice, VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT); @@ -322,7 +333,8 @@ private: 1u, &queuePriority }; - VkDeviceCreateInfo deviceInfo = { + + const VkDeviceCreateInfo deviceInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, DE_NULL, static_cast(0u), @@ -335,7 +347,8 @@ private: DE_NULL, }; - return vk::createDevice(vkp, *instance, vki, physicalDevice, &deviceInfo); + const bool validationEnabled = (cmdLine.isValidationEnabled() && allowLayers); + return createCustomDevice(validationEnabled, vkp, instance, vki, physicalDevice, &deviceInfo); } void reportFail (tcu::TestLog& log, const char* const functionName, const char* const firstParamName, const char* const secondParamName, deBool shouldBeNonNull, deUint32& failsQuantity) @@ -347,21 +360,21 @@ private: ++failsQuantity; } - void checkPlatformFunction (tcu::TestLog& log, const char* const name, deBool shouldBeNonNull, deUint32& failsQuantity) + void checkPlatformFunction (const APIContext& ctx, tcu::TestLog& log, const char* const name, deBool shouldBeNonNull, deUint32& failsQuantity) { - if ((getInstanceProcAddr(DE_NULL, name) == DE_NULL) == shouldBeNonNull) + if ((ctx.getInstanceProcAddr(DE_NULL, name) == DE_NULL) == shouldBeNonNull) reportFail(log, "vkGetInstanceProcAddr", "DE_NULL", name, shouldBeNonNull, failsQuantity); } - void checkInstanceFunction (tcu::TestLog& log, const char* const name, deBool shouldBeNonNull, deUint32& failsQuantity) + void checkInstanceFunction (const APIContext& ctx, tcu::TestLog& log, const char* const name, deBool shouldBeNonNull, deUint32& failsQuantity) { - if ((getInstanceProcAddr(*instance, name) == DE_NULL) == shouldBeNonNull) + if ((ctx.getInstanceProcAddr(ctx.instance, name) == DE_NULL) == shouldBeNonNull) reportFail(log, "vkGetInstanceProcAddr", "instance", name, shouldBeNonNull, failsQuantity); } - void checkDeviceFunction (tcu::TestLog& log, const char* const name, deBool shouldBeNonNull, deUint32& failsQuantity) + void checkDeviceFunction (const APIContext& ctx, tcu::TestLog& log, const char* const name, deBool shouldBeNonNull, deUint32& failsQuantity) { - if ((getDeviceProcAddr(*device, name) == DE_NULL) == shouldBeNonNull) + if ((ctx.getDeviceProcAddr(ctx.device, name) == DE_NULL) == shouldBeNonNull) reportFail(log, "vkGetDeviceProcAddr", "device", name, shouldBeNonNull, failsQuantity); } @@ -379,7 +392,7 @@ private: return de::contains(supportedDeviceExtensions.begin(), supportedDeviceExtensions.end(), extName); } - deBool mixupAddressProcCheck (tcu::TestLog& log, deUint32& failsQuantity, const vector >& testsArr) + deBool mixupAddressProcCheck (const APIContext& ctx, tcu::TestLog& log, deUint32& failsQuantity, const vector >& testsArr) { const deUint32 startingQuantity = failsQuantity; for (deUint32 ndx = 0u; ndx < testsArr.size(); ++ndx) @@ -391,32 +404,32 @@ private: const deUint32 functionType = testsArr[ndx].second; if (functionType == FUNCTIONORIGIN_INSTANCE) { - checkPlatformFunction(log, functionName, DE_FALSE, failsQuantity); - checkDeviceFunction(log, functionName, DE_FALSE, failsQuantity); + checkPlatformFunction(ctx, log, functionName, DE_FALSE, failsQuantity); + checkDeviceFunction(ctx, log, functionName, DE_FALSE, failsQuantity); } else if (functionType == FUNCTIONORIGIN_DEVICE) - checkPlatformFunction(log, functionName, DE_FALSE, failsQuantity); + checkPlatformFunction(ctx, log, functionName, DE_FALSE, failsQuantity); } return startingQuantity == failsQuantity; } - deBool specialCasesCheck (tcu::TestLog& log, deUint32& failsQuantity, const vector >& testsArr) + deBool specialCasesCheck (const APIContext& ctx, tcu::TestLog& log, deUint32& failsQuantity, const vector >& testsArr) { const deUint32 startingQuantity = failsQuantity; for (deUint32 ndx = 0u; ndx < testsArr.size(); ++ndx) { const deUint32 functionType = testsArr[ndx].second; if (functionType == FUNCTIONORIGIN_PLATFORM) - checkPlatformFunction(log, testsArr[ndx].first, DE_FALSE, failsQuantity); + checkPlatformFunction(ctx, log, testsArr[ndx].first, DE_FALSE, failsQuantity); else if (functionType == FUNCTIONORIGIN_INSTANCE) - checkInstanceFunction(log, testsArr[ndx].first, DE_FALSE, failsQuantity); + checkInstanceFunction(ctx, log, testsArr[ndx].first, DE_FALSE, failsQuantity); else if (functionType == FUNCTIONORIGIN_DEVICE) - checkDeviceFunction(log, testsArr[ndx].first, DE_FALSE, failsQuantity); + checkDeviceFunction(ctx, log, testsArr[ndx].first, DE_FALSE, failsQuantity); } return startingQuantity == failsQuantity; } - deBool regularCheck (tcu::TestLog& log, deUint32& failsQuantity, const vector >& testsArr) + deBool regularCheck (const APIContext& ctx, tcu::TestLog& log, deUint32& failsQuantity, const vector >& testsArr) { const deUint32 startingQuantity = failsQuantity; for (deUint32 ndx = 0u; ndx < testsArr.size(); ++ndx) @@ -426,11 +439,11 @@ private: const deUint32 functionType = testsArr[ndx].second; if (functionType == FUNCTIONORIGIN_PLATFORM) - checkPlatformFunction(log, testsArr[ndx].first, DE_TRUE, failsQuantity); + checkPlatformFunction(ctx, log, testsArr[ndx].first, DE_TRUE, failsQuantity); else if (functionType == FUNCTIONORIGIN_INSTANCE) - checkInstanceFunction(log, testsArr[ndx].first, DE_TRUE, failsQuantity); + checkInstanceFunction(ctx, log, testsArr[ndx].first, DE_TRUE, failsQuantity); else if (functionType == FUNCTIONORIGIN_DEVICE) - checkDeviceFunction(log, testsArr[ndx].first, DE_TRUE, failsQuantity); + checkDeviceFunction(ctx, log, testsArr[ndx].first, DE_TRUE, failsQuantity); } return startingQuantity == failsQuantity; } diff --git a/external/vulkancts/modules/vulkan/compute/vktComputeBasicComputeShaderTests.cpp b/external/vulkancts/modules/vulkan/compute/vktComputeBasicComputeShaderTests.cpp index dbcb8fd..c3e4048 100644 --- a/external/vulkancts/modules/vulkan/compute/vktComputeBasicComputeShaderTests.cpp +++ b/external/vulkancts/modules/vulkan/compute/vktComputeBasicComputeShaderTests.cpp @@ -26,6 +26,7 @@ #include "vktTestCase.hpp" #include "vktTestCaseUtil.hpp" #include "vktComputeTestsUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkRef.hpp" @@ -2335,7 +2336,7 @@ public: void createDeviceGroup (void); const vk::DeviceInterface& getDeviceInterface (void) { return *m_deviceDriver; } - vk::VkInstance getInstance (void) { return *m_deviceGroupInstance; } + vk::VkInstance getInstance (void) { return m_deviceGroupInstance; } vk::VkDevice getDevice (void) { return *m_logicalDevice; } vk::VkPhysicalDevice getPhysicalDevice (deUint32 i = 0){ return m_physicalDevices[i]; } @@ -2344,7 +2345,7 @@ protected: deUint32 m_queueFamilyIndex; private: - vk::Move m_deviceGroupInstance; + CustomInstance m_deviceGroupInstance; vk::Move m_logicalDevice; std::vector m_physicalDevices; de::MovePtr m_deviceDriver; @@ -2357,8 +2358,8 @@ void ComputeTestInstance::createDeviceGroup (void) const deUint32 physDeviceIdx = cmdLine.getVKDeviceId() - 1; const float queuePriority = 1.0f; const std::vector requiredExtensions (1, "VK_KHR_device_group_creation"); - m_deviceGroupInstance = createInstanceWithExtensions(m_context.getPlatformInterface(), m_context.getUsedApiVersion(), requiredExtensions); - std::vector devGroupProperties = enumeratePhysicalDeviceGroups(m_context.getInstanceInterface(), m_deviceGroupInstance.get()); + m_deviceGroupInstance = createCustomInstanceWithExtensions(m_context, requiredExtensions); + std::vector devGroupProperties = enumeratePhysicalDeviceGroups(m_context.getInstanceInterface(), m_deviceGroupInstance); m_numPhysDevices = devGroupProperties[devGroupIdx].physicalDeviceCount; std::vector deviceExtensions; @@ -2372,7 +2373,7 @@ void ComputeTestInstance::createDeviceGroup (void) devGroupProperties[devGroupIdx].physicalDeviceCount, //physicalDeviceCount devGroupProperties[devGroupIdx].physicalDevices //physicalDevices }; - InstanceDriver instance (m_context.getPlatformInterface(), m_deviceGroupInstance.get()); + const InstanceDriver& instance (m_deviceGroupInstance.getDriver()); const VkPhysicalDeviceFeatures deviceFeatures = getPhysicalDeviceFeatures(instance, deviceGroupInfo.pPhysicalDevices[physDeviceIdx]); const std::vector queueProps = getPhysicalDeviceQueueFamilyProperties(instance, devGroupProperties[devGroupIdx].physicalDevices[physDeviceIdx]); @@ -2409,8 +2410,9 @@ void ComputeTestInstance::createDeviceGroup (void) (deviceExtensions.empty() ? DE_NULL : &deviceExtensions[0]), // const char* const* ppEnabledExtensionNames; &deviceFeatures, // const VkPhysicalDeviceFeatures* pEnabledFeatures; }; - m_logicalDevice = createDevice(m_context.getPlatformInterface(), m_deviceGroupInstance.get(), instance, deviceGroupInfo.pPhysicalDevices[physDeviceIdx], &deviceInfo); - m_deviceDriver = de::MovePtr(new DeviceDriver(m_context.getPlatformInterface(), m_deviceGroupInstance.get(), *m_logicalDevice)); + + m_logicalDevice = createCustomDevice(m_context.getTestContext().getCommandLine().isValidationEnabled(), m_context.getPlatformInterface(), m_deviceGroupInstance, instance, deviceGroupInfo.pPhysicalDevices[physDeviceIdx], &deviceInfo); + m_deviceDriver = de::MovePtr(new DeviceDriver(m_context.getPlatformInterface(), m_deviceGroupInstance, *m_logicalDevice)); } class DispatchBaseTest : public vkt::TestCase @@ -3096,7 +3098,7 @@ tcu::TestStatus ConcurrentComputeInstance::iterate (void) deviceInfo.queueCreateInfoCount = (queues[0].queueFamilyIndex == queues[1].queueFamilyIndex) ? 1 : 2; deviceInfo.pQueueCreateInfos = queueInfos; - logicalDevice = vk::createDevice(m_context.getPlatformInterface(), m_context.getInstance(), instance, physicalDevice, &deviceInfo); + logicalDevice = createCustomDevice(m_context.getTestContext().getCommandLine().isValidationEnabled(), m_context.getPlatformInterface(), m_context.getInstance(), instance, physicalDevice, &deviceInfo); for (deUint32 queueReqNdx = 0; queueReqNdx < 2; ++queueReqNdx) { diff --git a/external/vulkancts/modules/vulkan/device_group/vktDeviceGroupRendering.cpp b/external/vulkancts/modules/vulkan/device_group/vktDeviceGroupRendering.cpp index 9bdcfa0..9f25b8d 100644 --- a/external/vulkancts/modules/vulkan/device_group/vktDeviceGroupRendering.cpp +++ b/external/vulkancts/modules/vulkan/device_group/vktDeviceGroupRendering.cpp @@ -23,6 +23,7 @@ *//*--------------------------------------------------------------------*/ #include "vktDeviceGroupTests.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkDeviceUtil.hpp" @@ -151,7 +152,6 @@ public: private: void init (void); deUint32 getMemoryIndex (deUint32 memoryTypeBits, deUint32 memoryPropertyFlag); - void getDeviceLayers (vector& enabledLayers); bool isPeerFetchAllowed (deUint32 memoryTypeIndex, deUint32 firstdeviceID, deUint32 seconddeviceID); void SubmitBufferAndWaitForIdle (const DeviceDriver& vk, VkCommandBuffer cmdBuf, deUint32 deviceMask); virtual tcu::TestStatus iterate (void); @@ -209,17 +209,6 @@ bool DeviceGroupTestInstance::isPeerFetchAllowed (deUint32 memoryTypeIndex, deUi return (peerMemFeatures1 & VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT) && (peerMemFeatures2 & VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT); } -void DeviceGroupTestInstance::getDeviceLayers (vector& enabledLayers) -{ - const tcu::CommandLine& cmdLine = m_context.getTestContext().getCommandLine(); - if (cmdLine.isValidationEnabled()) - { - enabledLayers = vkt::getValidationLayers(m_context.getInstanceInterface(), m_context.getPhysicalDevice()); - if (enabledLayers.empty()) - TCU_THROW(NotSupportedError, "No device validation layers found"); - } -} - void DeviceGroupTestInstance::init (void) { if (!isInstanceExtensionSupported(m_context.getUsedApiVersion(), m_context.getInstanceExtensions(), "VK_KHR_device_group_creation")) @@ -303,12 +292,6 @@ void DeviceGroupTestInstance::init (void) for (size_t ndx = 0; ndx < deviceExtensions.size(); ++ndx) extensionPtrs[ndx] = deviceExtensions[ndx].c_str(); - // Get Layers - getDeviceLayers(enabledLayers); - layerPtrs.resize(enabledLayers.size()); - for (size_t ndx = 0; ndx < enabledLayers.size(); ++ndx) - layerPtrs[ndx] = enabledLayers[ndx].c_str(); - const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; @@ -316,13 +299,13 @@ void DeviceGroupTestInstance::init (void) (VkDeviceCreateFlags)0u, //flags 1, //queueRecordCount; &deviceQueueCreateInfo, //pRequestedQueues; - (deUint32)layerPtrs.size(), //layerCount; - (layerPtrs.empty() ? DE_NULL : &layerPtrs[0]), //ppEnabledLayerNames; + 0u, //layerCount; + DE_NULL, //ppEnabledLayerNames; (deUint32)extensionPtrs.size(), //extensionCount; (extensionPtrs.empty() ? DE_NULL : &extensionPtrs[0]), //ppEnabledExtensionNames; &enabledDeviceFeatures, //pEnabledFeatures; }; - m_deviceGroup = createDevice(m_context.getPlatformInterface(), m_context.getInstance(), instanceInterface, physicalDevice, &deviceCreateInfo); + m_deviceGroup = createCustomDevice(m_context.getTestContext().getCommandLine().isValidationEnabled(), m_context.getPlatformInterface(), m_context.getInstance(), instanceInterface, physicalDevice, &deviceCreateInfo); } deviceDriver = de::MovePtr(new vk::DeviceDriver(m_context.getPlatformInterface(), m_context.getInstance(), *m_deviceGroup)); diff --git a/external/vulkancts/modules/vulkan/image/vktImageMutableTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageMutableTests.cpp index fc5f3e6..2ff8c11 100644 --- a/external/vulkancts/modules/vulkan/image/vktImageMutableTests.cpp +++ b/external/vulkancts/modules/vulkan/image/vktImageMutableTests.cpp @@ -25,6 +25,7 @@ #include "vktImageLoadStoreUtil.hpp" #include "vktTestCaseUtil.hpp" #include "vktImageTexture.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkBuilderUtil.hpp" #include "vkQueryUtil.hpp" @@ -44,6 +45,7 @@ #include "tcuTestLog.hpp" #include "tcuTextureUtil.hpp" #include "tcuPlatform.hpp" +#include "tcuCommandLine.hpp" #include #include @@ -1794,11 +1796,10 @@ void checkAllSupported(const Extensions& supportedExtensions, const vector createInstanceWithWsi(const PlatformInterface& vkp, - deUint32 version, - const Extensions& supportedExtensions, - Type wsiType, - const VkAllocationCallbacks* pAllocator = DE_NULL) +CustomInstance createInstanceWithWsi(Context& context, + const Extensions& supportedExtensions, + Type wsiType, + const VkAllocationCallbacks* pAllocator = DE_NULL) { vector extensions; @@ -1820,7 +1821,7 @@ Move createInstanceWithWsi(const PlatformInterface& vkp, checkAllSupported(supportedExtensions, extensions); - return vk::createDefaultInstance(vkp, version, vector(), extensions, pAllocator); + return createCustomInstanceWithExtensions(context, extensions, pAllocator); } @@ -1830,7 +1831,8 @@ Move createDeviceWithWsi(const PlatformInterface& vkp, VkPhysicalDevice physicalDevice, const Extensions& supportedExtensions, const deUint32 queueFamilyIndex, - const VkAllocationCallbacks* pAllocator = DE_NULL) + const VkAllocationCallbacks* pAllocator, + bool enableValidation) { const float queuePriorities[] = { 1.0f }; const VkDeviceQueueCreateInfo queueInfos[] = @@ -1848,6 +1850,7 @@ Move createDeviceWithWsi(const PlatformInterface& vkp, deMemset(&features, 0x0, sizeof(features)); const char* const extensions[] = { "VK_KHR_swapchain", "VK_KHR_swapchain_mutable_format" }; + const VkDeviceCreateInfo deviceParams = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, @@ -1868,7 +1871,7 @@ Move createDeviceWithWsi(const PlatformInterface& vkp, TCU_THROW(NotSupportedError, (string(extensions[ndx]) + " is not supported").c_str()); } - return createDevice(vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); + return createCustomDevice(enableValidation, vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); } deUint32 getNumQueueFamilyIndices(const InstanceInterface& vki, VkPhysicalDevice physicalDevice) @@ -1907,18 +1910,17 @@ deUint32 chooseQueueFamilyIndex(const InstanceInterface& vki, VkPhysicalDevice p struct InstanceHelper { const vector supportedExtensions; - const Unique instance; - const InstanceDriver vki; + const CustomInstance instance; + const InstanceDriver& vki; InstanceHelper(Context& context, Type wsiType, const VkAllocationCallbacks* pAllocator = DE_NULL) : supportedExtensions(enumerateInstanceExtensionProperties(context.getPlatformInterface(), DE_NULL)) - , instance(createInstanceWithWsi(context.getPlatformInterface(), - context.getUsedApiVersion(), + , instance(createInstanceWithWsi(context, supportedExtensions, wsiType, pAllocator)) - , vki(context.getPlatformInterface(), *instance) + , vki(instance.getDriver()) {} }; @@ -1944,7 +1946,8 @@ struct DeviceHelper physicalDevice, enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL), queueFamilyIndex, - pAllocator)) + pAllocator, + context.getTestContext().getCommandLine().isValidationEnabled())) , vkd(context.getPlatformInterface(), context.getInstance(), *device) , queue(getDeviceQueue(vkd, *device, queueFamilyIndex, 0)) { @@ -2063,8 +2066,8 @@ tcu::TestStatus testSwapchainMutable(Context& context, CaseDef caseDef) const tcu::UVec2 desiredSize(256, 256); const InstanceHelper instHelper(context, wsiType); const NativeObjects native(context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface(createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper(context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface(createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const DeviceHelper devHelper(context, instHelper.vki, instHelper.instance, *surface); const DeviceInterface& vk = devHelper.vkd; const InstanceDriver& vki = instHelper.vki; const VkDevice device = *devHelper.device; diff --git a/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp b/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp index 5d6bc77..625073d 100644 --- a/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp +++ b/external/vulkancts/modules/vulkan/memory/vktMemoryAllocationTests.cpp @@ -24,6 +24,7 @@ #include "vktMemoryAllocationTests.hpp" #include "vktTestCaseUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "tcuMaybe.hpp" #include "tcuResultCollector.hpp" @@ -146,7 +147,7 @@ protected: VkPhysicalDeviceMemoryProperties m_memoryProperties; private: - vk::Move m_deviceGroupInstance; + CustomInstance m_deviceGroupInstance; vk::Move m_logicalDevice; de::MovePtr m_deviceDriver; }; @@ -159,8 +160,8 @@ void BaseAllocateTestInstance::createDeviceGroup (void) const float queuePriority = 1.0f; deUint32 queueFamilyIndex = 0; const std::vector requiredExtensions (1, "VK_KHR_device_group_creation"); - m_deviceGroupInstance = createInstanceWithExtensions(m_context.getPlatformInterface(), m_context.getUsedApiVersion(), requiredExtensions); - std::vector devGroupProperties = enumeratePhysicalDeviceGroups(m_context.getInstanceInterface(), m_deviceGroupInstance.get()); + m_deviceGroupInstance = createCustomInstanceWithExtensions(m_context, requiredExtensions); + std::vector devGroupProperties = enumeratePhysicalDeviceGroups(m_context.getInstanceInterface(), m_deviceGroupInstance); m_numPhysDevices = devGroupProperties[devGroupIdx].physicalDeviceCount; m_subsetAllocationAllowed = devGroupProperties[devGroupIdx].subsetAllocation; if (m_numPhysDevices < 2) @@ -177,7 +178,7 @@ void BaseAllocateTestInstance::createDeviceGroup (void) devGroupProperties[devGroupIdx].physicalDeviceCount, //physicalDeviceCount devGroupProperties[devGroupIdx].physicalDevices //physicalDevices }; - VkInstance instance (m_useDeviceGroups ? m_deviceGroupInstance.get() : m_context.getInstance()); + VkInstance instance (m_useDeviceGroups ? m_deviceGroupInstance : m_context.getInstance()); InstanceDriver instanceDriver (m_context.getPlatformInterface(), instance); const VkPhysicalDeviceFeatures deviceFeatures = getPhysicalDeviceFeatures(instanceDriver, deviceGroupInfo.pPhysicalDevices[physDeviceIdx]); @@ -211,7 +212,8 @@ void BaseAllocateTestInstance::createDeviceGroup (void) deviceExtensions.empty() ? DE_NULL : &deviceExtensions[0], // const char* const* ppEnabledExtensionNames; &deviceFeatures, // const VkPhysicalDeviceFeatures* pEnabledFeatures; }; - m_logicalDevice = createDevice(m_context.getPlatformInterface(), instance, instanceDriver, deviceGroupInfo.pPhysicalDevices[physDeviceIdx], &deviceInfo); + + m_logicalDevice = createCustomDevice(m_context.getTestContext().getCommandLine().isValidationEnabled(), m_context.getPlatformInterface(), instance, instanceDriver, deviceGroupInfo.pPhysicalDevices[physDeviceIdx], &deviceInfo); m_deviceDriver = de::MovePtr(new DeviceDriver(m_context.getPlatformInterface(), instance, *m_logicalDevice)); m_memoryProperties = getPhysicalDeviceMemoryProperties(instanceDriver, deviceGroupInfo.pPhysicalDevices[physDeviceIdx]); } diff --git a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp index ea40112..6611e5a 100644 --- a/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp +++ b/external/vulkancts/modules/vulkan/multiview/vktMultiViewRenderTests.cpp @@ -24,6 +24,7 @@ #include "vktMultiViewRenderTests.hpp" #include "vktMultiViewRenderUtil.hpp" #include "vktMultiViewRenderPassUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vktTestCase.hpp" #include "vkBuilderUtil.hpp" @@ -695,7 +696,7 @@ void MultiViewRenderTestInstance::createMultiViewDevices (void) m_hasMultiDrawIndirect = enabledFeatures.features.multiDrawIndirect; { - vector deviceExtensions; + vector deviceExtensions; if (!isCoreDeviceExtension(m_context.getUsedApiVersion(), "VK_KHR_multiview")) deviceExtensions.push_back("VK_KHR_multiview"); @@ -718,7 +719,7 @@ void MultiViewRenderTestInstance::createMultiViewDevices (void) DE_NULL //const VkPhysicalDeviceFeatures* pEnabledFeatures; }; - m_logicalDevice = createDevice(m_context.getPlatformInterface(), m_context.getInstance(), instance, physicalDevice, &deviceInfo); + m_logicalDevice = createCustomDevice(m_context.getTestContext().getCommandLine().isValidationEnabled(), m_context.getPlatformInterface(), m_context.getInstance(), instance, physicalDevice, &deviceInfo); m_device = MovePtr(new DeviceDriver(m_context.getPlatformInterface(), m_context.getInstance(), *m_logicalDevice)); m_allocator = MovePtr(new SimpleAllocator(*m_device, *m_logicalDevice, getPhysicalDeviceMemoryProperties(instance, physicalDevice))); m_device->getDeviceQueue (*m_logicalDevice, m_queueFamilyIndex, 0u, &m_queue); diff --git a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushDescriptorTests.cpp b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushDescriptorTests.cpp index bba7a52..d407d96 100644 --- a/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushDescriptorTests.cpp +++ b/external/vulkancts/modules/vulkan/pipeline/vktPipelinePushDescriptorTests.cpp @@ -29,6 +29,7 @@ #include "vktPipelineVertexUtil.hpp" #include "vktPipelineReferenceRenderer.hpp" #include "vktTestCase.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkImageUtil.hpp" #include "vkMemUtil.hpp" #include "vkPrograms.hpp" @@ -82,20 +83,13 @@ void checkAllSupported (const Extensions& supportedExtensions, const vector createInstanceWithGetPhysicalDeviceProperties2 (const Context& context, - const PlatformInterface& vkp, - const Extensions& supportedExtensions) +CustomInstance createInstanceWithGetPhysicalDeviceProperties2 (Context& context, + const Extensions& supportedExtensions) { vector requiredExtensions = { "VK_KHR_get_physical_device_properties2" }; checkAllSupported(supportedExtensions, requiredExtensions); - vector enabledLayers; - if (context.getTestContext().getCommandLine().isValidationEnabled()) - { - enabledLayers = vkt::getValidationLayers(vkp); - } - - return createDefaultInstance(vkp, context.getUsedApiVersion(), enabledLayers, requiredExtensions); + return createCustomInstanceWithExtensions(context, requiredExtensions); } const char *innerCString(const string &str) @@ -133,15 +127,6 @@ Move createDeviceWithPushDescriptor (const Context& context, transform(begin(requiredExtensionsStr), end(requiredExtensionsStr), back_inserter(requiredExtensions), innerCString); // Enable validation layers on this device if validation has been requested from the command line. - vector enabledLayersStr; - vector enabledLayers; - if (context.getTestContext().getCommandLine().isValidationEnabled()) - { - // We need the contents of enabledLayersStr as a vector in VkDeviceCreateInfo. - enabledLayersStr = vkt::getValidationLayers(vki, physicalDevice); - transform(begin(enabledLayersStr), end(enabledLayersStr), back_inserter(enabledLayers), innerCString); - } - const VkDeviceCreateInfo deviceParams = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, @@ -149,14 +134,14 @@ Move createDeviceWithPushDescriptor (const Context& context, (VkDeviceCreateFlags)0, 1u, &queueInfo, - static_cast(enabledLayers.size()), - (enabledLayers.empty() ? DE_NULL : enabledLayers.data()), + 0u, + DE_NULL, static_cast(requiredExtensions.size()), (requiredExtensions.empty() ? DE_NULL : requiredExtensions.data()), &features }; - return createDevice(vkp, instance, vki, physicalDevice, &deviceParams, DE_NULL); + return createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), vkp, instance, vki, physicalDevice, &deviceParams, DE_NULL); } deUint32 findQueueFamilyIndexWithCaps (const InstanceInterface& vkInstance, VkPhysicalDevice physicalDevice, VkQueueFlags requiredCaps) @@ -239,8 +224,8 @@ private: const TestParams m_params; const PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const Unique m_instance; - const InstanceDriver m_vki; + const CustomInstance m_instance; + const InstanceDriver& m_vki; const VkPhysicalDevice m_physicalDevice; const deUint32 m_queueFamilyIndex; const Extensions m_deviceExtensions; @@ -274,13 +259,13 @@ PushDescriptorBufferGraphicsTestInstance::PushDescriptorBufferGraphicsTestInstan , m_params (params) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_vkp, m_instanceExtensions)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_instanceExtensions)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_queueFamilyIndex (findQueueFamilyIndexWithCaps(m_vki, m_physicalDevice, VK_QUEUE_GRAPHICS_BIT)) , m_deviceExtensions (enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithPushDescriptor(context, m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithPushDescriptor(context, m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_allocator (m_vkd, *m_device, getPhysicalDeviceMemoryProperties(m_vki, m_physicalDevice)) , m_renderSize (32, 32) @@ -700,8 +685,8 @@ private: const TestParams m_params; const PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const Unique m_instance; - const InstanceDriver m_vki; + const CustomInstance m_instance; + const InstanceDriver& m_vki; const VkPhysicalDevice m_physicalDevice; const deUint32 m_queueFamilyIndex; const Extensions m_deviceExtensions; @@ -727,13 +712,13 @@ PushDescriptorBufferComputeTestInstance::PushDescriptorBufferComputeTestInstance , m_params (params) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_vkp, m_instanceExtensions)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_instanceExtensions)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_queueFamilyIndex (findQueueFamilyIndexWithCaps(m_vki, m_physicalDevice, VK_QUEUE_COMPUTE_BIT)) , m_deviceExtensions (enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithPushDescriptor(context, m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithPushDescriptor(context, m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_allocator (m_vkd, *m_device, getPhysicalDeviceMemoryProperties(m_vki, m_physicalDevice)) { @@ -1039,8 +1024,8 @@ private: const TestParams m_params; const PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const Unique m_instance; - const InstanceDriver m_vki; + const CustomInstance m_instance; + const InstanceDriver& m_vki; const VkPhysicalDevice m_physicalDevice; const deUint32 m_queueFamilyIndex; const Extensions m_deviceExtensions; @@ -1078,13 +1063,13 @@ PushDescriptorImageGraphicsTestInstance::PushDescriptorImageGraphicsTestInstance , m_params (params) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_vkp, m_instanceExtensions)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_instanceExtensions)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_queueFamilyIndex (findQueueFamilyIndexWithCaps(m_vki, m_physicalDevice, VK_QUEUE_GRAPHICS_BIT)) , m_deviceExtensions (enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithPushDescriptor(context, m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithPushDescriptor(context, m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_allocator (m_vkd, *m_device, getPhysicalDeviceMemoryProperties(m_vki, m_physicalDevice)) , m_renderSize (32, 32) @@ -1891,8 +1876,8 @@ private: const TestParams m_params; const PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const Unique m_instance; - const InstanceDriver m_vki; + const CustomInstance m_instance; + const InstanceDriver& m_vki; const VkPhysicalDevice m_physicalDevice; const deUint32 m_queueFamilyIndex; const Extensions m_deviceExtensions; @@ -1923,13 +1908,13 @@ PushDescriptorImageComputeTestInstance::PushDescriptorImageComputeTestInstance ( , m_params (params) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_vkp, m_instanceExtensions)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_instanceExtensions)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_queueFamilyIndex (findQueueFamilyIndexWithCaps(m_vki, m_physicalDevice, VK_QUEUE_COMPUTE_BIT | VK_QUEUE_GRAPHICS_BIT)) , m_deviceExtensions (enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithPushDescriptor(context, m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithPushDescriptor(context, m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_allocator (m_vkd, *m_device, getPhysicalDeviceMemoryProperties(m_vki, m_physicalDevice)) , m_textureSize (32, 32) @@ -2652,8 +2637,8 @@ private: const TestParams m_params; const PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const Unique m_instance; - const InstanceDriver m_vki; + const CustomInstance m_instance; + const InstanceDriver& m_vki; const VkPhysicalDevice m_physicalDevice; const deUint32 m_queueFamilyIndex; const Extensions m_deviceExtensions; @@ -2689,13 +2674,13 @@ PushDescriptorTexelBufferGraphicsTestInstance::PushDescriptorTexelBufferGraphics , m_params (params) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_vkp, m_instanceExtensions)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_instanceExtensions)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_queueFamilyIndex (findQueueFamilyIndexWithCaps(m_vki, m_physicalDevice, VK_QUEUE_GRAPHICS_BIT)) , m_deviceExtensions (enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithPushDescriptor(context, m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithPushDescriptor(context, m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_allocator (m_vkd, *m_device, getPhysicalDeviceMemoryProperties(m_vki, m_physicalDevice)) , m_renderSize (32, 32) @@ -3138,8 +3123,8 @@ private: const TestParams m_params; const PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const Unique m_instance; - const InstanceDriver m_vki; + const CustomInstance m_instance; + const InstanceDriver& m_vki; const VkPhysicalDevice m_physicalDevice; const deUint32 m_queueFamilyIndex; const Extensions m_deviceExtensions; @@ -3166,13 +3151,13 @@ PushDescriptorTexelBufferComputeTestInstance::PushDescriptorTexelBufferComputeTe , m_params (params) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_vkp, m_instanceExtensions)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_instanceExtensions)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_queueFamilyIndex (findQueueFamilyIndexWithCaps(m_vki, m_physicalDevice, VK_QUEUE_COMPUTE_BIT)) , m_deviceExtensions (enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithPushDescriptor(context, m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithPushDescriptor(context, m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_allocator (m_vkd, *m_device, getPhysicalDeviceMemoryProperties(m_vki, m_physicalDevice)) , m_bufferFormat (VK_FORMAT_R32G32B32A32_SFLOAT) @@ -3502,8 +3487,8 @@ private: const TestParams m_params; const PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const Unique m_instance; - const InstanceDriver m_vki; + const CustomInstance m_instance; + const InstanceDriver& m_vki; const VkPhysicalDevice m_physicalDevice; const deUint32 m_queueFamilyIndex; const Extensions m_deviceExtensions; @@ -3539,13 +3524,13 @@ PushDescriptorInputAttachmentGraphicsTestInstance::PushDescriptorInputAttachment , m_params (params) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_vkp, m_instanceExtensions)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithGetPhysicalDeviceProperties2(context, m_instanceExtensions)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_queueFamilyIndex (findQueueFamilyIndexWithCaps(m_vki, m_physicalDevice, VK_QUEUE_GRAPHICS_BIT)) , m_deviceExtensions (enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithPushDescriptor(context, m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithPushDescriptor(context, m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex)) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_allocator (m_vkd, *m_device, getPhysicalDeviceMemoryProperties(m_vki, m_physicalDevice)) , m_renderSize (32, 32) diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemContext.cpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemContext.cpp index 9ac2a58..e50e0a0 100644 --- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemContext.cpp +++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemContext.cpp @@ -33,13 +33,13 @@ ProtectedContext::ProtectedContext (Context& ctx, const std::vector deviceExtensions) : m_context (ctx) , m_interface (m_context.getPlatformInterface()) - , m_instance (makeProtectedMemInstance(m_interface, m_context, instanceExtensions)) - , m_vki (m_interface, *m_instance) - , m_phyDevice (vk::chooseDevice(m_vki, *m_instance, m_context.getTestContext().getCommandLine())) + , m_instance (makeProtectedMemInstance(m_context, instanceExtensions)) + , m_vki (m_instance.getDriver()) + , m_phyDevice (vk::chooseDevice(m_vki, m_instance, m_context.getTestContext().getCommandLine())) , m_queueFamilyIndex (chooseProtectedMemQueueFamilyIndex(m_vki, m_phyDevice)) - , m_device (makeProtectedMemDevice(m_interface, *m_instance, m_vki, m_phyDevice, m_queueFamilyIndex, ctx.getUsedApiVersion(), deviceExtensions)) + , m_device (makeProtectedMemDevice(m_interface, m_instance, m_vki, m_phyDevice, m_queueFamilyIndex, ctx.getUsedApiVersion(), deviceExtensions, m_context.getTestContext().getCommandLine().isValidationEnabled())) , m_allocator (createAllocator()) - , m_deviceDriver (m_context.getPlatformInterface(), *m_instance, *m_device) + , m_deviceDriver (m_context.getPlatformInterface(), m_instance, *m_device) , m_queue (getProtectedQueue(m_deviceDriver, *m_device, m_queueFamilyIndex, 0)) { } @@ -52,14 +52,14 @@ ProtectedContext::ProtectedContext (Context& ctx, const std::vector deviceExtensions) : m_context (ctx) , m_interface (m_context.getPlatformInterface()) - , m_instance (makeProtectedMemInstance(m_interface, m_context, instanceExtensions)) - , m_vki (m_interface, *m_instance) - , m_phyDevice (vk::chooseDevice(m_vki, *m_instance, m_context.getTestContext().getCommandLine())) - , m_surface (vk::wsi::createSurface(m_vki, *m_instance, wsiType, display, window)) + , m_instance (makeProtectedMemInstance(m_context, instanceExtensions)) + , m_vki (m_instance.getDriver()) + , m_phyDevice (vk::chooseDevice(m_vki, m_instance, m_context.getTestContext().getCommandLine())) + , m_surface (vk::wsi::createSurface(m_vki, m_instance, wsiType, display, window)) , m_queueFamilyIndex (chooseProtectedMemQueueFamilyIndex(m_vki, m_phyDevice, *m_surface)) - , m_device (makeProtectedMemDevice(m_interface, *m_instance, m_vki, m_phyDevice, m_queueFamilyIndex, ctx.getUsedApiVersion(), deviceExtensions)) + , m_device (makeProtectedMemDevice(m_interface, m_instance, m_vki, m_phyDevice, m_queueFamilyIndex, ctx.getUsedApiVersion(), deviceExtensions, m_context.getTestContext().getCommandLine().isValidationEnabled())) , m_allocator (createAllocator()) - , m_deviceDriver (m_interface, *m_instance, *m_device) + , m_deviceDriver (m_interface, m_instance, *m_device) , m_queue (getProtectedQueue(m_deviceDriver, *m_device, m_queueFamilyIndex, 0)) { } diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemContext.hpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemContext.hpp index 3f2384f..435d17c 100644 --- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemContext.hpp +++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemContext.hpp @@ -27,6 +27,7 @@ #include "tcuVector.hpp" #include "vkDefs.hpp" #include "vktTestCase.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vktProtectedMemUtils.hpp" #include "tcuCommandLine.hpp" @@ -64,7 +65,7 @@ public: vk::Allocator& getDefaultAllocator (void) const { return *m_allocator; } const vk::InstanceDriver& getInstanceDriver (void) const { return m_vki; } - vk::VkInstance getInstance (void) const { return *m_instance; } + vk::VkInstance getInstance (void) const { return m_instance; } const vk::VkSurfaceKHR getSurface (void) const { return *m_surface; } @@ -80,8 +81,8 @@ private: Context& m_context; const vk::PlatformInterface& m_interface; - vk::Move m_instance; - vk::InstanceDriver m_vki; + CustomInstance m_instance; + const vk::InstanceDriver& m_vki; vk::VkPhysicalDevice m_phyDevice; const vk::Move m_surface; deUint32 m_queueFamilyIndex; diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemUtils.cpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemUtils.cpp index 90355da..b13b007 100644 --- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemUtils.cpp +++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemUtils.cpp @@ -23,6 +23,7 @@ *//*--------------------------------------------------------------------*/ #include "vktProtectedMemUtils.hpp" +#include "vktCustomInstancesDevices.hpp" #include "deString.h" #include "deRandom.hpp" @@ -49,35 +50,22 @@ namespace ProtectedMem typedef std::vector Extensions; -vk::Move makeProtectedMemInstance (const vk::PlatformInterface& vkp, const vkt::Context& context, const std::vector& extraExtensions) +CustomInstance makeProtectedMemInstance (vkt::Context& context, const std::vector& extraExtensions) { + const PlatformInterface& vkp = context.getPlatformInterface(); const Extensions supportedExtensions(vk::enumerateInstanceExtensionProperties(vkp, DE_NULL)); - std::vector enabledLayers; std::vector requiredExtensions = extraExtensions; - const bool isValidationEnabled = context.getTestContext().getCommandLine().isValidationEnabled(); - - if (isValidationEnabled) - { - if (!vk::isDebugReportSupported(vkp)) - TCU_THROW(NotSupportedError, "VK_EXT_debug_report is not supported"); - - enabledLayers = vkt::getValidationLayers(vkp); - if (enabledLayers.empty()) - TCU_THROW(NotSupportedError, "No validation layers found"); - } if (!isCoreInstanceExtension(context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")) requiredExtensions.push_back("VK_KHR_get_physical_device_properties2"); - for (std::vector::const_iterator requiredExtName = requiredExtensions.begin(); - requiredExtName != requiredExtensions.end(); - ++requiredExtName) + for (const auto& extName : requiredExtensions) { - if (!isInstanceExtensionSupported(context.getUsedApiVersion(), supportedExtensions, vk::RequiredExtension(*requiredExtName))) - TCU_THROW(NotSupportedError, (*requiredExtName + " is not supported").c_str()); + if (!isInstanceExtensionSupported(context.getUsedApiVersion(), supportedExtensions, vk::RequiredExtension(extName))) + TCU_THROW(NotSupportedError, (extName + " is not supported").c_str()); } - return vk::createDefaultInstance(vkp, context.getUsedApiVersion(), enabledLayers, requiredExtensions); + return createCustomInstanceWithExtensions(context, requiredExtensions); } void checkProtectedQueueSupport (Context& context) @@ -145,7 +133,8 @@ vk::Move makeProtectedMemDevice (const vk::PlatformInterface& vkp vk::VkPhysicalDevice physicalDevice, const deUint32 queueFamilyIndex, const deUint32 apiVersion, - const std::vector& extraExtensions) + const std::vector& extraExtensions, + bool validationEnabled) { const Extensions supportedExtensions (vk::enumerateDeviceExtensionProperties(vkd, physicalDevice, DE_NULL)); std::vector requiredExtensions; @@ -236,7 +225,7 @@ vk::Move makeProtectedMemDevice (const vk::PlatformInterface& vkp DE_NULL // pEnabledFeatures }; - return vk::createDevice(vkp, instance, vkd, physicalDevice, &deviceParams, DE_NULL); + return createCustomDevice(validationEnabled, vkp, instance, vkd, physicalDevice, &deviceParams, DE_NULL); } vk::VkQueue getProtectedQueue (const vk::DeviceInterface& vk, diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemUtils.hpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemUtils.hpp index 9f41e15..8671a84 100644 --- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemUtils.hpp +++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemUtils.hpp @@ -26,6 +26,7 @@ #include "deUniquePtr.hpp" #include "vktTestCase.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkRefUtil.hpp" #include "vkMemUtil.hpp" @@ -57,8 +58,7 @@ typedef std::vector VertexAttribs; void checkProtectedQueueSupport (Context& context); -vk::Move makeProtectedMemInstance (const vk::PlatformInterface& vkp, - const vkt::Context& context, +CustomInstance makeProtectedMemInstance (vkt::Context& context, const std::vector& extraExtensions = std::vector()); deUint32 chooseProtectedMemQueueFamilyIndex (const vk::InstanceDriver& vkd, vk::VkPhysicalDevice physicalDevice, @@ -70,7 +70,8 @@ vk::Move makeProtectedMemDevice (const vk::PlatformInterface vk::VkPhysicalDevice physicalDevice, const deUint32 queueFamilyIndex, const deUint32 apiVersion, - const std::vector& extraExtensions = std::vector()); + const std::vector& extraExtensions, + bool validationEnabled); vk::VkQueue getProtectedQueue (const vk::DeviceInterface& vk, vk::VkDevice device, const deUint32 queueFamilyIndex, diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.cpp index 991740d..4cdd332 100644 --- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.cpp +++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.cpp @@ -23,6 +23,7 @@ *//*--------------------------------------------------------------------*/ #include "vktRobustnessUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkImageUtil.hpp" #include "vkPrograms.hpp" @@ -31,6 +32,7 @@ #include "vkTypeUtil.hpp" #include "vkCmdUtil.hpp" #include "vkObjUtil.hpp" +#include "tcuCommandLine.hpp" #include "deMath.h" #include #include @@ -48,7 +50,7 @@ Move createRobustBufferAccessDevice (Context& context) const float queuePriority = 1.0f; // Create a universal queue that supports graphics and compute - const VkDeviceQueueCreateInfo queueParams = + const VkDeviceQueueCreateInfo queueParams = { VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // VkStructureType sType; DE_NULL, // const void* pNext; @@ -61,7 +63,7 @@ Move createRobustBufferAccessDevice (Context& context) VkPhysicalDeviceFeatures enabledFeatures = context.getDeviceFeatures(); enabledFeatures.robustBufferAccess = true; - const VkDeviceCreateInfo deviceParams = + const VkDeviceCreateInfo deviceParams = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // VkStructureType sType; DE_NULL, // const void* pNext; @@ -75,8 +77,8 @@ Move createRobustBufferAccessDevice (Context& context) &enabledFeatures // const VkPhysicalDeviceFeatures* pEnabledFeatures; }; - return createDevice(context.getPlatformInterface(), context.getInstance(), - context.getInstanceInterface(), context.getPhysicalDevice(), &deviceParams); + return createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), + context.getInstance(), context.getInstanceInterface(), context.getPhysicalDevice(), &deviceParams); } bool areEqual (float a, float b) diff --git a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.cpp b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.cpp index 4e59a9a..4476c3f 100644 --- a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.cpp +++ b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.cpp @@ -23,6 +23,7 @@ #include "vktSparseResourcesBase.hpp" #include "vktSparseResourcesTestsUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkMemUtil.hpp" #include "vkRefUtil.hpp" #include "vkTypeUtil.hpp" @@ -81,8 +82,8 @@ void SparseResourcesBaseInstance::createDeviceSupportingQueues(const QueueRequir if (m_useDeviceGroups) { const std::vector requiredExtensions(1, "VK_KHR_device_group_creation"); - m_deviceGroupInstance = createInstanceWithExtensions(m_context.getPlatformInterface(), m_context.getUsedApiVersion(), requiredExtensions); - devGroupProperties = enumeratePhysicalDeviceGroups(m_context.getInstanceInterface(), m_deviceGroupInstance.get()); + m_deviceGroupInstance = createCustomInstanceWithExtensions(m_context, requiredExtensions); + devGroupProperties = enumeratePhysicalDeviceGroups(m_context.getInstanceInterface(), m_deviceGroupInstance); m_numPhysicalDevices = devGroupProperties[m_deviceGroupIdx].physicalDeviceCount; m_physicalDevices.clear(); @@ -100,7 +101,7 @@ void SparseResourcesBaseInstance::createDeviceSupportingQueues(const QueueRequir deviceExtensions.push_back("VK_KHR_device_group"); } - const VkInstance& instance(m_useDeviceGroups ? m_deviceGroupInstance.get() : m_context.getInstance()); + const VkInstance& instance(m_useDeviceGroups ? m_deviceGroupInstance : m_context.getInstance()); InstanceDriver instanceDriver(m_context.getPlatformInterface(), instance); const VkPhysicalDevice physicalDevice = getPhysicalDevice(); deUint32 queueFamilyPropertiesCount = 0u; @@ -188,7 +189,7 @@ void SparseResourcesBaseInstance::createDeviceSupportingQueues(const QueueRequir &deviceFeatures, // const VkPhysicalDeviceFeatures* pEnabledFeatures; }; - m_logicalDevice = createDevice(m_context.getPlatformInterface(), instance, instanceDriver, physicalDevice, &deviceInfo); + m_logicalDevice = createCustomDevice(m_context.getTestContext().getCommandLine().isValidationEnabled(), m_context.getPlatformInterface(), instance, instanceDriver, physicalDevice, &deviceInfo); m_deviceDriver = de::MovePtr(new DeviceDriver(m_context.getPlatformInterface(), instance, *m_logicalDevice)); m_allocator = de::MovePtr(new SimpleAllocator(*m_deviceDriver, *m_logicalDevice, getPhysicalDeviceMemoryProperties(instanceDriver, physicalDevice))); diff --git a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.hpp b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.hpp index a82eeb5..f14a37f 100644 --- a/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.hpp +++ b/external/vulkancts/modules/vulkan/sparse_resources/vktSparseResourcesBase.hpp @@ -25,6 +25,7 @@ #include "vkDefs.hpp" #include "vktTestCase.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkRef.hpp" #include "vkPlatform.hpp" #include "deUniquePtr.hpp" @@ -84,7 +85,7 @@ protected: private: bool m_useDeviceGroups; deUint32 m_deviceGroupIdx; - vk::Move m_deviceGroupInstance; + CustomInstance m_deviceGroupInstance; std::vector m_physicalDevices; std::map > m_queues; de::MovePtr m_deviceDriver; diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp index 1ea14e4..d74212a 100644 --- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp +++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationBasicSemaphoreTests.cpp @@ -24,6 +24,7 @@ #include "vktSynchronizationBasicSemaphoreTests.hpp" #include "vktTestCaseUtil.hpp" #include "vktSynchronizationUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkPlatform.hpp" @@ -33,6 +34,8 @@ #include "vkRef.hpp" +#include "tcuCommandLine.hpp" + namespace vkt { namespace synchronization @@ -238,7 +241,7 @@ tcu::TestStatus basicMultiQueueCase (Context& context) deviceInfo.queueCreateInfoCount = (queues[FIRST].queueFamilyIndex == queues[SECOND].queueFamilyIndex) ? 1 : COUNT; deviceInfo.pQueueCreateInfos = queueInfos; - logicalDevice = vk::createDevice(context.getPlatformInterface(), context.getInstance(), instance, physicalDevice, &deviceInfo); + logicalDevice = createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), context.getInstance(), instance, physicalDevice, &deviceInfo); for (deUint32 queueReqNdx = 0; queueReqNdx < COUNT; ++queueReqNdx) { diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp index 4f93704..986540c 100644 --- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp +++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationCrossInstanceSharingTests.cpp @@ -35,9 +35,11 @@ #include "vktSynchronizationOperationResources.hpp" #include "vktExternalMemoryUtil.hpp" #include "vktTestGroupUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "tcuResultCollector.hpp" #include "tcuTestLog.hpp" +#include "tcuCommandLine.hpp" using tcu::TestLog; using namespace vkt::ExternalMemoryUtil; @@ -291,122 +293,23 @@ SimpleAllocation::~SimpleAllocation (void) m_vkd.freeMemory(m_device, getMemory(), DE_NULL); } -class DeviceId +CustomInstance createTestInstance (Context& context) { -public: - DeviceId (deUint32 vendorId, - deUint32 driverVersion, - const deUint8 driverUUID[VK_UUID_SIZE], - const deUint8 deviceUUID[VK_UUID_SIZE]); - - bool operator== (const DeviceId& other) const; - bool operator|= (const DeviceId& other) const; - -private: - const deUint32 m_vendorId; - const deUint32 m_driverVersion; - deUint8 m_driverUUID[VK_UUID_SIZE]; - deUint8 m_deviceUUID[VK_UUID_SIZE]; -}; - -DeviceId::DeviceId (deUint32 vendorId, - deUint32 driverVersion, - const deUint8 driverUUID[VK_UUID_SIZE], - const deUint8 deviceUUID[VK_UUID_SIZE]) - : m_vendorId (vendorId) - , m_driverVersion (driverVersion) -{ - deMemcpy(m_driverUUID, driverUUID, sizeof(m_driverUUID)); - deMemcpy(m_deviceUUID, deviceUUID, sizeof(m_deviceUUID)); -} - -bool DeviceId::operator== (const DeviceId& other) const -{ - if (this == &other) - return true; - - if (m_vendorId != other.m_vendorId) - return false; - - if (m_driverVersion != other.m_driverVersion) - return false; - - if (deMemCmp(m_driverUUID, other.m_driverUUID, sizeof(m_driverUUID)) != 0) - return false; - - return deMemCmp(m_deviceUUID, other.m_deviceUUID, sizeof(m_deviceUUID)) == 0; -} - -DeviceId getDeviceId (const vk::InstanceInterface& vki, - vk::VkPhysicalDevice physicalDevice) -{ - vk::VkPhysicalDeviceIDProperties propertiesId; - vk::VkPhysicalDeviceProperties2 properties; - - deMemset(&properties, 0, sizeof(properties)); - deMemset(&propertiesId, 0, sizeof(propertiesId)); - - propertiesId.sType = vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES; - - properties.sType = vk::VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; - properties.pNext = &propertiesId; - - vki.getPhysicalDeviceProperties2(physicalDevice, &properties); - - return DeviceId(properties.properties.vendorID, properties.properties.driverVersion, propertiesId.driverUUID, propertiesId.deviceUUID); -} - -vk::Move createInstance (const vk::PlatformInterface& vkp, deUint32 version) -{ - try - { - std::vector extensions; - if (!vk::isCoreInstanceExtension(version, "VK_KHR_get_physical_device_properties2")) - extensions.push_back("VK_KHR_get_physical_device_properties2"); - if (!vk::isCoreInstanceExtension(version, "VK_KHR_external_semaphore_capabilities")) - extensions.push_back("VK_KHR_external_semaphore_capabilities"); - if (!vk::isCoreInstanceExtension(version, "VK_KHR_external_memory_capabilities")) - extensions.push_back("VK_KHR_external_memory_capabilities"); - - return vk::createDefaultInstance(vkp, version, std::vector(), extensions); - } - catch (const vk::Error& error) - { - if (error.getError() == vk::VK_ERROR_EXTENSION_NOT_PRESENT) - TCU_THROW(NotSupportedError, "Required external memory extensions not supported by the instance"); - else - throw; - } -} - -vk::VkPhysicalDevice getPhysicalDevice (const vk::InstanceInterface& vki, - vk::VkInstance instance, - const tcu::CommandLine& cmdLine) -{ - return vk::chooseDevice(vki, instance, cmdLine); -} + std::vector extensions; + extensions.push_back("VK_KHR_get_physical_device_properties2"); + extensions.push_back("VK_KHR_external_semaphore_capabilities"); + extensions.push_back("VK_KHR_external_memory_capabilities"); -vk::VkPhysicalDevice getPhysicalDevice (const vk::InstanceInterface& vki, vk::VkInstance instance, const DeviceId& deviceId) -{ - const std::vector devices (vk::enumeratePhysicalDevices(vki, instance)); - - for (size_t deviceNdx = 0; deviceNdx < devices.size(); deviceNdx++) - { - if (deviceId == getDeviceId(vki, devices[deviceNdx])) - return devices[deviceNdx]; - } - - TCU_FAIL("No matching device found"); - - return (vk::VkPhysicalDevice)0; + return createCustomInstanceWithExtensions(context, extensions); } -vk::Move createDevice (const Context& context, - const vk::PlatformInterface& vkp, - vk::VkInstance instance, - const vk::InstanceInterface& vki, - const vk::VkPhysicalDevice physicalDevice) +vk::Move createTestDevice (const Context& context, + const vk::PlatformInterface& vkp, + vk::VkInstance instance, + const vk::InstanceInterface& vki, + const vk::VkPhysicalDevice physicalDevice) { + const bool validationEnabled = context.getTestContext().getCommandLine().isValidationEnabled(); const float priority = 0.0f; const std::vector queueFamilyProperties = vk::getPhysicalDeviceQueueFamilyProperties(vki, physicalDevice); std::vector queueFamilyIndices (queueFamilyProperties.size(), 0xFFFFFFFFu); @@ -470,7 +373,7 @@ vk::Move createDevice (const Context& context, 0u }; - return vk::createDevice(vkp, instance, vki, physicalDevice, &createInfo); + return vkt::createCustomDevice(validationEnabled, vkp, instance, vki, physicalDevice, &createInfo); } catch (const vk::Error& error) { @@ -484,30 +387,50 @@ vk::Move createDevice (const Context& context, // Class to wrap a singleton instance and device class InstanceAndDevice { - InstanceAndDevice (const Context& context) - : m_instance (createInstance(context.getPlatformInterface(), context.getUsedApiVersion())) - , m_vki (context.getPlatformInterface(), *m_instance) - , m_physicalDevice (getPhysicalDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) - , m_logicalDevice (createDevice(context, context.getPlatformInterface(), *m_instance, m_vki, m_physicalDevice)) + InstanceAndDevice (Context& context) + : m_instance (createTestInstance(context)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (vk::chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) + , m_logicalDevice (createTestDevice(context, context.getPlatformInterface(), m_instance, m_vki, m_physicalDevice)) { } public: - static const vk::Unique& getInstanceA(const Context& context) + static vk::VkInstance getInstanceA(Context& context) { if (!m_instanceA) m_instanceA = SharedPtr(new InstanceAndDevice(context)); return m_instanceA->m_instance; } - static const Unique& getInstanceB(const Context& context) + static vk::VkInstance getInstanceB(Context& context) { if (!m_instanceB) m_instanceB = SharedPtr(new InstanceAndDevice(context)); return m_instanceB->m_instance; } + static const vk::InstanceDriver& getDriverA() + { + DE_ASSERT(m_instanceA); + return m_instanceA->m_instance.getDriver(); + } + static const vk::InstanceDriver& getDriverB() + { + DE_ASSERT(m_instanceB); + return m_instanceB->m_instance.getDriver(); + } + static vk::VkPhysicalDevice getPhysicalDeviceA() + { + DE_ASSERT(m_instanceA); + return m_instanceA->m_physicalDevice; + } + static vk::VkPhysicalDevice getPhysicalDeviceB() + { + DE_ASSERT(m_instanceB); + return m_instanceB->m_physicalDevice; + } static const Unique& getDeviceA() { DE_ASSERT(m_instanceA); @@ -518,7 +441,16 @@ public: DE_ASSERT(m_instanceB); return m_instanceB->m_logicalDevice; } - + static void collectMessagesA() + { + DE_ASSERT(m_instanceA); + m_instanceA->m_instance.collectMessages(); + } + static void collectMessagesB() + { + DE_ASSERT(m_instanceB); + m_instanceB->m_instance.collectMessages(); + } static void destroy() { m_instanceA.clear(); @@ -526,8 +458,8 @@ public: } private: - const Unique m_instance; - const vk::InstanceDriver m_vki; + CustomInstance m_instance; + const vk::InstanceDriver& m_vki; const vk::VkPhysicalDevice m_physicalDevice; const Unique m_logicalDevice; @@ -1051,27 +983,25 @@ private: const de::UniquePtr m_supportReadOp; const NotSupportedChecker m_notSupportedChecker; // Must declare before VkInstance to effectively reduce runtimes! - const vk::Unique& m_instanceA; + const bool m_getMemReq2Supported; - const vk::InstanceDriver m_vkiA; + const vk::VkInstance m_instanceA; + const vk::InstanceDriver& m_vkiA; const vk::VkPhysicalDevice m_physicalDeviceA; const std::vector m_queueFamiliesA; const std::vector m_queueFamilyIndicesA; - - const bool m_getMemReq2Supported; - const vk::Unique& m_deviceA; const vk::DeviceDriver m_vkdA; - const vk::Unique& m_instanceB; - const vk::InstanceDriver m_vkiB; + const vk::VkInstance m_instanceB; + const vk::InstanceDriver& m_vkiB; const vk::VkPhysicalDevice m_physicalDeviceB; const std::vector m_queueFamiliesB; const std::vector m_queueFamilyIndicesB; const vk::Unique& m_deviceB; const vk::DeviceDriver m_vkdB; - const vk::VkExternalSemaphoreHandleTypeFlagBits m_semaphoreHandleType; + const vk::VkExternalSemaphoreHandleTypeFlagBits m_semaphoreHandleType; const vk::VkExternalMemoryHandleTypeFlagBits m_memoryHandleType; // \todo Should this be moved to the group same way as in the other tests? @@ -1088,25 +1018,23 @@ SharingTestInstance::SharingTestInstance (Context& context, , m_supportWriteOp (makeOperationSupport(config.writeOp, config.resource)) , m_supportReadOp (makeOperationSupport(config.readOp, config.resource)) , m_notSupportedChecker (context, m_config, *m_supportWriteOp, *m_supportReadOp) + , m_getMemReq2Supported (vk::isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_get_memory_requirements2")) , m_instanceA (InstanceAndDevice::getInstanceA(context)) - - , m_vkiA (context.getPlatformInterface(), *m_instanceA) // \todo [2017-06-13 pyry] Provide correct extension list - , m_physicalDeviceA (getPhysicalDevice(m_vkiA, *m_instanceA, context.getTestContext().getCommandLine())) + , m_vkiA (InstanceAndDevice::getDriverA()) + , m_physicalDeviceA (InstanceAndDevice::getPhysicalDeviceA()) , m_queueFamiliesA (vk::getPhysicalDeviceQueueFamilyProperties(m_vkiA, m_physicalDeviceA)) , m_queueFamilyIndicesA (getFamilyIndices(m_queueFamiliesA)) - , m_getMemReq2Supported (vk::isDeviceExtensionSupported(context.getUsedApiVersion(), context.getDeviceExtensions(), "VK_KHR_get_memory_requirements2")) , m_deviceA (InstanceAndDevice::getDeviceA()) - , m_vkdA (context.getPlatformInterface(), *m_instanceA, *m_deviceA) + , m_vkdA (context.getPlatformInterface(), m_instanceA, *m_deviceA) , m_instanceB (InstanceAndDevice::getInstanceB(context)) - - , m_vkiB (context.getPlatformInterface(), *m_instanceB) // \todo [2017-06-13 pyry] Provide correct extension list - , m_physicalDeviceB (getPhysicalDevice(m_vkiB, *m_instanceB, getDeviceId(m_vkiA, m_physicalDeviceA))) + , m_vkiB (InstanceAndDevice::getDriverB()) + , m_physicalDeviceB (InstanceAndDevice::getPhysicalDeviceB()) , m_queueFamiliesB (vk::getPhysicalDeviceQueueFamilyProperties(m_vkiB, m_physicalDeviceB)) , m_queueFamilyIndicesB (getFamilyIndices(m_queueFamiliesB)) , m_deviceB (InstanceAndDevice::getDeviceB()) - , m_vkdB (context.getPlatformInterface(), *m_instanceB, *m_deviceB) + , m_vkdB (context.getPlatformInterface(), m_instanceB, *m_deviceB) , m_semaphoreHandleType (m_config.semaphoreHandleType) , m_memoryHandleType (m_config.memoryHandleType) @@ -1126,20 +1054,20 @@ tcu::TestStatus SharingTestInstance::iterate (void) const deUint32 queueFamilyA = (deUint32)m_queueANdx; const deUint32 queueFamilyB = (deUint32)m_queueBNdx; - const tcu::ScopedLogSection queuePairSection (log, + const tcu::ScopedLogSection queuePairSection (log, "WriteQueue-" + de::toString(queueFamilyA) + "-ReadQueue-" + de::toString(queueFamilyB), "WriteQueue-" + de::toString(queueFamilyA) + "-ReadQueue-" + de::toString(queueFamilyB)); - const vk::Unique semaphoreA (createExportableSemaphore(m_vkdA, *m_deviceA, m_semaphoreHandleType)); - const vk::Unique semaphoreB (createSemaphore(m_vkdB, *m_deviceB)); + const vk::Unique semaphoreA (createExportableSemaphore(m_vkdA, *m_deviceA, m_semaphoreHandleType)); + const vk::Unique semaphoreB (createSemaphore(m_vkdB, *m_deviceB)); - deUint32 exportedMemoryTypeIndex = ~0U; - const de::UniquePtr resourceA (createResource(m_vkdA, *m_deviceA, m_config.resource, m_queueFamilyIndicesA, *m_supportReadOp, *m_supportWriteOp, m_memoryHandleType, exportedMemoryTypeIndex, m_config.dedicated, m_getMemReq2Supported)); + deUint32 exportedMemoryTypeIndex = ~0U; + const de::UniquePtr resourceA (createResource(m_vkdA, *m_deviceA, m_config.resource, m_queueFamilyIndicesA, *m_supportReadOp, *m_supportWriteOp, m_memoryHandleType, exportedMemoryTypeIndex, m_config.dedicated, m_getMemReq2Supported)); - NativeHandle nativeMemoryHandle; - getMemoryNative(m_vkdA, *m_deviceA, resourceA->getMemory(), m_memoryHandleType, nativeMemoryHandle); + NativeHandle nativeMemoryHandle; + getMemoryNative(m_vkdA, *m_deviceA, resourceA->getMemory(), m_memoryHandleType, nativeMemoryHandle); - const de::UniquePtr resourceB (importResource(m_vkdB, *m_deviceB, m_config.resource, m_queueFamilyIndicesB, *m_supportReadOp, *m_supportWriteOp, nativeMemoryHandle, m_memoryHandleType, exportedMemoryTypeIndex, m_config.dedicated)); + const de::UniquePtr resourceB (importResource(m_vkdB, *m_deviceB, m_config.resource, m_queueFamilyIndicesB, *m_supportReadOp, *m_supportWriteOp, nativeMemoryHandle, m_memoryHandleType, exportedMemoryTypeIndex, m_config.dedicated)); const vk::VkQueue queueA (getQueue(m_vkdA, *m_deviceA, queueFamilyA)); @@ -1306,6 +1234,10 @@ tcu::TestStatus SharingTestInstance::iterate (void) m_resultCollector.fail(std::string("Exception: ") + error.getMessage()); } + // Collect possible validation errors. + InstanceAndDevice::collectMessagesA(); + InstanceAndDevice::collectMessagesB(); + // Move to next queue { m_queueBNdx++; diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationInternallySynchronizedObjectsTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationInternallySynchronizedObjectsTests.cpp index 23fb228..687ef30 100644 --- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationInternallySynchronizedObjectsTests.cpp +++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationInternallySynchronizedObjectsTests.cpp @@ -24,6 +24,7 @@ #include "vktSynchronizationInternallySynchronizedObjectsTests.hpp" #include "vktTestCaseUtil.hpp" #include "vktSynchronizationUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkRef.hpp" #include "tcuDefs.hpp" @@ -36,6 +37,7 @@ #include "vkObjUtil.hpp" #include "tcuResultCollector.hpp" +#include "tcuCommandLine.hpp" #include "deThread.hpp" #include "deMutex.hpp" @@ -258,7 +260,7 @@ MovePtr createQueues (const Context& context, const VkQueueFlags& q deviceInfo.queueCreateInfoCount = static_cast(queues.countQueueFamilyIndex()); deviceInfo.pQueueCreateInfos = &queueInfos[0]; - queues.setDevice(createDevice(context.getPlatformInterface(), context.getInstance(), instance, physicalDevice, &deviceInfo)); + queues.setDevice(createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), context.getInstance(), instance, physicalDevice, &deviceInfo)); for (deUint32 queueFamilyIndex = 0; queueFamilyIndex < queues.countQueueFamilyIndex(); ++queueFamilyIndex) { diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp index 1a3a3df..b44db86 100644 --- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp +++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp @@ -22,6 +22,7 @@ *//*--------------------------------------------------------------------*/ #include "vktSynchronizationOperationMultiQueueTests.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vktTestCase.hpp" #include "vktTestCaseUtil.hpp" @@ -41,6 +42,7 @@ #include "vktSynchronizationOperationTestData.hpp" #include "vktSynchronizationOperationResources.hpp" #include "vktTestGroupUtil.hpp" +#include "tcuCommandLine.hpp" namespace vkt { @@ -135,7 +137,7 @@ class MultiQueues &context.getDeviceFeatures() //const VkPhysicalDeviceFeatures* pEnabledFeatures; }; - m_logicalDevice = createDevice(context.getPlatformInterface(), context.getInstance(), instance, physicalDevice, &deviceInfo); + m_logicalDevice = createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), context.getInstance(), instance, physicalDevice, &deviceInfo); m_deviceDriver = MovePtr(new DeviceDriver(context.getPlatformInterface(), context.getInstance(), *m_logicalDevice)); m_allocator = MovePtr(new SimpleAllocator(*m_deviceDriver, *m_logicalDevice, getPhysicalDeviceMemoryProperties(instance, physicalDevice))); diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSmokeTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSmokeTests.cpp index 7c21160..c236961 100644 --- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSmokeTests.cpp +++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSmokeTests.cpp @@ -24,6 +24,7 @@ #include "vktSynchronizationSmokeTests.hpp" #include "vktTestCaseUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkPlatform.hpp" #include "vkStrUtil.hpp" @@ -34,6 +35,7 @@ #include "tcuTestLog.hpp" #include "tcuFormatUtil.hpp" +#include "tcuCommandLine.hpp" #include "deUniquePtr.hpp" #include "deThread.hpp" @@ -87,7 +89,7 @@ void buildShaders (SourceCollections& shaderCollection) "}\n"); } -Move createTestDevice (const PlatformInterface& vkp, VkInstance instance, const InstanceInterface& vki, VkPhysicalDevice physicalDevice, deUint32 *outQueueFamilyIndex) +Move createTestDevice (const PlatformInterface& vkp, VkInstance instance, const InstanceInterface& vki, VkPhysicalDevice physicalDevice, bool validationEnabled, deUint32 *outQueueFamilyIndex) { VkDeviceQueueCreateInfo queueInfo; VkDeviceCreateInfo deviceInfo; @@ -138,7 +140,7 @@ Move createTestDevice (const PlatformInterface& vkp, VkInstance instan *outQueueFamilyIndex = queueInfo.queueFamilyIndex; - return createDevice(vkp, instance, vki, physicalDevice, &deviceInfo); + return createCustomDevice(validationEnabled, vkp, instance, vki, physicalDevice, &deviceInfo); }; struct BufferParameters @@ -1082,7 +1084,7 @@ tcu::TestStatus testSemaphores (Context& context) const InstanceInterface& instanceInterface = context.getInstanceInterface(); const VkPhysicalDevice physicalDevice = context.getPhysicalDevice(); deUint32 queueFamilyIdx; - vk::Move device = createTestDevice(platformInterface, context.getInstance(), instanceInterface, physicalDevice, &queueFamilyIdx); + vk::Move device = createTestDevice(platformInterface, context.getInstance(), instanceInterface, physicalDevice, context.getTestContext().getCommandLine().isValidationEnabled(), &queueFamilyIdx); const DeviceDriver deviceInterface (platformInterface, context.getInstance(), *device); SimpleAllocator allocator (deviceInterface, *device, diff --git a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationWin32KeyedMutexTests.cpp b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationWin32KeyedMutexTests.cpp index 89e1766..87cb055 100644 --- a/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationWin32KeyedMutexTests.cpp +++ b/external/vulkancts/modules/vulkan/synchronization/vktSynchronizationWin32KeyedMutexTests.cpp @@ -34,9 +34,11 @@ #include "vktSynchronizationOperationTestData.hpp" #include "vktExternalMemoryUtil.hpp" #include "vktTestGroupUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "tcuResultCollector.hpp" #include "tcuTestLog.hpp" +#include "tcuCommandLine.hpp" #if (DE_OS == DE_OS_WIN32) # define WIN32_LEAN_AND_MEAN @@ -144,40 +146,23 @@ SimpleAllocation::~SimpleAllocation (void) m_vkd.freeMemory(m_device, getMemory(), DE_NULL); } -vk::Move createInstance (const vk::PlatformInterface& vkp, deUint32 version) +CustomInstance createTestInstance (Context& context) { - try - { - std::vector extensions; - if (!isCoreInstanceExtension(version, "VK_KHR_get_physical_device_properties2")) - extensions.push_back("VK_KHR_get_physical_device_properties2"); - if (!isCoreInstanceExtension(version, "VK_KHR_get_physical_device_properties2")) - extensions.push_back("VK_KHR_external_memory_capabilities"); - - return vk::createDefaultInstance(vkp, version, std::vector(), extensions); - } - catch (const vk::Error& error) - { - if (error.getError() == vk::VK_ERROR_EXTENSION_NOT_PRESENT) - TCU_THROW(NotSupportedError, "Required external memory extensions not supported by the instance"); - else - throw; - } -} + std::vector extensions; + extensions.push_back("VK_KHR_get_physical_device_properties2"); + extensions.push_back("VK_KHR_external_memory_capabilities"); -vk::VkPhysicalDevice getPhysicalDevice (const vk::InstanceInterface& vki, - vk::VkInstance instance, - const tcu::CommandLine& cmdLine) -{ - return vk::chooseDevice(vki, instance, cmdLine); + return createCustomInstanceWithExtensions(context, extensions); } -vk::Move createDevice (const deUint32 apiVersion, - const vk::PlatformInterface& vkp, - vk::VkInstance instance, - const vk::InstanceInterface& vki, - vk::VkPhysicalDevice physicalDevice) +vk::Move createTestDevice (Context& context, + vk::VkInstance instance, + const vk::InstanceInterface& vki, + vk::VkPhysicalDevice physicalDevice) { + const bool validationEnabled = context.getTestContext().getCommandLine().isValidationEnabled(); + const deUint32 apiVersion = context.getUsedApiVersion(); + const vk::PlatformInterface& vkp = context.getPlatformInterface(); const float priority = 0.0f; const std::vector queueFamilyProperties = vk::getPhysicalDeviceQueueFamilyProperties(vki, physicalDevice); std::vector queueFamilyIndices (queueFamilyProperties.size(), 0xFFFFFFFFu); @@ -230,7 +215,7 @@ vk::Move createDevice (const deUint32 apiVersion, 0u }; - return vk::createDevice(vkp, instance, vki, physicalDevice, &createInfo); + return createCustomDevice(validationEnabled, vkp, instance, vki, physicalDevice, &createInfo); } catch (const vk::Error& error) { @@ -1435,24 +1420,34 @@ private: // Class to wrap a singleton instance and device class InstanceAndDevice { - InstanceAndDevice (const Context& context) - : m_instance (createInstance(context.getPlatformInterface(), context.getUsedApiVersion())) - , m_vki (context.getPlatformInterface(), *m_instance) - , m_physicalDevice (getPhysicalDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) - , m_logicalDevice (createDevice(context.getUsedApiVersion(), context.getPlatformInterface(), *m_instance, m_vki, m_physicalDevice)) + InstanceAndDevice (Context& context) + : m_instance (createTestInstance(context)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (vk::chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) + , m_logicalDevice (createTestDevice(context, m_instance, m_vki, m_physicalDevice)) , m_supportDX11 (new DX11OperationSupport(m_vki, m_physicalDevice)) { } public: - static const vk::Unique& getInstance(const Context& context) + static vk::VkInstance getInstance(Context& context) { if (!m_instanceAndDevice) m_instanceAndDevice = SharedPtr(new InstanceAndDevice(context)); return m_instanceAndDevice->m_instance; } + static const vk::InstanceDriver& getDriver() + { + DE_ASSERT(m_instanceAndDevice); + return m_instanceAndDevice->m_instance.getDriver(); + } + static vk::VkPhysicalDevice getPhysicalDevice() + { + DE_ASSERT(m_instanceAndDevice); + return m_instanceAndDevice->m_physicalDevice; + } static const Unique& getDevice() { DE_ASSERT(m_instanceAndDevice); @@ -1463,6 +1458,11 @@ public: DE_ASSERT(m_instanceAndDevice); return m_instanceAndDevice->m_supportDX11; } + static void collectMessages() + { + DE_ASSERT(m_instanceAndDevice); + m_instanceAndDevice->m_instance.collectMessages(); + } static void destroy() { @@ -1470,8 +1470,8 @@ public: } private: - const Unique m_instance; - const vk::InstanceDriver m_vki; + CustomInstance m_instance; + const vk::InstanceDriver& m_vki; const vk::VkPhysicalDevice m_physicalDevice; const Unique m_logicalDevice; const de::UniquePtr m_supportDX11; @@ -1494,9 +1494,9 @@ private: const de::UniquePtr m_supportWriteOp; const de::UniquePtr m_supportReadOp; - const vk::Unique& m_instance; + const vk::VkInstance m_instance; - const vk::InstanceDriver m_vki; + const vk::InstanceDriver& m_vki; const vk::VkPhysicalDevice m_physicalDevice; const std::vector m_queueFamilies; const std::vector m_queueFamilyIndices; @@ -1522,12 +1522,12 @@ Win32KeyedMutexTestInstance::Win32KeyedMutexTestInstance (Context& context, , m_instance (InstanceAndDevice::getInstance(context)) - , m_vki (context.getPlatformInterface(), *m_instance) - , m_physicalDevice (getPhysicalDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_vki (InstanceAndDevice::getDriver()) + , m_physicalDevice (InstanceAndDevice::getPhysicalDevice()) , m_queueFamilies (vk::getPhysicalDeviceQueueFamilyProperties(m_vki, m_physicalDevice)) , m_queueFamilyIndices (getFamilyIndices(m_queueFamilies)) , m_device (InstanceAndDevice::getDevice()) - , m_vkd (context.getPlatformInterface(), *m_instance, *m_device) + , m_vkd (context.getPlatformInterface(), m_instance, *m_device) , m_memoryHandleType ((m_config.resource.type == RESOURCE_TYPE_IMAGE) ? m_config.memoryHandleTypeImage : m_config.memoryHandleTypeBuffer) @@ -1816,6 +1816,9 @@ tcu::TestStatus Win32KeyedMutexTestInstance::iterate (void) m_resultCollector.fail(std::string("Exception: ") + error.getMessage()); } + // Collect possible validation errors. + InstanceAndDevice::collectMessages(); + // Move to next queue { m_queueNdx++; diff --git a/external/vulkancts/modules/vulkan/vktCustomInstancesDevices.cpp b/external/vulkancts/modules/vulkan/vktCustomInstancesDevices.cpp new file mode 100644 index 0000000..ef13a91 --- /dev/null +++ b/external/vulkancts/modules/vulkan/vktCustomInstancesDevices.cpp @@ -0,0 +1,364 @@ +/*------------------------------------------------------------------------- + * Vulkan Conformance Tests + * ------------------------ + * + * Copyright (c) 2019 The Khronos Group Inc. + * Copyright (c) 2019 Valve Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *//*! + * \file + * \brief Auxiliar functions to help create custom devices and instances. + *//*--------------------------------------------------------------------*/ + +#include "vkRefUtil.hpp" +#include "vkQueryUtil.hpp" +#include "vkDeviceUtil.hpp" +#include "tcuCommandLine.hpp" +#include "vktCustomInstancesDevices.hpp" + +#include + +using std::vector; +using std::string; +using vk::Move; +using vk::VkInstance; +using vk::InstanceDriver; +using vk::DebugReportRecorder; + +namespace vkt +{ + +namespace +{ + +vector getValidationLayers (const vector& supportedLayers) +{ + static const char* s_magicLayer = "VK_LAYER_LUNARG_standard_validation"; + static const char* s_defaultLayers[] = + { + "VK_LAYER_GOOGLE_threading", + "VK_LAYER_LUNARG_parameter_validation", + "VK_LAYER_LUNARG_device_limits", + "VK_LAYER_LUNARG_object_tracker", + "VK_LAYER_LUNARG_image", + "VK_LAYER_LUNARG_core_validation", + "VK_LAYER_LUNARG_swapchain", + "VK_LAYER_GOOGLE_unique_objects" + }; + + vector enabledLayers; + + if (vk::isLayerSupported(supportedLayers, vk::RequiredLayer(s_magicLayer))) + enabledLayers.push_back(s_magicLayer); + else + { + for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_defaultLayers); ++ndx) + { + if (isLayerSupported(supportedLayers, vk::RequiredLayer(s_defaultLayers[ndx]))) + enabledLayers.push_back(s_defaultLayers[ndx]); + } + } + + return enabledLayers; +} + +} // anonymous + + +vector getValidationLayers (const vk::PlatformInterface& vkp) +{ + return getValidationLayers(enumerateInstanceLayerProperties(vkp)); +} + +vector getValidationLayers (const vk::InstanceInterface& vki, vk::VkPhysicalDevice physicalDevice) +{ + return getValidationLayers(enumerateDeviceLayerProperties(vki, physicalDevice)); +} + +CustomInstance::CustomInstance (Context& context, Move instance, bool enableDebugReportRecorder) + : m_context (&context) + , m_instance (instance) + , m_driver (new InstanceDriver(context.getPlatformInterface(), *m_instance)) + , m_recorder (enableDebugReportRecorder ? (new DebugReportRecorder(*m_driver, *m_instance)) : nullptr) +{ +} + +CustomInstance::CustomInstance () + : m_context (nullptr) + , m_instance () + , m_driver (nullptr) + , m_recorder (nullptr) +{ +} + +CustomInstance::CustomInstance (CustomInstance&& other) + : CustomInstance() +{ + this->swap(other); +} + +CustomInstance::~CustomInstance () +{ + collectMessages(); +} + +CustomInstance& CustomInstance::operator= (CustomInstance&& other) +{ + CustomInstance destroyer; + destroyer.swap(other); + this->swap(destroyer); + return *this; +} + +void CustomInstance::swap (CustomInstance& other) +{ + std::swap(m_context, other.m_context); + Move aux = m_instance; m_instance = other.m_instance; other.m_instance = aux; + m_driver.swap(other.m_driver); + m_recorder.swap(other.m_recorder); +} + +CustomInstance::operator VkInstance () const +{ + return *m_instance; +} + +const vk::InstanceDriver& CustomInstance::getDriver() const +{ + return *m_driver; +} + +void CustomInstance::collectMessages () +{ + if (m_recorder) + collectAndReportDebugMessages(*m_recorder, *m_context); +} + +UncheckedInstance::UncheckedInstance () + : m_context (nullptr) + , m_allocator (nullptr) + , m_instance (DE_NULL) + , m_driver (nullptr) + , m_recorder (nullptr) +{ +} + +UncheckedInstance::UncheckedInstance (Context& context, vk::VkInstance instance, const vk::VkAllocationCallbacks* pAllocator, bool enableDebugReportRecorder) + : m_context (&context) + , m_allocator (pAllocator) + , m_instance (instance) + , m_driver ((m_instance != DE_NULL) ? new InstanceDriver(context.getPlatformInterface(), m_instance) : nullptr) + , m_recorder ((enableDebugReportRecorder && m_instance != DE_NULL) ? (new DebugReportRecorder(*m_driver, m_instance)) : nullptr) +{ +} + +UncheckedInstance::~UncheckedInstance () +{ + if (m_recorder) + collectAndReportDebugMessages(*m_recorder, *m_context); + + if (m_instance != DE_NULL) + { + m_recorder.reset(nullptr); + m_driver->destroyInstance(m_instance, m_allocator); + } +} + +void UncheckedInstance::swap (UncheckedInstance& other) +{ + std::swap(m_context, other.m_context); + std::swap(m_allocator, other.m_allocator); + vk::VkInstance aux = m_instance; m_instance = other.m_instance; other.m_instance = aux; + m_driver.swap(other.m_driver); + m_recorder.swap(other.m_recorder); +} + +UncheckedInstance::UncheckedInstance (UncheckedInstance&& other) + : UncheckedInstance() +{ + this->swap(other); +} + +UncheckedInstance& UncheckedInstance::operator= (UncheckedInstance&& other) +{ + UncheckedInstance destroyer; + destroyer.swap(other); + this->swap(destroyer); + return *this; +} + +UncheckedInstance::operator vk::VkInstance () const +{ + return m_instance; +} +UncheckedInstance::operator bool () const +{ + return (m_instance != DE_NULL); +} + +CustomInstance createCustomInstanceWithExtensions (Context& context, const std::vector& extensions, const vk::VkAllocationCallbacks* pAllocator, bool allowLayers) +{ + vector enabledLayers; + vector enabledLayersStr; + const bool validationEnabled = (context.getTestContext().getCommandLine().isValidationEnabled() && allowLayers); + + if (validationEnabled) + { + enabledLayers = getValidationLayers(context.getPlatformInterface()); + enabledLayersStr = vector(begin(enabledLayers), end(enabledLayers)); + } + + // Filter extension list and throw NotSupported if a required extension is not supported. + const deUint32 apiVersion = context.getUsedApiVersion(); + const vk::PlatformInterface& vkp = context.getPlatformInterface(); + const std::vector availableExtensions = vk::enumerateInstanceExtensionProperties(vkp, DE_NULL); + vector extensionPtrs; + + for (const auto& ext : extensions) + { + if (!vk::isInstanceExtensionSupported(apiVersion, availableExtensions, vk::RequiredExtension(ext))) + TCU_THROW(NotSupportedError, ext + " is not supported"); + + if (!vk::isCoreInstanceExtension(apiVersion, ext)) + extensionPtrs.push_back(ext); + } + + Move instance = vk::createDefaultInstance(vkp, apiVersion, enabledLayersStr, extensionPtrs, pAllocator); + return CustomInstance(context, instance, validationEnabled); +} + +CustomInstance createCustomInstanceWithExtension (Context& context, const std::string& extension, const vk::VkAllocationCallbacks* pAllocator, bool allowLayers) +{ + return createCustomInstanceWithExtensions(context, std::vector(1, extension), pAllocator, allowLayers); +} + +CustomInstance createCustomInstanceFromContext (Context& context, const vk::VkAllocationCallbacks* pAllocator, bool allowLayers) +{ + return createCustomInstanceWithExtensions(context, std::vector(), pAllocator, allowLayers); +} + +const char kDebugReportExt[] = "VK_EXT_debug_report"; + +vector addDebugReportExt(const vk::PlatformInterface& vkp, const vk::VkInstanceCreateInfo& createInfo) +{ + if (!isDebugReportSupported(vkp)) + TCU_THROW(NotSupportedError, "VK_EXT_debug_report is not supported"); + + vector actualExtensions; + if (createInfo.enabledExtensionCount != 0u) + { + for (deUint32 i = 0u; i < createInfo.enabledExtensionCount; ++i) + actualExtensions.push_back(createInfo.ppEnabledExtensionNames[i]); + } + + if (std::find_if(begin(actualExtensions), end(actualExtensions), [](const char* name) { return (strcmp(name, kDebugReportExt) == 0); }) + == end(actualExtensions)) + { + actualExtensions.push_back(kDebugReportExt); + } + + return actualExtensions; +} + +CustomInstance createCustomInstanceFromInfo (Context& context, const vk::VkInstanceCreateInfo* instanceCreateInfo, const vk::VkAllocationCallbacks* pAllocator, bool allowLayers) +{ + vector enabledLayers; + vector enabledExtensions; + vk::VkInstanceCreateInfo createInfo = *instanceCreateInfo; + const bool validationEnabled = context.getTestContext().getCommandLine().isValidationEnabled(); + const vk::PlatformInterface& vkp = context.getPlatformInterface(); + + if (validationEnabled && allowLayers) + { + // Activate some layers if requested. + if (createInfo.enabledLayerCount == 0u) + { + enabledLayers = getValidationLayers(vkp); + createInfo.enabledLayerCount = static_cast(enabledLayers.size()); + createInfo.ppEnabledLayerNames = (enabledLayers.empty() ? DE_NULL : enabledLayers.data()); + } + + // Make sure the debug report extension is enabled when validation is enabled. + enabledExtensions = addDebugReportExt(vkp, createInfo); + createInfo.enabledExtensionCount = static_cast(enabledExtensions.size()); + createInfo.ppEnabledExtensionNames = enabledExtensions.data(); + } + + return CustomInstance(context, vk::createInstance(vkp, &createInfo, pAllocator), validationEnabled); +} + +vk::VkResult createUncheckedInstance (Context& context, const vk::VkInstanceCreateInfo* instanceCreateInfo, const vk::VkAllocationCallbacks* pAllocator, UncheckedInstance* instance, bool allowLayers) +{ + vector enabledLayers; + vector enabledExtensions; + vk::VkInstanceCreateInfo createInfo = *instanceCreateInfo; + const bool validationEnabled = context.getTestContext().getCommandLine().isValidationEnabled(); + const vk::PlatformInterface& vkp = context.getPlatformInterface(); + const bool addLayers = (validationEnabled && allowLayers); + + if (addLayers) + { + // Activate some layers if requested. + if (createInfo.enabledLayerCount == 0u) + { + enabledLayers = getValidationLayers(vkp); + createInfo.enabledLayerCount = static_cast(enabledLayers.size()); + createInfo.ppEnabledLayerNames = (enabledLayers.empty() ? DE_NULL : enabledLayers.data()); + } + + // Make sure the debug report extension is enabled when validation is enabled. + enabledExtensions = addDebugReportExt(vkp, createInfo); + createInfo.enabledExtensionCount = static_cast(enabledExtensions.size()); + createInfo.ppEnabledExtensionNames = enabledExtensions.data(); + } + + vk::VkInstance raw_instance = DE_NULL; + vk::VkResult result = vkp.createInstance(&createInfo, pAllocator, &raw_instance); + *instance = UncheckedInstance(context, raw_instance, pAllocator, addLayers); + return result; +} + +vk::Move createCustomDevice (bool validationEnabled, const vk::PlatformInterface& vkp, vk::VkInstance instance, const vk::InstanceInterface& vki, vk::VkPhysicalDevice physicalDevice, const vk::VkDeviceCreateInfo* pCreateInfo, const vk::VkAllocationCallbacks* pAllocator) +{ + vector enabledLayers; + vk::VkDeviceCreateInfo createInfo = *pCreateInfo; + + if (createInfo.enabledLayerCount == 0u && validationEnabled) + { + enabledLayers = getValidationLayers(vki, physicalDevice); + createInfo.enabledLayerCount = static_cast(enabledLayers.size()); + createInfo.ppEnabledLayerNames = (enabledLayers.empty() ? DE_NULL : enabledLayers.data()); + } + + return createDevice(vkp, instance, vki, physicalDevice, &createInfo, pAllocator); +} + +vk::VkResult createUncheckedDevice (bool validationEnabled, const vk::InstanceInterface& vki, vk::VkPhysicalDevice physicalDevice, const vk::VkDeviceCreateInfo* pCreateInfo, const vk::VkAllocationCallbacks* pAllocator, vk::VkDevice* pDevice) +{ + vector enabledLayers; + vk::VkDeviceCreateInfo createInfo = *pCreateInfo; + + if (createInfo.enabledLayerCount == 0u && validationEnabled) + { + enabledLayers = getValidationLayers(vki, physicalDevice); + createInfo.enabledLayerCount = static_cast(enabledLayers.size()); + createInfo.ppEnabledLayerNames = (enabledLayers.empty() ? DE_NULL : enabledLayers.data()); + } + + return vki.createDevice(physicalDevice, &createInfo, pAllocator, pDevice); +} + + +} diff --git a/external/vulkancts/modules/vulkan/vktCustomInstancesDevices.hpp b/external/vulkancts/modules/vulkan/vktCustomInstancesDevices.hpp new file mode 100644 index 0000000..1b798d5 --- /dev/null +++ b/external/vulkancts/modules/vulkan/vktCustomInstancesDevices.hpp @@ -0,0 +1,119 @@ +#ifndef _VKTCUSTOMINSTANCESDEVICES_HPP +#define _VKTCUSTOMINSTANCESDEVICES_HPP +/*------------------------------------------------------------------------- + * Vulkan Conformance Tests + * ------------------------ + * + * Copyright (c) 2019 The Khronos Group Inc. + * Copyright (c) 2019 Valve Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *//*! + * \file + * \brief Auxiliar functions to help create custom devices and instances. + *//*--------------------------------------------------------------------*/ + +#include "vkDefs.hpp" +#include "vktTestCase.hpp" + +#include +#include + +namespace vk +{ + class PlatformInterface; + class InstanceInterface; +} + +namespace tcu +{ + class CommandLine; +} + +namespace vkt +{ + +std::vector getValidationLayers (const vk::PlatformInterface& vkp); + +std::vector getValidationLayers (const vk::InstanceInterface& vki, vk::VkPhysicalDevice physicalDevice); + +class CustomInstance +{ +public: + CustomInstance (); + CustomInstance (Context& context, vk::Move instance, bool enableDebugReportRecorder); + CustomInstance (CustomInstance&& other); + ~CustomInstance (); + CustomInstance& operator= (CustomInstance&& other); + operator vk::VkInstance () const; + void swap (CustomInstance& other); + const vk::InstanceDriver& getDriver () const; + void collectMessages (); + + CustomInstance (const CustomInstance& other) = delete; + CustomInstance& operator= (const CustomInstance& other) = delete; +private: + Context* m_context; + vk::Move m_instance; + std::unique_ptr m_driver; + std::unique_ptr m_recorder; +}; + +class UncheckedInstance +{ +public: + UncheckedInstance (); + UncheckedInstance (Context& context, vk::VkInstance instance, const vk::VkAllocationCallbacks* pAllocator, bool enableDebugReportRecorder); + UncheckedInstance (UncheckedInstance&& other); + ~UncheckedInstance (); + UncheckedInstance& operator= (UncheckedInstance&& other); + operator vk::VkInstance () const; + operator bool () const; + void swap (UncheckedInstance& other); + + UncheckedInstance (const UncheckedInstance& other) = delete; + UncheckedInstance& operator= (const UncheckedInstance& other) = delete; +private: + Context* m_context; + const vk::VkAllocationCallbacks* m_allocator; + vk::VkInstance m_instance; + std::unique_ptr m_driver; + std::unique_ptr m_recorder; +}; + +// Custom instances. + +CustomInstance createCustomInstanceWithExtensions (Context& context, const std::vector& extension, const vk::VkAllocationCallbacks* pAllocator = DE_NULL, bool allowLayers = true); + +CustomInstance createCustomInstanceWithExtension (Context& context, const std::string& extension, const vk::VkAllocationCallbacks* pAllocator = DE_NULL, bool allowLayers = true); + +CustomInstance createCustomInstanceFromContext (Context& context, const vk::VkAllocationCallbacks* pAllocator = DE_NULL, bool allowLayers = true); + +CustomInstance createCustomInstanceFromInfo (Context& context, const vk::VkInstanceCreateInfo* instanceCreateInfo, const vk::VkAllocationCallbacks* pAllocator = DE_NULL, bool allowLayers = true); + +// Unchecked instance: creation allowed to fail. + +vk::VkResult createUncheckedInstance (Context& context, const vk::VkInstanceCreateInfo* instanceCreateInfo, const vk::VkAllocationCallbacks* pAllocator, UncheckedInstance* instance, bool allowLayers = true); + +// Custom devices. + +vk::Move createCustomDevice (bool validationEnabled, const vk::PlatformInterface& vkp, vk::VkInstance instance, const vk::InstanceInterface& vki, vk::VkPhysicalDevice physicalDevice, const vk::VkDeviceCreateInfo* pCreateInfo, const vk::VkAllocationCallbacks* pAllocator = DE_NULL); + +// Unchecked device: creation allowed to fail. + +vk::VkResult createUncheckedDevice (bool validationEnabled, const vk::InstanceInterface& vki, vk::VkPhysicalDevice physicalDevice, const vk::VkDeviceCreateInfo* pCreateInfo, const vk::VkAllocationCallbacks* pAllocator, vk::VkDevice* pDevice); + +} + +#endif // _VKTCUSTOMINSTANCESDEVICES_HPP diff --git a/external/vulkancts/modules/vulkan/vktTestCase.cpp b/external/vulkancts/modules/vulkan/vktTestCase.cpp index 5338c15..bb8b269 100644 --- a/external/vulkancts/modules/vulkan/vktTestCase.cpp +++ b/external/vulkancts/modules/vulkan/vktTestCase.cpp @@ -22,6 +22,7 @@ *//*--------------------------------------------------------------------*/ #include "vktTestCase.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkRef.hpp" #include "vkRefUtil.hpp" @@ -53,37 +54,6 @@ using namespace vk; namespace { -vector getValidationLayers (const vector& supportedLayers) -{ - static const char* s_magicLayer = "VK_LAYER_LUNARG_standard_validation"; - static const char* s_defaultLayers[] = - { - "VK_LAYER_GOOGLE_threading", - "VK_LAYER_LUNARG_parameter_validation", - "VK_LAYER_LUNARG_device_limits", - "VK_LAYER_LUNARG_object_tracker", - "VK_LAYER_LUNARG_image", - "VK_LAYER_LUNARG_core_validation", - "VK_LAYER_LUNARG_swapchain", - "VK_LAYER_GOOGLE_unique_objects" - }; - - vector enabledLayers; - - if (isLayerSupported(supportedLayers, RequiredLayer(s_magicLayer))) - enabledLayers.push_back(s_magicLayer); - else - { - for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_defaultLayers); ++ndx) - { - if (isLayerSupported(supportedLayers, RequiredLayer(s_defaultLayers[ndx]))) - enabledLayers.push_back(s_defaultLayers[ndx]); - } - } - - return enabledLayers; -} - vector filterExtensions (const vector& extensions) { vector enabledExtensions; @@ -183,7 +153,7 @@ std::pair determineDeviceVersions(const PlatformInterface& v Move createInstance (const PlatformInterface& vkp, deUint32 apiVersion, const vector& enabledExtensions, const tcu::CommandLine& cmdLine) { const bool isValidationEnabled = cmdLine.isValidationEnabled(); - vector enabledLayers; + vector enabledLayers; // \note Extensions in core are not explicitly enabled even though // they are in the extension list advertised to tests. @@ -201,7 +171,7 @@ Move createInstance (const PlatformInterface& vkp, deUint32 apiVersi TCU_THROW(NotSupportedError, "No validation layers found"); } - return createDefaultInstance(vkp, apiVersion, enabledLayers, nonCoreExtensions); + return createDefaultInstance(vkp, apiVersion, vector(begin(enabledLayers), end(enabledLayers)), nonCoreExtensions); } static deUint32 findQueueFamilyIndexWithCaps (const InstanceInterface& vkInstance, VkPhysicalDevice physicalDevice, VkQueueFlags requiredCaps) @@ -230,8 +200,7 @@ Move createDefaultDevice (const PlatformInterface& vkp, { VkDeviceQueueCreateInfo queueInfo[2]; VkDeviceCreateInfo deviceInfo; - vector enabledLayers; - vector layerPtrs; + vector enabledLayers; vector extensionPtrs; const float queuePriority = 1.0f; const deUint32 numQueues = (enabledFeatures.features.sparseBinding && (queueIndex != sparseQueueIndex)) ? 2 : 1; @@ -246,11 +215,6 @@ Move createDefaultDevice (const PlatformInterface& vkp, TCU_THROW(NotSupportedError, "No validation layers found"); } - layerPtrs.resize(enabledLayers.size()); - - for (size_t ndx = 0; ndx < enabledLayers.size(); ++ndx) - layerPtrs[ndx] = enabledLayers[ndx].c_str(); - // \note Extensions in core are not explicitly enabled even though // they are in the extension list advertised to tests. vector coreExtensions; @@ -286,8 +250,8 @@ Move createDefaultDevice (const PlatformInterface& vkp, deviceInfo.pQueueCreateInfos = queueInfo; deviceInfo.enabledExtensionCount = (deUint32)extensionPtrs.size(); deviceInfo.ppEnabledExtensionNames = (extensionPtrs.empty() ? DE_NULL : &extensionPtrs[0]); - deviceInfo.enabledLayerCount = (deUint32)layerPtrs.size(); - deviceInfo.ppEnabledLayerNames = (layerPtrs.empty() ? DE_NULL : &layerPtrs[0]); + deviceInfo.enabledLayerCount = (deUint32)enabledLayers.size(); + deviceInfo.ppEnabledLayerNames = (enabledLayers.empty() ? DE_NULL : enabledLayers.data()); deviceInfo.pEnabledFeatures = enabledFeatures.pNext ? DE_NULL : &enabledFeatures.features; return createDevice(vkp, instance, vki, physicalDevice, &deviceInfo); @@ -295,16 +259,6 @@ Move createDefaultDevice (const PlatformInterface& vkp, } // anonymous -vector getValidationLayers (const PlatformInterface& vkp) -{ - return getValidationLayers(enumerateInstanceLayerProperties(vkp)); -} - -vector getValidationLayers (const InstanceInterface& vki, VkPhysicalDevice physicalDevice) -{ - return getValidationLayers(enumerateDeviceLayerProperties(vki, physicalDevice)); -} - class DefaultDevice { public: @@ -425,11 +379,12 @@ vk::Allocator* createAllocator (DefaultDevice* device) Context::Context (tcu::TestContext& testCtx, const vk::PlatformInterface& platformInterface, vk::BinaryCollection& progCollection) - : m_testCtx (testCtx) - , m_platformInterface (platformInterface) - , m_progCollection (progCollection) - , m_device (new DefaultDevice(m_platformInterface, testCtx.getCommandLine())) - , m_allocator (createAllocator(m_device.get())) + : m_testCtx (testCtx) + , m_platformInterface (platformInterface) + , m_progCollection (progCollection) + , m_device (new DefaultDevice(m_platformInterface, testCtx.getCommandLine())) + , m_allocator (createAllocator(m_device.get())) + , m_resultSetOnValidation (false) { } @@ -584,4 +539,42 @@ void TestCase::delayedInit (void) { } +void collectAndReportDebugMessages(vk::DebugReportRecorder &debugReportRecorder, Context& context) +{ + // \note We are not logging INFORMATION and DEBUG messages + static const vk::VkDebugReportFlagsEXT errorFlags = vk::VK_DEBUG_REPORT_ERROR_BIT_EXT; + static const vk::VkDebugReportFlagsEXT logFlags = errorFlags + | vk::VK_DEBUG_REPORT_WARNING_BIT_EXT + | vk::VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT; + + typedef vk::DebugReportRecorder::MessageList DebugMessages; + + const DebugMessages& messages = debugReportRecorder.getMessages(); + tcu::TestLog& log = context.getTestContext().getLog(); + + if (messages.begin() != messages.end()) + { + const tcu::ScopedLogSection section (log, "DebugMessages", "Debug Messages"); + int numErrors = 0; + + for (DebugMessages::const_iterator curMsg = messages.begin(); curMsg != messages.end(); ++curMsg) + { + if ((curMsg->flags & logFlags) != 0) + log << tcu::TestLog::Message << *curMsg << tcu::TestLog::EndMessage; + + if ((curMsg->flags & errorFlags) != 0) + numErrors += 1; + } + + debugReportRecorder.clearMessages(); + + if (numErrors > 0) + { + string errorMsg = de::toString(numErrors) + " API usage errors found"; + context.resultSetOnValidation(true); + context.getTestContext().setTestResult(QP_TEST_RESULT_INTERNAL_ERROR, errorMsg.c_str()); + } + } +} + } // vkt diff --git a/external/vulkancts/modules/vulkan/vktTestCase.hpp b/external/vulkancts/modules/vulkan/vktTestCase.hpp index de0f153..6637dcc 100644 --- a/external/vulkancts/modules/vulkan/vktTestCase.hpp +++ b/external/vulkancts/modules/vulkan/vktTestCase.hpp @@ -29,6 +29,8 @@ #include "deUniquePtr.hpp" #include "vkPrograms.hpp" #include "vkApiVersion.hpp" +#include "vkDebugReportUtil.hpp" +#include "vkPlatform.hpp" #include "vktTestCaseDefs.hpp" #include #include @@ -48,10 +50,6 @@ struct SourceCollections; namespace vkt { -std::vector getValidationLayers (const vk::PlatformInterface& vkp); - -std::vector getValidationLayers (const vk::InstanceInterface& vki, vk::VkPhysicalDevice physicalDevice); - class DefaultDevice; class Context @@ -97,6 +95,9 @@ public: void* getInstanceProcAddr (); + bool resultSetOnValidation () const { return m_resultSetOnValidation; } + void resultSetOnValidation (bool value) { m_resultSetOnValidation = value; } + protected: tcu::TestContext& m_testCtx; const vk::PlatformInterface& m_platformInterface; @@ -105,6 +106,8 @@ protected: const de::UniquePtr m_device; const de::UniquePtr m_allocator; + bool m_resultSetOnValidation; + private: Context (const Context&); // Not allowed Context& operator= (const Context&); // Not allowed @@ -153,6 +156,8 @@ inline TestCase::TestCase (tcu::TestContext& testCtx, tcu::TestNodeType type, co { } +void collectAndReportDebugMessages(vk::DebugReportRecorder &debugReportRecorder, Context& context); + } // vkt #endif // _VKTTESTCASE_HPP diff --git a/external/vulkancts/modules/vulkan/vktTestPackage.cpp b/external/vulkancts/modules/vulkan/vktTestPackage.cpp index 4520969..cd2e3ba 100644 --- a/external/vulkancts/modules/vulkan/vktTestPackage.cpp +++ b/external/vulkancts/modules/vulkan/vktTestPackage.cpp @@ -321,6 +321,7 @@ void TestCaseExecutor::init (tcu::TestCase* testCase, const std::string& casePat DE_ASSERT(!m_instance); m_instance = vktCase->createInstance(m_context); + m_context.resultSetOnValidation(false); } void TestCaseExecutor::deinit (tcu::TestCase*) @@ -332,38 +333,7 @@ void TestCaseExecutor::deinit (tcu::TestCase*) // Collect and report any debug messages if (m_debugReportRecorder) - { - // \note We are not logging INFORMATION and DEBUG messages - static const vk::VkDebugReportFlagsEXT errorFlags = vk::VK_DEBUG_REPORT_ERROR_BIT_EXT; - static const vk::VkDebugReportFlagsEXT logFlags = errorFlags - | vk::VK_DEBUG_REPORT_WARNING_BIT_EXT - | vk::VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT; - - typedef vk::DebugReportRecorder::MessageList DebugMessages; - - const DebugMessages& messages = m_debugReportRecorder->getMessages(); - tcu::TestLog& log = m_context.getTestContext().getLog(); - - if (messages.begin() != messages.end()) - { - const tcu::ScopedLogSection section (log, "DebugMessages", "Debug Messages"); - int numErrors = 0; - - for (DebugMessages::const_iterator curMsg = messages.begin(); curMsg != messages.end(); ++curMsg) - { - if ((curMsg->flags & logFlags) != 0) - log << tcu::TestLog::Message << *curMsg << tcu::TestLog::EndMessage; - - if ((curMsg->flags & errorFlags) != 0) - numErrors += 1; - } - - m_debugReportRecorder->clearMessages(); - - if (numErrors > 0) - m_context.getTestContext().setTestResult(QP_TEST_RESULT_INTERNAL_ERROR, (de::toString(numErrors) + " API usage errors found").c_str()); - } - } + collectAndReportDebugMessages(*m_debugReportRecorder, m_context); } tcu::TestNode::IterateResult TestCaseExecutor::iterate (tcu::TestCase*) @@ -374,9 +344,12 @@ tcu::TestNode::IterateResult TestCaseExecutor::iterate (tcu::TestCase*) if (result.isComplete()) { - // Vulkan tests shouldn't set result directly - DE_ASSERT(m_context.getTestContext().getTestResult() == QP_TEST_RESULT_LAST); - m_context.getTestContext().setTestResult(result.getCode(), result.getDescription().c_str()); + // Vulkan tests shouldn't set result directly except when using a debug report messenger to catch validation errors. + DE_ASSERT(m_context.getTestContext().getTestResult() == QP_TEST_RESULT_LAST || m_context.resultSetOnValidation()); + + // Override result if not set previously by a debug report messenger. + if (!m_context.resultSetOnValidation()) + m_context.getTestContext().setTestResult(result.getCode(), result.getDescription().c_str()); return tcu::TestNode::STOP; } else diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp index 8a7b25f..2ff94a3 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp @@ -25,6 +25,7 @@ #include "vktTestCaseUtil.hpp" #include "vktTestGroupUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkPlatform.hpp" @@ -47,6 +48,7 @@ #include "tcuFormatUtil.hpp" #include "tcuPlatform.hpp" #include "tcuResultCollector.hpp" +#include "tcuCommandLine.hpp" #include "deUniquePtr.hpp" #include "deStringUtil.hpp" @@ -89,11 +91,10 @@ void checkAllSupported (const Extensions& supportedExtensions, const vector createInstanceWithWsi (const PlatformInterface& vkp, - deUint32 version, - const Extensions& supportedExtensions, - Type wsiType, - const VkAllocationCallbacks* pAllocator = DE_NULL) +CustomInstance createInstanceWithWsi (Context& context, + const Extensions& supportedExtensions, + Type wsiType, + const VkAllocationCallbacks* pAllocator = DE_NULL) { vector extensions; @@ -115,7 +116,7 @@ Move createInstanceWithWsi (const PlatformInterface& vkp, checkAllSupported(supportedExtensions, extensions); - return createDefaultInstance(vkp, version, vector(), extensions, pAllocator); + return createCustomInstanceWithExtensions(context, extensions, pAllocator); } VkPhysicalDeviceFeatures getDeviceFeaturesForWsi (void) @@ -131,7 +132,8 @@ Move createDeviceWithWsi (const vk::PlatformInterface& vkp, VkPhysicalDevice physicalDevice, const Extensions& supportedExtensions, const deUint32 queueFamilyIndex, - const VkAllocationCallbacks* pAllocator = DE_NULL) + const VkAllocationCallbacks* pAllocator, + bool validationEnabled) { const float queuePriorities[] = { 1.0f }; const VkDeviceQueueCreateInfo queueInfos[] = @@ -155,7 +157,7 @@ Move createDeviceWithWsi (const vk::PlatformInterface& vkp, if (isExtensionSupported(supportedExtensions, RequiredExtension("VK_EXT_hdr_metadata"))) extensions.push_back("VK_EXT_hdr_metadata"); - const VkDeviceCreateInfo deviceParams = + VkDeviceCreateInfo deviceParams = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, DE_NULL, @@ -169,7 +171,7 @@ Move createDeviceWithWsi (const vk::PlatformInterface& vkp, &features }; - return createDevice(vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); + return createCustomDevice(validationEnabled, vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); } deUint32 getNumQueueFamilyIndices (const InstanceInterface& vki, VkPhysicalDevice physicalDevice) @@ -208,18 +210,17 @@ deUint32 chooseQueueFamilyIndex (const InstanceInterface& vki, VkPhysicalDevice struct InstanceHelper { const vector supportedExtensions; - const Unique instance; - const InstanceDriver vki; + const CustomInstance instance; + const InstanceDriver& vki; InstanceHelper (Context& context, Type wsiType, const VkAllocationCallbacks* pAllocator = DE_NULL) : supportedExtensions (enumerateInstanceExtensionProperties(context.getPlatformInterface(), DE_NULL)) - , instance (createInstanceWithWsi(context.getPlatformInterface(), - context.getUsedApiVersion(), + , instance (createInstanceWithWsi(context, supportedExtensions, wsiType, pAllocator)) - , vki (context.getPlatformInterface(), *instance) + , vki (instance.getDriver()) {} }; @@ -244,7 +245,8 @@ struct DeviceHelper physicalDevice, enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL), queueFamilyIndex, - pAllocator)) + pAllocator, + context.getTestContext().getCommandLine().isValidationEnabled())) , vkd (context.getPlatformInterface(), instance, *device) , queue (getDeviceQueue(vkd, *device, queueFamilyIndex, 0)) { @@ -797,8 +799,8 @@ tcu::TestStatus basicExtensionTest (Context& context, Type wsiType) const tcu::UVec2 desiredSize (256, 256); const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface); if (!de::contains(context.getInstanceExtensions().begin(), context.getInstanceExtensions().end(), "VK_EXT_swapchain_colorspace")) TCU_THROW(NotSupportedError, "Extension VK_EXT_swapchain_colorspace not supported"); @@ -831,7 +833,7 @@ tcu::TestStatus surfaceFormatRenderTest (Context& context, { const tcu::UVec2 desiredSize (256, 256); const InstanceHelper instHelper (context, wsiType); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, surface); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, surface); const DeviceInterface& vkd = devHelper.vkd; const VkDevice device = *devHelper.device; SimpleAllocator allocator (vkd, device, getPhysicalDeviceMemoryProperties(instHelper.vki, devHelper.physicalDevice)); @@ -971,8 +973,8 @@ tcu::TestStatus surfaceFormatRenderTests (Context& context, Type wsiType) const tcu::UVec2 desiredSize (256, 256); const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface); if (!de::contains(context.getInstanceExtensions().begin(), context.getInstanceExtensions().end(), "VK_EXT_swapchain_colorspace")) TCU_THROW(NotSupportedError, "Extension VK_EXT_swapchain_colorspace not supported"); @@ -992,8 +994,8 @@ tcu::TestStatus surfaceFormatRenderWithHdrTests (Context& context, Type wsiType) const tcu::UVec2 desiredSize (256, 256); const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface); if (!de::contains(context.getInstanceExtensions().begin(), context.getInstanceExtensions().end(), "VK_EXT_swapchain_colorspace")) TCU_THROW(NotSupportedError, "Extension VK_EXT_swapchain_colorspace not supported"); diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTimingTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTimingTests.cpp index d5da904..6d26419 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTimingTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTimingTests.cpp @@ -37,10 +37,12 @@ #include "vktWsiDisplayTimingTests.hpp" #include "vktTestCaseUtil.hpp" #include "vktTestGroupUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "tcuPlatform.hpp" #include "tcuResultCollector.hpp" #include "tcuTestLog.hpp" +#include "tcuCommandLine.hpp" #include "deClock.h" @@ -76,10 +78,9 @@ void checkAllSupported (const Extensions& supportedExtensions, const vector createInstanceWithWsi (const vk::PlatformInterface& vkp, - deUint32 version, - const Extensions& supportedExtensions, - vk::wsi::Type wsiType) +CustomInstance createInstanceWithWsi (Context& context, + const Extensions& supportedExtensions, + vk::wsi::Type wsiType) { vector extensions; @@ -88,7 +89,7 @@ vk::Move createInstanceWithWsi (const vk::PlatformInterface& vk checkAllSupported(supportedExtensions, extensions); - return vk::createDefaultInstance(vkp, version, vector(), extensions); + return vkt::createCustomInstanceWithExtensions(context, extensions); } vk::VkPhysicalDeviceFeatures getDeviceNullFeatures (void) @@ -138,6 +139,7 @@ vk::Move createDeviceWithWsi (const vk::PlatformInterface& vkp, const Extensions& supportedExtensions, const deUint32 queueFamilyIndex, bool requiresDisplayTiming, + bool validationEnabled, const vk::VkAllocationCallbacks* pAllocator = DE_NULL) { const float queuePriorities[] = { 1.0f }; @@ -179,7 +181,7 @@ vk::Move createDeviceWithWsi (const vk::PlatformInterface& vkp, TCU_THROW(NotSupportedError, (string(extensions[ndx]) + " is not supported").c_str()); } - return createDevice(vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); + return createCustomDevice(validationEnabled, vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); } de::MovePtr createDisplay (const vk::Platform& platform, @@ -544,8 +546,8 @@ private: const deUint32 m_quadCount; const vk::PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const vk::Unique m_instance; - const vk::InstanceDriver m_vki; + const CustomInstance m_instance; + const vk::InstanceDriver& m_vki; const vk::VkPhysicalDevice m_physicalDevice; const de::UniquePtr m_nativeDisplay; const de::UniquePtr m_nativeWindow; @@ -691,17 +693,17 @@ DisplayTimingTestInstance::DisplayTimingTestInstance (Context& context, const Te , m_quadCount (16u) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (vk::enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithWsi(m_vkp, context.getUsedApiVersion(), m_instanceExtensions, testConfig.wsiType)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (vk::chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithWsi(context, m_instanceExtensions, testConfig.wsiType)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (vk::chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_nativeDisplay (createDisplay(context.getTestContext().getPlatform().getVulkanPlatform(), m_instanceExtensions, testConfig.wsiType)) , m_nativeWindow (createWindow(*m_nativeDisplay, tcu::nothing())) - , m_surface (vk::wsi::createSurface(m_vki, *m_instance, testConfig.wsiType, *m_nativeDisplay, *m_nativeWindow)) + , m_surface (vk::wsi::createSurface(m_vki, m_instance, testConfig.wsiType, *m_nativeDisplay, *m_nativeWindow)) , m_queueFamilyIndex (chooseQueueFamilyIndex(m_vki, m_physicalDevice, *m_surface)) , m_deviceExtensions (vk::enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithWsi(m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex, testConfig.useDisplayTiming)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithWsi(m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex, testConfig.useDisplayTiming, context.getTestContext().getCommandLine().isValidationEnabled())) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_commandPool (createCommandPool(m_vkd, *m_device, m_queueFamilyIndex)) diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp index e07d204..aec9154 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp @@ -25,6 +25,7 @@ #include "vktTestCaseUtil.hpp" #include "vktTestGroupUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkRefUtil.hpp" #include "vkWsiPlatform.hpp" #include "vkWsiUtil.hpp" @@ -41,6 +42,7 @@ #include "tcuPlatform.hpp" #include "tcuResultCollector.hpp" #include "tcuTestLog.hpp" +#include "tcuCommandLine.hpp" #include #include @@ -78,10 +80,9 @@ void checkAllSupported (const Extensions& supportedExtensions, const vector createInstanceWithWsi (const vk::PlatformInterface& vkp, - deUint32 version, - const Extensions& supportedExtensions, - vk::wsi::Type wsiType) +CustomInstance createInstanceWithWsi (Context& context, + const Extensions& supportedExtensions, + vk::wsi::Type wsiType) { vector extensions; @@ -90,7 +91,7 @@ vk::Move createInstanceWithWsi (const vk::PlatformInterface& vk checkAllSupported(supportedExtensions, extensions); - return vk::createDefaultInstance(vkp, version, vector(), extensions); + return vkt::createCustomInstanceWithExtensions(context, extensions); } vk::VkPhysicalDeviceFeatures getDeviceNullFeatures (void) @@ -140,6 +141,7 @@ vk::Move createDeviceWithWsi (const vk::PlatformInterface& vkp, const Extensions& supportedExtensions, const deUint32 queueFamilyIndex, bool requiresIncrementalPresent, + bool validationEnabled, const vk::VkAllocationCallbacks* pAllocator = DE_NULL) { const float queuePriorities[] = { 1.0f }; @@ -181,7 +183,7 @@ vk::Move createDeviceWithWsi (const vk::PlatformInterface& vkp, TCU_THROW(NotSupportedError, (string(extensions[ndx]) + " is not supported").c_str()); } - return createDevice(vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); + return createCustomDevice(validationEnabled, vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); } de::MovePtr createDisplay (const vk::Platform& platform, @@ -654,8 +656,8 @@ private: const bool m_useIncrementalPresent; const vk::PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const vk::Unique m_instance; - const vk::InstanceDriver m_vki; + const CustomInstance m_instance; + const vk::InstanceDriver& m_vki; const vk::VkPhysicalDevice m_physicalDevice; const de::UniquePtr m_nativeDisplay; const de::UniquePtr m_nativeWindow; @@ -830,17 +832,17 @@ IncrementalPresentTestInstance::IncrementalPresentTestInstance (Context& context , m_useIncrementalPresent (testConfig.useIncrementalPresent) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (vk::enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithWsi(m_vkp, context.getUsedApiVersion(), m_instanceExtensions, testConfig.wsiType)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (vk::chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithWsi(context, m_instanceExtensions, testConfig.wsiType)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (vk::chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_nativeDisplay (createDisplay(context.getTestContext().getPlatform().getVulkanPlatform(), m_instanceExtensions, testConfig.wsiType)) , m_nativeWindow (createWindow(*m_nativeDisplay, tcu::nothing())) - , m_surface (vk::wsi::createSurface(m_vki, *m_instance, testConfig.wsiType, *m_nativeDisplay, *m_nativeWindow)) + , m_surface (vk::wsi::createSurface(m_vki, m_instance, testConfig.wsiType, *m_nativeDisplay, *m_nativeWindow)) , m_queueFamilyIndex (chooseQueueFamilyIndex(m_vki, m_physicalDevice, *m_surface)) , m_deviceExtensions (vk::enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithWsi(m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex, testConfig.useIncrementalPresent)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithWsi(m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex, testConfig.useIncrementalPresent, context.getTestContext().getCommandLine().isValidationEnabled())) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_commandPool (createCommandPool(m_vkd, *m_device, m_queueFamilyIndex)) diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSharedPresentableImageTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSharedPresentableImageTests.cpp index 1241b0f..48e990b 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiSharedPresentableImageTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSharedPresentableImageTests.cpp @@ -22,6 +22,7 @@ *//*--------------------------------------------------------------------*/ #include "vktWsiSharedPresentableImageTests.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vktTestCaseUtil.hpp" #include "vktTestGroupUtil.hpp" @@ -41,6 +42,7 @@ #include "tcuPlatform.hpp" #include "tcuResultCollector.hpp" #include "tcuTestLog.hpp" +#include "tcuCommandLine.hpp" #include #include @@ -78,11 +80,11 @@ void checkAllSupported (const Extensions& supportedExtensions, const vector createInstanceWithWsi (const vk::PlatformInterface& vkp, - deUint32 version, - const Extensions& supportedExtensions, - vk::wsi::Type wsiType) +CustomInstance createInstanceWithWsi (Context& context, + const Extensions& supportedExtensions, + vk::wsi::Type wsiType) { + const deUint32 version = context.getUsedApiVersion(); vector extensions; if (!vk::isCoreInstanceExtension(version, "VK_KHR_get_physical_device_properties2")) @@ -96,7 +98,7 @@ vk::Move createInstanceWithWsi (const vk::PlatformInterface& vk checkAllSupported(supportedExtensions, extensions); - return vk::createDefaultInstance(vkp, version, vector(), extensions); + return vkt::createCustomInstanceWithExtensions(context, extensions); } vk::VkPhysicalDeviceFeatures getDeviceNullFeatures (void) @@ -146,6 +148,7 @@ vk::Move createDeviceWithWsi (const vk::PlatformInterface& vkp, const Extensions& supportedExtensions, const deUint32 queueFamilyIndex, bool requiresSharedPresentableImage, + bool validationEnabled, const vk::VkAllocationCallbacks* pAllocator = DE_NULL) { const float queuePriorities[] = { 1.0f }; @@ -187,7 +190,7 @@ vk::Move createDeviceWithWsi (const vk::PlatformInterface& vkp, TCU_THROW(NotSupportedError, (string(extensions[ndx]) + " is not supported").c_str()); } - return createDevice(vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); + return createCustomDevice(validationEnabled, vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); } de::MovePtr createDisplay (const vk::Platform& platform, @@ -567,8 +570,8 @@ private: const deUint32 m_quadCount; const vk::PlatformInterface& m_vkp; const Extensions m_instanceExtensions; - const vk::Unique m_instance; - const vk::InstanceDriver m_vki; + const CustomInstance m_instance; + const vk::InstanceDriver& m_vki; const vk::VkPhysicalDevice m_physicalDevice; const de::UniquePtr m_nativeDisplay; const de::UniquePtr m_nativeWindow; @@ -741,17 +744,17 @@ SharedPresentableImageTestInstance::SharedPresentableImageTestInstance (Context& , m_quadCount (16u) , m_vkp (context.getPlatformInterface()) , m_instanceExtensions (vk::enumerateInstanceExtensionProperties(m_vkp, DE_NULL)) - , m_instance (createInstanceWithWsi(m_vkp, context.getUsedApiVersion(), m_instanceExtensions, testConfig.wsiType)) - , m_vki (m_vkp, *m_instance) - , m_physicalDevice (vk::chooseDevice(m_vki, *m_instance, context.getTestContext().getCommandLine())) + , m_instance (createInstanceWithWsi(context, m_instanceExtensions, testConfig.wsiType)) + , m_vki (m_instance.getDriver()) + , m_physicalDevice (vk::chooseDevice(m_vki, m_instance, context.getTestContext().getCommandLine())) , m_nativeDisplay (createDisplay(context.getTestContext().getPlatform().getVulkanPlatform(), m_instanceExtensions, testConfig.wsiType)) , m_nativeWindow (createWindow(*m_nativeDisplay, tcu::nothing())) - , m_surface (vk::wsi::createSurface(m_vki, *m_instance, testConfig.wsiType, *m_nativeDisplay, *m_nativeWindow)) + , m_surface (vk::wsi::createSurface(m_vki, m_instance, testConfig.wsiType, *m_nativeDisplay, *m_nativeWindow)) , m_queueFamilyIndex (chooseQueueFamilyIndex(m_vki, m_physicalDevice, *m_surface)) , m_deviceExtensions (vk::enumerateDeviceExtensionProperties(m_vki, m_physicalDevice, DE_NULL)) - , m_device (createDeviceWithWsi(m_vkp, *m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex, testConfig.useSharedPresentableImage)) - , m_vkd (m_vkp, *m_instance, *m_device) + , m_device (createDeviceWithWsi(m_vkp, m_instance, m_vki, m_physicalDevice, m_deviceExtensions, m_queueFamilyIndex, testConfig.useSharedPresentableImage, context.getTestContext().getCommandLine().isValidationEnabled())) + , m_vkd (m_vkp, m_instance, *m_device) , m_queue (getDeviceQueue(m_vkd, *m_device, m_queueFamilyIndex, 0u)) , m_commandPool (createCommandPool(m_vkd, *m_device, m_queueFamilyIndex)) diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp index f53ae27..c5fe166 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp @@ -25,6 +25,7 @@ #include "vktTestCaseUtil.hpp" #include "vktTestGroupUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkPlatform.hpp" @@ -169,14 +170,14 @@ struct CheckPhysicalDeviceSurfacePresentModesIncompleteResult : public CheckInco typedef vector Extensions; -Move createInstanceWithWsi (const PlatformInterface& vkp, - deUint32 version, - const Extensions& supportedExtensions, - Type wsiType, - const vector extraExtensions, - const VkAllocationCallbacks* pAllocator = DE_NULL) +CustomInstance createInstanceWithWsi (Context& context, + const Extensions& supportedExtensions, + Type wsiType, + const vector extraExtensions, + const VkAllocationCallbacks* pAllocator = DE_NULL) { - vector extensions = extraExtensions; + const deUint32 version = context.getUsedApiVersion(); + vector extensions = extraExtensions; extensions.push_back("VK_KHR_surface"); extensions.push_back(getExtensionName(wsiType)); @@ -194,37 +195,35 @@ Move createInstanceWithWsi (const PlatformInterface& vkp, instanceExtensions.push_back(*extensionName); } - return vk::createDefaultInstance(vkp, version, vector(), instanceExtensions, pAllocator); + return vkt::createCustomInstanceWithExtensions(context, instanceExtensions, pAllocator); } struct InstanceHelper { const vector supportedExtensions; - Unique instance; - const InstanceDriver vki; + CustomInstance instance; + const InstanceDriver& vki; InstanceHelper (Context& context, Type wsiType, const VkAllocationCallbacks* pAllocator = DE_NULL) : supportedExtensions (enumerateInstanceExtensionProperties(context.getPlatformInterface(), DE_NULL)) - , instance (createInstanceWithWsi(context.getPlatformInterface(), - context.getUsedApiVersion(), + , instance (createInstanceWithWsi(context, supportedExtensions, wsiType, vector(), pAllocator)) - , vki (context.getPlatformInterface(), *instance) + , vki (instance.getDriver()) {} InstanceHelper (Context& context, Type wsiType, const vector& extensions, const VkAllocationCallbacks* pAllocator = DE_NULL) : supportedExtensions (enumerateInstanceExtensionProperties(context.getPlatformInterface(), DE_NULL)) - , instance (createInstanceWithWsi(context.getPlatformInterface(), - context.getUsedApiVersion(), + , instance (createInstanceWithWsi(context, supportedExtensions, wsiType, extensions, pAllocator)) - , vki (context.getPlatformInterface(), *instance) + , vki (instance.getDriver()) {} }; @@ -282,7 +281,7 @@ tcu::TestStatus createSurfaceTest (Context& context, Type wsiType) { const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); return tcu::TestStatus::pass("Creating surface succeeded"); } @@ -296,7 +295,7 @@ tcu::TestStatus createSurfaceCustomAllocatorTest (Context& context, Type wsiType const InstanceHelper instHelper (context, wsiType, allocationRecorder.getCallbacks()); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); const Unique surface (createSurface(instHelper.vki, - *instHelper.instance, + instHelper.instance, wsiType, *native.display, *native.window, @@ -342,7 +341,7 @@ tcu::TestStatus createSurfaceSimulateOOMTest (Context& context, Type wsiType) const NativeObjects native (context, instHelper.supportedExtensions, wsiType); const Unique surface (createSurface(instHelper.vki, - *instHelper.instance, + instHelper.instance, wsiType, *native.display, *native.window, @@ -393,8 +392,8 @@ tcu::TestStatus querySurfaceSupportTest (Context& context, Type wsiType) const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, *instHelper.instance); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, instHelper.instance); // On Android surface must be supported by all devices and queue families const bool expectSupportedOnAll = wsiType == TYPE_ANDROID; @@ -488,8 +487,8 @@ tcu::TestStatus querySurfaceCapabilitiesTest (Context& context, Type wsiType) const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, *instHelper.instance); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, instHelper.instance); for (size_t deviceNdx = 0; deviceNdx < physicalDevices.size(); ++deviceNdx) { @@ -516,8 +515,8 @@ tcu::TestStatus querySurfaceCapabilities2Test (Context& context, Type wsiType) const InstanceHelper instHelper (context, wsiType, vector(1, string("VK_KHR_get_surface_capabilities2"))); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, *instHelper.instance); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, instHelper.instance); for (size_t deviceNdx = 0; deviceNdx < physicalDevices.size(); ++deviceNdx) { @@ -577,8 +576,8 @@ tcu::TestStatus querySurfaceProtectedCapabilitiesTest (Context& context, Type ws requiredExtensions.push_back("VK_KHR_surface_protected_capabilities"); const InstanceHelper instHelper (context, wsiType, requiredExtensions); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, *instHelper.instance); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, instHelper.instance); for (size_t deviceNdx = 0; deviceNdx < physicalDevices.size(); ++deviceNdx) { @@ -670,8 +669,8 @@ tcu::TestStatus querySurfaceFormatsTest (Context& context, Type wsiType) const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, *instHelper.instance); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, instHelper.instance); for (size_t deviceNdx = 0; deviceNdx < physicalDevices.size(); ++deviceNdx) { @@ -716,8 +715,8 @@ tcu::TestStatus querySurfaceFormats2Test (Context& context, Type wsiType) const InstanceHelper instHelper (context, wsiType, vector(1, string("VK_KHR_get_surface_capabilities2"))); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, *instHelper.instance); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, instHelper.instance); for (size_t deviceNdx = 0; deviceNdx < physicalDevices.size(); ++deviceNdx) { @@ -826,8 +825,8 @@ tcu::TestStatus querySurfacePresentModesTest (Context& context, Type wsiType) const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, *instHelper.instance); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, instHelper.instance); for (size_t deviceNdx = 0; deviceNdx < physicalDevices.size(); ++deviceNdx) { @@ -879,7 +878,7 @@ tcu::TestStatus queryDevGroupSurfacePresentCapabilitiesTest (Context& context, T deUint8 buffer [sizeof(VkDeviceGroupPresentCapabilitiesKHR) + GUARD_SIZE]; deUint32 queueFamilyIndex = 0; VkDeviceGroupPresentCapabilitiesKHR* presentCapabilities; - VkPhysicalDevice physicalDevice = chooseDevice(instHelper.vki, *instHelper.instance, cmdLine); + VkPhysicalDevice physicalDevice = chooseDevice(instHelper.vki, instHelper.instance, cmdLine); const Extensions& supportedExtensions = enumerateDeviceExtensionProperties(instHelper.vki, physicalDevice, DE_NULL); std::vector deviceExtensions; @@ -893,7 +892,7 @@ tcu::TestStatus queryDevGroupSurfacePresentCapabilitiesTest (Context& context, T TCU_THROW(NotSupportedError, (string(deviceExtensions[ndx]) + " is not supported").c_str()); } - const vector deviceGroupProps = enumeratePhysicalDeviceGroups(instHelper.vki, *instHelper.instance); + const vector deviceGroupProps = enumeratePhysicalDeviceGroups(instHelper.vki, instHelper.instance); const std::vector queueProps = getPhysicalDeviceQueueFamilyProperties(instHelper.vki, deviceGroupProps[devGroupIdx].physicalDevices[deviceIdx]); for (size_t queueNdx = 0; queueNdx < queueProps.size(); queueNdx++) @@ -917,6 +916,7 @@ tcu::TestStatus queryDevGroupSurfacePresentCapabilitiesTest (Context& context, T deviceGroupProps[devGroupIdx].physicalDeviceCount, //physicalDeviceCount deviceGroupProps[devGroupIdx].physicalDevices //physicalDevices }; + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; @@ -930,8 +930,9 @@ tcu::TestStatus queryDevGroupSurfacePresentCapabilitiesTest (Context& context, T (deviceExtensions.empty() ? DE_NULL : &deviceExtensions[0]), //ppEnabledExtensionNames; DE_NULL, //pEnabledFeatures; }; - Move deviceGroup = createDevice(context.getPlatformInterface(), *instHelper.instance, instHelper.vki, deviceGroupProps[devGroupIdx].physicalDevices[deviceIdx], &deviceCreateInfo); - const DeviceDriver vk (context.getPlatformInterface(), *instHelper.instance, *deviceGroup); + + Move deviceGroup = createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), instHelper.instance, instHelper.vki, deviceGroupProps[devGroupIdx].physicalDevices[deviceIdx], &deviceCreateInfo); + const DeviceDriver vk (context.getPlatformInterface(), instHelper.instance, *deviceGroup); presentCapabilities = reinterpret_cast(buffer); @@ -972,7 +973,7 @@ tcu::TestStatus queryDevGroupSurfacePresentModesTest (Context& context, Type wsi tcu::ResultCollector results (log); const InstanceHelper instHelper (context, wsiType, vector(1, string("VK_KHR_device_group_creation"))); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); const float queuePriority = 1.0f; const tcu::CommandLine& cmdLine = context.getTestContext().getCommandLine(); const deUint32 devGroupIdx = cmdLine.getVKDeviceGroupId() - 1; @@ -988,7 +989,7 @@ tcu::TestStatus queryDevGroupSurfacePresentModesTest (Context& context, Type wsi VkRect2D* presentRectangles; VkDeviceGroupPresentModeFlagsKHR* presentModeFlags; vector rectanglesBuffer; - VkPhysicalDevice physicalDevice = chooseDevice(instHelper.vki, *instHelper.instance, cmdLine); + VkPhysicalDevice physicalDevice = chooseDevice(instHelper.vki, instHelper.instance, cmdLine); const Extensions& supportedExtensions = enumerateDeviceExtensionProperties(instHelper.vki, physicalDevice, DE_NULL); std::vector deviceExtensions; @@ -1002,7 +1003,7 @@ tcu::TestStatus queryDevGroupSurfacePresentModesTest (Context& context, Type wsi TCU_THROW(NotSupportedError, (string(deviceExtensions[ndx]) + " is not supported").c_str()); } - const vector deviceGroupProps = enumeratePhysicalDeviceGroups(instHelper.vki, *instHelper.instance); + const vector deviceGroupProps = enumeratePhysicalDeviceGroups(instHelper.vki, instHelper.instance); const std::vector queueProps = getPhysicalDeviceQueueFamilyProperties(instHelper.vki, deviceGroupProps[devGroupIdx].physicalDevices[deviceIdx]); for (size_t queueNdx = 0; queueNdx < queueProps.size(); queueNdx++) { @@ -1025,7 +1026,8 @@ tcu::TestStatus queryDevGroupSurfacePresentModesTest (Context& context, Type wsi deviceGroupProps[devGroupIdx].physicalDeviceCount, //physicalDeviceCount deviceGroupProps[devGroupIdx].physicalDevices //physicalDevices }; - const VkDeviceCreateInfo deviceCreateInfo = + + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, //sType; &deviceGroupInfo, //pNext; @@ -1039,8 +1041,8 @@ tcu::TestStatus queryDevGroupSurfacePresentModesTest (Context& context, Type wsi DE_NULL, //pEnabledFeatures; }; - Move deviceGroup = createDevice(context.getPlatformInterface(), *instHelper.instance, instHelper.vki, deviceGroupProps[devGroupIdx].physicalDevices[deviceIdx], &deviceCreateInfo); - const DeviceDriver vk (context.getPlatformInterface(), *instHelper.instance, *deviceGroup); + Move deviceGroup = createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), instHelper.instance, instHelper.vki, deviceGroupProps[devGroupIdx].physicalDevices[deviceIdx], &deviceCreateInfo); + const DeviceDriver vk (context.getPlatformInterface(), instHelper.instance, *deviceGroup); presentModeFlags = reinterpret_cast(buffer); deMemset(buffer, GUARD_VALUE, sizeof(buffer)); @@ -1124,7 +1126,7 @@ tcu::TestStatus createSurfaceInitialSizeTest (Context& context, Type wsiType) instHelper.supportedExtensions, wsiType)); - const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, *instHelper.instance); + const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, instHelper.instance); const UVec2 sizes[] = { UVec2(64, 64), @@ -1138,7 +1140,7 @@ tcu::TestStatus createSurfaceInitialSizeTest (Context& context, Type wsiType) { const UVec2& testSize = sizes[sizeNdx]; const UniquePtr nativeWindow (createWindow(*nativeDisplay, tcu::just(testSize))); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *nativeDisplay, *nativeWindow)); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *nativeDisplay, *nativeWindow)); for (size_t deviceNdx = 0; deviceNdx < physicalDevices.size(); ++deviceNdx) { @@ -1169,8 +1171,8 @@ tcu::TestStatus resizeSurfaceTest (Context& context, Type wsiType) wsiType)); UniquePtr nativeWindow (createWindow(*nativeDisplay, tcu::nothing())); - const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, *instHelper.instance); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *nativeDisplay, *nativeWindow)); + const vector physicalDevices = enumeratePhysicalDevices(instHelper.vki, instHelper.instance); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *nativeDisplay, *nativeWindow)); const UVec2 sizes[] = { @@ -1218,13 +1220,13 @@ tcu::TestStatus destroyNullHandleSurfaceTest (Context& context, Type wsiType) const VkSurfaceKHR nullHandle = DE_NULL; // Default allocator - instHelper.vki.destroySurfaceKHR(*instHelper.instance, nullHandle, DE_NULL); + instHelper.vki.destroySurfaceKHR(instHelper.instance, nullHandle, DE_NULL); // Custom allocator { AllocationCallbackRecorder recordingAllocator (getSystemAllocator(), 1u); - instHelper.vki.destroySurfaceKHR(*instHelper.instance, nullHandle, recordingAllocator.getCallbacks()); + instHelper.vki.destroySurfaceKHR(instHelper.instance, nullHandle, recordingAllocator.getCallbacks()); if (recordingAllocator.getNumRecords() != 0u) return tcu::TestStatus::fail("Implementation allocated/freed the memory"); diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp index 671e95b..332ecfb 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp @@ -25,6 +25,7 @@ #include "vktTestCaseUtil.hpp" #include "vktTestGroupUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vkDefs.hpp" #include "vkPlatform.hpp" @@ -89,12 +90,11 @@ void checkAllSupported (const Extensions& supportedExtensions, const vector createInstanceWithWsi (const PlatformInterface& vkp, - deUint32 version, - const Extensions& supportedExtensions, - Type wsiType, - const vector extraExtensions, - const VkAllocationCallbacks* pAllocator = DE_NULL) +CustomInstance createInstanceWithWsi (Context& context, + const Extensions& supportedExtensions, + Type wsiType, + const vector extraExtensions, + const VkAllocationCallbacks* pAllocator = DE_NULL) { vector extensions = extraExtensions; @@ -116,7 +116,7 @@ Move createInstanceWithWsi (const PlatformInterface& vkp, checkAllSupported(supportedExtensions, extensions); - return vk::createDefaultInstance(vkp, version, vector(), extensions, pAllocator); + return vkt::createCustomInstanceWithExtensions(context, extensions, pAllocator); } VkPhysicalDeviceFeatures getDeviceFeaturesForWsi (void) @@ -132,6 +132,7 @@ Move createDeviceWithWsi (const PlatformInterface& vkp, VkPhysicalDevice physicalDevice, const Extensions& supportedExtensions, const deUint32 queueFamilyIndex, + bool validationEnabled, const VkAllocationCallbacks* pAllocator = DE_NULL) { const float queuePriorities[] = { 1.0f }; @@ -148,6 +149,7 @@ Move createDeviceWithWsi (const PlatformInterface& vkp, }; const VkPhysicalDeviceFeatures features = getDeviceFeaturesForWsi(); const char* const extensions[] = { "VK_KHR_swapchain" }; + const VkDeviceCreateInfo deviceParams = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, @@ -168,7 +170,7 @@ Move createDeviceWithWsi (const PlatformInterface& vkp, TCU_THROW(NotSupportedError, (string(extensions[ndx]) + " is not supported").c_str()); } - return createDevice(vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); + return createCustomDevice(validationEnabled, vkp, instance, vki, physicalDevice, &deviceParams, pAllocator); } vector getSupportedQueueFamilyIndices (const InstanceInterface& vki, VkPhysicalDevice physicalDevice, VkSurfaceKHR surface) @@ -202,31 +204,29 @@ deUint32 chooseQueueFamilyIndex (const InstanceInterface& vki, VkPhysicalDevice struct InstanceHelper { const vector supportedExtensions; - const Unique instance; - const InstanceDriver vki; + const CustomInstance instance; + const InstanceDriver& vki; InstanceHelper (Context& context, Type wsiType, const VkAllocationCallbacks* pAllocator = DE_NULL) : supportedExtensions (enumerateInstanceExtensionProperties(context.getPlatformInterface(), DE_NULL)) - , instance (createInstanceWithWsi(context.getPlatformInterface(), - context.getUsedApiVersion(), + , instance (createInstanceWithWsi(context, supportedExtensions, wsiType, vector(), pAllocator)) - , vki (context.getPlatformInterface(), *instance) + , vki (instance.getDriver()) {} InstanceHelper (Context& context, Type wsiType, const vector& extensions, const VkAllocationCallbacks* pAllocator = DE_NULL) : supportedExtensions (enumerateInstanceExtensionProperties(context.getPlatformInterface(), DE_NULL)) - , instance (createInstanceWithWsi(context.getPlatformInterface(), - context.getUsedApiVersion(), + , instance (createInstanceWithWsi(context, supportedExtensions, wsiType, extensions, pAllocator)) - , vki (context.getPlatformInterface(), *instance) + , vki (instance.getDriver()) {} }; @@ -251,6 +251,7 @@ struct DeviceHelper physicalDevice, enumerateDeviceExtensionProperties(vki, physicalDevice, DE_NULL), queueFamilyIndex, + context.getTestContext().getCommandLine().isValidationEnabled(), pAllocator)) , vkd (context.getPlatformInterface(), context.getInstance(), *device) , queue (getDeviceQueue(vkd, *device, queueFamilyIndex, 0)) @@ -581,8 +582,8 @@ tcu::TestStatus createSwapchainTest (Context& context, TestParameters params) tcu::TestLog& log = context.getTestContext().getLog(); const InstanceHelper instHelper (context, params.wsiType); const NativeObjects native (context, instHelper.supportedExtensions, params.wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, params.wsiType, *native.display, *native.window)); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, params.wsiType, *native.display, *native.window)); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface); const vector cases (generateSwapchainParameterCases(params.wsiType, params.dimension, instHelper.vki, devHelper.physicalDevice, *surface)); const VkSurfaceCapabilitiesKHR capabilities(getPhysicalDeviceSurfaceCapabilities(instHelper.vki, devHelper.physicalDevice, *surface)); @@ -677,12 +678,12 @@ tcu::TestStatus createSwapchainSimulateOOMTest (Context& context, TestParameters const InstanceHelper instHelper (context, params.wsiType, failingAllocator.getCallbacks()); const NativeObjects native (context, instHelper.supportedExtensions, params.wsiType); const Unique surface (createSurface(instHelper.vki, - *instHelper.instance, + instHelper.instance, params.wsiType, *native.display, *native.window, failingAllocator.getCallbacks())); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface, failingAllocator.getCallbacks()); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface, failingAllocator.getCallbacks()); const vector allCases (generateSwapchainParameterCases(params.wsiType, params.dimension, instHelper.vki, devHelper.physicalDevice, *surface)); if (maxCases < allCases.size()) @@ -747,11 +748,11 @@ tcu::TestStatus testImageSwapchainCreateInfo (Context& context, Type wsiType) const InstanceHelper instHelper (context, wsiType, vector(1, string("VK_KHR_device_group_creation"))); const NativeObjects native (context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); const Unique surface (createSurface(instHelper.vki, - *instHelper.instance, + instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface); const Extensions& deviceExtensions = enumerateDeviceExtensionProperties(instHelper.vki, devHelper.physicalDevice, DE_NULL); // structures this tests checks were added in revision 69 @@ -1509,8 +1510,8 @@ tcu::TestStatus basicRenderTest (Context& context, Type wsiType) const tcu::UVec2 desiredSize (256, 256); const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface); const DeviceInterface& vkd = devHelper.vkd; const VkDevice device = *devHelper.device; SimpleAllocator allocator (vkd, device, getPhysicalDeviceMemoryProperties(instHelper.vki, devHelper.physicalDevice)); @@ -1624,7 +1625,7 @@ tcu::TestStatus deviceGroupRenderTest (Context& context, Type wsiType) { const InstanceHelper instHelper (context, wsiType, vector(1, string("VK_KHR_device_group_creation"))); const tcu::CommandLine& cmdLine = context.getTestContext().getCommandLine(); - VkPhysicalDevice physicalDevice = chooseDevice(instHelper.vki, *instHelper.instance, cmdLine); + VkPhysicalDevice physicalDevice = chooseDevice(instHelper.vki, instHelper.instance, cmdLine); const Extensions& supportedExtensions = enumerateDeviceExtensionProperties(instHelper.vki, physicalDevice, DE_NULL); std::vector deviceExtensions; @@ -1640,11 +1641,11 @@ tcu::TestStatus deviceGroupRenderTest (Context& context, Type wsiType) const tcu::UVec2 desiredSize (256, 256); const NativeObjects native (context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); const deUint32 devGroupIdx = cmdLine.getVKDeviceGroupId() - 1; const deUint32 deviceIdx = context.getTestContext().getCommandLine().getVKDeviceId() - 1u; - const vector deviceGroupProps = enumeratePhysicalDeviceGroups(instHelper.vki, *instHelper.instance); + const vector deviceGroupProps = enumeratePhysicalDeviceGroups(instHelper.vki, instHelper.instance); deUint32 physicalDevicesInGroupCount = deviceGroupProps[devGroupIdx].physicalDeviceCount; const VkPhysicalDevice* physicalDevicesInGroup = deviceGroupProps[devGroupIdx].physicalDevices; deUint32 queueFamilyIndex = chooseQueueFamilyIndex(instHelper.vki, physicalDevicesInGroup[deviceIdx], *surface); @@ -1670,7 +1671,8 @@ tcu::TestStatus deviceGroupRenderTest (Context& context, Type wsiType) 1u, // queueCount &queuePriority, // pQueuePriorities }; - const VkDeviceCreateInfo deviceCreateInfo = + + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // sType &groupDeviceInfo, // pNext @@ -1683,8 +1685,9 @@ tcu::TestStatus deviceGroupRenderTest (Context& context, Type wsiType) &deviceExtensions[0], // ppEnabledExtensionNames DE_NULL, // pEnabledFeatures }; - Move groupDevice = createDevice(context.getPlatformInterface(), *instHelper.instance, instHelper.vki, physicalDevicesInGroup[deviceIdx], &deviceCreateInfo); - const DeviceDriver vkd (context.getPlatformInterface(), *instHelper.instance, *groupDevice); + + Move groupDevice = createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), instHelper.instance, instHelper.vki, physicalDevicesInGroup[deviceIdx], &deviceCreateInfo); + const DeviceDriver vkd (context.getPlatformInterface(), instHelper.instance, *groupDevice); VkQueue queue (getDeviceQueue(vkd, *groupDevice, queueFamilyIndex, 0)); SimpleAllocator allocator (vkd, *groupDevice, getPhysicalDeviceMemoryProperties(instHelper.vki, physicalDevicesInGroup[deviceIdx])); @@ -1850,7 +1853,7 @@ tcu::TestStatus deviceGroupRenderTest2 (Context& context, Type wsiType) { const InstanceHelper instHelper (context, wsiType, vector(1, string("VK_KHR_device_group_creation"))); const tcu::CommandLine& cmdLine = context.getTestContext().getCommandLine(); - VkPhysicalDevice physicalDevice = chooseDevice(instHelper.vki, *instHelper.instance, cmdLine); + VkPhysicalDevice physicalDevice = chooseDevice(instHelper.vki, instHelper.instance, cmdLine); const Extensions& deviceExtensions = enumerateDeviceExtensionProperties(instHelper.vki, physicalDevice, DE_NULL); // structures this tests checks were added in revision 69 @@ -1868,11 +1871,11 @@ tcu::TestStatus deviceGroupRenderTest2 (Context& context, Type wsiType) const tcu::UVec2 desiredSize (256, 256); const NativeObjects native (context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); const deUint32 devGroupIdx = cmdLine.getVKDeviceGroupId() - 1; const deUint32 deviceIdx = context.getTestContext().getCommandLine().getVKDeviceId() - 1u; - const vector deviceGroupProps = enumeratePhysicalDeviceGroups(instHelper.vki, *instHelper.instance); + const vector deviceGroupProps = enumeratePhysicalDeviceGroups(instHelper.vki, instHelper.instance); deUint32 physicalDevicesInGroupCount = deviceGroupProps[devGroupIdx].physicalDeviceCount; const VkPhysicalDevice* physicalDevicesInGroup = deviceGroupProps[devGroupIdx].physicalDevices; deUint32 queueFamilyIndex = chooseQueueFamilyIndex(instHelper.vki, physicalDevicesInGroup[deviceIdx], *surface); @@ -1902,6 +1905,7 @@ tcu::TestStatus deviceGroupRenderTest2 (Context& context, Type wsiType) 1u, // queueCount &queuePriority, // pQueuePriorities }; + const VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, // sType @@ -1915,8 +1919,9 @@ tcu::TestStatus deviceGroupRenderTest2 (Context& context, Type wsiType) &requiredExtensions[0], // ppEnabledExtensionNames DE_NULL, // pEnabledFeatures }; - Move groupDevice = createDevice(context.getPlatformInterface(), *instHelper.instance, instHelper.vki, physicalDevicesInGroup[deviceIdx], &deviceCreateInfo); - const DeviceDriver vkd (context.getPlatformInterface(), *instHelper.instance, *groupDevice); + + Move groupDevice = createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), instHelper.instance, instHelper.vki, physicalDevicesInGroup[deviceIdx], &deviceCreateInfo); + const DeviceDriver vkd (context.getPlatformInterface(), instHelper.instance, *groupDevice); VkQueue queue (getDeviceQueue(vkd, *groupDevice, queueFamilyIndex, 0)); SimpleAllocator allocator (vkd, *groupDevice, getPhysicalDeviceMemoryProperties(instHelper.vki, physicalDevicesInGroup[deviceIdx])); @@ -2205,8 +2210,8 @@ tcu::TestStatus resizeSwapchainTest (Context& context, Type wsiType) const tcu::UVec2 desiredSize (256, 256); const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface); const PlatformProperties& platformProperties = getPlatformProperties(wsiType); const VkSurfaceCapabilitiesKHR capabilities = getPhysicalDeviceSurfaceCapabilities(instHelper.vki, devHelper.physicalDevice, *surface); const DeviceInterface& vkd = devHelper.vkd; @@ -2341,8 +2346,8 @@ tcu::TestStatus getImagesIncompleteResultTest (Context& context, Type wsiType) const tcu::UVec2 desiredSize (256, 256); const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface); const VkSwapchainCreateInfoKHR swapchainInfo = getBasicSwapchainParameters(wsiType, instHelper.vki, devHelper.physicalDevice, *surface, desiredSize, 2); const Unique swapchain (createSwapchainKHR(devHelper.vkd, *devHelper.device, &swapchainInfo)); @@ -2365,8 +2370,8 @@ tcu::TestStatus getImagesResultsCountTest (Context& context, Type wsiType) const tcu::UVec2 desiredSize(256, 256); const InstanceHelper instHelper(context, wsiType); const NativeObjects native(context, instHelper.supportedExtensions, wsiType, tcu::just(desiredSize)); - const Unique surface(createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper(context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface(createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const DeviceHelper devHelper(context, instHelper.vki, instHelper.instance, *surface); const VkSwapchainCreateInfoKHR swapchainInfo = getBasicSwapchainParameters(wsiType, instHelper.vki, devHelper.physicalDevice, *surface, desiredSize, 2); const Unique swapchain(createSwapchainKHR(devHelper.vkd, *devHelper.device, &swapchainInfo)); @@ -2394,8 +2399,8 @@ tcu::TestStatus destroyNullHandleSwapchainTest (Context& context, Type wsiType) { const InstanceHelper instHelper (context, wsiType); const NativeObjects native (context, instHelper.supportedExtensions, wsiType); - const Unique surface (createSurface(instHelper.vki, *instHelper.instance, wsiType, *native.display, *native.window)); - const DeviceHelper devHelper (context, instHelper.vki, *instHelper.instance, *surface); + const Unique surface (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window)); + const DeviceHelper devHelper (context, instHelper.vki, instHelper.instance, *surface); const VkSwapchainKHR nullHandle = DE_NULL; // Default allocator diff --git a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp index ac78252..a3a68f9 100644 --- a/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp +++ b/external/vulkancts/modules/vulkan/ycbcr/vktYCbCrFormatTests.cpp @@ -23,6 +23,7 @@ #include "vktYCbCrFormatTests.hpp" #include "vktTestCaseUtil.hpp" +#include "vktCustomInstancesDevices.hpp" #include "vktTestGroupUtil.hpp" #include "vktShaderExecutor.hpp" #include "vktYCbCrUtil.hpp" @@ -427,9 +428,8 @@ tcu::TestStatus testFormat (Context& context, TestParameters params) }, }; VkResult propsResult; - const PlatformInterface& vkp = context.getPlatformInterface(); - const Unique instance (createInstanceWithExtension(vkp, context.getUsedApiVersion(), "VK_KHR_get_physical_device_properties2")); - const InstanceDriver vki (vkp, *instance); + const CustomInstance instance (createCustomInstanceWithExtension(context, "VK_KHR_get_physical_device_properties2")); + const InstanceDriver& vki (instance.getDriver()); // Verify that a yuv image consumes at least one descriptor propsResult = vki.getPhysicalDeviceImageFormatProperties2(context.getPhysicalDevice(), &imageFormatInfo, &extProperties); -- 2.7.4