tests: Use global command pool and buffer where possible
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 02427a9..4f8a070 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -268,11 +268,30 @@
     void RotateTriangleVSUniform(glm::mat4 Projection, glm::mat4 View, glm::mat4 Model,
                                  VkConstantBufferObj *constantBuffer, VkCommandBufferObj *cmdBuffer);
     void GenericDrawPreparation(VkCommandBufferObj *cmdBuffer, VkPipelineObj &pipelineobj, VkDescriptorSetObj &descriptorSet);
+    void GenericDrawPreparation(VkPipelineObj &pipelineobj, VkDescriptorSetObj &descriptorSet)
+             { GenericDrawPreparation(m_cmdBuffer, pipelineobj, descriptorSet); }
     void InitDepthStencil();
     void VKTriangleTest(const char *vertShaderText, const char *fragShaderText, const bool rotate);
 
     VkResult BeginCommandBuffer(VkCommandBufferObj &cmdBuffer);
     VkResult EndCommandBuffer(VkCommandBufferObj &cmdBuffer);
+    /* Convenience functions that use built-in command buffer */
+    VkResult BeginCommandBuffer() { return BeginCommandBuffer(*m_cmdBuffer); }
+    VkResult EndCommandBuffer() { return EndCommandBuffer(*m_cmdBuffer); }
+    void Draw(uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
+        { m_cmdBuffer->Draw(firstVertex, vertexCount, firstInstance, instanceCount); }
+    void DrawIndexed(uint32_t firstVertex, uint32_t vertexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
+        { m_cmdBuffer->DrawIndexed(firstVertex, vertexCount, vertexOffset,firstInstance, instanceCount); }
+    void QueueCommandBuffer() { m_cmdBuffer->QueueCommandBuffer(); }
+    void RotateTriangleVSUniform(glm::mat4 Projection, glm::mat4 View, glm::mat4 Model,
+                                 VkConstantBufferObj *constantBuffer)
+        {RotateTriangleVSUniform(Projection, View, Model, constantBuffer, m_cmdBuffer); }
+    void BindVertexBuffer(VkConstantBufferObj *vertexBuffer, VkDeviceSize offset, uint32_t binding)
+        { m_cmdBuffer->BindVertexBuffer(vertexBuffer, offset, binding); }
+    void BindIndexBuffer(VkIndexBufferObj *indexBuffer, VkDeviceSize offset)
+        { m_cmdBuffer->BindIndexBuffer(indexBuffer, offset); }
+
+
 
 protected:
     VkImage m_texture;
@@ -467,29 +486,26 @@
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, constantBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
+    ASSERT_VK_SUCCESS(EndCommandBuffer());
 
-    cmdBuffer.QueueCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 
     if (rotate)
-        RotateTriangleVSUniform(Projection, View, Model, &constantBuffer, &cmdBuffer);
+        RotateTriangleVSUniform(Projection, View, Model, &constantBuffer);
 
 #ifdef PRINT_OBJECTS
     OBJ_TRACK_GET_OBJECTS_COUNT pObjTrackGetObjectsCount = (OBJ_TRACK_GET_OBJECTS_COUNT)vkGetProcAddr(gpu(), (char*)"objTrackGetObjectsCount");
@@ -748,22 +764,19 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer, MESH_BIND_ID);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
-
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 
     // render two triangles
-    cmdBuffer.Draw(0, 6, 0, 1);
+    Draw(0, 6, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
+    ASSERT_VK_SUCCESS(EndCommandBuffer());
 
-    cmdBuffer.QueueCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -836,27 +849,22 @@
     att.channelWriteMask = 0xf;
     pipelineobj.AddColorAttachment(1, &att);
 
-    VkCommandBufferObj cmdBuffer(m_device);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
-    cmdBuffer.AddRenderTarget(m_renderTargets[1]);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
-
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    ASSERT_VK_SUCCESS(EndCommandBuffer());
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -948,26 +956,24 @@
     pipelineobj.AddVertexInputBindings(&vi_binding,1);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, MESH_BIND_ID);
-    cmdBuffer.BindIndexBuffer(&indexBuffer, 0);
+    BindVertexBuffer(&meshBuffer, 0, MESH_BIND_ID);
+    BindIndexBuffer(&indexBuffer, 0);
 
     // render two triangles
-    cmdBuffer.DrawIndexed(0, 6, 0, 0, 1);
+    DrawIndexed(0, 6, 0, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    ASSERT_VK_SUCCESS(EndCommandBuffer());
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1041,25 +1047,23 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,MESH_BIND_ID);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render triangle
-    cmdBuffer.Draw(0, 6, 0, 1);
+    Draw(0, 6, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1133,24 +1137,21 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,MESH_BIND_ID);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
-
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render two triangles
-    cmdBuffer.Draw(0, 6, 0, 1);
+    Draw(0, 6, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1236,25 +1237,23 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,MESH_BIND_ID);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render two triangles
-    cmdBuffer.Draw(0, 6, 0, 1);
+    Draw(0, 6, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1329,25 +1328,23 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer,MESH_BIND_ID);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render two triangles
-    cmdBuffer.Draw(0, 6, 0, 1);
+    Draw(0, 6, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1404,29 +1401,25 @@
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, MVPBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
-
-    // cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render two triangles
-    cmdBuffer.Draw(0, 6, 0, 1);
+    Draw(0, 6, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 
-    RotateTriangleVSUniform(Projection, View, Model, &MVPBuffer, &cmdBuffer);
+    RotateTriangleVSUniform(Projection, View, Model, &MVPBuffer);
 }
 
 TEST_F(VkRenderTest, MixTriangle)
@@ -1483,12 +1476,10 @@
     descriptorSet.AppendDummy();
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
@@ -1496,11 +1487,11 @@
 #endif
 
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1575,25 +1566,23 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer, MESH_BUF_ID);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render two triangles
-    cmdBuffer.Draw(0, 6, 0, 1);
+    Draw(0, 6, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1682,25 +1671,23 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer, MESH_BUF_ID);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, MESH_BUF_ID);
+    BindVertexBuffer(&meshBuffer, 0, MESH_BUF_ID);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render two triangles
-    cmdBuffer.Draw(0, 6, 0, 1);
+    Draw(0, 6, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1779,25 +1766,23 @@
     pipelineobj.AddVertexDataBuffer(&meshBuffer, MESH_BUF_ID);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render two triangles
-    cmdBuffer.Draw(0, 6, 0, 1);
+    Draw(0, 6, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1900,25 +1885,22 @@
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget(m_depthStencil->BindInfo()));
 
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
-
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
 
     // render triangles
-    cmdBuffer.Draw(0, 36, 0, 1);
+    Draw(0, 36, 0, 1);
 
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -1974,12 +1956,9 @@
     descriptorSet.AppendSamplerTexture(&sampler, &texture);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
@@ -1987,11 +1966,11 @@
 #endif
 
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -2048,23 +2027,20 @@
     descriptorSet.AppendSamplerTexture(&sampler, &texture);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -2129,23 +2105,20 @@
     descriptorSet.AppendSamplerTexture(&sampler, &texture);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -2200,23 +2173,20 @@
     descriptorSet.AppendSamplerTexture(&sampler, &texture);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -2290,23 +2260,20 @@
     descriptorSet.AppendSamplerTexture(&sampler3, &texture3);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -2373,23 +2340,20 @@
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, colorBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -2475,23 +2439,20 @@
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, whiteBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -2572,23 +2533,20 @@
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, whiteBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -2693,23 +2651,20 @@
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, whiteBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -2818,27 +2773,24 @@
     pipelineobj.SetDepthStencil(&ds_state);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget(m_depthStencil->BindInfo()));
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
-
-    cmdBuffer.BindVertexBuffer(&meshBuffer, 0, 0);
+    BindVertexBuffer(&meshBuffer, 0, 0);
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, num_verts, 0, 1);
+    Draw(0, num_verts, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
-    RotateTriangleVSUniform(Projection, View, Model, &mvpBuffer, &cmdBuffer);
+    RotateTriangleVSUniform(Projection, View, Model, &mvpBuffer);
 }
 
 TEST_F(VkRenderTest, TriangleMixedSamplerUniformBlockBinding)
@@ -2935,23 +2887,20 @@
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, whiteBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -3044,23 +2993,20 @@
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, whiteBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -3296,23 +3242,20 @@
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, mixedBuffer);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
 #ifdef DUMP_STATE_DOT
     DRAW_STATE_DUMP_DOT_FILE pDSDumpDot = (DRAW_STATE_DUMP_DOT_FILE)vkGetProcAddr(gpu(), (char*)"drawStateDumpDotFile");
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -3407,19 +3350,16 @@
     descriptorSet.AppendSamplerTexture(&sampler3, &texture3);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
-
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -3512,21 +3452,18 @@
     pipelineobj.AddShader(&ps);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
-
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
     VkDescriptorSetObj descriptorSet(m_device);
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -3865,22 +3802,19 @@
     pipelineobj.AddShader(&ps);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
-
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
     VkDescriptorSetObj descriptorSet(m_device);
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, mixedBuffer);
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -3994,21 +3928,18 @@
     pipelineobj.AddShader(&ps);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
-
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
     VkDescriptorSetObj descriptorSet(m_device);
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -4131,22 +4062,19 @@
     VkConstantBufferObj windowDimensions(m_device, sizeof(dimensions) / sizeof(dimensions[0]), sizeof(dimensions[0]), (const void*) dimensions);
 
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
-
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
     VkDescriptorSetObj descriptorSet(m_device);
     descriptorSet.AppendBuffer(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, windowDimensions);
 
-    GenericDrawPreparation(&cmdBuffer, pipelineobj, descriptorSet);
+    GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    cmdBuffer.Draw(0, 3, 0, 1);
+    Draw(0, 3, 0, 1);
 
     // finalize recording of the command buffer
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -4163,13 +4091,10 @@
     m_clear_color.f32[2] = 0;
     m_clear_color.f32[3] = 0;
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
     /* This command buffer contains ONLY the load op! */
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }
@@ -4186,10 +4111,7 @@
     m_clear_color.f32[2] = 0;
     m_clear_color.f32[3] = 0;
     ASSERT_NO_FATAL_FAILURE(InitRenderTarget());
-
-    VkCommandBufferObj cmdBuffer(m_device);
-    cmdBuffer.AddRenderTarget(m_renderTargets[0]);
-    ASSERT_VK_SUCCESS(BeginCommandBuffer(cmdBuffer));
+    ASSERT_VK_SUCCESS(BeginCommandBuffer());
 
     /* Load op has cleared to red */
 
@@ -4204,12 +4126,12 @@
     clear_color.f32[2] = 0;
     clear_color.f32[3] = 0;
     VkRect3D clear_rect = { { 0, 0, 0 }, { (int)m_width, (int)m_height, 1 } };
-    vkCmdClearColorAttachment(cmdBuffer.handle(), 0,
+    vkCmdClearColorAttachment(m_cmdBuffer->handle(), 0,
                               VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
                               &clear_color, 1, &clear_rect);
 
-    EndCommandBuffer(cmdBuffer);
-    cmdBuffer.QueueCommandBuffer();
+    EndCommandBuffer();
+    QueueCommandBuffer();
 
     RecordImages(m_renderTargets);
 }