demos: Add more validation layers and fix errors/warnings
diff --git a/demos/cube.c b/demos/cube.c
index 73562ec..fd74171 100644
--- a/demos/cube.c
+++ b/demos/cube.c
@@ -66,11 +66,6 @@
         exit(1);                                        \
    } while (0)
 
-// NOTE: If the following values (copied from "loader_platform.h") change, they
-// need to change here as well:
-#define LAYER_NAMES_ENV "VK_LAYER_NAMES"
-#define LAYER_NAMES_REGISTRY_VALUE "VK_LAYER_NAMES"
-
 #else  // _WIN32
 
 #define ERR_EXIT(err_msg, err_class)                    \
@@ -379,6 +374,9 @@
     float spin_increment;
     bool pause;
 
+    VkShaderModule vert_shader_module;
+    VkShaderModule frag_shader_module;
+
     VkDescriptorPool desc_pool;
     VkDescriptorSet desc_set;
 
@@ -617,8 +615,7 @@
     // return codes
     assert(!err);
 
-// FIXME: UNCOMMENT THE FOLLOWING LINE ONCE WE HAVE A NEW-ENOUGH "vulkan.h" HEADER:
-//    err = vkDestroySemaphore(demo->device, presentCompleteSemaphore);
+    err = vkDestroySemaphore(demo->device, presentCompleteSemaphore);
     assert(!err);
 
     err = vkQueueWaitIdle(demo->queue);
@@ -1398,12 +1395,12 @@
 
 static VkShader demo_prepare_shader(struct demo* demo,
                                       VkShaderStage stage,
+                                      VkShaderModule* pShaderModule,
                                       const void* code,
                                       size_t size)
 {
     VkShaderModuleCreateInfo moduleCreateInfo;
     VkShaderCreateInfo shaderCreateInfo;
-    VkShaderModule shaderModule;
     VkShader shader;
     VkResult err;
 
@@ -1419,13 +1416,13 @@
         moduleCreateInfo.codeSize = size;
         moduleCreateInfo.pCode = code;
         moduleCreateInfo.flags = 0;
-        err = vkCreateShaderModule(demo->device, &moduleCreateInfo, &shaderModule);
+        err = vkCreateShaderModule(demo->device, &moduleCreateInfo, pShaderModule);
         if (err) {
             free((void *) moduleCreateInfo.pCode);
         }
 
         shaderCreateInfo.flags = 0;
-        shaderCreateInfo.module = shaderModule;
+        shaderCreateInfo.module = *pShaderModule;
         shaderCreateInfo.pName = "main";
         err = vkCreateShader(demo->device, &shaderCreateInfo, &shader);
     } else {
@@ -1441,13 +1438,13 @@
         ((uint32_t *) moduleCreateInfo.pCode)[2] = stage;
         memcpy(((uint32_t *) moduleCreateInfo.pCode + 3), code, size + 1);
 
-        err = vkCreateShaderModule(demo->device, &moduleCreateInfo, &shaderModule);
+        err = vkCreateShaderModule(demo->device, &moduleCreateInfo, pShaderModule);
         if (err) {
             free((void *) moduleCreateInfo.pCode);
         }
 
         shaderCreateInfo.flags = 0;
-        shaderCreateInfo.module = shaderModule;
+        shaderCreateInfo.module = *pShaderModule;
         shaderCreateInfo.pName = "main";
         err = vkCreateShader(demo->device, &shaderCreateInfo, &shader);
     }
@@ -1485,7 +1482,7 @@
 
         vertShaderCode = demo_read_spv("cube-vert.spv", &size);
 
-        return demo_prepare_shader(demo, VK_SHADER_STAGE_VERTEX,
+        return demo_prepare_shader(demo, VK_SHADER_STAGE_VERTEX, &demo->vert_shader_module,
                                    vertShaderCode, size);
     } else {
         static const char *vertShaderText =
@@ -1511,7 +1508,7 @@
                 "   gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0;\n"
                 "}\n";
 
-        return demo_prepare_shader(demo, VK_SHADER_STAGE_VERTEX,
+        return demo_prepare_shader(demo, VK_SHADER_STAGE_VERTEX, &demo->vert_shader_module,
                                    (const void *) vertShaderText,
                                    strlen(vertShaderText));
     }
@@ -1525,7 +1522,7 @@
 
         fragShaderCode = demo_read_spv("cube-frag.spv", &size);
 
-        return demo_prepare_shader(demo, VK_SHADER_STAGE_FRAGMENT,
+        return demo_prepare_shader(demo, VK_SHADER_STAGE_FRAGMENT, &demo->frag_shader_module,
                                    fragShaderCode, size);
     } else {
         static const char *fragShaderText =
@@ -1540,7 +1537,7 @@
                 "   uFragColor = texture(tex, texcoord.xy);\n"
                 "}\n";
 
-        return demo_prepare_shader(demo, VK_SHADER_STAGE_FRAGMENT,
+        return demo_prepare_shader(demo, VK_SHADER_STAGE_FRAGMENT, &demo->frag_shader_module,
                                    (const void *) fragShaderText,
                                    strlen(fragShaderText));
     }
@@ -1637,6 +1634,8 @@
     for (uint32_t i = 0; i < pipeline.stageCount; i++) {
         vkDestroyShader(demo->device, shaderStages[i].shader);
     }
+    vkDestroyShaderModule(demo->device, demo->frag_shader_module);
+    vkDestroyShaderModule(demo->device, demo->vert_shader_module);
 }
 
 static void demo_prepare_dynamic_states(struct demo *demo)
@@ -2156,11 +2155,21 @@
     uint32_t enabled_layer_count = 0;
 
     char *instance_validation_layers[] = {
+        "Threading",
         "MemTracker",
+        "ObjectTracker",
+        "DrawState",
+        "ParamChecker",
+        "ShaderChecker",
     };
 
     char *device_validation_layers[] = {
+        "Threading",
         "MemTracker",
+        "ObjectTracker",
+        "DrawState",
+        "ParamChecker",
+        "ShaderChecker",
     };
 
     /* Look for validation layers */
diff --git a/demos/tri.c b/demos/tri.c
index 2154420..20720b8 100644
--- a/demos/tri.c
+++ b/demos/tri.c
@@ -68,11 +68,6 @@
         MessageBox(NULL, err_msg, err_class, MB_OK);    \
         exit(1);                                        \
    } while (0)
-
-// NOTE: If the following values (copied from "loader_platform.h") change, they
-// need to change here as well:
-#define LAYER_NAMES_ENV "VK_LAYER_NAMES"
-#define LAYER_NAMES_REGISTRY_VALUE "VK_LAYER_NAMES"
 #else  // _WIN32
 
 #define ERR_EXIT(err_msg, err_class)                    \