Pass around sw::TaskEvents* instead of vk::Fence*.

Bug: b/133127573
Change-Id: I0ce0164de401524014eb295547b899f24f437e21
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31683
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Device/Renderer.cpp b/src/Device/Renderer.cpp
index c4d4177..cce1724 100644
--- a/src/Device/Renderer.cpp
+++ b/src/Device/Renderer.cpp
@@ -185,7 +185,7 @@
 
 		references = -1;
 
-		fence = nullptr;
+		events = nullptr;
 
 		data = (DrawData*)allocate(sizeof(DrawData));
 		data->constants = &constants;
@@ -299,7 +299,7 @@
 		return false;
 	}
 
-	void Renderer::draw(const sw::Context* context, VkIndexType indexType, unsigned int count, int baseVertex, vk::Fence* fence, bool update)
+	void Renderer::draw(const sw::Context* context, VkIndexType indexType, unsigned int count, int baseVertex, TaskEvents *events, bool update)
 	{
 		if(count == 0) { return; }
 
@@ -403,12 +403,13 @@
 		data->descriptorSets = context->descriptorSets;
 		data->descriptorDynamicOffsets = context->descriptorDynamicOffsets;
 
-		if(fence)
+		if(events)
 		{
-			fence->start();
+			events->start();
 		}
-		ASSERT(!draw->fence);
-		draw->fence = fence;
+
+		ASSERT(!draw->events);
+		draw->events = events;
 
 		for(int i = 0; i < MAX_VERTEX_INPUTS; i++)
 		{
@@ -889,10 +890,10 @@
 				draw.setupRoutine->unbind();
 				draw.pixelRoutine->unbind();
 
-				if(draw.fence)
+				if(draw.events)
 				{
-					draw.fence->finish();
-					draw.fence = nullptr;
+					draw.events->finish();
+					draw.events = nullptr;
 				}
 
 				sync->unlock();
diff --git a/src/Device/Renderer.hpp b/src/Device/Renderer.hpp
index 5b29780..9768b08 100644
--- a/src/Device/Renderer.hpp
+++ b/src/Device/Renderer.hpp
@@ -30,7 +30,6 @@
 namespace vk
 {
 	class DescriptorSet;
-	class Fence;
 	struct Query;
 }
 
@@ -41,6 +40,7 @@
 	class VertexShader;
 	class SwiftConfig;
 	struct Task;
+	class TaskEvents;
 	class Resource;
 	struct Constants;
 
@@ -200,7 +200,7 @@
 
 		bool hasQueryOfType(VkQueryType type) const;
 
-		void draw(const sw::Context* context, VkIndexType indexType, unsigned int count, int baseVertex, vk::Fence* fence, bool update = true);
+		void draw(const sw::Context* context, VkIndexType indexType, unsigned int count, int baseVertex, TaskEvents *events, bool update = true);
 
 		// Viewport & Clipper
 		void setViewport(const VkViewport &viewport);
@@ -333,7 +333,7 @@
 		vk::ImageView *renderTarget[RENDERTARGETS];
 		vk::ImageView *depthBuffer;
 		vk::ImageView *stencilBuffer;
-		vk::Fence* fence;
+		TaskEvents *events;
 
 		std::list<vk::Query*> *queries;
 
diff --git a/src/Vulkan/VkCommandBuffer.cpp b/src/Vulkan/VkCommandBuffer.cpp
index b60fe3e..92f5a6a 100644
--- a/src/Vulkan/VkCommandBuffer.cpp
+++ b/src/Vulkan/VkCommandBuffer.cpp
@@ -601,7 +601,7 @@
 			{
 				const uint32_t primitiveCount = indexBuffer.first;
 				context.indexBuffer = indexBuffer.second;
-				executionState.renderer->draw(&context, executionState.indexType, primitiveCount, vertexOffset, executionState.fence);
+				executionState.renderer->draw(&context, executionState.indexType, primitiveCount, vertexOffset, executionState.events);
 			}
 
 			executionState.renderer->advanceInstanceAttributes(context.input);
diff --git a/src/Vulkan/VkCommandBuffer.hpp b/src/Vulkan/VkCommandBuffer.hpp
index 40ea76f..5e59a79 100644
--- a/src/Vulkan/VkCommandBuffer.hpp
+++ b/src/Vulkan/VkCommandBuffer.hpp
@@ -26,12 +26,12 @@
 {
 	class Context;
 	class Renderer;
+	class TaskEvents;
 }
 
 namespace vk
 {
 
-class Fence;
 class Framebuffer;
 class Pipeline;
 class RenderPass;
@@ -133,7 +133,7 @@
 		};
 
 		sw::Renderer* renderer = nullptr;
-		Fence* fence = nullptr;
+		sw::TaskEvents* events = nullptr;
 		RenderPass* renderPass = nullptr;
 		Framebuffer* renderPassFramebuffer = nullptr;
 		std::array<PipelineState, VK_PIPELINE_BIND_POINT_RANGE_SIZE> pipelineState;
diff --git a/src/Vulkan/VkQueue.cpp b/src/Vulkan/VkQueue.cpp
index de19f0e..73e3602 100644
--- a/src/Vulkan/VkQueue.cpp
+++ b/src/Vulkan/VkQueue.cpp
@@ -102,11 +102,11 @@
 	Task task;
 	task.submitCount = submitCount;
 	task.pSubmits = DeepCopySubmitInfo(submitCount, pSubmits);
-	task.fence = (fence != VK_NULL_HANDLE) ? vk::Cast(fence) : nullptr;
+	task.events = (fence != VK_NULL_HANDLE) ? vk::Cast(fence) : nullptr;
 
-	if(task.fence)
+	if(task.events)
 	{
-		task.fence->start();
+		task.events->start();
 	}
 
 	pending.put(task);
@@ -132,7 +132,7 @@
 		{
 			CommandBuffer::ExecutionState executionState;
 			executionState.renderer = renderer.get();
-			executionState.fence = task.fence;
+			executionState.events = task.events;
 			for(uint32_t j = 0; j < submitInfo.commandBufferCount; j++)
 			{
 				vk::Cast(submitInfo.pCommandBuffers[j])->submit(executionState);
@@ -150,12 +150,12 @@
 		toDelete.put(task.pSubmits);
 	}
 
-	if(task.fence)
+	if(task.events)
 	{
 		// 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();
-		task.fence->finish();
+		task.events->finish();
 	}
 }
 
@@ -187,7 +187,7 @@
 	fence.start();
 
 	Task task;
-	task.fence = &fence;
+	task.events = &fence;
 	pending.put(task);
 
 	fence.wait();
diff --git a/src/Vulkan/VkQueue.hpp b/src/Vulkan/VkQueue.hpp
index 2fdb552..f4180c3 100644
--- a/src/Vulkan/VkQueue.hpp
+++ b/src/Vulkan/VkQueue.hpp
@@ -56,7 +56,7 @@
 	{
 		uint32_t submitCount = 0;
 		VkSubmitInfo* pSubmits = nullptr;
-		Fence* fence = nullptr;
+		sw::TaskEvents* events = nullptr;
 
 		enum Type { KILL_THREAD, SUBMIT_QUEUE };
 		Type type = SUBMIT_QUEUE;