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;
