diff --git a/tests/blit_tests.cpp b/tests/blit_tests.cpp
index 023e41b..c7b233f 100644
--- a/tests/blit_tests.cpp
+++ b/tests/blit_tests.cpp
@@ -675,24 +675,24 @@
     vk_testing::Buffer src, dst;
     VkMemoryPropertyFlags reqs = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
 
-    src.init_as_src(dev_, size, reqs);
-    uint32_t *data = static_cast<uint32_t *>(src.memory().map());
+    src.init_as_src(dev_, size * sizeof(VkDeviceSize), reqs);
+    VkDeviceSize *data = static_cast<VkDeviceSize *>(src.memory().map());
     VkDeviceSize offset;
     for (offset = 0; offset < size; offset += 4)
         data[offset / 4] = offset;
     src.memory().unmap();
 
-    dst.init_as_dst(dev_, size, reqs);
+    dst.init_as_dst(dev_, size * sizeof(VkDeviceSize), reqs);
 
     cmd_.begin();
     VkBufferCopy region = {};
-    region.copySize = size;
+    region.copySize = size * sizeof(VkDeviceSize);
     vkCmdCopyBuffer(cmd_.handle(), src.handle(), dst.handle(), 1, &region);
     cmd_.end();
 
     submit_and_done();
 
-    data = static_cast<uint32_t *>(dst.memory().map());
+    data = static_cast<VkDeviceSize *>(dst.memory().map());
     for (offset = 0; offset < size; offset += 4)
         EXPECT_EQ(offset, data[offset / 4]);
     dst.memory().unmap();
diff --git a/tests/init.cpp b/tests/init.cpp
index 6f1214e..21c50d9 100644
--- a/tests/init.cpp
+++ b/tests/init.cpp
@@ -276,7 +276,7 @@
 
 void getQueue(vk_testing::Device *device, uint32_t queue_node_index, const char *qname)
 {
-    int que_idx;
+    uint32_t que_idx;
     VkResult err;
     VkQueue queue;
 
diff --git a/tests/layer_validation_tests.cpp b/tests/layer_validation_tests.cpp
index e428cab..1d7db24 100644
--- a/tests/layer_validation_tests.cpp
+++ b/tests/layer_validation_tests.cpp
@@ -382,7 +382,7 @@
     vkResetCommandBuffer(m_cmdBuffer->handle(), 0);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an err after calling ResetCommandBuffer on an active Command Buffer";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an err after calling ResetCommandBuffer on an active Command Buffer";
     if (!strstr(msgString.c_str(),"Resetting CB")) {
         FAIL() << "Error received was not 'Resetting CB (0xaddress) before it has completed. You must check CB flag before'";
     }
@@ -419,7 +419,7 @@
     BeginCommandBuffer();
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an err after calling BeginCommandBuffer on an active Command Buffer";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an err after calling BeginCommandBuffer on an active Command Buffer";
     if (!strstr(msgString.c_str(),"Calling vkBeginCommandBuffer() on active CB")) {
         FAIL() << "Error received was not 'Calling vkBeginCommandBuffer() on an active CB (0xaddress) before it has completed'";
     }
@@ -492,7 +492,7 @@
     err = vkMapMemory(m_device->device(), mem, 0, 0, 0, &mappedAddress);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error while tring to map memory not visible to CPU";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error while tring to map memory not visible to CPU";
     if (!strstr(msgString.c_str(),"Mapping Memory without VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT")) {
         FAIL() << "Error received did not match expected error message from vkMapMemory in MemTracker";
     }
@@ -563,7 +563,7 @@
     ASSERT_VK_SUCCESS(err);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error while tring to bind a freed memory object";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error while tring to bind a freed memory object";
     if (!strstr(msgString.c_str(),"couldn't find info for mem obj")) {
         FAIL() << "Error received did not match expected error message from BindObjectMemory in MemTracker";
     }
@@ -635,7 +635,7 @@
 //    ASSERT_VK_SUCCESS(err);
 //
 //    msgFlags = m_errorMonitor->GetState(&msgString);
-//    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an warning while tring to free bound memory";
+//    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an warning while tring to free bound memory";
 //    if (!strstr(msgString.c_str(),"Freeing memory object while it still has references")) {
 //        FAIL() << "Warning received did not match expected message from freeMemObjInfo  in MemTracker";
 //    }
@@ -710,7 +710,7 @@
     ASSERT_VK_SUCCESS(err);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error while tring to rebind an object";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error while tring to rebind an object";
     if (!strstr(msgString.c_str(),"which has already been bound to mem object")) {
         FAIL() << "Error received did not match expected message when rebinding memory to an object";
     }
@@ -781,7 +781,7 @@
     (void) err;
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error while binding memory to a destroyed object";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error while binding memory to a destroyed object";
     if (!strstr(msgString.c_str(),"that's not in global list")) {
         FAIL() << "Error received did not match expected error message from updateObjectBinding in MemTracker";
     }
@@ -810,7 +810,7 @@
     m_errorMonitor->ClearState();
     QueueCommandBuffer(testFence.handle());
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an err from using a fence in SIGNALED state in call to vkQueueSubmit";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an err from using a fence in SIGNALED state in call to vkQueueSubmit";
     if (!strstr(msgString.c_str(),"submitted in SIGNALED state.  Fences must be reset before being submitted")) {
         FAIL() << "Error received was not 'VkQueueSubmit with fence in SIGNALED_STATE'";
     }
@@ -832,7 +832,7 @@
     VkFence fences[1] = {testFence.handle()};
     vkResetFences(m_device->device(), 1, fences);
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error from submitting fence with UNSIGNALED state to vkResetFences";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error from submitting fence with UNSIGNALED state to vkResetFences";
     if (!strstr(msgString.c_str(),"submitted to VkResetFences in UNSIGNALED STATE")) {
         FAIL() << "Error received was not 'VkResetFences with fence in UNSIGNALED_STATE'";
     }
@@ -885,7 +885,7 @@
     };
     vkCreateDepthStencilView(m_device->device(), &dsvci, &dsv);
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after attempting to create DSView w/ image lacking USAGE_DS_BIT flag";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after attempting to create DSView w/ image lacking USAGE_DS_BIT flag";
     if (!strstr(msgString.c_str(),"Invalid usage flag for image ")) {
         FAIL() << "Error received was not 'Invalid usage flag for image...'";
     }
@@ -904,7 +904,7 @@
     VKTriangleTest(bindStateVertShaderText, bindStateFragShaderText, BsoFailRaster);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error from Not Binding a Raster State Object";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error from Not Binding a Raster State Object";
     if (!strstr(msgString.c_str(),"Raster object not bound to this command buffer")) {
         FAIL() << "Error received was not 'Raster object not bound to this command buffer'";
     }
@@ -921,7 +921,7 @@
     VKTriangleTest(bindStateVertShaderText, bindStateFragShaderText, BsoFailViewport);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error from Not Binding a Viewport State Object";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error from Not Binding a Viewport State Object";
     if (!strstr(msgString.c_str(),"Viewport object not bound to this command buffer")) {
         FAIL() << "Error received was not 'Viewport object not bound to this command buffer'";
     }
@@ -938,7 +938,7 @@
     VKTriangleTest(bindStateVertShaderText, bindStateFragShaderText, BsoFailColorBlend);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error from Not Binding a ColorBlend State Object";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error from Not Binding a ColorBlend State Object";
     if (!strstr(msgString.c_str(),"Color-blend object not bound to this command buffer")) {
         FAIL() << "Error received was not 'Color-blend object not bound to this command buffer'";
     }
@@ -955,7 +955,7 @@
     VKTriangleTest(bindStateVertShaderText, bindStateFragShaderText, BsoFailDepthStencil);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error from Not Binding a DepthStencil State Object";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error from Not Binding a DepthStencil State Object";
     if (!strstr(msgString.c_str(),"Depth-stencil object not bound to this command buffer")) {
         FAIL() << "Error received was not 'Depth-stencil object not bound to this command buffer'";
     }
@@ -974,7 +974,7 @@
     VkPipeline badPipeline = (VkPipeline)0xbaadb1be;
     vkCmdBindPipeline(m_cmdBuffer->GetBufferHandle(), VK_PIPELINE_BIND_POINT_GRAPHICS, badPipeline);
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after binding pipeline to CmdBuffer w/o active RenderPass";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after binding pipeline to CmdBuffer w/o active RenderPass";
     if (!strstr(msgString.c_str(),"Incorrectly binding graphics pipeline ")) {
         FAIL() << "Error received was not 'Incorrectly binding graphics pipeline (0xbaadb1be) without an active RenderPass'";
     }
@@ -991,7 +991,7 @@
     vkResetDescriptorPool(device(), badPool);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an error from Resetting an invalid DescriptorPool Object";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an error from Resetting an invalid DescriptorPool Object";
     if (!strstr(msgString.c_str(),"Unable to find pool node for pool 0xbaad6001 specified in vkResetDescriptorPool() call")) {
         FAIL() << "Error received was note 'Unable to find pool node for pool 0xbaad6001 specified in vkResetDescriptorPool() call'";
     }*/
@@ -1027,7 +1027,7 @@
 //    VkPipeline badPipeline = (VkPipeline)0xbaadb1be;
 //    vkCmdBindPipeline(cmdBuffer.GetBufferHandle(), VK_PIPELINE_BIND_POINT_GRAPHICS, badPipeline);
 //    msgFlags = m_errorMonitor->GetState(&msgString);
-//    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after binding invalid pipeline to CmdBuffer";
+//    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after binding invalid pipeline to CmdBuffer";
 //    if (!strstr(msgString.c_str(),"Attempt to bind Pipeline ")) {
 //        FAIL() << "Error received was not 'Attempt to bind Pipeline 0xbaadb1be that doesn't exist!'";
 //    }
@@ -1101,7 +1101,7 @@
     vkCmdBindDescriptorSets(m_cmdBuffer->GetBufferHandle(), VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout, 0, 1, &descriptorSet, 0, NULL);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_WARN_BIT) << "Did not warn after binding a DescriptorSet that was never updated.";
+    ASSERT_NE(0, msgFlags & VK_DBG_REPORT_WARN_BIT) << "Did not warn after binding a DescriptorSet that was never updated.";
     if (!strstr(msgString.c_str()," bound but it was never updated. ")) {
         FAIL() << "Error received was not 'DS <blah> bound but it was never updated. You may want to either update it or not bind it.'";
     }
@@ -1118,7 +1118,7 @@
     // Call EndCommandBuffer() w/o calling BeginCommandBuffer()
     vkEndCommandBuffer(cmdBuffer.GetBufferHandle());
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after ending a CmdBuffer w/o calling BeginCommandBuffer()";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after ending a CmdBuffer w/o calling BeginCommandBuffer()";
     if (!strstr(msgString.c_str(),"You must call vkBeginCommandBuffer() before this call to ")) {
         FAIL() << "Error received was not 'You must call vkBeginCommandBuffer() before this call to vkEndCommandBuffer()'";
     }
@@ -1149,7 +1149,7 @@
     vkBeginCommandBuffer(cmdBuffer.GetBufferHandle(), &cmd_buf_info);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error passing a non-NULL Framebuffer and Renderpass to BeginCommandBuffer()";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error passing a non-NULL Framebuffer and Renderpass to BeginCommandBuffer()";
     if (!strstr(msgString.c_str(),"may not specify framebuffer or renderpass parameters")) {
         FAIL() << "Error received was not 'vkCreateCommandBuffer():  Primary Command Buffer may not specify framebuffer or renderpass parameters'";
     }
@@ -1187,7 +1187,7 @@
     vkBeginCommandBuffer(draw_cmd, &cmd_buf_info);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error passing NULL Framebuffer/Renderpass to BeginCommandBuffer()";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error passing NULL Framebuffer/Renderpass to BeginCommandBuffer()";
     if (!strstr(msgString.c_str(),"must specify framebuffer and renderpass parameters")) {
         FAIL() << "Error received was not 'vkCreateCommandBuffer():  Secondary Command Buffer must specify framebuffer and renderpass parameters'";
     }
@@ -1278,7 +1278,7 @@
     err = vkCreateGraphicsPipelines(m_device->device(), pipelineCache, 1, &gp_ci, &pipeline);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after creating Gfx Pipeline w/o VS.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after creating Gfx Pipeline w/o VS.";
     if (!strstr(msgString.c_str(),"Invalid Pipeline CreateInfo State: Vtx Shader required")) {
         FAIL() << "Error received was not 'Invalid Pipeline CreateInfo State: Vtx Shader required'";
     }
@@ -1299,7 +1299,7 @@
     vkCmdBeginRenderPass(m_cmdBuffer->GetBufferHandle(), NULL, VK_RENDER_PASS_CONTENTS_INLINE);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after binding NULL RenderPass.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after binding NULL RenderPass.";
     if (!strstr(msgString.c_str(),"You cannot use a NULL RenderPass object in vkCmdBeginRenderPass()")) {
         FAIL() << "Error received was not 'You cannot use a NULL RenderPass object in vkCmdBeginRenderPass()'";
     }
@@ -1326,7 +1326,7 @@
     vkCmdBeginRenderPass(m_cmdBuffer->GetBufferHandle(), &rp_begin, VK_RENDER_PASS_CONTENTS_INLINE);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after binding RenderPass w/i an active RenderPass.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after binding RenderPass w/i an active RenderPass.";
     if (!strstr(msgString.c_str(),"Cannot call vkCmdBeginRenderPass() during an active RenderPass ")) {
         FAIL() << "Error received was not 'Cannot call vkCmdBeginRenderPass() during an active RenderPass...'";
     }
@@ -1409,7 +1409,7 @@
     vkCmdBindVertexBuffers(m_cmdBuffer->GetBufferHandle(), 0, 1, NULL, NULL);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after vkCmdBindVertexBuffers() w/o active RenderPass.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after vkCmdBindVertexBuffers() w/o active RenderPass.";
     if (!strstr(msgString.c_str(),"Incorrect call to vkCmdBindVertexBuffers() without an active RenderPass.")) {
         FAIL() << "Error received was not 'Incorrect call to vkCmdBindVertexBuffers() without an active RenderPass.'";
     }
@@ -1495,7 +1495,7 @@
     vkUpdateDescriptorSets(m_device->device(), 1, &descriptor_write, 0, NULL);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after updating BUFFER Descriptor w/ incorrect type of SAMPLER.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after updating BUFFER Descriptor w/ incorrect type of SAMPLER.";
     if (!strstr(msgString.c_str(),"Descriptor update type of VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET does not match ")) {
         FAIL() << "Error received was not 'Descriptor update type of VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET does not match overlapping binding type!'";
     }
@@ -1583,7 +1583,7 @@
     vkUpdateDescriptorSets(m_device->device(), 1, &descriptor_write, 0, NULL);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after updating Descriptor w/ index out of bounds.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after updating Descriptor w/ index out of bounds.";
     if (!strstr(msgString.c_str(),"Descriptor update type of VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET is out of bounds for matching binding")) {
         FAIL() << "Error received was not 'Descriptor update type of VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET is out of bounds for matching binding...'";
     }
@@ -1669,7 +1669,7 @@
     vkUpdateDescriptorSets(m_device->device(), 1, &descriptor_write, 0, NULL);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after updating Descriptor w/ count too large for layout.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after updating Descriptor w/ count too large for layout.";
     if (!strstr(msgString.c_str()," does not have binding to match update binding ")) {
         FAIL() << "Error received was not 'Descriptor Set <blah> does not have binding to match update binding '";
     }
@@ -1755,7 +1755,7 @@
     vkUpdateDescriptorSets(m_device->device(), 1, &descriptor_write, 0, NULL);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after updating Descriptor w/ invalid struct type.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after updating Descriptor w/ invalid struct type.";
     if (!strstr(msgString.c_str(),"Unexpected UPDATE struct of type ")) {
         FAIL() << "Error received was not 'Unexpected UPDATE struct of type '";
     }
@@ -1835,7 +1835,7 @@
     vkCmdBindPipeline(m_cmdBuffer->GetBufferHandle(), VK_PIPELINE_BIND_POINT_GRAPHICS, pipe.handle());
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after binding RenderPass w/ mismatched MSAA from PSO.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after binding RenderPass w/ mismatched MSAA from PSO.";
     if (!strstr(msgString.c_str(),"Num samples mismatch! ")) {
         FAIL() << "Error received was not 'Num samples mismatch!...'";
     }
@@ -1901,7 +1901,7 @@
     vkCmdBindPipeline(m_cmdBuffer->GetBufferHandle(), VK_PIPELINE_BIND_POINT_GRAPHICS, badPipeline);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after binding invalid pipeline to CmdBuffer";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after binding invalid pipeline to CmdBuffer";
     if (!strstr(msgString.c_str(),"Attempt to bind Pipeline ")) {
         FAIL() << "Error received was not 'Attempt to bind Pipeline 0xbaadb1be that doesn't exist!'";
     }
@@ -1992,7 +1992,7 @@
 
     vkCmdClearColorAttachment(m_cmdBuffer->GetBufferHandle(), 0, (VkImageLayout)NULL, &cCV, 0, NULL);
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_WARN_BIT) << "Did not receive error after issuing Clear Cmd on FB color attachment prior to Draw Cmd.";
+    ASSERT_NE(0, msgFlags & VK_DBG_REPORT_WARN_BIT) << "Did not receive error after issuing Clear Cmd on FB color attachment prior to Draw Cmd.";
     if (!strstr(msgString.c_str(),"vkCmdClearColorAttachment() issued on CB object ")) {
         FAIL() << "Error received was not 'vkCmdClearColorAttachment() issued on CB object...'";
     }
@@ -2076,7 +2076,7 @@
     vkCmdBindVertexBuffers(m_cmdBuffer->GetBufferHandle(), 0, 1, NULL, NULL);
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive error after binding Vtx Buffer w/o VBO attached to PSO.";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive error after binding Vtx Buffer w/o VBO attached to PSO.";
     if (!strstr(msgString.c_str(),"Vtx Buffer Index 0 was bound, but no vtx buffers are attached to PSO.")) {
         FAIL() << "Error received was not 'Vtx Buffer Index 0 was bound, but no vtx buffers are attached to PSO.'";
     }
@@ -2143,7 +2143,7 @@
     EndCommandBuffer();
 
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT) << "Did not receive an err from using one VkCommandBufferObj in two threads";
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT)) << "Did not receive an err from using one VkCommandBufferObj in two threads";
     if (!strstr(msgString.c_str(),"THREADING ERROR")) {
         FAIL() << "Error received was not 'THREADING ERROR'";
     }
@@ -2196,7 +2196,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_WARN_BIT);
+    ASSERT_NE(0, msgFlags & VK_DBG_REPORT_WARN_BIT);
     if (!strstr(msgString.c_str(),"not consumed by fragment shader")) {
         FAIL() << "Incorrect warning: " << msgString;
     }
@@ -2245,7 +2245,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT);
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT));
     if (!strstr(msgString.c_str(),"not written by vertex shader")) {
         FAIL() << "Incorrect error: " << msgString;
     }
@@ -2296,7 +2296,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT);
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT));
     if (!strstr(msgString.c_str(),"Type mismatch on location 0")) {
         FAIL() << "Incorrect error: " << msgString;
     }
@@ -2354,7 +2354,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_WARN_BIT);
+    ASSERT_NE(0, msgFlags & VK_DBG_REPORT_WARN_BIT);
     if (!strstr(msgString.c_str(),"location 0 not consumed by VS")) {
         FAIL() << "Incorrect warning: " << msgString;
     }
@@ -2403,7 +2403,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT);
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT));
     if (!strstr(msgString.c_str(),"VS consumes input at location 0 but not provided")) {
         FAIL() << "Incorrect warning: " << msgString;
     }
@@ -2462,7 +2462,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT);
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT));
     if (!strstr(msgString.c_str(),"location 0 does not match VS input type")) {
         FAIL() << "Incorrect error: " << msgString;
     }
@@ -2522,7 +2522,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT);
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT));
     if (!strstr(msgString.c_str(),"Duplicate vertex input binding descriptions for binding 0")) {
         FAIL() << "Incorrect error: " << msgString;
     }
@@ -2574,7 +2574,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT);
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT));
     if (!strstr(msgString.c_str(),"Attachment 0 not written by FS")) {
         FAIL() << "Incorrect error: " << msgString;
     }
@@ -2628,7 +2628,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_WARN_BIT);
+    ASSERT_NE(0, msgFlags & VK_DBG_REPORT_WARN_BIT);
     if (!strstr(msgString.c_str(),"FS writes to output location 1 with no matching attachment")) {
         FAIL() << "Incorrect warning: " << msgString;
     }
@@ -2679,7 +2679,7 @@
 
     msgFlags = m_errorMonitor->GetState(&msgString);
 
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_ERROR_BIT);
+    ASSERT_TRUE(0 != (msgFlags & VK_DBG_REPORT_ERROR_BIT));
     if (!strstr(msgString.c_str(),"does not match FS output type")) {
         FAIL() << "Incorrect error: " << msgString;
     }
@@ -2736,7 +2736,7 @@
     /* should have emitted a warning: the shader is not SPIRV, so we're
      * not going to be able to analyze it */
     msgFlags = m_errorMonitor->GetState(&msgString);
-    ASSERT_TRUE(msgFlags & VK_DBG_REPORT_WARN_BIT);
+    ASSERT_NE(0, msgFlags & VK_DBG_REPORT_WARN_BIT);
     if (!strstr(msgString.c_str(),"is not SPIR-V")) {
         FAIL() << "Incorrect warning: " << msgString;
     }
diff --git a/tests/render_tests.cpp b/tests/render_tests.cpp
index eff39d0..9b06fe0 100644
--- a/tests/render_tests.cpp
+++ b/tests/render_tests.cpp
@@ -3157,70 +3157,70 @@
             "}\n";
 
 
-    const float mixedVals[196] = {   1.0, 0.0, 0.0, 1.0,   //        vec4 fRed;            // align
-                                     0.0, 1.0, 0.0, 1.0,   //        vec4 fGreen;          // align
-                                     1.0, 0.0, 0.0, 1.0,   //        layout(row_major) mat4 worldToProj;
-                                     0.0, 1.0, 0.0, 1.0,   //        align
-                                     0.0, 0.0, 1.0, 1.0,   //        align
-                                     0.0, 0.0, 0.0, 1.0,   //        align
-                                     2.0, 0.0, 0.0, 2.0,   //        layout(row_major) mat4 projToWorld;
-                                     0.0, 2.0, 0.0, 2.0,   //        align
-                                     0.0, 0.0, 2.0, 2.0,   //        align
-                                     0.0, 0.0, 0.0, 2.0,   //        align
-                                     3.0, 0.0, 0.0, 3.0,   //        layout(row_major) mat4 worldToView;
-                                     0.0, 3.0, 0.0, 3.0,   //        align
-                                     0.0, 0.0, 3.0, 3.0,   //        align
-                                     0.0, 0.0, 0.0, 3.0,   //        align
-                                     4.0, 0.0, 0.0, 4.0,   //        layout(row_major) mat4 viewToProj;
-                                     0.0, 4.0, 0.0, 4.0,   //        align
-                                     0.0, 0.0, 4.0, 4.0,   //        align
-                                     0.0, 0.0, 0.0, 4.0,   //        align
-                                     5.0, 0.0, 0.0, 5.0,   //        layout(row_major) mat4 worldToShadow[4];
-                                     0.0, 5.0, 0.0, 5.0,   //        align
-                                     0.0, 0.0, 5.0, 5.0,   //        align
-                                     0.0, 0.0, 0.0, 5.0,   //        align
-                                     6.0, 0.0, 0.0, 6.0,   //        align
-                                     0.0, 6.0, 0.0, 6.0,   //        align
-                                     0.0, 0.0, 6.0, 6.0,   //        align
-                                     0.0, 0.0, 0.0, 6.0,   //        align
-                                     7.0, 0.0, 0.0, 7.0,   //        align
-                                     0.0, 7.0, 0.0, 7.0,   //        align
-                                     0.0, 0.0, 7.0, 7.0,   //        align
-                                     0.0, 0.0, 0.0, 7.0,   //        align
-                                     8.0, 0.0, 0.0, 8.0,   //        align
-                                     0.0, 8.0, 0.0, 8.0,   //        align
-                                     0.0, 0.0, 8.0, 8.0,   //        align
-                                     0.0, 0.0, 0.0, 8.0,   //        align
-                                     0.0,                  //        float fZero;          // align
-                                     1.0,                  //        float fOne;           // pack
-                                     2.0,                  //        float fTwo;           // pack
-                                     3.0,                  //        float fThree;         // pack
-                                     0.0, 0.0, 0.0,        //        vec3 fZeroZeroZero;   // align
-                                     4.0,                  //        float fFour;          // pack
-                                     0.0, 0.0, 1.0,        //        vec3 fZeroZeroOne;    // align
-                                     5.0,                  //        float fFive;          // pack
-                                     0.0, 1.0, 0.0,        //        vec3 fZeroOneZero;    // align
-                                     6.0,                  //        float fSix;           // pack
-                                     7.0,                  //        float fSeven;         // align
-                                     8.0,                  //        float fEight;         // pack
-                                     9.0,                  //        float fNine;          // pack
-                                     0.0,                  //        BUFFER
-                                     0.0, 0.0,             //        vec2 fZeroZero;       // align
-                                     0.0, 1.0,             //        vec2 fZeroOne;        // pack
-                                     0.0, 0.0, 1.0, 1.0,   //        vec4 fBlue;           // align
-                                     1.0, 0.0,             //        vec2 fOneZero;        // align
-                                     1.0, 1.0,             //        vec2 fOneOne;         // pack
-                                     0.0, 1.0, 1.0,        //        vec3 fZeroOneOne;     // align
-                                     10.0,                 //        float fTen;           // pack
-                                     11.0,                 //        float fEleven;        // align
-                                     12.0,                 //        float fTwelve;        // pack
-                                     0.0, 0.0,             //        BUFFER
-                                     1.0, 0.0, 0.0,        //        vec3 fOneZeroZero;    // align
-                                     0.0,                  //        BUFFER
-                                     0.1, 0.2, 0.3, 0.4,   //        vec4 uvOffsets[4];
-                                     0.5, 0.6, 0.7, 0.8,   //        align
-                                     0.9, 1.0, 1.1, 1.2,   //        align
-                                     1.3, 1.4, 1.5, 1.6,   //        align
+    const float mixedVals[196] = {   1.0f, 0.0f, 0.0f, 1.0f,   //        vec4 fRed;            // align
+                                     0.0f, 1.0f, 0.0f, 1.0f,   //        vec4 fGreen;          // align
+                                     1.0f, 0.0f, 0.0f, 1.0f,   //        layout(row_major) mat4 worldToProj;
+                                     0.0f, 1.0f, 0.0f, 1.0f,   //        align
+                                     0.0f, 0.0f, 1.0f, 1.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 1.0f,   //        align
+                                     2.0f, 0.0f, 0.0f, 2.0f,   //        layout(row_major) mat4 projToWorld;
+                                     0.0f, 2.0f, 0.0f, 2.0f,   //        align
+                                     0.0f, 0.0f, 2.0f, 2.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 2.0f,   //        align
+                                     3.0f, 0.0f, 0.0f, 3.0f,   //        layout(row_major) mat4 worldToView;
+                                     0.0f, 3.0f, 0.0f, 3.0f,   //        align
+                                     0.0f, 0.0f, 3.0f, 3.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 3.0f,   //        align
+                                     4.0f, 0.0f, 0.0f, 4.0f,   //        layout(row_major) mat4 viewToProj;
+                                     0.0f, 4.0f, 0.0f, 4.0f,   //        align
+                                     0.0f, 0.0f, 4.0f, 4.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 4.0f,   //        align
+                                     5.0f, 0.0f, 0.0f, 5.0f,   //        layout(row_major) mat4 worldToShadow[4];
+                                     0.0f, 5.0f, 0.0f, 5.0f,   //        align
+                                     0.0f, 0.0f, 5.0f, 5.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 5.0f,   //        align
+                                     6.0f, 0.0f, 0.0f, 6.0f,   //        align
+                                     0.0f, 6.0f, 0.0f, 6.0f,   //        align
+                                     0.0f, 0.0f, 6.0f, 6.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 6.0f,   //        align
+                                     7.0f, 0.0f, 0.0f, 7.0f,   //        align
+                                     0.0f, 7.0f, 0.0f, 7.0f,   //        align
+                                     0.0f, 0.0f, 7.0f, 7.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 7.0f,   //        align
+                                     8.0f, 0.0f, 0.0f, 8.0f,   //        align
+                                     0.0f, 8.0f, 0.0f, 8.0f,   //        align
+                                     0.0f, 0.0f, 8.0f, 8.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 8.0f,   //        align
+                                     0.0f,                     //        float fZero;          // align
+                                     1.0f,                     //        float fOne;           // pack
+                                     2.0f,                     //        float fTwo;           // pack
+                                     3.0f,                     //        float fThree;         // pack
+                                     0.0f, 0.0f, 0.0f,         //        vec3 fZeroZeroZero;   // align
+                                     4.0f,                     //        float fFour;          // pack
+                                     0.0f, 0.0f, 1.0f,         //        vec3 fZeroZeroOne;    // align
+                                     5.0f,                     //        float fFive;          // pack
+                                     0.0f, 1.0f, 0.0f,         //        vec3 fZeroOneZero;    // align
+                                     6.0f,                     //        float fSix;           // pack
+                                     7.0f,                     //        float fSeven;         // align
+                                     8.0f,                     //        float fEight;         // pack
+                                     9.0f,                     //        float fNine;          // pack
+                                     0.0f,                     //        BUFFER
+                                     0.0f, 0.0f,               //        vec2 fZeroZero;       // align
+                                     0.0f, 1.0f,               //        vec2 fZeroOne;        // pack
+                                     0.0f, 0.0f, 1.0f, 1.0f,   //        vec4 fBlue;           // align
+                                     1.0f, 0.0f,               //        vec2 fOneZero;        // align
+                                     1.0f, 1.0f,               //        vec2 fOneOne;         // pack
+                                     0.0f, 1.0f, 1.0f,         //        vec3 fZeroOneOne;     // align
+                                     10.0f,                    //        float fTen;           // pack
+                                     11.0f,                    //        float fEleven;        // align
+                                     12.0f,                    //        float fTwelve;        // pack
+                                     0.0f, 0.0f,               //        BUFFER
+                                     1.0f, 0.0f, 0.0f,         //        vec3 fOneZeroZero;    // align
+                                     0.0f,                     //        BUFFER
+                                     0.1f, 0.2f, 0.3f, 0.4f,   //        vec4 uvOffsets[4];
+                                     0.5f, 0.6f, 0.7f, 0.8f,   //        align
+                                     0.9f, 1.0f, 1.1f, 1.2f,   //        align
+                                     1.3f, 1.4f, 1.5f, 1.6f,   //        align
                                   };
 
     ASSERT_NO_FATAL_FAILURE(InitState());
@@ -3716,70 +3716,70 @@
             "}\n";
 
 
-    const float mixedVals[196] = {   1.0, 0.0, 0.0, 1.0,   //        vec4 fRed;            // align
-                                     0.0, 1.0, 0.0, 1.0,   //        vec4 fGreen;          // align
-                                     1.0, 0.0, 0.0, 1.0,   //        layout(row_major) mat4 worldToProj;
-                                     0.0, 1.0, 0.0, 1.0,   //        align
-                                     0.0, 0.0, 1.0, 1.0,   //        align
-                                     0.0, 0.0, 0.0, 1.0,   //        align
-                                     2.0, 0.0, 0.0, 2.0,   //        layout(row_major) mat4 projToWorld;
-                                     0.0, 2.0, 0.0, 2.0,   //        align
-                                     0.0, 0.0, 2.0, 2.0,   //        align
-                                     0.0, 0.0, 0.0, 2.0,   //        align
-                                     3.0, 0.0, 0.0, 3.0,   //        layout(row_major) mat4 worldToView;
-                                     0.0, 3.0, 0.0, 3.0,   //        align
-                                     0.0, 0.0, 3.0, 3.0,   //        align
-                                     0.0, 0.0, 0.0, 3.0,   //        align
-                                     4.0, 0.0, 0.0, 4.0,   //        layout(row_major) mat4 viewToProj;
-                                     0.0, 4.0, 0.0, 4.0,   //        align
-                                     0.0, 0.0, 4.0, 4.0,   //        align
-                                     0.0, 0.0, 0.0, 4.0,   //        align
-                                     5.0, 0.0, 0.0, 5.0,   //        layout(row_major) mat4 worldToShadow[4];
-                                     0.0, 5.0, 0.0, 5.0,   //        align
-                                     0.0, 0.0, 5.0, 5.0,   //        align
-                                     0.0, 0.0, 0.0, 5.0,   //        align
-                                     6.0, 0.0, 0.0, 6.0,   //        align
-                                     0.0, 6.0, 0.0, 6.0,   //        align
-                                     0.0, 0.0, 6.0, 6.0,   //        align
-                                     0.0, 0.0, 0.0, 6.0,   //        align
-                                     7.0, 0.0, 0.0, 7.0,   //        align
-                                     0.0, 7.0, 0.0, 7.0,   //        align
-                                     0.0, 0.0, 7.0, 7.0,   //        align
-                                     0.0, 0.0, 0.0, 7.0,   //        align
-                                     8.0, 0.0, 0.0, 8.0,   //        align
-                                     0.0, 8.0, 0.0, 8.0,   //        align
-                                     0.0, 0.0, 8.0, 8.0,   //        align
-                                     0.0, 0.0, 0.0, 8.0,   //        align
-                                     0.0,                  //        float fZero;          // align
-                                     1.0,                  //        float fOne;           // pack
-                                     2.0,                  //        float fTwo;           // pack
-                                     3.0,                  //        float fThree;         // pack
-                                     0.0, 0.0, 0.0,        //        vec3 fZeroZeroZero;   // align
-                                     4.0,                  //        float fFour;          // pack
-                                     0.0, 0.0, 1.0,        //        vec3 fZeroZeroOne;    // align
-                                     5.0,                  //        float fFive;          // pack
-                                     0.0, 1.0, 0.0,        //        vec3 fZeroOneZero;    // align
-                                     6.0,                  //        float fSix;           // pack
-                                     7.0,                  //        float fSeven;         // align
-                                     8.0,                  //        float fEight;         // pack
-                                     9.0,                  //        float fNine;          // pack
-                                     0.0,                  //        BUFFER
-                                     0.0, 0.0,             //        vec2 fZeroZero;       // align
-                                     0.0, 1.0,             //        vec2 fZeroOne;        // pack
-                                     0.0, 0.0, 1.0, 1.0,   //        vec4 fBlue;           // align
-                                     1.0, 0.0,             //        vec2 fOneZero;        // align
-                                     1.0, 1.0,             //        vec2 fOneOne;         // pack
-                                     0.0, 1.0, 1.0,        //        vec3 fZeroOneOne;     // align
-                                     10.0,                 //        float fTen;           // pack
-                                     11.0,                 //        float fEleven;        // align
-                                     12.0,                 //        float fTwelve;        // pack
-                                     0.0, 0.0,             //        BUFFER
-                                     1.0, 0.0, 0.0,        //        vec3 fOneZeroZero;    // align
-                                     0.0,                  //        BUFFER
-                                     0.1, 0.2, 0.3, 0.4,   //        vec4 uvOffsets[4];
-                                     0.5, 0.6, 0.7, 0.8,   //        align
-                                     0.9, 1.0, 1.1, 1.2,   //        align
-                                     1.3, 1.4, 1.5, 1.6,   //        align
+    const float mixedVals[196] = {   1.0f, 0.0f, 0.0f, 1.0f,   //        vec4 fRed;            // align
+                                     0.0f, 1.0f, 0.0f, 1.0f,   //        vec4 fGreen;          // align
+                                     1.0f, 0.0f, 0.0f, 1.0f,   //        layout(row_major) mat4 worldToProj;
+                                     0.0f, 1.0f, 0.0f, 1.0f,   //        align
+                                     0.0f, 0.0f, 1.0f, 1.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 1.0f,   //        align
+                                     2.0f, 0.0f, 0.0f, 2.0f,   //        layout(row_major) mat4 projToWorld;
+                                     0.0f, 2.0f, 0.0f, 2.0f,   //        align
+                                     0.0f, 0.0f, 2.0f, 2.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 2.0f,   //        align
+                                     3.0f, 0.0f, 0.0f, 3.0f,   //        layout(row_major) mat4 worldToView;
+                                     0.0f, 3.0f, 0.0f, 3.0f,   //        align
+                                     0.0f, 0.0f, 3.0f, 3.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 3.0f,   //        align
+                                     4.0f, 0.0f, 0.0f, 4.0f,   //        layout(row_major) mat4 viewToProj;
+                                     0.0f, 4.0f, 0.0f, 4.0f,   //        align
+                                     0.0f, 0.0f, 4.0f, 4.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 4.0f,   //        align
+                                     5.0f, 0.0f, 0.0f, 5.0f,   //        layout(row_major) mat4 worldToShadow[4];
+                                     0.0f, 5.0f, 0.0f, 5.0f,   //        align
+                                     0.0f, 0.0f, 5.0f, 5.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 5.0f,   //        align
+                                     6.0f, 0.0f, 0.0f, 6.0f,   //        align
+                                     0.0f, 6.0f, 0.0f, 6.0f,   //        align
+                                     0.0f, 0.0f, 6.0f, 6.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 6.0f,   //        align
+                                     7.0f, 0.0f, 0.0f, 7.0f,   //        align
+                                     0.0f, 7.0f, 0.0f, 7.0f,   //        align
+                                     0.0f, 0.0f, 7.0f, 7.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 7.0f,   //        align
+                                     8.0f, 0.0f, 0.0f, 8.0f,   //        align
+                                     0.0f, 8.0f, 0.0f, 8.0f,   //        align
+                                     0.0f, 0.0f, 8.0f, 8.0f,   //        align
+                                     0.0f, 0.0f, 0.0f, 8.0f,   //        align
+                                     0.0f,                     //        float fZero;          // align
+                                     1.0f,                     //        float fOne;           // pack
+                                     2.0f,                     //        float fTwo;           // pack
+                                     3.0f,                     //        float fThree;         // pack
+                                     0.0f, 0.0f, 0.0f,         //        vec3 fZeroZeroZero;   // align
+                                     4.0f,                     //        float fFour;          // pack
+                                     0.0f, 0.0f, 1.0f,         //        vec3 fZeroZeroOne;    // align
+                                     5.0f,                     //        float fFive;          // pack
+                                     0.0f, 1.0f, 0.0f,         //        vec3 fZeroOneZero;    // align
+                                     6.0f,                     //        float fSix;           // pack
+                                     7.0f,                     //        float fSeven;         // align
+                                     8.0f,                     //        float fEight;         // pack
+                                     9.0f,                     //        float fNine;          // pack
+                                     0.0f,                     //        BUFFER
+                                     0.0f, 0.0f,               //        vec2 fZeroZero;       // align
+                                     0.0f, 1.0f,               //        vec2 fZeroOne;        // pack
+                                     0.0f, 0.0f, 1.0f, 1.0f,   //        vec4 fBlue;           // align
+                                     1.0f, 0.0f,               //        vec2 fOneZero;        // align
+                                     1.0f, 1.0f,               //        vec2 fOneOne;         // pack
+                                     0.0f, 1.0f, 1.0f,         //        vec3 fZeroOneOne;     // align
+                                     10.0f,                    //        float fTen;           // pack
+                                     11.0f,                    //        float fEleven;        // align
+                                     12.0f,                    //        float fTwelve;        // pack
+                                     0.0f, 0.0f,               //        BUFFER
+                                     1.0f, 0.0f, 0.0f,         //        vec3 fOneZeroZero;    // align
+                                     0.0f,                     //        BUFFER
+                                     0.1f, 0.2f, 0.3f, 0.4f,   //        vec4 uvOffsets[4];
+                                     0.5f, 0.6f, 0.7f, 0.8f,   //        align
+                                     0.9f, 1.0f, 1.1f, 1.2f,   //        align
+                                     1.3f, 1.4f, 1.5f, 1.6f,   //        align
                                   };
 
 
diff --git a/tests/vkrenderframework.cpp b/tests/vkrenderframework.cpp
index f52acd0..95e0ff9 100644
--- a/tests/vkrenderframework.cpp
+++ b/tests/vkrenderframework.cpp
@@ -304,9 +304,9 @@
     std::vector<VkAttachmentDescription> attachments;
     std::vector<VkAttachmentReference> color_references;
     std::vector<VkAttachmentView> bindings;
-    attachments.reserve(targets + (bool) dsBinding);
+    attachments.reserve(targets + 1); // +1 for dsBinding
     color_references.reserve(targets);
-    bindings.reserve(targets + (bool) dsBinding);
+    bindings.reserve(targets + 1);     // +1 for dsBinding
 
     VkAttachmentDescription att = {};
     att.sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION;
@@ -421,8 +421,8 @@
 
     m_renderPassBeginInfo.renderPass = m_renderPass;
     m_renderPassBeginInfo.framebuffer = m_framebuffer;
-    m_renderPassBeginInfo.renderArea.extent.width = m_width;
-    m_renderPassBeginInfo.renderArea.extent.height = m_height;
+    m_renderPassBeginInfo.renderArea.extent.width = (int32_t) m_width;
+    m_renderPassBeginInfo.renderArea.extent.height = (int32_t) m_height;
     m_renderPassBeginInfo.clearValueCount = m_renderPassClearValues.size();
     m_renderPassBeginInfo.pClearValues = m_renderPassClearValues.data();
 }
@@ -1528,7 +1528,7 @@
            0, 1, &set_obj, 0, NULL );
 }
 
-void VkCommandBufferObj::BindIndexBuffer(VkIndexBufferObj *indexBuffer, uint32_t offset)
+void VkCommandBufferObj::BindIndexBuffer(VkIndexBufferObj *indexBuffer, VkDeviceSize offset)
 {
     vkCmdBindIndexBuffer(handle(), indexBuffer->handle(), offset, indexBuffer->GetIndexType());
 }
diff --git a/tests/vkrenderframework.h b/tests/vkrenderframework.h
index be1886a..f8f2b27 100644
--- a/tests/vkrenderframework.h
+++ b/tests/vkrenderframework.h
@@ -173,7 +173,7 @@
     void BindPipeline(VkPipelineObj &pipeline);
     void BindDescriptorSet(VkDescriptorSetObj &descriptorSet);
     void BindVertexBuffer(VkConstantBufferObj *vertexBuffer, VkDeviceSize offset, uint32_t binding);
-    void BindIndexBuffer(VkIndexBufferObj *indexBuffer, uint32_t offset);
+    void BindIndexBuffer(VkIndexBufferObj *indexBuffer, VkDeviceSize offset);
     void BeginRenderPass(const VkRenderPassBeginInfo &info);
     void BindDynamicViewportState(VkDynamicViewportState viewportState);
     void BindDynamicRasterState(VkDynamicRasterState rasterState);
