From 203224c9a22e62f9ad9e4f13109160f0c7ee8a7d Mon Sep 17 00:00:00 2001 From: Ricardo Garcia Date: Mon, 28 Nov 2022 13:20:50 +0100 Subject: [PATCH] Avoid using custom instances in robustness tests Some robustness custom devices are created with a large amount of enabled extensions and features, using the default device as a reference. Some drivers may expose or hide different device extensions depending on the enabled instance extensions. This means if we use a custom instance with no extensions and try to enable everything that's available on the default device, device creation may fail unexpectedly. This can be solved in two ways: * Create the custom instance with the same extensions as the default instance. * Avoid creating a custom instance at all and reuse the context instance. This commit opts for the second option. Creating a custom instance is rarely useful. The focus of robustness tests in on creating a custom device with robustness features. In addition, this commit also fixes some cases where the code was mixing the context DeviceInterface with custom devices, and fixes validation errors caused by the tests failing to enable shaderInt64 or vert/frag stores and atomics in cases they were needed. Affects: dEQP-VK.robustness.* dEQP-VKSC.robustness.* VK-GL-CTS issue: 4136 Components: Vulkan Change-Id: I820f8932e74100f01dba397ccf9eac24042ce33d --- ...RobustBufferAccessWithVariablePointersTests.cpp | 45 ++++---- .../robustness/vktRobustness1VertexAccessTests.cpp | 13 +-- .../robustness/vktRobustnessBufferAccessTests.cpp | 116 +++++++++++++++------ .../vulkan/robustness/vktRobustnessExtsTests.cpp | 93 +++-------------- .../vulkan/robustness/vktRobustnessUtil.cpp | 35 +++---- .../vulkan/robustness/vktRobustnessUtil.hpp | 14 +-- .../robustness/vktRobustnessVertexAccessTests.cpp | 40 +++---- 7 files changed, 151 insertions(+), 205 deletions(-) diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp index 121648b..8ccddc7 100644 --- a/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp +++ b/external/vulkancts/modules/vulkan/robustness/vktRobustBufferAccessWithVariablePointersTests.cpp @@ -65,7 +65,7 @@ namespace { // Creates a custom device with robust buffer access and variable pointer features. -Move createRobustBufferAccessVariablePointersDevice (Context& context, VkInstance instance, const InstanceInterface& vki ) +Move createRobustBufferAccessVariablePointersDevice (Context& context) { auto pointerFeatures = context.getVariablePointersFeatures(); @@ -74,7 +74,7 @@ Move createRobustBufferAccessVariablePointersDevice (Context& context, features2.features.robustBufferAccess = VK_TRUE; features2.pNext = &pointerFeatures; - return createRobustBufferAccessDevice(context, instance, vki, &features2); + return createRobustBufferAccessDevice(context, &features2); } // A supplementary structures that can hold information about buffer size @@ -304,7 +304,6 @@ class AccessInstance : public vkt::TestInstance { public: AccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -333,7 +332,6 @@ private: VkDeviceSize valueSize); protected: - std::shared_ptr m_instanceWrapper; Move m_device; #ifndef CTS_USES_VULKANSC de::MovePtr m_deviceDriver; @@ -378,7 +376,6 @@ class ReadInstance: public AccessInstance { public: ReadInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -399,7 +396,6 @@ class WriteInstance: public AccessInstance { public: WriteInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -1318,15 +1314,14 @@ RobustReadTest::RobustReadTest (tcu::TestContext& testContext, TestInstance* RobustReadTest::createInstance (Context& context) const { - std::shared_ptr instanceWrapper(new CustomInstanceWrapper(context)); - auto device = createRobustBufferAccessVariablePointersDevice(context, instanceWrapper->instance, instanceWrapper->instance.getDriver()); + auto device = createRobustBufferAccessVariablePointersDevice(context); #ifndef CTS_USES_VULKANSC - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), instanceWrapper->instance, *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), context.getInstance(), *device)); #else - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), instanceWrapper->instance, *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), context.getInstance(), *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); #endif // CTS_USES_VULKANSC - return new ReadInstance(context, instanceWrapper, device, deviceDriver, m_shaderType, m_shaderStage, m_bufferFormat, m_readAccessRange, m_accessOutOfBackingMemory); + return new ReadInstance(context, device, deviceDriver, m_shaderType, m_shaderStage, m_bufferFormat, m_readAccessRange, m_accessOutOfBackingMemory); } void RobustReadTest::initPrograms(SourceCollections& programCollection) const @@ -1359,15 +1354,14 @@ RobustWriteTest::RobustWriteTest (tcu::TestContext& testContext, TestInstance* RobustWriteTest::createInstance (Context& context) const { - std::shared_ptr instanceWrapper(new CustomInstanceWrapper(context)); - auto device = createRobustBufferAccessVariablePointersDevice(context, instanceWrapper->instance, instanceWrapper->instance.getDriver()); + auto device = createRobustBufferAccessVariablePointersDevice(context); #ifndef CTS_USES_VULKANSC - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), instanceWrapper->instance, *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), context.getInstance(), *device)); #else - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), instanceWrapper->instance, *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), context.getInstance(), *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); #endif // CTS_USES_VULKANSC - return new WriteInstance(context, instanceWrapper, device, deviceDriver, m_shaderType, m_shaderStage, m_bufferFormat, m_writeAccessRange, m_accessOutOfBackingMemory); + return new WriteInstance(context, device, deviceDriver, m_shaderType, m_shaderStage, m_bufferFormat, m_writeAccessRange, m_accessOutOfBackingMemory); } void RobustWriteTest::initPrograms(SourceCollections& programCollection) const @@ -1384,7 +1378,6 @@ void RobustWriteTest::initPrograms(SourceCollections& programCollection) const } AccessInstance::AccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -1400,7 +1393,6 @@ AccessInstance::AccessInstance (Context& context, VkDeviceSize outBufferAccessRange, bool accessOutOfBackingMemory) : vkt::TestInstance (context) - , m_instanceWrapper (instanceWrapper) , m_device (device) , m_deviceDriver (deviceDriver) , m_shaderType (shaderType) @@ -1411,9 +1403,11 @@ AccessInstance::AccessInstance (Context& context, { tcu::TestLog& log = context.getTestContext().getLog(); const DeviceInterface& vk = *m_deviceDriver; + const auto& vki = context.getInstanceInterface(); + const auto instance = context.getInstance(); const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex(); - const VkPhysicalDevice physicalDevice = chooseDevice(instanceWrapper->instance.getDriver(), instanceWrapper->instance, context.getTestContext().getCommandLine()); - SimpleAllocator memAlloc (vk, *m_device, getPhysicalDeviceMemoryProperties(instanceWrapper->instance.getDriver(), physicalDevice)); + const VkPhysicalDevice physicalDevice = chooseDevice(vki, instance, context.getTestContext().getCommandLine()); + SimpleAllocator memAlloc (vk, *m_device, getPhysicalDeviceMemoryProperties(vki, physicalDevice)); DE_ASSERT(RobustAccessWithPointersTest::s_numberOfBytesAccessed % sizeof(deUint32) == 0); DE_ASSERT(inBufferAccessRange <= RobustAccessWithPointersTest::s_numberOfBytesAccessed); @@ -1512,7 +1506,7 @@ AccessInstance::AccessInstance (Context& context, if (m_shaderStage == VK_SHADER_STAGE_COMPUTE_BIT) { - m_testEnvironment = de::MovePtr(new ComputeEnvironment(m_context, m_instanceWrapper->instance, m_instanceWrapper->instance.getDriver(), *m_device, *m_descriptorSetLayout, *m_descriptorSet)); + m_testEnvironment = de::MovePtr(new ComputeEnvironment(m_context, *m_deviceDriver, *m_device, *m_descriptorSetLayout, *m_descriptorSet)); } else { @@ -1553,8 +1547,7 @@ AccessInstance::AccessInstance (Context& context, }; m_testEnvironment = de::MovePtr(new GraphicsEnvironment(m_context, - m_instanceWrapper->instance, - m_instanceWrapper->instance.getDriver(), + *m_deviceDriver, *m_device, *m_descriptorSetLayout, *m_descriptorSet, @@ -1862,7 +1855,6 @@ bool AccessInstance::verifyResult (bool splitAccess) // BufferReadInstance ReadInstance::ReadInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -1876,7 +1868,7 @@ ReadInstance::ReadInstance (Context& context, VkDeviceSize inBufferAccessRange, bool accessOutOfBackingMemory) - : AccessInstance (context, instanceWrapper, device, deviceDriver, shaderType, shaderStage, bufferFormat, + : AccessInstance (context, device, deviceDriver, shaderType, shaderStage, bufferFormat, BUFFER_ACCESS_TYPE_READ_FROM_STORAGE, inBufferAccessRange, RobustAccessWithPointersTest::s_numberOfBytesAccessed, accessOutOfBackingMemory) @@ -1886,7 +1878,6 @@ ReadInstance::ReadInstance (Context& context, // BufferWriteInstance WriteInstance::WriteInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -1899,7 +1890,7 @@ WriteInstance::WriteInstance (Context& context, VkDeviceSize writeBufferAccessRange, bool accessOutOfBackingMemory) - : AccessInstance (context, instanceWrapper, device, deviceDriver, shaderType, shaderStage, bufferFormat, + : AccessInstance (context, device, deviceDriver, shaderType, shaderStage, bufferFormat, BUFFER_ACCESS_TYPE_WRITE_TO_STORAGE, RobustAccessWithPointersTest::s_numberOfBytesAccessed, writeBufferAccessRange, accessOutOfBackingMemory) diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustness1VertexAccessTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustness1VertexAccessTests.cpp index b7978da..93f0502 100644 --- a/external/vulkancts/modules/vulkan/robustness/vktRobustness1VertexAccessTests.cpp +++ b/external/vulkancts/modules/vulkan/robustness/vktRobustness1VertexAccessTests.cpp @@ -802,7 +802,6 @@ class Robustness1AccessInstance : public vkt::TestInstance public: Robustness1AccessInstance (TestContext& testCtx, Context& context, - std::shared_ptr instanceWrapper, T device, DeviceDriverPtr deviceDriver, const Robustness1TestInfo& testInfo); @@ -810,7 +809,6 @@ public: virtual TestStatus iterate() override; private: - std::shared_ptr m_instanceWrapper; TestContext& m_testCtx; T m_device; #ifndef CTS_USES_VULKANSC @@ -824,12 +822,10 @@ private: template Robustness1AccessInstance::Robustness1AccessInstance (TestContext& testCtx, Context& context, - std::shared_ptr instanceWrapper, T device, DeviceDriverPtr deviceDriver, const Robustness1TestInfo& testInfo) : vkt::TestInstance (context) - , m_instanceWrapper (instanceWrapper) , m_testCtx (testCtx) , m_device (device) , m_deviceDriver (deviceDriver) @@ -868,15 +864,14 @@ Robustness1AccessTest::Robustness1AccessTest (TestContext &testContext, const Ro TestInstance *Robustness1AccessTest::createInstance (Context &context) const { - std::shared_ptr instanceWrapper(new CustomInstanceWrapper(context)); - Move device = createRobustBufferAccessDevice(context, instanceWrapper->instance, instanceWrapper->instance.getDriver()); + Move device = createRobustBufferAccessDevice(context); #ifndef CTS_USES_VULKANSC - DeviceDriverPtr deviceDriver = DeviceDriverPtr (new DeviceDriver(context.getPlatformInterface(), instanceWrapper->instance, *device)); + DeviceDriverPtr deviceDriver = DeviceDriverPtr (new DeviceDriver(context.getPlatformInterface(), context.getInstance(), *device)); #else - DeviceDriverPtr deviceDriver = DeviceDriverPtr (new DeviceDriverSC(context.getPlatformInterface(), instanceWrapper->instance, *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter( context.getResourceInterface().get(), *device )); + DeviceDriverPtr deviceDriver = DeviceDriverPtr (new DeviceDriverSC(context.getPlatformInterface(), context.getInstance(), *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter( context.getResourceInterface().get(), *device )); #endif // CTS_USES_VULKANSC - return new Robustness1AccessInstance>(m_testCtx, context, instanceWrapper, device, deviceDriver, m_testInfo); + return new Robustness1AccessInstance>(m_testCtx, context, device, deviceDriver, m_testInfo); } void Robustness1AccessTest::initPrograms (SourceCollections& programCollection) const diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessBufferAccessTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessBufferAccessTests.cpp index a8a43bc..9b18ec0 100644 --- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessBufferAccessTests.cpp +++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessBufferAccessTests.cpp @@ -99,6 +99,10 @@ private: bool readFromStorage); protected: + bool is64BitsTest (void) const; + bool isVertexTest (void) const; + bool isFragmentTest (void) const; + static void initBufferAccessPrograms (SourceCollections& programCollection, VkShaderStageFlags shaderStage, ShaderType shaderType, @@ -163,12 +167,11 @@ class BufferAccessInstance : public vkt::TestInstance { public: BufferAccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC - de::MovePtr deviceDriver, + de::MovePtr deviceDriver, #else - de::MovePtr deviceDriver, + de::MovePtr deviceDriver, #endif // CTS_USES_VULKANSC ShaderType shaderType, VkShaderStageFlags shaderStage, @@ -190,7 +193,6 @@ private: bool isOutBufferValueUnchanged (VkDeviceSize offsetInBytes, VkDeviceSize valueSize); protected: - std::shared_ptr m_instanceWrapper; Move m_device; #ifndef CTS_USES_VULKANSC de::MovePtr m_deviceDriver; @@ -243,7 +245,6 @@ class BufferReadInstance: public BufferAccessInstance { public: BufferReadInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -267,7 +268,6 @@ class BufferWriteInstance: public BufferAccessInstance { public: BufferWriteInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -309,6 +309,15 @@ void RobustBufferAccessTest::checkSupport(Context& context) const { if (context.isDeviceFunctionalitySupported("VK_KHR_portability_subset") && !context.getDeviceFeatures().robustBufferAccess) TCU_THROW(NotSupportedError, "VK_KHR_portability_subset: robustBufferAccess not supported by this implementation"); + + if (is64BitsTest()) + context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_SHADER_INT64); + + if (isVertexTest()) + context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_VERTEX_PIPELINE_STORES_AND_ATOMICS); + + if (isFragmentTest()) + context.requireDeviceCoreFeature(DEVICE_CORE_FEATURE_FRAGMENT_STORES_AND_ATOMICS); } void RobustBufferAccessTest::genBufferShaderAccess (ShaderType shaderType, @@ -520,6 +529,21 @@ void RobustBufferAccessTest::genTexelBufferShaderAccess (VkFormat bufferForma << " }\n"; } +bool RobustBufferAccessTest::is64BitsTest (void) const +{ + return (m_bufferFormat == VK_FORMAT_R64_SINT || m_bufferFormat == VK_FORMAT_R64_UINT); +} + +bool RobustBufferAccessTest::isVertexTest (void) const +{ + return ((m_shaderStage & VK_SHADER_STAGE_VERTEX_BIT) != 0u); +} + +bool RobustBufferAccessTest::isFragmentTest (void) const +{ + return ((m_shaderStage & VK_SHADER_STAGE_FRAGMENT_BIT) != 0u); +} + void RobustBufferAccessTest::initBufferAccessPrograms (SourceCollections& programCollection, VkShaderStageFlags shaderStage, ShaderType shaderType, @@ -664,11 +688,26 @@ void RobustBufferReadTest::initPrograms (SourceCollections& programCollection) c TestInstance* RobustBufferReadTest::createInstance (Context& context) const { - std::shared_ptr instanceWrapper(new CustomInstanceWrapper(context)); - VkPhysicalDeviceFeatures2 features2 = initVulkanStructure(); + const bool is64BitsTest_ = is64BitsTest(); + const bool isVertexTest_ = isVertexTest(); + const bool isFragmentTest_ = isFragmentTest(); + + VkPhysicalDeviceFeatures2 features2 = initVulkanStructure(); + + if (!m_testPipelineRobustness) + features2.features.robustBufferAccess = VK_TRUE; + + if (is64BitsTest_) + features2.features.shaderInt64 = VK_TRUE; + + if (isVertexTest_) + features2.features.vertexPipelineStoresAndAtomics = VK_TRUE; + + if (isFragmentTest_) + features2.features.fragmentStoresAndAtomics = VK_TRUE; #ifndef CTS_USES_VULKANSC - VkPhysicalDevicePipelineRobustnessFeaturesEXT pipelineRobustnessFeatures = initVulkanStructure(); + VkPhysicalDevicePipelineRobustnessFeaturesEXT pipelineRobustnessFeatures = initVulkanStructure(); if (m_testPipelineRobustness) { context.requireDeviceFunctionality("VK_EXT_pipeline_robustness"); @@ -680,14 +719,16 @@ TestInstance* RobustBufferReadTest::createInstance (Context& context) const } #endif - Move device = createRobustBufferAccessDevice(context, instanceWrapper->instance, instanceWrapper->instance.getDriver(), m_testPipelineRobustness ? &features2 : DE_NULL); + const bool useFeatures2 = (m_testPipelineRobustness || is64BitsTest_ || isVertexTest_ || isFragmentTest_); + + Move device = createRobustBufferAccessDevice(context, (useFeatures2 ? &features2 : nullptr)); #ifndef CTS_USES_VULKANSC - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), instanceWrapper->instance, *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), context.getInstance(), *device)); #else - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), instanceWrapper->instance, *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter( context.getResourceInterface().get(), *device )); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), context.getInstance(), *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter( context.getResourceInterface().get(), *device )); #endif // CTS_USES_VULKANSC - return new BufferReadInstance(context, instanceWrapper, device, deviceDriver, m_shaderType, m_shaderStage, m_bufferFormat, m_readFromStorage, m_readAccessRange, m_accessOutOfBackingMemory, m_testPipelineRobustness); + return new BufferReadInstance(context, device, deviceDriver, m_shaderType, m_shaderStage, m_bufferFormat, m_readFromStorage, m_readAccessRange, m_accessOutOfBackingMemory, m_testPipelineRobustness); } // RobustBufferWriteTest @@ -715,11 +756,23 @@ void RobustBufferWriteTest::initPrograms (SourceCollections& programCollection) TestInstance* RobustBufferWriteTest::createInstance (Context& context) const { - std::shared_ptr instanceWrapper(new CustomInstanceWrapper(context)); - VkPhysicalDeviceFeatures2 features2 = initVulkanStructure(); + const bool is64BitsTest_ = is64BitsTest(); + const bool isVertexTest_ = isVertexTest(); + const bool isFragmentTest_ = isFragmentTest(); + + VkPhysicalDeviceFeatures2 features2 = initVulkanStructure(); + + if (is64BitsTest_) + features2.features.shaderInt64 = VK_TRUE; + + if (isVertexTest_) + features2.features.vertexPipelineStoresAndAtomics = VK_TRUE; + + if (isFragmentTest_) + features2.features.fragmentStoresAndAtomics = VK_TRUE; #ifndef CTS_USES_VULKANSC - VkPhysicalDevicePipelineRobustnessFeaturesEXT pipelineRobustnessFeatures = initVulkanStructure(); + VkPhysicalDevicePipelineRobustnessFeaturesEXT pipelineRobustnessFeatures = initVulkanStructure(); if (m_testPipelineRobustness) { context.requireDeviceFunctionality("VK_EXT_pipeline_robustness"); @@ -734,20 +787,21 @@ TestInstance* RobustBufferWriteTest::createInstance (Context& context) const } #endif - Move device = createRobustBufferAccessDevice(context, instanceWrapper->instance, instanceWrapper->instance.getDriver(), m_testPipelineRobustness ? &features2 : DE_NULL); + const bool useFeatures2 = (m_testPipelineRobustness || is64BitsTest_ || isVertexTest_ || isFragmentTest_); + + Move device = createRobustBufferAccessDevice(context, (useFeatures2 ? &features2 : nullptr)); #ifndef CTS_USES_VULKANSC - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), instanceWrapper->instance, *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), context.getInstance(), *device)); #else - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), instanceWrapper->instance, *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), context.getInstance(), *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); #endif // CTS_USES_VULKANSC - return new BufferWriteInstance(context, instanceWrapper, device, deviceDriver, m_shaderType, m_shaderStage, m_bufferFormat, m_writeAccessRange, m_accessOutOfBackingMemory, m_testPipelineRobustness); + return new BufferWriteInstance(context, device, deviceDriver, m_shaderType, m_shaderStage, m_bufferFormat, m_writeAccessRange, m_accessOutOfBackingMemory, m_testPipelineRobustness); } // BufferAccessInstance BufferAccessInstance::BufferAccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -763,7 +817,6 @@ BufferAccessInstance::BufferAccessInstance (Context& context, bool accessOutOfBackingMemory, bool testPipelineRobustness) : vkt::TestInstance (context) - , m_instanceWrapper (instanceWrapper) , m_device (device) , m_deviceDriver (deviceDriver) , m_shaderType (shaderType) @@ -776,11 +829,13 @@ BufferAccessInstance::BufferAccessInstance (Context& context, , m_testPipelineRobustness (testPipelineRobustness) { const DeviceInterface& vk = *m_deviceDriver; + const auto& vki = context.getInstanceInterface(); + const auto instance = context.getInstance(); const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex(); const bool isTexelAccess = !!(m_shaderType == SHADER_TYPE_TEXEL_COPY); const bool readFromStorage = !!(m_bufferAccessType == BUFFER_ACCESS_TYPE_READ_FROM_STORAGE); - const VkPhysicalDevice physicalDevice = chooseDevice(instanceWrapper->instance.getDriver(), instanceWrapper->instance, context.getTestContext().getCommandLine()); - SimpleAllocator memAlloc (vk, *m_device, getPhysicalDeviceMemoryProperties(instanceWrapper->instance.getDriver(), physicalDevice)); + const VkPhysicalDevice physicalDevice = chooseDevice(vki, instance, context.getTestContext().getCommandLine()); + SimpleAllocator memAlloc (vk, *m_device, getPhysicalDeviceMemoryProperties(vki, physicalDevice)); tcu::TestLog& log = m_context.getTestContext().getLog(); DE_ASSERT(RobustBufferAccessTest::s_numberOfBytesAccessed % sizeof(deUint32) == 0); @@ -811,7 +866,7 @@ BufferAccessInstance::BufferAccessInstance (Context& context, // Check format support { VkFormatFeatureFlags requiredFormatFeatures = 0; - const VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(instanceWrapper->instance.getDriver(), physicalDevice, m_bufferFormat); + const VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(vki, physicalDevice, m_bufferFormat); if (isTexelAccess) { @@ -1066,7 +1121,7 @@ BufferAccessInstance::BufferAccessInstance (Context& context, if (m_shaderStage == VK_SHADER_STAGE_COMPUTE_BIT) { - m_testEnvironment = de::MovePtr(new ComputeEnvironment(m_context, m_instanceWrapper->instance, m_instanceWrapper->instance.getDriver(), *m_device, *m_descriptorSetLayout, *m_descriptorSet, m_testPipelineRobustness)); + m_testEnvironment = de::MovePtr(new ComputeEnvironment(m_context, *m_deviceDriver, *m_device, *m_descriptorSetLayout, *m_descriptorSet, m_testPipelineRobustness)); } else { @@ -1131,8 +1186,7 @@ BufferAccessInstance::BufferAccessInstance (Context& context, }; m_testEnvironment = de::MovePtr(new GraphicsEnvironment(m_context, - m_instanceWrapper->instance, - m_instanceWrapper->instance.getDriver(), + *m_deviceDriver, *m_device, *m_descriptorSetLayout, *m_descriptorSet, @@ -1436,7 +1490,6 @@ bool BufferAccessInstance::verifyResult (void) // BufferReadInstance BufferReadInstance::BufferReadInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -1451,7 +1504,7 @@ BufferReadInstance::BufferReadInstance (Context& context, bool accessOutOfBackingMemory, bool testPipelineRobustness) - : BufferAccessInstance (context, instanceWrapper, device, deviceDriver, shaderType, shaderStage, bufferFormat, + : BufferAccessInstance (context, device, deviceDriver, shaderType, shaderStage, bufferFormat, readFromStorage ? BUFFER_ACCESS_TYPE_READ_FROM_STORAGE : BUFFER_ACCESS_TYPE_READ, inBufferAccessRange, RobustBufferAccessTest::s_numberOfBytesAccessed, // outBufferAccessRange @@ -1463,7 +1516,6 @@ BufferReadInstance::BufferReadInstance (Context& context, // BufferWriteInstance BufferWriteInstance::BufferWriteInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -1477,7 +1529,7 @@ BufferWriteInstance::BufferWriteInstance (Context& context, bool accessOutOfBackingMemory, bool testPipelineRobustness) - : BufferAccessInstance (context, instanceWrapper, device, deviceDriver, shaderType, shaderStage, bufferFormat, + : BufferAccessInstance (context, device, deviceDriver, shaderType, shaderStage, bufferFormat, BUFFER_ACCESS_TYPE_WRITE, RobustBufferAccessTest::s_numberOfBytesAccessed, // inBufferAccessRange writeBufferAccessRange, diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp index a3f2fb6..cbb4e46 100644 --- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp +++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessExtsTests.cpp @@ -80,7 +80,8 @@ template class SingletonDevice { SingletonDevice (Context& context) - : m_context(context), m_instanceWrapper(new CustomInstanceWrapper(context, context.getInstanceExtensions())), m_logicalDevice() + : m_context(context) + , m_logicalDevice() { // Note we are already checking the needed features are available in checkSupport(). VkPhysicalDeviceRobustness2FeaturesEXT robustness2Features = initVulkanStructure(); @@ -135,14 +136,17 @@ class SingletonDevice features2.pNext = &shaderImageAtomicInt64Features; } - const VkPhysicalDevice physicalDevice = chooseDevice(m_instanceWrapper->instance.getDriver(), m_instanceWrapper->instance, context.getTestContext().getCommandLine()); - m_instanceWrapper->instance.getDriver().getPhysicalDeviceFeatures2(physicalDevice, &features2); - m_logicalDevice = createRobustBufferAccessDevice(context, m_instanceWrapper->instance, m_instanceWrapper->instance.getDriver(), &features2); + const auto& vki = m_context.getInstanceInterface(); + const auto instance = m_context.getInstance(); + const auto physicalDevice = chooseDevice(vki, instance, context.getTestContext().getCommandLine()); + + vki.getPhysicalDeviceFeatures2(physicalDevice, &features2); + m_logicalDevice = createRobustBufferAccessDevice(context, &features2); #ifndef CTS_USES_VULKANSC - m_deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), m_instanceWrapper->instance, *m_logicalDevice)); + m_deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), instance, *m_logicalDevice)); #else - m_deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), m_instanceWrapper->instance, *m_logicalDevice, context.getTestContext().getCommandLine(), context.getResourceInterface(), m_context.getDeviceVulkanSC10Properties(), m_context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *m_logicalDevice)); + m_deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), instance, *m_logicalDevice, context.getTestContext().getCommandLine(), context.getResourceInterface(), m_context.getDeviceVulkanSC10Properties(), m_context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *m_logicalDevice)); #endif // CTS_USES_VULKANSC } @@ -150,20 +154,6 @@ public: ~SingletonDevice() { } - static VkInstance getInstance(Context& context) - { - if (!m_singletonDevice) - m_singletonDevice = SharedPtr(new SingletonDevice(context)); - DE_ASSERT(m_singletonDevice); - return m_singletonDevice->m_instanceWrapper->instance; - } - static const InstanceInterface& getInstanceInterface(Context& context) - { - if (!m_singletonDevice) - m_singletonDevice = SharedPtr(new SingletonDevice(context)); - DE_ASSERT(m_singletonDevice); - return m_singletonDevice->m_instanceWrapper->instance.getDriver(); - } static VkDevice getDevice(Context& context) { @@ -187,7 +177,6 @@ public: private: const Context& m_context; - std::shared_ptr m_instanceWrapper; Move m_logicalDevice; #ifndef CTS_USES_VULKANSC de::MovePtr m_deviceDriver; @@ -300,64 +289,6 @@ static bool formatIsR64(const VkFormat& f) } // Returns the appropriate singleton device for the given case. -VkInstance getInstance(Context& ctx, const CaseDef& caseDef) -{ - if (caseDef.needsScalarBlockLayout()) - { - if (formatIsR64(caseDef.format)) - { - if (caseDef.testRobustness2) - return Robustness2Int64AtomicsScalarSingleton::getInstance(ctx); - return ImageRobustnessInt64AtomicsScalarSingleton::getInstance(ctx); - } - - if (caseDef.testRobustness2) - return Robustness2ScalarSingleton::getInstance(ctx); - return ImageRobustnessScalarSingleton::getInstance(ctx); - } - - if (formatIsR64(caseDef.format)) - { - if (caseDef.testRobustness2) - return Robustness2Int64AtomicsSingleton::getInstance(ctx); - return ImageRobustnessInt64AtomicsSingleton::getInstance(ctx); - } - - if (caseDef.testRobustness2) - return Robustness2Singleton::getInstance(ctx); - return ImageRobustnessSingleton::getInstance(ctx); -} - -// Returns the appropriate singleton device driver for the given case. -const InstanceInterface& getInstanceInterface(Context& ctx, const CaseDef& caseDef) -{ - if (caseDef.needsScalarBlockLayout()) - { - if (formatIsR64(caseDef.format)) - { - if (caseDef.testRobustness2) - return Robustness2Int64AtomicsScalarSingleton::getInstanceInterface(ctx); - return ImageRobustnessInt64AtomicsScalarSingleton::getInstanceInterface(ctx); - } - - if (caseDef.testRobustness2) - return Robustness2ScalarSingleton::getInstanceInterface(ctx); - return ImageRobustnessScalarSingleton::getInstanceInterface(ctx); - } - - if (formatIsR64(caseDef.format)) - { - if (caseDef.testRobustness2) - return Robustness2Int64AtomicsSingleton::getInstanceInterface(ctx); - return ImageRobustnessInt64AtomicsSingleton::getInstanceInterface(ctx); - } - - if (caseDef.testRobustness2) - return Robustness2Singleton::getInstanceInterface(ctx); - return ImageRobustnessSingleton::getInstanceInterface(ctx); -} - -// Returns the appropriate singleton device for the given case. VkDevice getLogicalDevice (Context& ctx, const CaseDef& caseDef) { if (caseDef.needsScalarBlockLayout()) @@ -1868,8 +1799,8 @@ TestInstance* RobustnessExtsTestCase::createInstance (Context& context) const tcu::TestStatus RobustnessExtsTestInstance::iterate (void) { - const VkInstance instance = getInstance(m_context, m_data); - const InstanceInterface& vki = getInstanceInterface(m_context, m_data); + const VkInstance instance = m_context.getInstance(); + const InstanceInterface& vki = m_context.getInstanceInterface(); const VkDevice device = getLogicalDevice(m_context, m_data); const vk::DeviceInterface& vk = getDeviceInterface(m_context, m_data); const VkPhysicalDevice physicalDevice = chooseDevice(vki, instance, m_context.getTestContext().getCommandLine()); diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.cpp index 318b338..bbede5b 100644 --- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.cpp +++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.cpp @@ -66,7 +66,7 @@ vector removeExtensions (const vector& a, const vector createRobustBufferAccessDevice (Context& context, VkInstance instance, const InstanceInterface& vki, const VkPhysicalDeviceFeatures2* enabledFeatures2) +Move createRobustBufferAccessDevice (Context& context, const VkPhysicalDeviceFeatures2* enabledFeatures2) { const float queuePriority = 1.0f; @@ -148,7 +148,12 @@ Move createRobustBufferAccessDevice (Context& context, VkInstance inst enabledFeatures2 ? NULL : &enabledFeatures // const VkPhysicalDeviceFeatures* pEnabledFeatures; }; - const VkPhysicalDevice physicalDevice = chooseDevice(vki, instance, context.getTestContext().getCommandLine()); + // We are creating a custom device with a potentially large amount of extensions and features enabled, using the default device + // as a reference. Some implementations may only enable certain device extensions if some instance extensions are enabled, so in + // this case it's important to reuse the context instance when creating the device. + const auto& vki = context.getInstanceInterface(); + const auto instance = context.getInstance(); + const auto physicalDevice = chooseDevice(vki, instance, context.getTestContext().getCommandLine()); return createCustomDevice(context.getTestContext().getCommandLine().isValidationEnabled(), context.getPlatformInterface(), instance, vki, physicalDevice, &deviceParams); @@ -304,20 +309,15 @@ void logValue (std::ostringstream& logMsg, const void* valuePtr, VkFormat valueF // TestEnvironment TestEnvironment::TestEnvironment (Context& context, - VkInstance instance, - const InstanceInterface& instanceInterface, + const DeviceInterface& vk, VkDevice device, VkDescriptorSetLayout descriptorSetLayout, VkDescriptorSet descriptorSet) : m_context (context) - , m_instance (instance) - , m_instanceInterface (instanceInterface) , m_device (device) , m_descriptorSetLayout (descriptorSetLayout) , m_descriptorSet (descriptorSet) { - const DeviceInterface& vk = context.getDeviceInterface(); - // Create command pool { const VkCommandPoolCreateInfo commandPoolParams = @@ -354,8 +354,7 @@ VkCommandBuffer TestEnvironment::getCommandBuffer (void) // GraphicsEnvironment GraphicsEnvironment::GraphicsEnvironment (Context& context, - VkInstance instance, - const InstanceInterface& instanceInterface, + const DeviceInterface& vk, VkDevice device, VkDescriptorSetLayout descriptorSetLayout, VkDescriptorSet descriptorSet, @@ -364,15 +363,16 @@ GraphicsEnvironment::GraphicsEnvironment (Context& context, const DrawConfig& drawConfig, bool testPipelineRobustness) - : TestEnvironment (context, instance, instanceInterface, device, descriptorSetLayout, descriptorSet) + : TestEnvironment (context, vk, device, descriptorSetLayout, descriptorSet) , m_renderSize (16, 16) , m_colorFormat (VK_FORMAT_R8G8B8A8_UNORM) { - const DeviceInterface& vk = context.getDeviceInterface(); + const auto& vki = context.getInstanceInterface(); + const auto instance = context.getInstance(); const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex(); const VkComponentMapping componentMappingRGBA = { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A }; - const VkPhysicalDevice physicalDevice = chooseDevice(m_instanceInterface, instance, context.getTestContext().getCommandLine()); - SimpleAllocator memAlloc (vk, m_device, getPhysicalDeviceMemoryProperties(m_instanceInterface, physicalDevice)); + const VkPhysicalDevice physicalDevice = chooseDevice(vki, instance, context.getTestContext().getCommandLine()); + SimpleAllocator memAlloc (vk, m_device, getPhysicalDeviceMemoryProperties(vki, physicalDevice)); // Create color image and view { @@ -562,17 +562,14 @@ GraphicsEnvironment::GraphicsEnvironment (Context& context, // ComputeEnvironment ComputeEnvironment::ComputeEnvironment (Context& context, - VkInstance instance, - const InstanceInterface& instanceInterface, + const DeviceInterface& vk, VkDevice device, VkDescriptorSetLayout descriptorSetLayout, VkDescriptorSet descriptorSet, bool testPipelineRobustness) - : TestEnvironment (context, instance, instanceInterface, device, descriptorSetLayout, descriptorSet) + : TestEnvironment (context, vk, device, descriptorSetLayout, descriptorSet) { - const DeviceInterface& vk = context.getDeviceInterface(); - // Create pipeline layout { const VkPipelineLayoutCreateInfo pipelineLayoutParams = diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.hpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.hpp index 1da6504..4127dab 100644 --- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.hpp +++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessUtil.hpp @@ -31,14 +31,13 @@ #include "vkMemUtil.hpp" #include "deUniquePtr.hpp" #include "tcuVectorUtil.hpp" -#include "vktCustomInstancesDevices.hpp" namespace vkt { namespace robustness { -vk::Move createRobustBufferAccessDevice (Context& context, vk::VkInstance instance, const vk::InstanceInterface& vki, const vk::VkPhysicalDeviceFeatures2* enabledFeatures2 = DE_NULL); +vk::Move createRobustBufferAccessDevice (Context& context, const vk::VkPhysicalDeviceFeatures2* enabledFeatures2 = DE_NULL); bool areEqual (float a, float b); bool isValueZero (const void* valuePtr, size_t valueSize); bool isValueWithinBuffer (const void* buffer, vk::VkDeviceSize bufferSize, const void* valuePtr, size_t valueSizeInBytes); @@ -51,8 +50,7 @@ class TestEnvironment { public: TestEnvironment (Context& context, - vk::VkInstance instance, - const vk::InstanceInterface& instanceInterface, + const vk::DeviceInterface& vk, vk::VkDevice device, vk::VkDescriptorSetLayout descriptorSetLayout, vk::VkDescriptorSet descriptorSet); @@ -63,8 +61,6 @@ public: protected: Context& m_context; - vk::VkInstance m_instance; - const vk::InstanceInterface& m_instanceInterface; vk::VkDevice m_device; vk::VkDescriptorSetLayout m_descriptorSetLayout; vk::VkDescriptorSet m_descriptorSet; @@ -90,8 +86,7 @@ public: }; GraphicsEnvironment (Context& context, - vk::VkInstance instance, - const vk::InstanceInterface& instanceInterface, + const vk::DeviceInterface& vk, vk::VkDevice device, vk::VkDescriptorSetLayout descriptorSetLayout, vk::VkDescriptorSet descriptorSet, @@ -126,8 +121,7 @@ class ComputeEnvironment: public TestEnvironment { public: ComputeEnvironment (Context& context, - vk::VkInstance instance, - const vk::InstanceInterface& instanceInterface, + const vk::DeviceInterface& vk, vk::VkDevice device, vk::VkDescriptorSetLayout descriptorSetLayout, vk::VkDescriptorSet descriptorSet, diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp index d0ea302..af91e27 100644 --- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp +++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp @@ -125,12 +125,11 @@ class VertexAccessInstance : public vkt::TestInstance { public: VertexAccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC - de::MovePtr deviceDriver, + de::MovePtr deviceDriver, #else - de::MovePtr deviceDriver, + de::MovePtr deviceDriver, #endif // CTS_USES_VULKANSC VkFormat inputFormat, deUint32 numVertexValues, @@ -153,7 +152,6 @@ protected: virtual void initVertexIds (deUint32 *indicesPtr, size_t indexCount) = 0; virtual deUint32 getIndex (deUint32 vertexNum) const = 0; - std::shared_ptr m_instanceWrapper; Move m_device; #ifndef CTS_USES_VULKANSC de::MovePtr m_deviceDriver; @@ -206,7 +204,6 @@ class DrawAccessInstance : public VertexAccessInstance { public: DrawAccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -230,7 +227,6 @@ class DrawIndexedAccessInstance : public VertexAccessInstance { public: DrawIndexedAccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -402,16 +398,14 @@ DrawAccessTest::DrawAccessTest (tcu::TestContext& testContext, TestInstance* DrawAccessTest::createInstance (Context& context) const { - std::shared_ptr instanceWrapper(new CustomInstanceWrapper(context)); - Move device = createRobustBufferAccessDevice(context, instanceWrapper->instance, instanceWrapper->instance.getDriver()); + Move device = createRobustBufferAccessDevice(context); #ifndef CTS_USES_VULKANSC - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), instanceWrapper->instance, *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), context.getInstance(), *device)); #else - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), instanceWrapper->instance, *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), context.getInstance(), *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); #endif // CTS_USES_VULKANSC return new DrawAccessInstance(context, - instanceWrapper, device, deviceDriver, m_inputFormat, @@ -463,16 +457,14 @@ DrawIndexedAccessTest::DrawIndexedAccessTest (tcu::TestContext& testContext, TestInstance* DrawIndexedAccessTest::createInstance (Context& context) const { - std::shared_ptr instanceWrapper(new CustomInstanceWrapper(context)); - Move device = createRobustBufferAccessDevice(context, instanceWrapper->instance, instanceWrapper->instance.getDriver()); + Move device = createRobustBufferAccessDevice(context); #ifndef CTS_USES_VULKANSC - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), instanceWrapper->instance, *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriver(context.getPlatformInterface(), context.getInstance(), *device)); #else - de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), instanceWrapper->instance, *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); + de::MovePtr deviceDriver = de::MovePtr(new DeviceDriverSC(context.getPlatformInterface(), context.getInstance(), *device, context.getTestContext().getCommandLine(), context.getResourceInterface(), context.getDeviceVulkanSC10Properties(), context.getDeviceProperties()), vk::DeinitDeviceDeleter(context.getResourceInterface().get(), *device)); #endif // CTS_USES_VULKANSC return new DrawIndexedAccessInstance(context, - instanceWrapper, device, deviceDriver, m_inputFormat, @@ -486,7 +478,6 @@ TestInstance* DrawIndexedAccessTest::createInstance (Context& context) const // VertexAccessInstance VertexAccessInstance::VertexAccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -501,7 +492,6 @@ VertexAccessInstance::VertexAccessInstance (Context& context, const std::vector& indices) : vkt::TestInstance (context) - , m_instanceWrapper (instanceWrapper) , m_device (device) , m_deviceDriver (deviceDriver) , m_inputFormat (inputFormat) @@ -512,8 +502,9 @@ VertexAccessInstance::VertexAccessInstance (Context& context, { const DeviceInterface& vk = *m_deviceDriver; const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex(); - const VkPhysicalDevice physicalDevice = chooseDevice(instanceWrapper->instance.getDriver(), instanceWrapper->instance, context.getTestContext().getCommandLine()); - SimpleAllocator memAlloc (vk, *m_device, getPhysicalDeviceMemoryProperties(instanceWrapper->instance.getDriver(), physicalDevice)); + const auto& vki = context.getInstanceInterface(); + const VkPhysicalDevice physicalDevice = chooseDevice(vki, context.getInstance(), context.getTestContext().getCommandLine()); + SimpleAllocator memAlloc (vk, *m_device, getPhysicalDeviceMemoryProperties(vki, physicalDevice)); const deUint32 formatSizeInBytes = tcu::getPixelSize(mapVkFormat(m_inputFormat)); // Check storage support @@ -524,7 +515,7 @@ VertexAccessInstance::VertexAccessInstance (Context& context, if (m_inputFormat == VK_FORMAT_R64_UINT || m_inputFormat == VK_FORMAT_R64_SINT) { - const VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(instanceWrapper->instance.getDriver(), physicalDevice, m_inputFormat); + const VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(vki, physicalDevice, m_inputFormat); context.requireDeviceFunctionality("VK_EXT_shader_image_atomic_int64"); if ((formatProperties.optimalTilingFeatures & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT) != VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT) @@ -775,8 +766,7 @@ VertexAccessInstance::VertexAccessInstance (Context& context, drawConfig.indexCount = (deUint32)(m_indexBufferSize / sizeof(deUint32)); m_graphicsTestEnvironment = de::MovePtr(new GraphicsEnvironment(m_context, - m_instanceWrapper->instance, - m_instanceWrapper->instance.getDriver(), + *m_deviceDriver, *m_device, *m_descriptorSetLayout, *m_descriptorSet, @@ -1097,7 +1087,6 @@ VkDeviceSize VertexAccessInstance::getBufferSizeInBytes (deUint32 numScalars, Vk // DrawAccessInstance DrawAccessInstance::DrawAccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -1110,7 +1099,6 @@ DrawAccessInstance::DrawAccessInstance (Context& context, deUint32 numVertices, deUint32 numInstances) : VertexAccessInstance (context, - instanceWrapper, device, deviceDriver, inputFormat, @@ -1136,7 +1124,6 @@ deUint32 DrawAccessInstance::getIndex (deUint32 vertexNum) const // DrawIndexedAccessInstance DrawIndexedAccessInstance::DrawIndexedAccessInstance (Context& context, - std::shared_ptr instanceWrapper, Move device, #ifndef CTS_USES_VULKANSC de::MovePtr deviceDriver, @@ -1150,7 +1137,6 @@ DrawIndexedAccessInstance::DrawIndexedAccessInstance (Context& context, deUint32 numInstances, const std::vector& indices) : VertexAccessInstance (context, - instanceWrapper, device, deviceDriver, inputFormat, -- 2.7.4