From 49e0fed2d19130bc11ad400d6c1eb28d12bcb9c7 Mon Sep 17 00:00:00 2001 From: Maciej Jesionowski Date: Fri, 5 Feb 2016 11:34:18 +0100 Subject: [PATCH] Compute, image: remove DynArray --- .../vktComputeIndirectComputeDispatchTests.cpp | 10 +- .../modules/vulkan/compute/vktComputeTestsUtil.hpp | 25 +--- .../vulkan/image/vktImageLoadStoreTests.cpp | 126 ++++++++++----------- .../modules/vulkan/image/vktImageTestsUtil.hpp | 26 +---- 4 files changed, 73 insertions(+), 114 deletions(-) diff --git a/external/vulkancts/modules/vulkan/compute/vktComputeIndirectComputeDispatchTests.cpp b/external/vulkancts/modules/vulkan/compute/vktComputeIndirectComputeDispatchTests.cpp index 15b361a..0e98b07 100644 --- a/external/vulkancts/modules/vulkan/compute/vktComputeIndirectComputeDispatchTests.cpp +++ b/external/vulkancts/modules/vulkan/compute/vktComputeIndirectComputeDispatchTests.cpp @@ -291,23 +291,25 @@ tcu::TestStatus IndirectDispatchInstanceBufferUpload::iterate (void) m_device_interface.cmdBindPipeline(*cmdBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *computePipeline); // Allocate descriptor sets - DynArray< vk::Move > descriptorSets(m_dispatchCommands.size()); + typedef de::SharedPtr > SharedVkDescriptorSet; + std::vector descriptorSets(m_dispatchCommands.size()); vk::VkDeviceSize curOffset = 0; // Create descriptor sets for (deUint32 cmdNdx = 0; cmdNdx < m_dispatchCommands.size(); ++cmdNdx) { - descriptorSets[cmdNdx] = makeDescriptorSet(m_device_interface, m_device, *descriptorPool, *descriptorSetLayout); + descriptorSets[cmdNdx] = SharedVkDescriptorSet(new vk::Unique( + makeDescriptorSet(m_device_interface, m_device, *descriptorPool, *descriptorSetLayout))); const vk::VkDescriptorBufferInfo resultDescriptorInfo = makeDescriptorBufferInfo(*resultBuffer, curOffset, resultBlockSize); vk::DescriptorSetUpdateBuilder descriptorSetBuilder; - descriptorSetBuilder.writeSingle(*descriptorSets[cmdNdx], vk::DescriptorSetUpdateBuilder::Location::binding(0u), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &resultDescriptorInfo); + descriptorSetBuilder.writeSingle(**descriptorSets[cmdNdx], vk::DescriptorSetUpdateBuilder::Location::binding(0u), vk::VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, &resultDescriptorInfo); descriptorSetBuilder.update(m_device_interface, m_device); // Bind descriptor set - m_device_interface.cmdBindDescriptorSets(*cmdBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &descriptorSets[cmdNdx].get(), 0u, DE_NULL); + m_device_interface.cmdBindDescriptorSets(*cmdBuffer, vk::VK_PIPELINE_BIND_POINT_COMPUTE, *pipelineLayout, 0u, 1u, &(**descriptorSets[cmdNdx]), 0u, DE_NULL); // Dispatch indirect compute command m_device_interface.cmdDispatchIndirect(*cmdBuffer, *indirectBuffer, m_dispatchCommands[cmdNdx].m_offset); diff --git a/external/vulkancts/modules/vulkan/compute/vktComputeTestsUtil.hpp b/external/vulkancts/modules/vulkan/compute/vktComputeTestsUtil.hpp index 6b1ffeb..6601c42 100644 --- a/external/vulkancts/modules/vulkan/compute/vktComputeTestsUtil.hpp +++ b/external/vulkancts/modules/vulkan/compute/vktComputeTestsUtil.hpp @@ -56,8 +56,8 @@ public: const vk::VkBufferCreateInfo& bufferCreateInfo, const vk::MemoryRequirement memoryRequirement); - vk::VkBuffer get (void) const { return *m_buffer; } - vk::VkBuffer operator* (void) const { return get(); } + const vk::VkBuffer& get (void) const { return *m_buffer; } + const vk::VkBuffer& operator* (void) const { return get(); } vk::Allocation& getAllocation (void) const { return *m_allocation; } private: @@ -77,8 +77,8 @@ public: const vk::VkImageCreateInfo& imageCreateInfo, const vk::MemoryRequirement memoryRequirement); - vk::VkImage get (void) const { return *m_image; } - vk::VkImage operator* (void) const { return get(); } + const vk::VkImage& get (void) const { return *m_image; } + const vk::VkImage& operator* (void) const { return get(); } vk::Allocation& getAllocation (void) const { return *m_allocation; } private: @@ -89,23 +89,6 @@ private: Image& operator= (const Image&); }; -template -class DynArray -{ -public: - DynArray (std::size_t size) { data = new T[size]; } - ~DynArray () { delete [] data; } - - T& operator[] (std::size_t idx) { return data[idx]; } - const T& operator[] (std::size_t idx) const { return data[idx]; } - -private: - T* data; - - DynArray (const DynArray&); // "deleted" - DynArray& operator= (const DynArray&); -}; - vk::Move makeCommandPool (const vk::DeviceInterface& vk, const vk::VkDevice device, const deUint32 queueFamilyIndex); diff --git a/external/vulkancts/modules/vulkan/image/vktImageLoadStoreTests.cpp b/external/vulkancts/modules/vulkan/image/vktImageLoadStoreTests.cpp index d7c4bab..71f7857 100644 --- a/external/vulkancts/modules/vulkan/image/vktImageLoadStoreTests.cpp +++ b/external/vulkancts/modules/vulkan/image/vktImageLoadStoreTests.cpp @@ -48,6 +48,7 @@ #include "vkImageUtil.hpp" #include "deUniquePtr.hpp" +#include "deSharedPtr.hpp" #include "deStringUtil.hpp" #include "tcuImageCompare.hpp" @@ -67,6 +68,15 @@ namespace image namespace { +typedef de::SharedPtr > SharedVkDescriptorSet; +typedef de::SharedPtr > SharedVkImageView; + +template +inline de::SharedPtr > makeVkSharedPtr (Move vkMove) +{ + return de::SharedPtr >(new Unique(vkMove)); +} + inline VkImageCreateInfo makeImageCreateInfo (const Texture& texture, const VkFormat format, const VkImageUsageFlags usage, const VkImageCreateFlags flags) { const VkImageCreateInfo imageParams = @@ -664,8 +674,8 @@ protected: const VkDeviceSize m_constantsBufferChunkSizeBytes; Move m_descriptorSetLayout; Move m_descriptorPool; - DynArray > m_allDescriptorSets; - DynArray > m_allImageViews; + std::vector m_allDescriptorSets; + std::vector m_allImageViews; }; ImageStoreTestInstance::ImageStoreTestInstance (Context& context, @@ -731,16 +741,18 @@ VkDescriptorSetLayout ImageStoreTestInstance::prepareDescriptors (void) { for (int layerNdx = 0; layerNdx < numLayers; ++layerNdx) { - m_allDescriptorSets[layerNdx] = makeDescriptorSet(vk, device, *m_descriptorPool, *m_descriptorSetLayout); - m_allImageViews[layerNdx] = makeImageView(vk, device, m_image->get(), mapImageViewType(getImageTypeForSingleLayer(m_texture.type())), m_format, - makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, layerNdx, 1u)); + m_allDescriptorSets[layerNdx] = makeVkSharedPtr(makeDescriptorSet(vk, device, *m_descriptorPool, *m_descriptorSetLayout)); + m_allImageViews[layerNdx] = makeVkSharedPtr(makeImageView( + vk, device, m_image->get(), mapImageViewType(getImageTypeForSingleLayer(m_texture.type())), m_format, + makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, layerNdx, 1u))); } } else // bind all layers at once { - m_allDescriptorSets[0] = makeDescriptorSet(vk, device, *m_descriptorPool, *m_descriptorSetLayout); - m_allImageViews[0] = makeImageView(vk, device, m_image->get(), mapImageViewType(m_texture.type()), m_format, - makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, numLayers)); + m_allDescriptorSets[0] = makeVkSharedPtr(makeDescriptorSet(vk, device, *m_descriptorPool, *m_descriptorSetLayout)); + m_allImageViews[0] = makeVkSharedPtr(makeImageView( + vk, device, m_image->get(), mapImageViewType(m_texture.type()), m_format, + makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, numLayers))); } return *m_descriptorSetLayout; // not passing the ownership @@ -751,8 +763,8 @@ void ImageStoreTestInstance::commandBindDescriptorsForLayer (const VkCommandBuff const DeviceInterface& vk = m_context.getDeviceInterface(); const VkDevice device = m_context.getDevice(); - const VkDescriptorSet descriptorSet = *m_allDescriptorSets[layerNdx]; - const VkImageView imageView = *m_allImageViews[layerNdx]; + const VkDescriptorSet descriptorSet = **m_allDescriptorSets[layerNdx]; + const VkImageView imageView = **m_allImageViews[layerNdx]; const VkDescriptorImageInfo descriptorImageInfo = makeDescriptorImageInfo(DE_NULL, imageView, VK_IMAGE_LAYOUT_GENERAL); @@ -1020,58 +1032,42 @@ tcu::TestStatus LoadStoreTestInstance::verifyResult (void) class ImageLoadStoreTestInstance : public LoadStoreTestInstance { public: - struct PerLayerData - { - PerLayerData (Move descriptorSet, - Move imageViewSrc, - Move imageViewDst); - - const Unique descriptorSet; - const Unique imageViewSrc; - const Unique imageViewDst; - }; - - ImageLoadStoreTestInstance (Context& context, - const Texture& texture, - const VkFormat format, - const VkFormat imageFormat, - const bool singleLayerBind); + ImageLoadStoreTestInstance (Context& context, + const Texture& texture, + const VkFormat format, + const VkFormat imageFormat, + const bool singleLayerBind); protected: - VkDescriptorSetLayout prepareDescriptors (void); - void commandBeforeCompute (const VkCommandBuffer cmdBuffer); - void commandBetweenShaderInvocations (const VkCommandBuffer cmdBuffer); - void commandAfterCompute (const VkCommandBuffer cmdBuffer); + VkDescriptorSetLayout prepareDescriptors (void); + void commandBeforeCompute (const VkCommandBuffer cmdBuffer); + void commandBetweenShaderInvocations (const VkCommandBuffer cmdBuffer); + void commandAfterCompute (const VkCommandBuffer cmdBuffer); - void commandBindDescriptorsForLayer (const VkCommandBuffer cmdBuffer, - const VkPipelineLayout pipelineLayout, - const int layerNdx); + void commandBindDescriptorsForLayer (const VkCommandBuffer cmdBuffer, + const VkPipelineLayout pipelineLayout, + const int layerNdx); - Buffer* getResultBuffer (void) const { return m_imageBuffer.get(); } + Buffer* getResultBuffer (void) const { return m_imageBuffer.get(); } - de::MovePtr m_imageSrc; - de::MovePtr m_imageDst; - Move m_descriptorSetLayout; - Move m_descriptorPool; - DynArray > m_perLayerData; + de::MovePtr m_imageSrc; + de::MovePtr m_imageDst; + Move m_descriptorSetLayout; + Move m_descriptorPool; + std::vector m_allDescriptorSets; + std::vector m_allSrcImageViews; + std::vector m_allDstImageViews; }; -ImageLoadStoreTestInstance::PerLayerData::PerLayerData (Move descriptorSet_, - Move imageViewSrc_, - Move imageViewDst_) - : descriptorSet (descriptorSet_) - , imageViewSrc (imageViewSrc_) - , imageViewDst (imageViewDst_) -{ -} - ImageLoadStoreTestInstance::ImageLoadStoreTestInstance (Context& context, const Texture& texture, const VkFormat format, const VkFormat imageFormat, const bool singleLayerBind) : LoadStoreTestInstance (context, texture, format, imageFormat, singleLayerBind) - , m_perLayerData (texture.numLayers()) + , m_allDescriptorSets (texture.numLayers()) + , m_allSrcImageViews (texture.numLayers()) + , m_allDstImageViews (texture.numLayers()) { const DeviceInterface& vk = m_context.getDeviceInterface(); const VkDevice device = m_context.getDevice(); @@ -1112,12 +1108,9 @@ VkDescriptorSetLayout ImageLoadStoreTestInstance::prepareDescriptors (void) const VkImageViewType viewType = mapImageViewType(getImageTypeForSingleLayer(m_texture.type())); const VkImageSubresourceRange subresourceRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, layerNdx, 1u); - de::MovePtr data(new PerLayerData( - makeDescriptorSet(vk, device, *m_descriptorPool, *m_descriptorSetLayout), - makeImageView(vk, device, m_imageSrc->get(), viewType, m_format, subresourceRange), - makeImageView(vk, device, m_imageDst->get(), viewType, m_format, subresourceRange))); - - m_perLayerData[layerNdx] = data; + m_allDescriptorSets[layerNdx] = makeVkSharedPtr(makeDescriptorSet(vk, device, *m_descriptorPool, *m_descriptorSetLayout)); + m_allSrcImageViews[layerNdx] = makeVkSharedPtr(makeImageView(vk, device, m_imageSrc->get(), viewType, m_format, subresourceRange)); + m_allDstImageViews[layerNdx] = makeVkSharedPtr(makeImageView(vk, device, m_imageDst->get(), viewType, m_format, subresourceRange)); } } else // bind all layers at once @@ -1125,12 +1118,9 @@ VkDescriptorSetLayout ImageLoadStoreTestInstance::prepareDescriptors (void) const VkImageViewType viewType = mapImageViewType(m_texture.type()); const VkImageSubresourceRange subresourceRange = makeImageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT, 0u, 1u, 0u, numLayers); - de::MovePtr data(new PerLayerData( - makeDescriptorSet(vk, device, *m_descriptorPool, *m_descriptorSetLayout), - makeImageView(vk, device, m_imageSrc->get(), viewType, m_format, subresourceRange), - makeImageView(vk, device, m_imageDst->get(), viewType, m_format, subresourceRange))); - - m_perLayerData[0] = data; + m_allDescriptorSets[0] = makeVkSharedPtr(makeDescriptorSet(vk, device, *m_descriptorPool, *m_descriptorSetLayout)); + m_allSrcImageViews[0] = makeVkSharedPtr(makeImageView(vk, device, m_imageSrc->get(), viewType, m_format, subresourceRange)); + m_allDstImageViews[0] = makeVkSharedPtr(makeImageView(vk, device, m_imageDst->get(), viewType, m_format, subresourceRange)); } return *m_descriptorSetLayout; // not passing the ownership @@ -1141,16 +1131,18 @@ void ImageLoadStoreTestInstance::commandBindDescriptorsForLayer (const VkCommand const VkDevice device = m_context.getDevice(); const DeviceInterface& vk = m_context.getDeviceInterface(); - const PerLayerData* data = m_perLayerData[layerNdx].get(); + const VkDescriptorSet descriptorSet = **m_allDescriptorSets[layerNdx]; + const VkImageView srcImageView = **m_allSrcImageViews[layerNdx]; + const VkImageView dstImageView = **m_allDstImageViews[layerNdx]; - const VkDescriptorImageInfo descriptorSrcImageInfo = makeDescriptorImageInfo(DE_NULL, *data->imageViewSrc, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); - const VkDescriptorImageInfo descriptorDstImageInfo = makeDescriptorImageInfo(DE_NULL, *data->imageViewDst, VK_IMAGE_LAYOUT_GENERAL); + const VkDescriptorImageInfo descriptorSrcImageInfo = makeDescriptorImageInfo(DE_NULL, srcImageView, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + const VkDescriptorImageInfo descriptorDstImageInfo = makeDescriptorImageInfo(DE_NULL, dstImageView, VK_IMAGE_LAYOUT_GENERAL); DescriptorSetUpdateBuilder() - .writeSingle(*data->descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorSrcImageInfo) - .writeSingle(*data->descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorDstImageInfo) + .writeSingle(descriptorSet, DescriptorSetUpdateBuilder::Location::binding(0u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorSrcImageInfo) + .writeSingle(descriptorSet, DescriptorSetUpdateBuilder::Location::binding(1u), VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, &descriptorDstImageInfo) .update(vk, device); - vk.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipelineLayout, 0u, 1u, &data->descriptorSet.get(), 0u, DE_NULL); + vk.cmdBindDescriptorSets(cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipelineLayout, 0u, 1u, &descriptorSet, 0u, DE_NULL); } void ImageLoadStoreTestInstance::commandBeforeCompute (const VkCommandBuffer cmdBuffer) diff --git a/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.hpp b/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.hpp index c1e1ceb..05d8237 100644 --- a/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.hpp +++ b/external/vulkancts/modules/vulkan/image/vktImageTestsUtil.hpp @@ -76,8 +76,8 @@ public: const vk::VkBufferCreateInfo& bufferCreateInfo, const vk::MemoryRequirement memoryRequirement); - vk::VkBuffer get (void) const { return *m_buffer; } - vk::VkBuffer operator* (void) const { return get(); } + const vk::VkBuffer& get (void) const { return *m_buffer; } + const vk::VkBuffer& operator* (void) const { return get(); } vk::Allocation& getAllocation (void) const { return *m_allocation; } private: @@ -97,8 +97,8 @@ public: const vk::VkImageCreateInfo& imageCreateInfo, const vk::MemoryRequirement memoryRequirement); - vk::VkImage get (void) const { return *m_image; } - vk::VkImage operator* (void) const { return get(); } + const vk::VkImage& get (void) const { return *m_image; } + const vk::VkImage& operator* (void) const { return get(); } vk::Allocation& getAllocation (void) const { return *m_allocation; } private: @@ -109,24 +109,6 @@ private: Image& operator= (const Image&); }; -//! Dynamic size array, used to hold smart pointers like vk::Move which don't work with std::vector. -template -class DynArray -{ -public: - DynArray (std::size_t size) { data = new T[size]; } - ~DynArray (void) { delete [] data; } - - T& operator[] (std::size_t idx) { return data[idx]; } - const T& operator[] (std::size_t idx) const { return data[idx]; } - -private: - T* data; - - DynArray (const DynArray&); // "deleted" - DynArray& operator= (const DynArray&); -}; - vk::Move makeCommandPool (const vk::DeviceInterface& vk, const vk::VkDevice device, const deUint32 queueFamilyIndex); -- 2.7.4