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) \