diff --git a/layers/screenshot.cpp b/layers/screenshot.cpp
index 1b8197e..7f8ce4a 100644
--- a/layers/screenshot.cpp
+++ b/layers/screenshot.cpp
@@ -271,7 +271,7 @@
 
 static void createDeviceRegisterExtensions(const VkDeviceCreateInfo* pCreateInfo, VkDevice device)
 {
-    uint32_t i, ext_idx;
+    uint32_t i;
     VkLayerDispatchTable *pDisp  = get_dispatch_table(screenshot_device_table_map, device);
     deviceExtMap[pDisp].wsi_enabled = false;
     for (i = 0; i < pCreateInfo->extensionCount; i++) {
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);
