Skip to content

Commit 441072c

Browse files
committed
Add debug utils messenger for vkCreateInstance and vkDestroyInstance
1 parent b2f5b8e commit 441072c

29 files changed

Lines changed: 474 additions & 112 deletions

03_Drawing_a_triangle/00_Setup/02_Validation_layers.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,60 @@ When you run the program again you'll see that the error message has
379379
disappeared. If you want to see which call triggered a message, you can add a
380380
breakpoint to the message callback and look at the stack trace.
381381

382+
## Debugging instance creation and destruction
383+
384+
Although we've now added debugging with validation layers to the program we're not covering everything quite yet. The `vkCreateDebugUtilsMessengerEXT` call requires a valid instance to have been created and `vkDestroyDebugUtilsMessengerEXT` must be called before the instance is destroyed. This currently leaves us unable to debug any issues in the `vkCreateInstance` and `vkDestroyInstance` calls.
385+
386+
However, if you closely read the [extension documentation](https://github.com/KhronosGroup/Vulkan-Docs/blob/master/appendices/VK_EXT_debug_utils.txt#L120), you'll see that there is a way to create a separate debug utils messenger specifically for those two function calls. It requires you to simply pass a pointer to a `VkDebugUtilsMessengerCreateInfoEXT` struct in the `pNext` extension field of `VkInstanceCreateInfo`. First extract population of the messenger create info into a separate function:
387+
388+
```c++
389+
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
390+
createInfo = {};
391+
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
392+
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
393+
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
394+
createInfo.pfnUserCallback = debugCallback;
395+
}
396+
397+
...
398+
399+
void setupDebugMessenger() {
400+
if (!enableValidationLayers) return;
401+
402+
VkDebugUtilsMessengerCreateInfoEXT createInfo;
403+
populateDebugMessengerCreateInfo(createInfo);
404+
405+
if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
406+
throw std::runtime_error("failed to set up debug messenger!");
407+
}
408+
}
409+
```
410+
411+
We can now re-use this in the `createInstance` function:
412+
413+
```c++
414+
void createInstance() {
415+
...
416+
417+
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
418+
if (enableValidationLayers) {
419+
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
420+
createInfo.ppEnabledLayerNames = validationLayers.data();
421+
422+
populateDebugMessengerCreateInfo(debugCreateInfo);
423+
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
424+
} else {
425+
createInfo.enabledLayerCount = 0;
426+
427+
createInfo.pNext = nullptr;
428+
}
429+
430+
...
431+
}
432+
```
433+
434+
The `debugCreateInfo` variable is placed outside the if statement to ensure that it is not destroyed before the `vkCreateInstance` call. By creating an additional debug messenger this way it will automatically be used during `vkCreateInstance` and `vkDestroyInstance` and cleaned up after that.
435+
382436
## Configuration
383437

384438
There are a lot more settings for the behavior of validation layers than just

code/02_validation_layers.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,26 +104,37 @@ class HelloTriangleApplication {
104104
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
105105
createInfo.ppEnabledExtensionNames = extensions.data();
106106

107+
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
107108
if (enableValidationLayers) {
108109
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
109110
createInfo.ppEnabledLayerNames = validationLayers.data();
111+
112+
populateDebugMessengerCreateInfo(debugCreateInfo);
113+
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
110114
} else {
111115
createInfo.enabledLayerCount = 0;
116+
117+
createInfo.pNext = nullptr;
112118
}
113119

114120
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
115121
throw std::runtime_error("failed to create instance!");
116122
}
117123
}
118124

119-
void setupDebugMessenger() {
120-
if (!enableValidationLayers) return;
121-
122-
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
125+
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
126+
createInfo = {};
123127
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
124128
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
125129
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
126130
createInfo.pfnUserCallback = debugCallback;
131+
}
132+
133+
void setupDebugMessenger() {
134+
if (!enableValidationLayers) return;
135+
136+
VkDebugUtilsMessengerCreateInfoEXT createInfo;
137+
populateDebugMessengerCreateInfo(createInfo);
127138

128139
if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
129140
throw std::runtime_error("failed to set up debug messenger!");

code/03_physical_device_selection.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,26 +116,37 @@ class HelloTriangleApplication {
116116
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
117117
createInfo.ppEnabledExtensionNames = extensions.data();
118118

119+
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
119120
if (enableValidationLayers) {
120121
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
121122
createInfo.ppEnabledLayerNames = validationLayers.data();
123+
124+
populateDebugMessengerCreateInfo(debugCreateInfo);
125+
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
122126
} else {
123127
createInfo.enabledLayerCount = 0;
128+
129+
createInfo.pNext = nullptr;
124130
}
125131

126132
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
127133
throw std::runtime_error("failed to create instance!");
128134
}
129135
}
130136

131-
void setupDebugMessenger() {
132-
if (!enableValidationLayers) return;
133-
134-
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
137+
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
138+
createInfo = {};
135139
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
136140
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
137141
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
138142
createInfo.pfnUserCallback = debugCallback;
143+
}
144+
145+
void setupDebugMessenger() {
146+
if (!enableValidationLayers) return;
147+
148+
VkDebugUtilsMessengerCreateInfoEXT createInfo;
149+
populateDebugMessengerCreateInfo(createInfo);
139150

140151
if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
141152
throw std::runtime_error("failed to set up debug messenger!");

code/04_logical_device.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,26 +122,37 @@ class HelloTriangleApplication {
122122
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
123123
createInfo.ppEnabledExtensionNames = extensions.data();
124124

125+
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
125126
if (enableValidationLayers) {
126127
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
127128
createInfo.ppEnabledLayerNames = validationLayers.data();
129+
130+
populateDebugMessengerCreateInfo(debugCreateInfo);
131+
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
128132
} else {
129133
createInfo.enabledLayerCount = 0;
134+
135+
createInfo.pNext = nullptr;
130136
}
131137

132138
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
133139
throw std::runtime_error("failed to create instance!");
134140
}
135141
}
136142

137-
void setupDebugMessenger() {
138-
if (!enableValidationLayers) return;
139-
140-
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
143+
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
144+
createInfo = {};
141145
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
142146
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
143147
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
144148
createInfo.pfnUserCallback = debugCallback;
149+
}
150+
151+
void setupDebugMessenger() {
152+
if (!enableValidationLayers) return;
153+
154+
VkDebugUtilsMessengerCreateInfoEXT createInfo;
155+
populateDebugMessengerCreateInfo(createInfo);
145156

146157
if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
147158
throw std::runtime_error("failed to set up debug messenger!");

code/05_window_surface.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,26 +128,37 @@ class HelloTriangleApplication {
128128
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
129129
createInfo.ppEnabledExtensionNames = extensions.data();
130130

131+
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
131132
if (enableValidationLayers) {
132133
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
133134
createInfo.ppEnabledLayerNames = validationLayers.data();
135+
136+
populateDebugMessengerCreateInfo(debugCreateInfo);
137+
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
134138
} else {
135139
createInfo.enabledLayerCount = 0;
140+
141+
createInfo.pNext = nullptr;
136142
}
137143

138144
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
139145
throw std::runtime_error("failed to create instance!");
140146
}
141147
}
142148

143-
void setupDebugMessenger() {
144-
if (!enableValidationLayers) return;
145-
146-
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
149+
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
150+
createInfo = {};
147151
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
148152
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
149153
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
150154
createInfo.pfnUserCallback = debugCallback;
155+
}
156+
157+
void setupDebugMessenger() {
158+
if (!enableValidationLayers) return;
159+
160+
VkDebugUtilsMessengerCreateInfoEXT createInfo;
161+
populateDebugMessengerCreateInfo(createInfo);
151162

152163
if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
153164
throw std::runtime_error("failed to set up debug messenger!");

code/06_swap_chain_creation.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,26 +146,37 @@ class HelloTriangleApplication {
146146
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
147147
createInfo.ppEnabledExtensionNames = extensions.data();
148148

149+
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
149150
if (enableValidationLayers) {
150151
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
151152
createInfo.ppEnabledLayerNames = validationLayers.data();
153+
154+
populateDebugMessengerCreateInfo(debugCreateInfo);
155+
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
152156
} else {
153157
createInfo.enabledLayerCount = 0;
158+
159+
createInfo.pNext = nullptr;
154160
}
155161

156162
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
157163
throw std::runtime_error("failed to create instance!");
158164
}
159165
}
160166

161-
void setupDebugMessenger() {
162-
if (!enableValidationLayers) return;
163-
164-
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
167+
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
168+
createInfo = {};
165169
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
166170
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
167171
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
168172
createInfo.pfnUserCallback = debugCallback;
173+
}
174+
175+
void setupDebugMessenger() {
176+
if (!enableValidationLayers) return;
177+
178+
VkDebugUtilsMessengerCreateInfoEXT createInfo;
179+
populateDebugMessengerCreateInfo(createInfo);
169180

170181
if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
171182
throw std::runtime_error("failed to set up debug messenger!");

code/07_image_views.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,26 +152,37 @@ class HelloTriangleApplication {
152152
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
153153
createInfo.ppEnabledExtensionNames = extensions.data();
154154

155+
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
155156
if (enableValidationLayers) {
156157
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
157158
createInfo.ppEnabledLayerNames = validationLayers.data();
159+
160+
populateDebugMessengerCreateInfo(debugCreateInfo);
161+
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
158162
} else {
159163
createInfo.enabledLayerCount = 0;
164+
165+
createInfo.pNext = nullptr;
160166
}
161167

162168
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
163169
throw std::runtime_error("failed to create instance!");
164170
}
165171
}
166172

167-
void setupDebugMessenger() {
168-
if (!enableValidationLayers) return;
169-
170-
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
173+
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
174+
createInfo = {};
171175
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
172176
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
173177
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
174178
createInfo.pfnUserCallback = debugCallback;
179+
}
180+
181+
void setupDebugMessenger() {
182+
if (!enableValidationLayers) return;
183+
184+
VkDebugUtilsMessengerCreateInfoEXT createInfo;
185+
populateDebugMessengerCreateInfo(createInfo);
175186

176187
if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
177188
throw std::runtime_error("failed to set up debug messenger!");

code/08_graphics_pipeline.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,26 +153,37 @@ class HelloTriangleApplication {
153153
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
154154
createInfo.ppEnabledExtensionNames = extensions.data();
155155

156+
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
156157
if (enableValidationLayers) {
157158
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
158159
createInfo.ppEnabledLayerNames = validationLayers.data();
160+
161+
populateDebugMessengerCreateInfo(debugCreateInfo);
162+
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
159163
} else {
160164
createInfo.enabledLayerCount = 0;
165+
166+
createInfo.pNext = nullptr;
161167
}
162168

163169
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
164170
throw std::runtime_error("failed to create instance!");
165171
}
166172
}
167173

168-
void setupDebugMessenger() {
169-
if (!enableValidationLayers) return;
170-
171-
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
174+
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
175+
createInfo = {};
172176
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
173177
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
174178
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
175179
createInfo.pfnUserCallback = debugCallback;
180+
}
181+
182+
void setupDebugMessenger() {
183+
if (!enableValidationLayers) return;
184+
185+
VkDebugUtilsMessengerCreateInfoEXT createInfo;
186+
populateDebugMessengerCreateInfo(createInfo);
176187

177188
if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
178189
throw std::runtime_error("failed to set up debug messenger!");

code/09_shader_modules.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,26 +154,37 @@ class HelloTriangleApplication {
154154
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
155155
createInfo.ppEnabledExtensionNames = extensions.data();
156156

157+
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
157158
if (enableValidationLayers) {
158159
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
159160
createInfo.ppEnabledLayerNames = validationLayers.data();
161+
162+
populateDebugMessengerCreateInfo(debugCreateInfo);
163+
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
160164
} else {
161165
createInfo.enabledLayerCount = 0;
166+
167+
createInfo.pNext = nullptr;
162168
}
163169

164170
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
165171
throw std::runtime_error("failed to create instance!");
166172
}
167173
}
168174

169-
void setupDebugMessenger() {
170-
if (!enableValidationLayers) return;
171-
172-
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
175+
void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) {
176+
createInfo = {};
173177
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
174178
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
175179
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
176180
createInfo.pfnUserCallback = debugCallback;
181+
}
182+
183+
void setupDebugMessenger() {
184+
if (!enableValidationLayers) return;
185+
186+
VkDebugUtilsMessengerCreateInfoEXT createInfo;
187+
populateDebugMessengerCreateInfo(createInfo);
177188

178189
if (CreateDebugUtilsMessengerEXT(instance, &createInfo, nullptr, &debugMessenger) != VK_SUCCESS) {
179190
throw std::runtime_error("failed to set up debug messenger!");

0 commit comments

Comments
 (0)