diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 30c90c14..dc02c1f6 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -84,6 +84,11 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] = VK_EXTENSION(KHR_TIMELINE_SEMAPHORE, KHR_timeline_semaphore), VK_EXTENSION(KHR_SHADER_FLOAT16_INT8, KHR_shader_float16_int8), VK_EXTENSION(KHR_SHADER_SUBGROUP_EXTENDED_TYPES, KHR_shader_subgroup_extended_types), + VK_EXTENSION(KHR_RAY_TRACING_PIPELINE, KHR_ray_tracing_pipeline), + VK_EXTENSION(KHR_ACCELERATION_STRUCTURE, KHR_acceleration_structure), + VK_EXTENSION(KHR_DEFERRED_HOST_OPERATIONS, KHR_deferred_host_operations), + VK_EXTENSION(KHR_SPIRV_1_4, KHR_spirv_1_4), + VK_EXTENSION(KHR_SHADER_FLOAT_CONTROLS, KHR_shader_float_controls), /* EXT extensions */ VK_EXTENSION(EXT_CALIBRATED_TIMESTAMPS, EXT_calibrated_timestamps), VK_EXTENSION(EXT_CONDITIONAL_RENDERING, EXT_conditional_rendering), @@ -776,8 +781,11 @@ static uint32_t vkd3d_physical_device_get_time_domains(struct d3d12_device *devi static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *info, struct d3d12_device *device) { VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR *shader_subgroup_extended_types_features; + VkPhysicalDeviceAccelerationStructurePropertiesKHR *acceleration_structure_properties; const struct vkd3d_vk_instance_procs *vk_procs = &device->vkd3d_instance->vk_procs; VkPhysicalDeviceSubgroupSizeControlPropertiesEXT *subgroup_size_control_properties; + VkPhysicalDeviceAccelerationStructureFeaturesKHR *acceleration_structure_features; + VkPhysicalDeviceRayTracingPipelinePropertiesKHR *ray_tracing_pipeline_properties; VkPhysicalDeviceInlineUniformBlockPropertiesEXT *inline_uniform_block_properties; VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *extended_dynamic_state_features; VkPhysicalDeviceExternalMemoryHostPropertiesEXT *external_memory_host_properties; @@ -789,6 +797,7 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *vertex_divisor_properties; VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT *buffer_alignment_properties; VkPhysicalDeviceTimelineSemaphorePropertiesKHR *timeline_semaphore_properties; + VkPhysicalDeviceRayTracingPipelineFeaturesKHR *ray_tracing_pipeline_features; VkPhysicalDeviceInlineUniformBlockFeaturesEXT *inline_uniform_block_features; VkPhysicalDeviceDescriptorIndexingFeaturesEXT *descriptor_indexing_features; VkPhysicalDeviceShaderSMBuiltinsPropertiesNV *shader_sm_builtins_properties; @@ -798,6 +807,7 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i VkPhysicalDeviceCustomBorderColorFeaturesEXT *custom_border_color_features; VkPhysicalDeviceTimelineSemaphoreFeaturesKHR *timeline_semaphore_features; VkPhysicalDevicePushDescriptorPropertiesKHR *push_descriptor_properties; + VkPhysicalDeviceFloatControlsPropertiesKHR *float_control_properties; VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE *mutable_features; VkPhysicalDeviceShaderFloat16Int8FeaturesKHR *float16_int8_features; VkPhysicalDeviceShaderCoreProperties2AMD *shader_core_properties2; @@ -846,6 +856,11 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i extended_dynamic_state_features = &info->extended_dynamic_state_features; external_memory_host_properties = &info->external_memory_host_properties; mutable_features = &info->mutable_descriptor_features; + acceleration_structure_properties = &info->acceleration_structure_properties; + acceleration_structure_features = &info->acceleration_structure_features; + ray_tracing_pipeline_properties = &info->ray_tracing_pipeline_properties; + ray_tracing_pipeline_features = &info->ray_tracing_pipeline_features; + float_control_properties = &info->float_control_properties; info->features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; info->properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; @@ -1014,6 +1029,25 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i vk_prepend_struct(&info->features2, mutable_features); } + if (vulkan_info->KHR_acceleration_structure && vulkan_info->KHR_ray_tracing_pipeline && + vulkan_info->KHR_deferred_host_operations && vulkan_info->KHR_spirv_1_4) + { + acceleration_structure_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR; + acceleration_structure_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR; + ray_tracing_pipeline_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR; + ray_tracing_pipeline_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR; + vk_prepend_struct(&info->features2, acceleration_structure_features); + vk_prepend_struct(&info->features2, ray_tracing_pipeline_features); + vk_prepend_struct(&info->properties2, acceleration_structure_properties); + vk_prepend_struct(&info->properties2, ray_tracing_pipeline_properties); + } + + if (vulkan_info->KHR_shader_float_controls) + { + float_control_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR; + vk_prepend_struct(&info->properties2, float_control_properties); + } + VK_CALL(vkGetPhysicalDeviceFeatures2(physical_device, &info->features2)); VK_CALL(vkGetPhysicalDeviceProperties2(physical_device, &info->properties2)); } diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 15c35b20..8f365976 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -113,6 +113,11 @@ struct vkd3d_vulkan_info bool KHR_timeline_semaphore; bool KHR_shader_float16_int8; bool KHR_shader_subgroup_extended_types; + bool KHR_ray_tracing_pipeline; + bool KHR_acceleration_structure; + bool KHR_deferred_host_operations; + bool KHR_spirv_1_4; + bool KHR_shader_float_controls; /* EXT device extensions */ bool EXT_calibrated_timestamps; bool EXT_conditional_rendering; @@ -2051,6 +2056,9 @@ struct vkd3d_physical_device_info VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT sampler_filter_minmax_properties; VkPhysicalDeviceRobustness2PropertiesEXT robustness2_properties; VkPhysicalDeviceExternalMemoryHostPropertiesEXT external_memory_host_properties; + VkPhysicalDeviceRayTracingPipelinePropertiesKHR ray_tracing_pipeline_properties; + VkPhysicalDeviceAccelerationStructurePropertiesKHR acceleration_structure_properties; + VkPhysicalDeviceFloatControlsPropertiesKHR float_control_properties; VkPhysicalDeviceProperties2KHR properties2; @@ -2071,6 +2079,8 @@ struct vkd3d_physical_device_info VkPhysicalDeviceRobustness2FeaturesEXT robustness2_features; VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state_features; VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE mutable_descriptor_features; + VkPhysicalDeviceRayTracingPipelineFeaturesKHR ray_tracing_pipeline_features; + VkPhysicalDeviceAccelerationStructureFeaturesKHR acceleration_structure_features; VkPhysicalDeviceFeatures2 features2;