@@ -96,6 +96,7 @@ typedef struct VulkanDevicePriv {
9696 VkPhysicalDeviceVulkan12Features device_features_1_2 ;
9797 VkPhysicalDeviceVulkan13Features device_features_1_3 ;
9898 VkPhysicalDeviceDescriptorBufferFeaturesEXT desc_buf_features ;
99+ VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomic_float_features ;
99100
100101 /* Queues */
101102 pthread_mutex_t * * qf_mutex ;
@@ -401,6 +402,7 @@ static const VulkanOptExtension optional_device_exts[] = {
401402 { VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME , FF_VK_EXT_NO_FLAG },
402403 { VK_EXT_DESCRIPTOR_BUFFER_EXTENSION_NAME , FF_VK_EXT_DESCRIPTOR_BUFFER , },
403404 { VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME , FF_VK_EXT_DEVICE_DRM },
405+ { VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME , FF_VK_EXT_ATOMIC_FLOAT },
404406
405407 /* Imports/exports */
406408 { VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME , FF_VK_EXT_EXTERNAL_FD_MEMORY },
@@ -1202,9 +1204,13 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx,
12021204 VkPhysicalDeviceTimelineSemaphoreFeatures timeline_features = {
12031205 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES ,
12041206 };
1207+ VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomic_float_features = {
1208+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT ,
1209+ .pNext = & timeline_features ,
1210+ };
12051211 VkPhysicalDeviceDescriptorBufferFeaturesEXT desc_buf_features = {
12061212 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT ,
1207- .pNext = & timeline_features ,
1213+ .pNext = & atomic_float_features ,
12081214 };
12091215 VkPhysicalDeviceVulkan13Features dev_features_1_3 = {
12101216 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES ,
@@ -1236,6 +1242,10 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx,
12361242 p -> device_features_1_3 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES ;
12371243 p -> device_features_1_3 .pNext = & p -> desc_buf_features ;
12381244 p -> desc_buf_features .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT ;
1245+ p -> desc_buf_features .pNext = & p -> atomic_float_features ;
1246+ p -> atomic_float_features .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT ;
1247+ p -> atomic_float_features .pNext = NULL ;
1248+
12391249 ctx -> free = vulkan_device_free ;
12401250
12411251 /* Create an instance if not given one */
@@ -1290,6 +1300,9 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx,
12901300 p -> desc_buf_features .descriptorBuffer = desc_buf_features .descriptorBuffer ;
12911301 p -> desc_buf_features .descriptorBufferPushDescriptors = desc_buf_features .descriptorBufferPushDescriptors ;
12921302
1303+ p -> atomic_float_features .shaderBufferFloat32Atomics = atomic_float_features .shaderBufferFloat32Atomics ;
1304+ p -> atomic_float_features .shaderBufferFloat32AtomicAdd = atomic_float_features .shaderBufferFloat32AtomicAdd ;
1305+
12931306 dev_info .pNext = & hwctx -> device_features ;
12941307
12951308 /* Setup queue family */
0 commit comments