From f3ea074fe35867015713ba1766c56478df564b67 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Tue, 23 Nov 2021 13:32:51 +0100 Subject: [PATCH] vkd3d: Enable NV_device_generated_commands extension. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/device.c | 11 +++++++++++ libs/vkd3d/vkd3d_private.h | 3 +++ libs/vkd3d/vulkan_procs.h | 6 ++++++ 3 files changed, 20 insertions(+) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 9c28b58c..49ffdaf4 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -114,6 +114,7 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] = VK_EXTENSION(NVX_IMAGE_VIEW_HANDLE, NVX_image_view_handle), VK_EXTENSION(NV_FRAGMENT_SHADER_BARYCENTRIC, NV_fragment_shader_barycentric), VK_EXTENSION(NV_COMPUTE_SHADER_DERIVATIVES, NV_compute_shader_derivatives), + VK_EXTENSION(NV_DEVICE_GENERATED_COMMANDS, NV_device_generated_commands), /* VALVE extensions */ VK_EXTENSION(VALVE_MUTABLE_DESCRIPTOR_TYPE, VALVE_mutable_descriptor_type), }; @@ -1336,6 +1337,16 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i vk_prepend_struct(&info->features2, &info->compute_shader_derivatives_features_nv); } + if (vulkan_info->NV_device_generated_commands) + { + info->device_generated_commands_features_nv.sType = + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV; + info->device_generated_commands_properties_nv.sType = + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV; + vk_prepend_struct(&info->features2, &info->device_generated_commands_features_nv); + vk_prepend_struct(&info->properties2, &info->device_generated_commands_properties_nv); + } + if (vulkan_info->KHR_shader_atomic_int64) { info->shader_atomic_int64_features.sType = diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 7d287fe5..89a55106 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -162,6 +162,7 @@ struct vkd3d_vulkan_info bool NVX_image_view_handle; bool NV_fragment_shader_barycentric; bool NV_compute_shader_derivatives; + bool NV_device_generated_commands; /* VALVE extensions */ bool VALVE_mutable_descriptor_type; @@ -2776,6 +2777,7 @@ struct vkd3d_physical_device_info VkPhysicalDeviceFragmentShadingRatePropertiesKHR fragment_shading_rate_properties; VkPhysicalDeviceConservativeRasterizationPropertiesEXT conservative_rasterization_properties; VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR shader_integer_dot_product_properties; + VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV device_generated_commands_properties_nv; VkPhysicalDeviceProperties2KHR properties2; @@ -2812,6 +2814,7 @@ struct vkd3d_physical_device_info VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT shader_image_atomic_int64_features; VkPhysicalDeviceScalarBlockLayoutFeaturesEXT scalar_block_layout_features; VkPhysicalDeviceImageViewMinLodFeaturesEXT image_view_min_lod_features; + VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV device_generated_commands_features_nv; VkPhysicalDeviceFeatures2 features2; diff --git a/libs/vkd3d/vulkan_procs.h b/libs/vkd3d/vulkan_procs.h index 4152e9dd..1981de4f 100644 --- a/libs/vkd3d/vulkan_procs.h +++ b/libs/vkd3d/vulkan_procs.h @@ -293,6 +293,12 @@ VK_DEVICE_EXT_PFN(vkCmdCuLaunchKernelNVX) VK_DEVICE_EXT_PFN(vkGetImageViewHandleNVX) VK_DEVICE_EXT_PFN(vkGetImageViewAddressNVX) +/* VK_NV_device_generated_commands */ +VK_DEVICE_EXT_PFN(vkCreateIndirectCommandsLayoutNV) +VK_DEVICE_EXT_PFN(vkDestroyIndirectCommandsLayoutNV) +VK_DEVICE_EXT_PFN(vkGetGeneratedCommandsMemoryRequirementsNV) +VK_DEVICE_EXT_PFN(vkCmdExecuteGeneratedCommandsNV) + #undef VK_INSTANCE_PFN #undef VK_INSTANCE_EXT_PFN #undef VK_DEVICE_PFN