From 92e363d550094222676f746085fca1d39be8e5a5 Mon Sep 17 00:00:00 2001 From: Arkadiusz Sarwa Date: Fri, 8 Sep 2017 12:02:27 +0200 Subject: [PATCH] Fix possibility of memory leak in subgroups tests Components: Vulkan Affects: dEQP-VK.subgroups* VK-GL-CTS issue: 680 Change-Id: I43257ca6eb8593e4a513e894661282878bb2e6b9 (cherry picked from commit d8011612085c79783e807b11d53efa2d4e7d13ee) --- .../vulkan/subgroups/vktSubgroupsTestsUtils.cpp | 86 +++++++--------------- 1 file changed, 28 insertions(+), 58 deletions(-) diff --git a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp index 977052c..3cecdf0 100644 --- a/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp +++ b/external/vulkancts/modules/vulkan/subgroups/vktSubgroupsTestsUtils.cpp @@ -1013,26 +1013,26 @@ tcu::TestStatus vkt::subgroups::makeTessellationEvaluationTest( createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("tese"), 0u)); - std::vector inputBuffers(extraDatasCount + 1); + std::vector< de::SharedPtr > inputBuffers(extraDatasCount + 1); // The implicit result SSBO we use to store our outputs from the shader { vk::VkDeviceSize size = getFormatSizeInBytes(format) * maxWidth * 2; - inputBuffers[0] = new Buffer(context, size); + inputBuffers[0] = de::SharedPtr(new Buffer(context, size)); } for (deUint32 i = 0; i < (inputBuffers.size() - 1); i++) { if (extraDatas[i].isImage) { - inputBuffers[i + 1] = new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format); + inputBuffers[i + 1] = de::SharedPtr(new Image(context, + static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); } else { vk::VkDeviceSize size = getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i + 1] = new Buffer(context, size); + inputBuffers[i + 1] = de::SharedPtr(new Buffer(context, size)); } const Allocation& alloc = inputBuffers[i + 1]->getAllocation(); @@ -1193,11 +1193,6 @@ tcu::TestStatus vkt::subgroups::makeTessellationEvaluationTest( context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); } - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - delete inputBuffers[i]; - } - if (0 < failedIterations) { context.getTestContext().getLog() @@ -1226,26 +1221,26 @@ tcu::TestStatus vkt::subgroups::makeTessellationControlTest( createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("tese"), 0u)); - std::vector inputBuffers(extraDatasCount + 1); + std::vector< de::SharedPtr > inputBuffers(extraDatasCount + 1); // The implicit result SSBO we use to store our outputs from the vertex shader { vk::VkDeviceSize size = getFormatSizeInBytes(format) * maxWidth; - inputBuffers[0] = new Buffer(context, size); + inputBuffers[0] = de::SharedPtr(new Buffer(context, size)); } for (deUint32 i = 0; i < (inputBuffers.size() - 1); i++) { if (extraDatas[i].isImage) { - inputBuffers[i + 1] = new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format); + inputBuffers[i + 1] = de::SharedPtr(new Image(context, + static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); } else { vk::VkDeviceSize size = getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i + 1] = new Buffer(context, size); + inputBuffers[i + 1] = de::SharedPtr(new Buffer(context, size)); } const Allocation& alloc = inputBuffers[i + 1]->getAllocation(); @@ -1406,11 +1401,6 @@ tcu::TestStatus vkt::subgroups::makeTessellationControlTest( context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); } - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - delete inputBuffers[i]; - } - if (0 < failedIterations) { context.getTestContext().getLog() @@ -1436,26 +1426,26 @@ tcu::TestStatus vkt::subgroups::makeGeometryTest( createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("geom"), 0u)); - std::vector inputBuffers(extraDatasCount + 1); + std::vector< de::SharedPtr > inputBuffers(extraDatasCount + 1); // The implicit result SSBO we use to store our outputs from the vertex shader { vk::VkDeviceSize size = getFormatSizeInBytes(format) * maxWidth; - inputBuffers[0] = new Buffer(context, size); + inputBuffers[0] = de::SharedPtr(new Buffer(context, size)); } for (deUint32 i = 0; i < (inputBuffers.size() - 1); i++) { if (extraDatas[i].isImage) { - inputBuffers[i + 1] = new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format); + inputBuffers[i + 1] = de::SharedPtr(new Image(context, + static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); } else { vk::VkDeviceSize size = getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i + 1] = new Buffer(context, size); + inputBuffers[i + 1] = de::SharedPtr(new Buffer(context, size)); } const Allocation& alloc = inputBuffers[i + 1]->getAllocation(); @@ -1616,11 +1606,6 @@ tcu::TestStatus vkt::subgroups::makeGeometryTest( context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); } - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - delete inputBuffers[i]; - } - if (0 < failedIterations) { context.getTestContext().getLog() @@ -1643,26 +1628,26 @@ tcu::TestStatus vkt::subgroups::makeVertexTest( createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("vert"), 0u)); - std::vector inputBuffers(extraDatasCount + 1); + std::vector< de::SharedPtr > inputBuffers(extraDatasCount + 1); // The implicit result SSBO we use to store our outputs from the vertex shader { vk::VkDeviceSize size = getFormatSizeInBytes(format) * maxWidth; - inputBuffers[0] = new Buffer(context, size); + inputBuffers[0] = de::SharedPtr(new Buffer(context, size)); } for (deUint32 i = 0; i < (inputBuffers.size() - 1); i++) { if (extraDatas[i].isImage) { - inputBuffers[i + 1] = new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format); + inputBuffers[i + 1] = de::SharedPtr(new Image(context, + static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); } else { vk::VkDeviceSize size = getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i + 1] = new Buffer(context, size); + inputBuffers[i + 1] = de::SharedPtr(new Buffer(context, size)); } const Allocation& alloc = inputBuffers[i + 1]->getAllocation(); @@ -1822,11 +1807,6 @@ tcu::TestStatus vkt::subgroups::makeVertexTest( context.getDeviceInterface().resetCommandBuffer(*cmdBuffer, 0); } - for (deUint32 i = 0; i < inputBuffers.size(); i++) - { - delete inputBuffers[i]; - } - if (0 < failedIterations) { context.getTestContext().getLog() @@ -1851,20 +1831,20 @@ tcu::TestStatus vkt::subgroups::makeFragmentTest( createShaderModule(context.getDeviceInterface(), context.getDevice(), context.getBinaryCollection().get("frag"), 0u)); - std::vector inputBuffers(extraDatasCount); + std::vector< de::SharedPtr > inputBuffers(extraDatasCount); for (deUint32 i = 0; i < extraDatasCount; i++) { if (extraDatas[i].isImage) { - inputBuffers[i] = new Image(context, - static_cast(extraDatas[i].numElements), 1, extraDatas[i].format); + inputBuffers[i] = de::SharedPtr(new Image(context, + static_cast(extraDatas[i].numElements), 1, extraDatas[i].format)); } else { vk::VkDeviceSize size = getFormatSizeInBytes(extraDatas[i].format) * extraDatas[i].numElements; - inputBuffers[i] = new Buffer(context, size); + inputBuffers[i] = de::SharedPtr(new Buffer(context, size)); } const Allocation& alloc = inputBuffers[i]->getAllocation(); @@ -2055,11 +2035,6 @@ tcu::TestStatus vkt::subgroups::makeFragmentTest( } } - for (deUint32 i = 0; i < extraDatasCount; i++) - { - delete inputBuffers[i]; - } - if (0 < failedIterations) { context.getTestContext().getLog() @@ -2087,20 +2062,20 @@ tcu::TestStatus vkt::subgroups::makeComputeTest( Buffer resultBuffer( context, resultBufferSizeInBytes); - std::vector inputBuffers(inputsCount); + std::vector< de::SharedPtr > inputBuffers(inputsCount); for (deUint32 i = 0; i < inputsCount; i++) { if (inputs[i].isImage) { - inputBuffers[i] = new Image(context, - static_cast(inputs[i].numElements), 1, inputs[i].format); + inputBuffers[i] = de::SharedPtr(new Image(context, + static_cast(inputs[i].numElements), 1, inputs[i].format)); } else { vk::VkDeviceSize size = getFormatSizeInBytes(inputs[i].format) * inputs[i].numElements; - inputBuffers[i] = new Buffer(context, size); + inputBuffers[i] = de::SharedPtr(new Buffer(context, size)); } const Allocation& alloc = inputBuffers[i]->getAllocation(); @@ -2286,11 +2261,6 @@ tcu::TestStatus vkt::subgroups::makeComputeTest( lastPipeline = nextPipeline; } - for (deUint32 i = 0; i < inputsCount; i++) - { - delete inputBuffers[i]; - } - if (0 < failedIterations) { context.getTestContext().getLog() -- 2.7.4