diff --git a/src/Vulkan/VkCommandBuffer.cpp b/src/Vulkan/VkCommandBuffer.cpp
index 1b74365..d2a50af 100644
--- a/src/Vulkan/VkCommandBuffer.cpp
+++ b/src/Vulkan/VkCommandBuffer.cpp
@@ -13,7 +13,9 @@
 // limitations under the License.
 
 #include "VkCommandBuffer.hpp"
+#include "VkFramebuffer.hpp"
 #include "VkImage.hpp"
+#include "VkRenderpass.hpp"
 
 #include <cstring>
 
@@ -24,7 +26,7 @@
 {
 public:
 	// FIXME (b/119421344): change the commandBuffer argument to a CommandBuffer state
-	virtual void play(CommandBuffer* commandBuffer) = 0;
+	virtual void play(CommandBuffer::ExecutionState& executionState) = 0;
 	virtual ~Command() {}
 };
 
@@ -47,9 +49,10 @@
 	}
 
 protected:
-	void play(CommandBuffer* commandBuffer)
+	void play(CommandBuffer::ExecutionState& executionState)
 	{
-		UNIMPLEMENTED();
+		Cast(renderPass)->begin();
+		Cast(framebuffer)->clear(clearValueCount, clearValues, renderArea);
 	}
 
 private:
@@ -68,9 +71,9 @@
 	}
 
 protected:
-	void play(CommandBuffer* commandBuffer)
+	void play(CommandBuffer::ExecutionState& executionState)
 	{
-		UNIMPLEMENTED();
+		Cast(executionState.renderpass)->end();
 	}
 
 private:
@@ -85,9 +88,9 @@
 	}
 
 protected:
-	void play(CommandBuffer* commandBuffer)
+	void play(CommandBuffer::ExecutionState& executionState)
 	{
-		UNIMPLEMENTED();
+		executionState.pipelines[pipelineBindPoint] = pipeline;
 	}
 
 private:
@@ -102,9 +105,9 @@
 	{
 	}
 
-	void play(CommandBuffer* commandBuffer)
+	void play(CommandBuffer::ExecutionState& executionState)
 	{
-		UNIMPLEMENTED();
+		executionState.vertexInputBindings[binding] = { buffer, offset };
 	}
 
 	uint32_t binding;
@@ -118,7 +121,7 @@
 	{
 	}
 
-	void play(CommandBuffer* commandBuffer)
+	void play(CommandBuffer::ExecutionState& executionState)
 	{
 		UNIMPLEMENTED();
 	}
@@ -133,7 +136,7 @@
 	{
 	}
 
-	void play(CommandBuffer* commandBuffer)
+	void play(CommandBuffer::ExecutionState& executionState)
 	{
 		Cast(srcImage)->copyTo(dstImage, region);
 	}
@@ -151,7 +154,7 @@
 	{
 	}
 
-	void play(CommandBuffer* commandBuffer)
+	void play(CommandBuffer::ExecutionState& executionState)
 	{
 		Cast(srcImage)->copyTo(dstBuffer, region);
 	}
@@ -169,7 +172,7 @@
 	{
 	}
 
-	void play(CommandBuffer* commandBuffer)
+	void play(CommandBuffer::ExecutionState& executionState)
 	{
 		Cast(dstImage)->copyFrom(srcBuffer, region);
 	}
@@ -186,7 +189,7 @@
 	{
 	}
 
-	void play(CommandBuffer* commandBuffer)
+	void play(CommandBuffer::ExecutionState& executionState)
 	{
 		// This can currently be a noop. The sw::Surface locking/unlocking mechanism used by the renderer already takes care of
 		// making sure the read/writes always happen in order. Eventually, if we remove this synchronization mechanism, we can
@@ -205,9 +208,6 @@
 {
 	// FIXME (b/119409619): replace this vector by an allocator so we can control all memory allocations
 	commands = new std::vector<std::unique_ptr<Command> >();
-
-	pipelines[VK_PIPELINE_BIND_POINT_GRAPHICS] = VK_NULL_HANDLE;
-	pipelines[VK_PIPELINE_BIND_POINT_COMPUTE] = VK_NULL_HANDLE;
 }
 
 void CommandBuffer::destroy(const VkAllocationCallbacks* pAllocator)
@@ -591,14 +591,14 @@
 	UNIMPLEMENTED();
 }
 
-void CommandBuffer::submit()
+void CommandBuffer::submit(CommandBuffer::ExecutionState& executionState)
 {
 	// Perform recorded work
 	state = PENDING;
 
 	for(auto& command : *commands)
 	{
-		command->play(this);
+		command->play(executionState);
 	}
 
 	// After work is completed
diff --git a/src/Vulkan/VkCommandBuffer.hpp b/src/Vulkan/VkCommandBuffer.hpp
index 8191c65..c90dd1d 100644
--- a/src/Vulkan/VkCommandBuffer.hpp
+++ b/src/Vulkan/VkCommandBuffer.hpp
@@ -109,7 +109,21 @@
 	void drawIndirect(VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
 	void drawIndexedIndirect(VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
 
-	void submit();
+	// TODO(sugoi): Move ExecutionState out of CommandBuffer (possibly into Device)
+	struct ExecutionState
+	{
+		VkRenderPass renderpass = VK_NULL_HANDLE;
+		VkPipeline pipelines[VK_PIPELINE_BIND_POINT_RANGE_SIZE] = {};
+
+		struct VertexInputBinding
+		{
+			VkBuffer buffer;
+			VkDeviceSize offset;
+		};
+		VertexInputBinding vertexInputBindings[MAX_VERTEX_INPUT_BINDINGS] = {};
+	};
+
+	void submit(CommandBuffer::ExecutionState& executionState);
 
 	class Command;
 private:
@@ -118,14 +132,6 @@
 	enum State { INITIAL, RECORDING, EXECUTABLE, PENDING, INVALID };
 	State state = INITIAL;
 	VkCommandBufferLevel level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
-	VkPipeline pipelines[VK_PIPELINE_BIND_POINT_RANGE_SIZE];
-
-	struct VertexInputBindings
-	{
-		VkBuffer buffer;
-		VkDeviceSize offset;
-	};
-	VertexInputBindings vertexInputBindings[MAX_VERTEX_INPUT_BINDINGS];
 
 	// FIXME (b/119409619): replace this vector by an allocator so we can control all memory allocations
 	std::vector<std::unique_ptr<Command>>* commands;
diff --git a/src/Vulkan/VkQueue.cpp b/src/Vulkan/VkQueue.cpp
index 43bb4a0..b433815 100644
--- a/src/Vulkan/VkQueue.cpp
+++ b/src/Vulkan/VkQueue.cpp
@@ -34,9 +34,12 @@
 			vk::Cast(submitInfo.pWaitSemaphores[j])->wait(submitInfo.pWaitDstStageMask[j]);
 		}
 
-		for(uint32_t j = 0; j < submitInfo.commandBufferCount; j++)
 		{
-			vk::Cast(submitInfo.pCommandBuffers[j])->submit();
+			CommandBuffer::ExecutionState executionState;
+			for(uint32_t j = 0; j < submitInfo.commandBufferCount; j++)
+			{
+				vk::Cast(submitInfo.pCommandBuffers[j])->submit(executionState);
+			}
 		}
 
 		for(uint32_t j = 0; j < submitInfo.signalSemaphoreCount; j++)
diff --git a/src/Vulkan/VkRenderPass.cpp b/src/Vulkan/VkRenderPass.cpp
index 3222f53..0b60e0c 100644
--- a/src/Vulkan/VkRenderPass.cpp
+++ b/src/Vulkan/VkRenderPass.cpp
@@ -30,4 +30,14 @@
 	return 0;
 }
 
+void RenderPass::begin()
+{
+	// FIXME (b/119620965): noop
+}
+
+void RenderPass::end()
+{
+	// FIXME (b/119620965): noop
+}
+
 } // namespace vk
\ No newline at end of file
diff --git a/src/Vulkan/VkRenderPass.hpp b/src/Vulkan/VkRenderPass.hpp
index 5d0273e..72000f4 100644
--- a/src/Vulkan/VkRenderPass.hpp
+++ b/src/Vulkan/VkRenderPass.hpp
@@ -29,6 +29,9 @@
 
 	static size_t ComputeRequiredAllocationSize(const VkRenderPassCreateInfo* pCreateInfo);
 
+	void begin();
+	void end();
+
 private:
 };
 
