From e4c67d2a06bea6684021444d7d9a8901f3e45470 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Wed, 21 Jun 2017 13:14:44 -0400 Subject: [PATCH] defer device creation until after feature checks VK-GL-CTS Issue: 523 Component: Vulkan Affects: dEQP-VK.spirv_assembly.instruction.compute.16bit_storage.* dEQP-VK.spirv_assembly.instruction.graphics.16bit_storage.* Change-Id: Ife678bf4e70f5d312f9276356bc288f7d31f15f8 (cherry picked from commit 545cb418b912430bce80ae69d06f669114b4211e) --- .../spirv_assembly/vktSpvAsmComputeShaderCase.cpp | 22 ++++++++++------------ .../vktSpvAsmGraphicsShaderTestUtil.cpp | 17 ++++++++++------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderCase.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderCase.cpp index d8e4d4e..6d485d5 100644 --- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderCase.cpp +++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmComputeShaderCase.cpp @@ -277,10 +277,6 @@ public: tcu::TestStatus iterate (void); private: - const Unique m_device; - const DeviceDriver m_deviceInterface; - const VkQueue m_queue; - const de::UniquePtr m_allocator; const ComputeShaderSpec& m_shaderSpec; const ComputeTestFeatures m_features; }; @@ -308,10 +304,6 @@ TestInstance* SpvAsmComputeShaderCase::createInstance (Context& ctx) const SpvAsmComputeShaderInstance::SpvAsmComputeShaderInstance (Context& ctx, const ComputeShaderSpec& spec, const ComputeTestFeatures features) : TestInstance (ctx) - , m_device (createDeviceWithExtensions(ctx, ctx.getUniversalQueueFamilyIndex(), ctx.getDeviceExtensions(), spec.extensions)) - , m_deviceInterface (ctx.getInstanceInterface(), *m_device) - , m_queue (getDeviceQueue(m_deviceInterface, *m_device, ctx.getUniversalQueueFamilyIndex(), 0)) - , m_allocator (createAllocator(ctx.getInstanceInterface(), ctx.getPhysicalDevice(), m_deviceInterface, *m_device)) , m_shaderSpec (spec) , m_features (features) { @@ -320,9 +312,6 @@ SpvAsmComputeShaderInstance::SpvAsmComputeShaderInstance (Context& ctx, const Co tcu::TestStatus SpvAsmComputeShaderInstance::iterate (void) { const VkPhysicalDeviceFeatures& features = m_context.getDeviceFeatures(); - const DeviceInterface& vkdi = m_deviceInterface; - const VkDevice& device = *m_device; - Allocator& allocator = *m_allocator; if ((m_features == COMPUTE_TEST_USES_INT16 || m_features == COMPUTE_TEST_USES_INT16_INT64) && !features.shaderInt16) { @@ -345,6 +334,15 @@ tcu::TestStatus SpvAsmComputeShaderInstance::iterate (void) } } + // defer device and resource creation until after feature checks + const Unique vkDevice (createDeviceWithExtensions(m_context, m_context.getUniversalQueueFamilyIndex(), m_context.getDeviceExtensions(), m_shaderSpec.extensions)); + const VkDevice& device = *vkDevice; + const DeviceDriver vkDeviceInterface (m_context.getInstanceInterface(), device); + const DeviceInterface& vkdi = vkDeviceInterface; + const de::UniquePtr vkAllocator (createAllocator(m_context.getInstanceInterface(), m_context.getPhysicalDevice(), vkDeviceInterface, device)); + Allocator& allocator = *vkAllocator; + const VkQueue queue (getDeviceQueue(vkDeviceInterface, device, m_context.getUniversalQueueFamilyIndex(), 0)); + vector inputAllocs; vector outputAllocs; vector inputBuffers; @@ -448,7 +446,7 @@ tcu::TestStatus SpvAsmComputeShaderInstance::iterate (void) (const VkSemaphore*)DE_NULL, }; - VK_CHECK(vkdi.queueSubmit(m_queue, 1, &submitInfo, *cmdCompleteFence)); + VK_CHECK(vkdi.queueSubmit(queue, 1, &submitInfo, *cmdCompleteFence)); VK_CHECK(vkdi.waitForFences(device, 1, &cmdCompleteFence.get(), 0u, infiniteTimeout)); // \note: timeout is failure // Check output. diff --git a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp index 8acc544..cb1f629 100644 --- a/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp +++ b/external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp @@ -2141,12 +2141,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan const VkPhysicalDevice vkPhysicalDevice = context.getPhysicalDevice(); const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex(); // Create a dedicated logic device with required extensions enabled for this test case. - const Unique vkDevice (createDeviceWithExtensions(context, queueFamilyIndex, context.getDeviceExtensions(), instance.requiredDeviceExtensions)); - const DeviceDriver vk (vkInstance, *vkDevice); - const VkQueue queue = getDeviceQueue(vk, *vkDevice, queueFamilyIndex, 0); const tcu::UVec2 renderSize (256, 256); - vector modules; - map moduleByStage; const int testSpecificSeed = 31354125; const int seed = context.getTestContext().getCommandLine().getBaseSeed() ^ testSpecificSeed; bool supportsGeometry = false; @@ -2156,8 +2151,7 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan const deUint32 numResources = static_cast(instance.resources.inputs.size() + instance.resources.outputs.size()); const bool needInterface = !instance.interfaces.empty(); const VkPhysicalDeviceFeatures& features = context.getDeviceFeatures(); - const de::UniquePtr allocatorUptr (createAllocator(vkInstance, vkPhysicalDevice, vk, *vkDevice)); - Allocator& allocator = *allocatorUptr; + supportsGeometry = features.geometryShader == VK_TRUE; supportsTessellation = features.tessellationShader == VK_TRUE; @@ -2198,6 +2192,15 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan TCU_THROW(NotSupportedError, "Requested 16bit storage features not supported"); } + // defer device and other resource creation until after feature checks + const Unique vkDevice (createDeviceWithExtensions(context, queueFamilyIndex, context.getDeviceExtensions(), instance.requiredDeviceExtensions)); + const DeviceDriver vk (vkInstance, *vkDevice); + const VkQueue queue = getDeviceQueue(vk, *vkDevice, queueFamilyIndex, 0); + const de::UniquePtr allocatorUptr (createAllocator(vkInstance, vkPhysicalDevice, vk, *vkDevice)); + Allocator& allocator = *allocatorUptr; + vector modules; + map moduleByStage; + de::Random(seed).shuffle(instance.inputColors, instance.inputColors+4); de::Random(seed).shuffle(instance.outputColors, instance.outputColors+4); const Vec4 vertexData[] = -- 2.7.4