From b6dba5c819d540baf7296ed09222190e77f97c30 Mon Sep 17 00:00:00 2001 From: Tony Barbour Date: Tue, 21 Jul 2015 09:04:41 -0600 Subject: demos: Add more validation layers and fix errors/warnings --- demos/cube.c | 41 +++++++++++++++++++++++++---------------- demos/tri.c | 5 ----- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/demos/cube.c b/demos/cube.c index 73562eca..fd74171c 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 @@ struct demo { float spin_increment; bool pause; + VkShaderModule vert_shader_module; + VkShaderModule frag_shader_module; + VkDescriptorPool desc_pool; VkDescriptorSet desc_set; @@ -617,8 +615,7 @@ static void demo_draw(struct demo *demo) // 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 void demo_prepare_render_pass(struct demo *demo) 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 @@ static VkShader demo_prepare_shader(struct demo* demo, 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 @@ static VkShader demo_prepare_shader(struct demo* demo, ((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 @@ static VkShader demo_prepare_vs(struct demo *demo) 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 @@ static VkShader demo_prepare_vs(struct demo *demo) " 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 @@ static VkShader demo_prepare_fs(struct demo *demo) 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 @@ static VkShader demo_prepare_fs(struct demo *demo) " 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 @@ static void demo_prepare_pipeline(struct demo *demo) 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 @@ static void demo_init_vk(struct demo *demo) 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 21544200..20720b89 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) \ -- cgit v1.2.3