diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 5d8ed7b8..07f4ae69 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -77,6 +77,7 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] = VK_EXTENSION(KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS, KHR_separate_depth_stencil_layouts), VK_EXTENSION(KHR_SHADER_INTEGER_DOT_PRODUCT, KHR_shader_integer_dot_product), VK_EXTENSION(KHR_FORMAT_FEATURE_FLAGS_2, KHR_format_feature_flags2), + VK_EXTENSION(KHR_SHADER_ATOMIC_INT64, KHR_shader_atomic_int64), /* EXT extensions */ VK_EXTENSION(EXT_CALIBRATED_TIMESTAMPS, EXT_calibrated_timestamps), VK_EXTENSION(EXT_CONDITIONAL_RENDERING, EXT_conditional_rendering), @@ -97,6 +98,7 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] = VK_EXTENSION(EXT_EXTENDED_DYNAMIC_STATE, EXT_extended_dynamic_state), VK_EXTENSION(EXT_EXTERNAL_MEMORY_HOST, EXT_external_memory_host), VK_EXTENSION(EXT_4444_FORMATS, EXT_4444_formats), + VK_EXTENSION(EXT_SHADER_IMAGE_ATOMIC_INT64, EXT_shader_image_atomic_int64), /* AMD extensions */ VK_EXTENSION(AMD_BUFFER_MARKER, AMD_buffer_marker), VK_EXTENSION(AMD_SHADER_CORE_PROPERTIES, AMD_shader_core_properties), @@ -1246,6 +1248,20 @@ 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->KHR_shader_atomic_int64) + { + info->shader_atomic_int64_features.sType = + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR; + vk_prepend_struct(&info->features2, &info->shader_atomic_int64_features); + } + + if (vulkan_info->EXT_shader_image_atomic_int64) + { + info->shader_image_atomic_int64_features.sType = + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT; + vk_prepend_struct(&info->features2, &info->shader_image_atomic_int64_features); + } + /* Core in Vulkan 1.1. */ info->shader_draw_parameters_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES; vk_prepend_struct(&info->features2, &info->shader_draw_parameters_features); diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 83578854..7e6b4eb8 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -125,6 +125,7 @@ struct vkd3d_vulkan_info bool KHR_separate_depth_stencil_layouts; bool KHR_shader_integer_dot_product; bool KHR_format_feature_flags2; + bool KHR_shader_atomic_int64; /* EXT device extensions */ bool EXT_calibrated_timestamps; bool EXT_conditional_rendering; @@ -145,6 +146,7 @@ struct vkd3d_vulkan_info bool EXT_extended_dynamic_state; bool EXT_external_memory_host; bool EXT_4444_formats; + bool EXT_shader_image_atomic_int64; /* AMD device extensions */ bool AMD_buffer_marker; bool AMD_shader_core_properties; @@ -2720,6 +2722,8 @@ struct vkd3d_physical_device_info VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV barycentric_features_nv; VkPhysicalDeviceRayQueryFeaturesKHR ray_query_features; VkPhysicalDeviceComputeShaderDerivativesFeaturesNV compute_shader_derivatives_features_nv; + VkPhysicalDeviceShaderAtomicInt64FeaturesKHR shader_atomic_int64_features; + VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT shader_image_atomic_int64_features; VkPhysicalDeviceFeatures2 features2;