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;