History

vulkan: add support for the atomic float ops extension

Lynne committed 3 years ago

Commit dfff3871 parent 88e2cca5 files · +33 −1Browse files

Unified · Split

5 files
  1. libavutil/hwcontext_vulkan.c +14 −1
  2. libavutil/vulkan.c +13 −0
  3. libavutil/vulkan.h +4 −0
  4. libavutil/vulkan_functions.h +1 −0
  5. libavutil/vulkan_loader.h +1 −0
libavutil/hwcontext_vulkan.c+14−1
@@ -96,6 +96,7 @@ typedef struct VulkanDevicePriv { · 95 unmodified lines
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[] = { · 299 unmodified lines
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 },
@@ -1195,9 +1197,13 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, · 788 unmodified lines
11951197 VkPhysicalDeviceTimelineSemaphoreFeatures timeline_features = {
11961198 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES,
11971199 };
1200+ VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomic_float_features = {
1201+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT,
1202+ .pNext = &timeline_features,
1203+ };
11981204 VkPhysicalDeviceDescriptorBufferFeaturesEXT desc_buf_features = {
11991205 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT,
1200− .pNext = &timeline_features,
1206+ .pNext = &atomic_float_features,
12011207 };
12021208 VkPhysicalDeviceVulkan13Features dev_features_1_3 = {
12031209 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
@@ -1229,6 +1235,10 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, · 25 unmodified lines
12291235 p->device_features_1_3.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
12301236 p->device_features_1_3.pNext = &p->desc_buf_features;
12311237 p->desc_buf_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT;
1238+ p->desc_buf_features.pNext = &p->atomic_float_features;
1239+ p->atomic_float_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT;
1240+ p->atomic_float_features.pNext = NULL;
1241+
12321242 ctx->free = vulkan_device_free;
12331243
12341244 /* Create an instance if not given one */
@@ -1286,6 +1296,9 @@ static int vulkan_device_create_internal(AVHWDeviceContext *ctx, · 51 unmodified lines
12861296 p->desc_buf_features.descriptorBuffer = desc_buf_features.descriptorBuffer;
12871297 p->desc_buf_features.descriptorBufferPushDescriptors = desc_buf_features.descriptorBufferPushDescriptors;
12881298
1299+ p->atomic_float_features.shaderBufferFloat32Atomics = atomic_float_features.shaderBufferFloat32Atomics;
1300+ p->atomic_float_features.shaderBufferFloat32AtomicAdd = atomic_float_features.shaderBufferFloat32AtomicAdd;
1301+
12891302 dev_info.pNext = &hwctx->device_features;
12901303
12911304 /* Setup queue family */
libavutil/vulkan.c+13−0
@@ -107,8 +107,21 @@ int ff_vk_load_props(FFVulkanContext *s) · 106 unmodified lines
107107 .pNext = &s->driver_props,
108108 };
109109
110+ s->atomic_float_feats = (VkPhysicalDeviceShaderAtomicFloatFeaturesEXT) {
111+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT,
112+ };
113+ s->feats_12 = (VkPhysicalDeviceVulkan12Features) {
114+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
115+ .pNext = &s->atomic_float_feats,
116+ };
117+ s->feats = (VkPhysicalDeviceFeatures2) {
118+ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
119+ .pNext = &s->feats_12,
120+ };
121+
110122 vk->GetPhysicalDeviceProperties2(s->hwctx->phys_dev, &s->props);
111123 vk->GetPhysicalDeviceMemoryProperties(s->hwctx->phys_dev, &s->mprops);
124+ vk->GetPhysicalDeviceFeatures2(s->hwctx->phys_dev, &s->feats);
112125
113126 if (s->qf_props)
114127 return 0;
libavutil/vulkan.h+4−0
@@ -240,6 +240,10 @@ typedef struct FFVulkanContext { · 239 unmodified lines
240240 VkQueueFamilyProperties2 *qf_props;
241241 int tot_nb_qfs;
242242
243+ VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomic_float_feats;
244+ VkPhysicalDeviceVulkan12Features feats_12;
245+ VkPhysicalDeviceFeatures2 feats;
246+
243247 AVHWDeviceContext *device;
244248 AVVulkanDeviceContext *hwctx;
245249
libavutil/vulkan_functions.h+1−0
@@ -44,6 +44,7 @@ typedef enum FFVulkanExtensions { · 43 unmodified lines
4444 FF_VK_EXT_VIDEO_DECODE_H264 = 1ULL << 12, /* VK_EXT_video_decode_h264 */
4545 FF_VK_EXT_VIDEO_DECODE_H265 = 1ULL << 13, /* VK_EXT_video_decode_h265 */
4646 FF_VK_EXT_VIDEO_DECODE_AV1 = 1ULL << 14, /* VK_MESA_video_decode_av1 */
47+ FF_VK_EXT_ATOMIC_FLOAT = 1ULL << 15, /* VK_EXT_shader_atomic_float */
4748
4849 FF_VK_EXT_NO_FLAG = 1ULL << 31,
4950 } FFVulkanExtensions;
libavutil/vulkan_loader.h+1−0
@@ -45,6 +45,7 @@ static inline uint64_t ff_vk_extensions_to_mask(const char * const *extensions, · 44 unmodified lines
4545 { VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_HOST_MEMORY },
4646 { VK_EXT_DEBUG_UTILS_EXTENSION_NAME, FF_VK_EXT_DEBUG_UTILS },
4747 { VK_EXT_PHYSICAL_DEVICE_DRM_EXTENSION_NAME, FF_VK_EXT_DEVICE_DRM },
48+ { VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, FF_VK_EXT_ATOMIC_FLOAT },
4849 #ifdef _WIN32
4950 { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_MEMORY },
5051 { VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_SEM },

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t