|
| 1 | +#include <assert.h> |
1 | 2 | #include <iostream> |
2 | 3 | #include <stdexcept> |
3 | 4 | #include <vector> |
@@ -191,25 +192,45 @@ class HelloTriangleApplication { |
191 | 192 | // get the first index into queueFamilyProperties which supports graphics |
192 | 193 | auto graphicsQueueFamilyProperty = std::ranges::find_if( queueFamilyProperties, []( auto const & qfp ) |
193 | 194 | { return (qfp.queueFlags & vk::QueueFlagBits::eGraphics) != static_cast<vk::QueueFlags>(0); } ); |
| 195 | + assert(graphicsQueueFamilyProperty != queueFamilyProperties.end() && "No graphics queue family found!"); |
194 | 196 |
|
195 | 197 | auto graphicsIndex = static_cast<uint32_t>( std::distance( queueFamilyProperties.begin(), graphicsQueueFamilyProperty ) ); |
196 | 198 |
|
| 199 | +#if 1 |
197 | 200 | // query for Vulkan 1.3 features |
198 | | - auto features = physicalDevice.getFeatures2(); |
199 | | - vk::PhysicalDeviceVulkan13Features vulkan13Features; |
200 | | - vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT extendedDynamicStateFeatures; |
201 | | - vulkan13Features.dynamicRendering = vk::True; |
202 | | - extendedDynamicStateFeatures.extendedDynamicState = vk::True; |
203 | | - vulkan13Features.pNext = &extendedDynamicStateFeatures; |
204 | | - features.pNext = &vulkan13Features; |
| 201 | + vk::StructureChain<vk::PhysicalDeviceFeatures2, vk::PhysicalDeviceVulkan13Features, vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT> featureChain = { |
| 202 | + {}, // vk::PhysicalDeviceFeatures2 |
| 203 | + {.dynamicRendering = true }, // vk::PhysicalDeviceVulkan13Features |
| 204 | + {.extendedDynamicState = true } // vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT |
| 205 | + }; |
| 206 | + |
205 | 207 | // create a Device |
206 | 208 | float queuePriority = 0.0f; |
207 | | - vk::DeviceQueueCreateInfo deviceQueueCreateInfo { .queueFamilyIndex = graphicsIndex, .queueCount = 1, .pQueuePriorities = &queuePriority }; |
208 | | - vk::DeviceCreateInfo deviceCreateInfo{ .pNext = &features, .queueCreateInfoCount = 1, .pQueueCreateInfos = &deviceQueueCreateInfo }; |
209 | | - deviceCreateInfo.enabledExtensionCount = requiredDeviceExtension.size(); |
210 | | - deviceCreateInfo.ppEnabledExtensionNames = requiredDeviceExtension.data(); |
| 209 | + vk::DeviceQueueCreateInfo deviceQueueCreateInfo{ .queueFamilyIndex = graphicsIndex, .queueCount = 1, .pQueuePriorities = &queuePriority }; |
| 210 | + vk::DeviceCreateInfo deviceCreateInfo{ .pNext = &featureChain.get<vk::PhysicalDeviceFeatures2>(), |
| 211 | + .queueCreateInfoCount = 1, |
| 212 | + .pQueueCreateInfos = &deviceQueueCreateInfo, |
| 213 | + .enabledExtensionCount = static_cast<uint32_t>(requiredDeviceExtension.size()), |
| 214 | + .ppEnabledExtensionNames = requiredDeviceExtension.data() }; |
| 215 | + |
| 216 | + device = vk::raii::Device(physicalDevice, deviceCreateInfo); |
| 217 | +#else |
| 218 | + // create a Device, querying for Vulkan 1.3 features |
| 219 | + float queuePriority = 0.0f; |
| 220 | + vk::DeviceQueueCreateInfo deviceQueueCreateInfo{ .queueFamilyIndex = graphicsIndex, .queueCount = 1, .pQueuePriorities = &queuePriority }; |
| 221 | + vk::StructureChain<vk::DeviceCreateInfo, vk::PhysicalDeviceVulkan13Features, vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT> |
| 222 | + createInfoChain = { |
| 223 | + {.queueCreateInfoCount = 1, |
| 224 | + .pQueueCreateInfos = &deviceQueueCreateInfo, |
| 225 | + .enabledExtensionCount = static_cast<uint32_t>(requiredDeviceExtension.size()), |
| 226 | + .ppEnabledExtensionNames = requiredDeviceExtension.data() }, // vk::DeviceCreateInfo |
| 227 | + {.dynamicRendering = true }, // vk::PhysicalDeviceVulkan13Features |
| 228 | + {.extendedDynamicState = true } // vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT |
| 229 | + }; |
| 230 | +
|
| 231 | + device = vk::raii::Device(physicalDevice, createInfoChain.get<vk::DeviceCreateInfo>()); |
| 232 | +#endif |
211 | 233 |
|
212 | | - device = vk::raii::Device( physicalDevice, deviceCreateInfo ); |
213 | 234 | graphicsQueue = vk::raii::Queue( device, graphicsIndex, 0 ); |
214 | 235 | } |
215 | 236 |
|
|
0 commit comments