Vulkan: Add description methods to all commands.

These will be used to create a synthetic file for all the commands in the command buffer, which can be stepped over using the new debugger.

Bug: b/145351270
Change-Id: If5728463c1cf333d635c46e2d3b6314ce7d27326
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/38910
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Vulkan/VkCommandBuffer.cpp b/src/Vulkan/VkCommandBuffer.cpp
index 8678112..d8c1930 100644
--- a/src/Vulkan/VkCommandBuffer.cpp
+++ b/src/Vulkan/VkCommandBuffer.cpp
@@ -32,6 +32,7 @@
 public:
 	// FIXME (b/119421344): change the commandBuffer argument to a CommandBuffer state
 	virtual void play(vk::CommandBuffer::ExecutionState& executionState) = 0;
+	virtual std::string description() = 0;
 	virtual ~Command() {}
 };
 
@@ -63,6 +64,8 @@
 		framebuffer->clear(executionState.renderPass, clearValueCount, clearValues, renderArea);
 	}
 
+	std::string description() override { return "vkCmdBeginRenderPass()"; }
+
 private:
 	vk::RenderPass* renderPass;
 	vk::Framebuffer* framebuffer;
@@ -88,6 +91,8 @@
 
 		++executionState.subpassIndex;
 	}
+
+	std::string description() override { return "vkCmdNextSubpass()"; }
 };
 
 class CmdEndRenderPass : public vk::CommandBuffer::Command
@@ -106,6 +111,8 @@
 		executionState.renderPass = nullptr;
 		executionState.renderPassFramebuffer = nullptr;
 	}
+
+	std::string description() override { return "vkCmdEndRenderPass()"; }
 };
 
 class CmdExecuteCommands : public vk::CommandBuffer::Command
@@ -120,6 +127,8 @@
 		commandBuffer->submitSecondary(executionState);
 	}
 
+	std::string description() override { return "vkCmdExecuteCommands()"; }
+
 private:
 	const vk::CommandBuffer* commandBuffer;
 };
@@ -137,6 +146,8 @@
 		executionState.pipelineState[pipelineBindPoint].pipeline = pipeline;
 	}
 
+	std::string description() override { return "vkCmdPipelineBind()"; }
+
 private:
 	VkPipelineBindPoint pipelineBindPoint;
 	vk::Pipeline* pipeline;
@@ -163,6 +174,8 @@
 			executionState.pushConstants);
 	}
 
+	std::string description() override { return "vkCmdDispatch()"; }
+
 private:
 	uint32_t baseGroupX;
 	uint32_t baseGroupY;
@@ -193,6 +206,8 @@
 			executionState.pushConstants);
 	}
 
+	std::string description() override { return "vkCmdDispatchIndirect()"; }
+
 private:
 	const vk::Buffer* buffer;
 	VkDeviceSize offset;
@@ -211,6 +226,8 @@
 		executionState.vertexInputBindings[binding] = { buffer, offset };
 	}
 
+	std::string description() override { return "vkCmdVertexBufferBind()"; }
+
 private:
 	uint32_t binding;
 	vk::Buffer* buffer;
@@ -231,6 +248,8 @@
 		executionState.indexType = indexType;
 	}
 
+	std::string description() override { return "vkCmdIndexBufferBind()"; }
+
 private:
 	vk::Buffer* buffer;
 	const VkDeviceSize offset;
@@ -250,6 +269,8 @@
 		executionState.dynamicState.viewport = viewport;
 	}
 
+	std::string description() override { return "vkCmdSetViewport()"; }
+
 private:
 	const VkViewport viewport;
 	uint32_t viewportID;
@@ -268,6 +289,8 @@
 		executionState.dynamicState.scissor = scissor;
 	}
 
+	std::string description() override { return "vkCmdSetScissor()"; }
+
 private:
 	const VkRect2D scissor;
 	uint32_t scissorID;
@@ -288,6 +311,8 @@
 		executionState.dynamicState.depthBiasSlopeFactor = depthBiasSlopeFactor;
 	}
 
+	std::string description() override { return "vkCmdSetDepthBias()"; }
+
 private:
 	float depthBiasConstantFactor;
 	float depthBiasClamp;
@@ -307,6 +332,8 @@
 		memcpy(&(executionState.dynamicState.blendConstants[0]), blendConstants, sizeof(blendConstants));
 	}
 
+	std::string description() override { return "vkCmdSetBlendConstants()"; }
+
 private:
 	float blendConstants[4];
 };
@@ -325,6 +352,8 @@
 		executionState.dynamicState.maxDepthBounds = maxDepthBounds;
 	}
 
+	std::string description() override { return "vkCmdSetDepthBounds()"; }
+
 private:
 	float minDepthBounds;
 	float maxDepthBounds;
@@ -350,6 +379,8 @@
 		}
 	}
 
+	std::string description() override { return "vkCmdSetStencilCompareMask()"; }
+
 private:
 	VkStencilFaceFlags faceMask;
 	uint32_t compareMask;
@@ -375,6 +406,8 @@
 		}
 	}
 
+	std::string description() override { return "vkCmdSetStencilWriteMask()"; }
+
 private:
 	VkStencilFaceFlags faceMask;
 	uint32_t writeMask;
@@ -400,6 +433,8 @@
 		}
 	}
 
+	std::string description() override { return "vkCmdSetStencilReference()"; }
+
 private:
 	VkStencilFaceFlags faceMask;
 	uint32_t reference;
@@ -583,6 +618,8 @@
 		draw(executionState, false, vertexCount, instanceCount, 0, firstVertex, firstInstance);
 	}
 
+	std::string description() override { return "vkCmdDraw()"; }
+
 private:
 	uint32_t vertexCount;
 	uint32_t instanceCount;
@@ -603,6 +640,8 @@
 		draw(executionState, true, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
 	}
 
+	std::string description() override { return "vkCmdDrawIndexed()"; }
+
 private:
 	uint32_t indexCount;
 	uint32_t instanceCount;
@@ -628,6 +667,8 @@
 		}
 	}
 
+	std::string description() override { return "vkCmdDrawIndirect()"; }
+
 private:
 	const vk::Buffer* buffer;
 	VkDeviceSize offset;
@@ -652,6 +693,8 @@
 		}
 	}
 
+	std::string description() override { return "vkCmdDrawIndexedIndirect()"; }
+
 private:
 	const vk::Buffer* buffer;
 	VkDeviceSize offset;
@@ -672,6 +715,8 @@
 		srcImage->copyTo(dstImage, region);
 	}
 
+	std::string description() override { return "vkCmdImageToImageCopy()"; }
+
 private:
 	const vk::Image* srcImage;
 	vk::Image* dstImage;
@@ -691,6 +736,8 @@
 		srcBuffer->copyTo(dstBuffer, region);
 	}
 
+	std::string description() override { return "vkCmdBufferToBufferCopy()"; }
+
 private:
 	const vk::Buffer* srcBuffer;
 	vk::Buffer* dstBuffer;
@@ -710,6 +757,8 @@
 		srcImage->copyTo(dstBuffer, region);
 	}
 
+	std::string description() override { return "vkCmdImageToBufferCopy()"; }
+
 private:
 	vk::Image* srcImage;
 	vk::Buffer* dstBuffer;
@@ -729,6 +778,8 @@
 		dstImage->copyFrom(srcBuffer, region);
 	}
 
+	std::string description() override { return "vkCmdBufferToImageCopy()"; }
+
 private:
 	vk::Buffer* srcBuffer;
 	vk::Image* dstImage;
@@ -748,6 +799,8 @@
 		dstBuffer->fill(dstOffset, size, data);
 	}
 
+	std::string description() override { return "vkCmdFillBuffer()"; }
+
 private:
 	vk::Buffer* dstBuffer;
 	VkDeviceSize dstOffset;
@@ -768,6 +821,8 @@
 		dstBuffer->update(dstOffset, data.size(), data.data());
 	}
 
+	std::string description() override { return "vkCmdUpdateBuffer()"; }
+
 private:
 	vk::Buffer* dstBuffer;
 	VkDeviceSize dstOffset;
@@ -787,6 +842,8 @@
 		image->clear(color, range);
 	}
 
+	std::string description() override { return "vkCmdClearColorImage()"; }
+
 private:
 	vk::Image* image;
 	const VkClearColorValue color;
@@ -806,6 +863,8 @@
 		image->clear(depthStencil, range);
 	}
 
+	std::string description() override { return "vkCmdClearDepthStencilImage()"; }
+
 private:
 	vk::Image* image;
 	const VkClearDepthStencilValue depthStencil;
@@ -829,6 +888,8 @@
 		executionState.renderPassFramebuffer->clearAttachment(executionState.renderPass, executionState.subpassIndex, attachment, rect);
 	}
 
+	std::string description() override { return "vkCmdClearAttachment()"; }
+
 private:
 	const VkClearAttachment attachment;
 	const VkClearRect rect;
@@ -847,6 +908,8 @@
 		srcImage->blit(dstImage, region, filter);
 	}
 
+	std::string description() override { return "vkCmdBlitImage()"; }
+
 private:
 	const vk::Image* srcImage;
 	vk::Image* dstImage;
@@ -867,6 +930,8 @@
 		srcImage->resolve(dstImage, region);
 	}
 
+	std::string description() override { return "vkCmdBlitImage()"; }
+
 private:
 	const vk::Image* srcImage;
 	vk::Image* dstImage;
@@ -887,6 +952,8 @@
 
 		// Also note that this would be a good moment to update cube map borders or decompress compressed textures, if necessary.
 	}
+
+	std::string description() override { return "vkCmdPipelineBarrier()"; }
 };
 
 class CmdSignalEvent : public vk::CommandBuffer::Command
@@ -902,6 +969,8 @@
 		ev->signal();
 	}
 
+	std::string description() override { return "vkCmdSignalEvent()"; }
+
 private:
 	vk::Event* ev;
 	VkPipelineStageFlags stageMask; // FIXME(b/117835459) : We currently ignore the flags and signal the event at the last stage
@@ -919,6 +988,8 @@
 		ev->reset();
 	}
 
+	std::string description() override { return "vkCmdResetEvent()"; }
+
 private:
 	vk::Event* ev;
 	VkPipelineStageFlags stageMask; // FIXME(b/117835459) : We currently ignore the flags and reset the event at the last stage
@@ -937,6 +1008,8 @@
 		ev->wait();
 	}
 
+	std::string description() override { return "vkCmdWaitEvent()"; }
+
 private:
 	vk::Event* ev;
 };
@@ -969,6 +1042,8 @@
 		}
 	}
 
+	std::string description() override { return "vkCmdBindDescriptorSet()"; }
+
 private:
 	VkPipelineBindPoint pipelineBindPoint;
 	const vk::PipelineLayout *pipelineLayout;
@@ -995,6 +1070,8 @@
 		memcpy(&executionState.pushConstants.data[offset], data, size);
 	}
 
+	std::string description() override { return "vkCmdSetPushConstants()"; }
+
 private:
 	uint32_t offset;
 	uint32_t size;
@@ -1015,6 +1092,8 @@
 		executionState.renderer->addQuery(queryPool->getQuery(query));
 	}
 
+	std::string description() override { return "vkCmdBeginQuery()"; }
+
 private:
 	vk::QueryPool* queryPool;
 	uint32_t query;
@@ -1035,6 +1114,8 @@
 		queryPool->end(query);
 	}
 
+	std::string description() override { return "vkCmdEndQuery()"; }
+
 private:
 	vk::QueryPool* queryPool;
 	uint32_t query;
@@ -1053,6 +1134,8 @@
 		queryPool->reset(firstQuery, queryCount);
 	}
 
+	std::string description() override { return "vkCmdResetQueryPool()"; }
+
 private:
 	vk::QueryPool* queryPool;
 	uint32_t firstQuery;
@@ -1083,6 +1166,8 @@
 		queryPool->writeTimestamp(query);
 	}
 
+	std::string description() override { return "vkCmdWriteTimeStamp()"; }
+
 private:
 	vk::QueryPool* queryPool;
 	uint32_t query;
@@ -1105,6 +1190,8 @@
 		                      dstBuffer->getOffsetPointer(dstOffset), stride, flags);
 	}
 
+	std::string description() override { return "vkCmdCopyQueryPoolResults()"; }
+
 private:
 	const vk::QueryPool* queryPool;
 	uint32_t firstQuery;