diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index ef178ae..b3aceb4 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -155,10 +155,10 @@
     /* 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 Draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
+        { m_cmdBuffer->Draw(vertexCount, instanceCount, firstVertex, firstInstance); }
+    void DrawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
+        { m_cmdBuffer->DrawIndexed(indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); }
     void QueueCommandBuffer() { m_cmdBuffer->QueueCommandBuffer(); }
     void QueueCommandBuffer(const VkFence& fence) { m_cmdBuffer->QueueCommandBuffer(fence); }
     void BindVertexBuffer(VkConstantBufferObj *vertexBuffer, VkDeviceSize offset, uint32_t binding)
@@ -301,7 +301,7 @@
     GenericDrawPreparation(pipelineobj, descriptorSet, failMask);
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2584,7 +2584,7 @@
     static const float vbo_data[3] = {1.f, 0.f, 1.f};
     VkConstantBufferObj vbo(m_device, sizeof(vbo_data), sizeof(float), (const void*) &vbo_data);
     BindVertexBuffer(&vbo, (VkDeviceSize)0, 1); // VBO idx 1, but no VBO in PSO
-    Draw(0, 1, 0, 0);
+    Draw(1, 0, 0, 0);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
     ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after binding Vtx Buffer w/o VBO attached to PSO.";
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index 95f0358..9db980f 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -280,10 +280,10 @@
     VkResult BeginCommandBuffer() { return BeginCommandBuffer(*m_cmdBuffer); }
     VkResult BeginCommandBuffer(VkCmdBufferBeginInfo *beginInfo) { return BeginCommandBuffer(*m_cmdBuffer, beginInfo); }
     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 Draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
+        { m_cmdBuffer->Draw(vertexCount, instanceCount, firstVertex, firstInstance); }
+    void DrawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
+        { m_cmdBuffer->DrawIndexed(indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); }
     void QueueCommandBuffer() { m_cmdBuffer->QueueCommandBuffer(); }
     void RotateTriangleVSUniform(glm::mat4 Projection, glm::mat4 View, glm::mat4 Model,
                                  VkConstantBufferObj *constantBuffer)
@@ -526,7 +526,7 @@
 #endif
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     ASSERT_VK_SUCCESS(EndCommandBuffer());
@@ -797,7 +797,7 @@
     BindVertexBuffer(&meshBuffer, 0, 0);
 
     // render two triangles
-    Draw(0, 6, 0, 1);
+    Draw(6, 1, 0, 0);
 
     // finalize recording of the command buffer
     ASSERT_VK_SUCCESS(EndCommandBuffer());
@@ -884,7 +884,7 @@
 #endif
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     ASSERT_VK_SUCCESS(EndCommandBuffer());
@@ -991,7 +991,7 @@
     BindIndexBuffer(&indexBuffer, 0);
 
     // render two triangles
-    DrawIndexed(0, 6, 0, 0, 1);
+    DrawIndexed(6, 1, 0, 0, 0);
 
     // finalize recording of the command buffer
     ASSERT_VK_SUCCESS(EndCommandBuffer());
@@ -1079,7 +1079,7 @@
 #endif
 
     // render triangle
-    Draw(0, 6, 0, 1);
+    Draw(6, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -1165,7 +1165,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render two triangles
-    Draw(0, 6, 0, 1);
+    Draw(6, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -1265,7 +1265,7 @@
 #endif
 
     // render two triangles
-    Draw(0, 6, 0, 1);
+    Draw(6, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -1354,7 +1354,7 @@
 #endif
 
     // render two triangles
-    Draw(0, 6, 0, 1);
+    Draw(6, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -1430,7 +1430,7 @@
 #endif
 
     // render two triangles
-    Draw(0, 6, 0, 1);
+    Draw(6, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -1506,7 +1506,7 @@
 #endif
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -1595,7 +1595,7 @@
 #endif
 
     // render two triangles
-    Draw(0, 6, 0, 1);
+    Draw(6, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -1698,7 +1698,7 @@
 #endif
 
     // render two triangles
-    Draw(0, 6, 0, 1);
+    Draw(6, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -1791,7 +1791,7 @@
 #endif
 
     // render two triangles
-    Draw(0, 6, 0, 1);
+    Draw(6, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -1907,7 +1907,7 @@
 #endif
 
     // render triangles
-    Draw(0, 36, 0, 1);
+    Draw(36, 1, 0, 0);
 
 
     // finalize recording of the command buffer
@@ -1978,7 +1978,7 @@
 #endif
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2048,7 +2048,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2126,7 +2126,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2194,7 +2194,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2281,7 +2281,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2361,7 +2361,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2460,7 +2460,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2554,7 +2554,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2672,7 +2672,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2799,7 +2799,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, num_verts, 0, 1);
+    Draw(num_verts, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -2912,7 +2912,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -3018,7 +3018,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -3267,7 +3267,7 @@
     pDSDumpDot((char*)"triTest2.dot");
 #endif
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -3374,7 +3374,7 @@
     GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -3478,7 +3478,7 @@
     GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -3829,7 +3829,7 @@
     GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -3954,7 +3954,7 @@
     GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
@@ -4089,7 +4089,7 @@
     GenericDrawPreparation(pipelineobj, descriptorSet);
 
     // render triangle
-    Draw(0, 3, 0, 1);
+    Draw(3, 1, 0, 0);
 
     // finalize recording of the command buffer
     EndCommandBuffer();
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index 6e7df3d..d6cf64b 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -1505,14 +1505,14 @@
     m_renderTargets.push_back(renderTarget);
 }
 
-void VkCommandBufferObj::DrawIndexed(uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
+void VkCommandBufferObj::DrawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
 {
-    vkCmdDrawIndexed(handle(), firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
+    vkCmdDrawIndexed(handle(), indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
 }
 
-void VkCommandBufferObj::Draw(uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
+void VkCommandBufferObj::Draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
 {
-    vkCmdDraw(handle(), firstVertex, vertexCount, firstInstance, instanceCount);
+    vkCmdDraw(handle(), vertexCount, instanceCount, firstVertex, firstInstance);
 }
 
 void VkCommandBufferObj::QueueCommandBuffer()
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index d3136f2..4bc6d42 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -185,8 +185,8 @@
     void BeginRenderPass(const VkRenderPassBeginInfo &info);
     void EndRenderPass();
     void FillBuffer(VkBuffer buffer, VkDeviceSize offset, VkDeviceSize fill_size, uint32_t data);
-    void Draw(uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount);
-    void DrawIndexed(uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount);
+    void Draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
+    void DrawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
     void QueueCommandBuffer();
     void QueueCommandBuffer(VkFence fence);
     void SetViewport(uint32_t viewportCount, const VkViewport* pViewports);
