Replaced std::make_unique with std::unique_ptr std::make_unique is C++14, so for strict C++11, we have to use std::unique_ptr. Added a new utility function, CommandBuffer::addCommand, to make this change more readable. Change-Id: Icc62874a107543fa2c0599a338dbc6676047ad77 Reviewed-on: https://swiftshader-review.googlesource.com/c/23548 Tested-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Corentin Wallez <cwallez@google.com> Reviewed-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/Vulkan/VkCommandBuffer.cpp b/src/Vulkan/VkCommandBuffer.cpp index 57f9538..0d766a9 100644 --- a/src/Vulkan/VkCommandBuffer.cpp +++ b/src/Vulkan/VkCommandBuffer.cpp
@@ -353,6 +353,12 @@ return VK_SUCCESS; } +template<typename T, typename... Args> +void CommandBuffer::addCommand(Args&&... args) +{ + commands->push_back(std::unique_ptr<T>(new T(std::forward<Args>(args)...))); +} + void CommandBuffer::beginRenderPass(VkRenderPass renderPass, VkFramebuffer framebuffer, VkRect2D renderArea, uint32_t clearValueCount, const VkClearValue* clearValues, VkSubpassContents contents) { @@ -363,7 +369,7 @@ UNIMPLEMENTED(); } - commands->push_back(std::make_unique<BeginRenderPass>(renderPass, framebuffer, renderArea, clearValueCount, clearValues)); + addCommand<BeginRenderPass>(renderPass, framebuffer, renderArea, clearValueCount, clearValues); } void CommandBuffer::nextSubpass(VkSubpassContents contents) @@ -373,7 +379,7 @@ void CommandBuffer::endRenderPass() { - commands->push_back(std::make_unique<EndRenderPass>()); + addCommand<EndRenderPass>(); } void CommandBuffer::executeCommands(uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers) @@ -398,7 +404,7 @@ uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) { - commands->push_back(std::make_unique<PipelineBarrier>()); + addCommand<PipelineBarrier>(); } void CommandBuffer::bindPipeline(VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) @@ -408,7 +414,7 @@ UNIMPLEMENTED(); } - commands->push_back(std::make_unique<PipelineBind>(pipelineBindPoint, pipeline)); + addCommand<PipelineBind>(pipelineBindPoint, pipeline); } void CommandBuffer::bindVertexBuffers(uint32_t firstBinding, uint32_t bindingCount, @@ -416,7 +422,7 @@ { for(uint32_t i = firstBinding; i < (firstBinding + bindingCount); ++i) { - commands->push_back(std::make_unique<VertexBufferBind>(i, pBuffers[i], pOffsets[i])); + addCommand<VertexBufferBind>(i, pBuffers[i], pOffsets[i]); } } @@ -563,7 +569,7 @@ for(uint32_t i = 0; i < regionCount; i++) { - commands->push_back(std::make_unique<BufferToBufferCopy>(srcBuffer, dstBuffer, pRegions[i])); + addCommand<BufferToBufferCopy>(srcBuffer, dstBuffer, pRegions[i]); } } @@ -578,7 +584,7 @@ for(uint32_t i = 0; i < regionCount; i++) { - commands->push_back(std::make_unique<ImageToImageCopy>(srcImage, dstImage, pRegions[i])); + addCommand<ImageToImageCopy>(srcImage, dstImage, pRegions[i]); } } @@ -593,7 +599,7 @@ for(uint32_t i = 0; i < regionCount; i++) { - commands->push_back(std::make_unique<BlitImage>(srcImage, dstImage, pRegions[i], filter)); + addCommand<BlitImage>(srcImage, dstImage, pRegions[i], filter); } } @@ -604,7 +610,7 @@ for(uint32_t i = 0; i < regionCount; i++) { - commands->push_back(std::make_unique<BufferToImageCopy>(srcBuffer, dstImage, pRegions[i])); + addCommand<BufferToImageCopy>(srcBuffer, dstImage, pRegions[i]); } } @@ -616,7 +622,7 @@ for(uint32_t i = 0; i < regionCount; i++) { - commands->push_back(std::make_unique<ImageToBufferCopy>(srcImage, dstBuffer, pRegions[i])); + addCommand<ImageToBufferCopy>(srcImage, dstBuffer, pRegions[i]); } } @@ -689,7 +695,7 @@ UNIMPLEMENTED(); } - commands->push_back(std::make_unique<Draw>(vertexCount)); + addCommand<Draw>(vertexCount); } void CommandBuffer::drawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
diff --git a/src/Vulkan/VkCommandBuffer.hpp b/src/Vulkan/VkCommandBuffer.hpp index 3a256c4..7e31b61 100644 --- a/src/Vulkan/VkCommandBuffer.hpp +++ b/src/Vulkan/VkCommandBuffer.hpp
@@ -134,6 +134,7 @@ class Command; private: void resetState(); + template<typename T, typename... Args> void addCommand(Args&&... args); enum State { INITIAL, RECORDING, EXECUTABLE, PENDING, INVALID }; State state = INITIAL;