| 820 | } |
| 821 | |
| 822 | void Demo::create_device() { |
| 823 | float priorities = 0.0; |
| 824 | |
| 825 | std::vector<vk::DeviceQueueCreateInfo> queues; |
| 826 | const vk::DeviceQueueCreateFlags queue_create_flags = |
| 827 | protected_output ? vk::DeviceQueueCreateFlagBits::eProtected : vk::DeviceQueueCreateFlags{}; |
| 828 | queues.push_back(vk::DeviceQueueCreateInfo() |
| 829 | .setQueueFamilyIndex(graphics_queue_family_index) |
| 830 | .setQueuePriorities(priorities) |
| 831 | .setFlags(queue_create_flags)); |
| 832 | |
| 833 | if (separate_present_queue) { |
| 834 | queues.push_back( |
| 835 | vk::DeviceQueueCreateInfo().setQueueFamilyIndex(present_queue_family_index).setQueuePriorities(priorities)); |
| 836 | } |
| 837 | |
| 838 | auto const protected_memory_features = vk::PhysicalDeviceProtectedMemoryFeatures().setProtectedMemory(protected_output); |
| 839 | auto deviceInfo = vk::DeviceCreateInfo() |
| 840 | .setPNext(protected_output ? &protected_memory_features : nullptr) |
| 841 | .setQueueCreateInfos(queues) |
| 842 | .setPEnabledExtensionNames(enabled_device_extensions); |
| 843 | auto device_return = gpu.createDevice(deviceInfo); |
| 844 | VERIFY(device_return.result == vk::Result::eSuccess); |
| 845 | device = device_return.value; |
| 846 | VULKAN_HPP_DEFAULT_DISPATCHER.init(device); |
| 847 | } |
| 848 | |
| 849 | void Demo::destroy_texture(texture_object &tex_objs) { |
| 850 | // clean up staging resources |