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;