VkQueue: Embed the sw::Renderer into the vk::Queue.

As we destruct the Queue now, there's no need to have a shared_ptr indirection.

This makes Renderer part of the vk::Queue allocation.

Bug: b/133127573
Change-Id: I9ea0d427752689e73346e0da950144832d908a2e
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31685
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Vulkan/VkQueue.cpp b/src/Vulkan/VkQueue.cpp
index f1ead9a..4f69d74 100644
--- a/src/Vulkan/VkQueue.cpp
+++ b/src/Vulkan/VkQueue.cpp
@@ -74,10 +74,8 @@
 namespace vk
 {
 
-Queue::Queue()
+Queue::Queue() : renderer(sw::OpenGL, true)
 {
-	renderer.reset(new sw::Renderer(sw::OpenGL, true));
-
 	queueThread = std::thread(TaskLoop, this);
 }
 
@@ -129,7 +127,7 @@
 
 		{
 			CommandBuffer::ExecutionState executionState;
-			executionState.renderer = renderer.get();
+			executionState.renderer = &renderer;
 			executionState.events = task.events;
 			for(uint32_t j = 0; j < submitInfo.commandBufferCount; j++)
 			{
@@ -152,7 +150,7 @@
 	{
 		// TODO: fix renderer signaling so that work submitted separately from (but before) a fence
 		// is guaranteed complete by the time the fence signals.
-		renderer->synchronize();
+		renderer.synchronize();
 		task.events->finish();
 	}
 }
diff --git a/src/Vulkan/VkQueue.hpp b/src/Vulkan/VkQueue.hpp
index 4f0d6f8..e32541c 100644
--- a/src/Vulkan/VkQueue.hpp
+++ b/src/Vulkan/VkQueue.hpp
@@ -66,7 +66,7 @@
 	void garbageCollect();
 	void submitQueue(const Task& task);
 
-	std::unique_ptr<sw::Renderer> renderer;
+	sw::Renderer renderer;
 	sw::Chan<Task> pending;
 	sw::Chan<VkSubmitInfo*> toDelete;
 	std::thread queueThread;