From fed10ac2196b9f764eb9c365afee4d73dcbf7768 Mon Sep 17 00:00:00 2001 From: Peter Gal Date: Tue, 6 Oct 2015 15:31:51 +0200 Subject: [PATCH] ShaderRenderCase: use safe containers for vertex buffers and allocs --- .../vulkan/shaderrendercase/vktShaderRenderCase.cpp | 18 +++++++++--------- .../vulkan/shaderrendercase/vktShaderRenderCase.hpp | 9 +++++++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.cpp b/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.cpp index 44a995f..232b237 100644 --- a/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.cpp +++ b/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.cpp @@ -400,12 +400,6 @@ ShaderRenderCaseInstance::~ShaderRenderCaseInstance (void) const VkDevice vkDevice = m_context.getDevice(); const DeviceInterface& vk = m_context.getDeviceInterface(); - for (size_t bufferNdx = 0; bufferNdx < m_vertexBuffers.size(); bufferNdx++) - { - VK_CHECK(vk.freeMemory(vkDevice, m_vertexBufferAllocs[bufferNdx]->getMemory())); - VK_CHECK(vk.destroyBuffer(vkDevice, m_vertexBuffers[bufferNdx])); - } - for (size_t uniformNdx = 0; uniformNdx < m_uniformInfos.size(); uniformNdx++) { if (m_uniformInfos[uniformNdx].type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) @@ -574,8 +568,8 @@ void ShaderRenderCaseInstance::addAttribute (deUint32 bindingLocation, vk::VkFor deMemcpy(bufferPtr, dataPtr, inputSize); VK_CHECK(vk.unmapMemory(vkDevice, alloc->getMemory())); - m_vertexBuffers.push_back(buffer.disown()); - m_vertexBufferAllocs.push_back(alloc.release()); + m_vertexBuffers.push_back(VkBufferSp(new vk::Unique(buffer))); + m_vertexBufferAllocs.push_back(AllocationSp(new de::UniquePtr(alloc))); } void ShaderRenderCaseInstance::useAttribute (deUint32 bindingLocation, BaseAttributeType type) @@ -1345,7 +1339,13 @@ void ShaderRenderCaseInstance::render (tcu::Surface& result, const QuadGrid& qua const deUint32 numberOfVertexAttributes = (deUint32)m_vertexBuffers.size(); const std::vector offsets(numberOfVertexAttributes, 0); - vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, numberOfVertexAttributes, &m_vertexBuffers[0], &offsets[0]); + std::vector buffers(numberOfVertexAttributes); + for (size_t i = 0; i < numberOfVertexAttributes; i++) + { + buffers[i] = m_vertexBuffers[i].get()->get(); + } + + vk.cmdBindVertexBuffers(*m_cmdBuffer, 0, numberOfVertexAttributes, &buffers[0], &offsets[0]); vk.cmdDrawIndexed(*m_cmdBuffer, 0, quadGrid.getNumTriangles() * 3, 0, 0, 1); vk.cmdEndRenderPass(*m_cmdBuffer); diff --git a/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.hpp b/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.hpp index 0fb8209..aadccd0 100644 --- a/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.hpp +++ b/external/vulkancts/modules/vulkan/shaderrendercase/vktShaderRenderCase.hpp @@ -39,6 +39,7 @@ #include "tcuSurface.hpp" #include "deMemory.h" +#include "deSharedPtr.hpp" #include "deUniquePtr.hpp" #include "vkDefs.hpp" @@ -466,8 +467,12 @@ private: std::vector m_vertexBindingDescription; std::vector m_vertexattributeDescription; - std::vector m_vertexBuffers; - std::vector m_vertexBufferAllocs; + + typedef de::SharedPtr > VkBufferSp; + std::vector m_vertexBuffers; + + typedef de::SharedPtr > AllocationSp; + std::vector m_vertexBufferAllocs; }; template -- 2.7.4