VulkanOptions::VulkanOptions():
enable_validation(false),
- enable_debug_report(false)
+ enable_debug_report(false),
+ enable_geometry_shader(false)
{ }
{
VkDebugReportCallbackCreateInfoEXT debug_report_create_info = { };
debug_report_create_info.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
- debug_report_create_info.flags = VK_DEBUG_REPORT_WARNING_BIT_EXT|VK_DEBUG_REPORT_ERROR_BIT_EXT|VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT;
+ debug_report_create_info.flags = VK_DEBUG_REPORT_WARNING_BIT_EXT|VK_DEBUG_REPORT_ERROR_BIT_EXT|VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT|VK_DEBUG_REPORT_INFORMATION_BIT_EXT;
debug_report_create_info.pfnCallback = &Private::debug_report_func;
debug_report_create_info.pUserData = this;
continue;
if(supported)
- priv->physical_device = phys_devices[0];
+ {
+ priv->physical_device = phys_device;
+ break;
+ }
}
if(!priv->physical_device)
extensions.clear();
extensions.push_back("VK_KHR_swapchain");
+ VkPhysicalDeviceFeatures features = { };
+ features.geometryShader = (opts.enable_geometry_shader ? VK_TRUE : VK_FALSE);
+
VkDeviceCreateInfo device_create_info = { };
device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
device_create_info.queueCreateInfoCount = 1;
device_create_info.pQueueCreateInfos = &queue_create_info;
device_create_info.enabledExtensionCount = extensions.size();
device_create_info.ppEnabledExtensionNames = extensions.data();
+ device_create_info.pEnabledFeatures = &features;
result = f.vkCreateDevice(priv->physical_device, &device_create_info, 0, &priv->device);
if(result!=VK_SUCCESS)
debug_report_callback(0)
{ }
-VkBool32 VulkanContext::Private::debug_report_func(VkDebugReportFlagsEXT, VkDebugReportObjectTypeEXT obj_type, uint64_t obj_id, size_t, int32_t, const char *layer_prefix, const char *message, void *)
+VkBool32 VulkanContext::Private::debug_report_func(VkDebugReportFlagsEXT, VkDebugReportObjectTypeEXT, uint64_t, size_t, int32_t, const char *, const char *message, void *)
{
- IO::print(IO::cerr, "Vulkan debug report from %s: Object %d of type %d: %s\n", layer_prefix, obj_type, obj_id, message);
+ IO::print(IO::cerr, "%s\n", message);
return VK_FALSE;
}