hwcontext_vulkan: enable long vector extension

This enables us to do some neat tricks.
This commit is contained in:
Lynne
2026-01-06 17:48:13 +01:00
parent 95a23820f7
commit e32cb94258
5 changed files with 28 additions and 0 deletions
+16
View File
@@ -83,6 +83,10 @@ typedef struct VulkanDeviceFeatures {
VkPhysicalDeviceHostImageCopyFeaturesEXT host_image_copy;
VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR explicit_mem_layout;
#ifdef VK_EXT_shader_long_vector
VkPhysicalDeviceShaderLongVectorFeaturesEXT long_vector;
#endif
#ifdef VK_EXT_shader_replicated_composites
VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT replicated_composites;
#endif
@@ -231,6 +235,11 @@ static void device_features_init(AVHWDeviceContext *ctx, VulkanDeviceFeatures *f
FF_VK_STRUCT_EXT(s, &feats->device, &feats->host_image_copy, FF_VK_EXT_HOST_IMAGE_COPY,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT);
#ifdef VK_EXT_shader_long_vector
FF_VK_STRUCT_EXT(s, &feats->device, &feats->long_vector, FF_VK_EXT_LONG_VECTOR,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_FEATURES_EXT);
#endif
#ifdef VK_EXT_shader_replicated_composites
FF_VK_STRUCT_EXT(s, &feats->device, &feats->replicated_composites, FF_VK_EXT_REPLICATED_COMPOSITES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT);
@@ -336,6 +345,10 @@ static void device_features_copy_needed(VulkanDeviceFeatures *dst, VulkanDeviceF
COPY_VAL(subgroup_rotate.shaderSubgroupRotate);
COPY_VAL(host_image_copy.hostImageCopy);
#ifdef VK_EXT_shader_long_vector
COPY_VAL(long_vector.longVector);
#endif
#ifdef VK_EXT_shader_replicated_composites
COPY_VAL(replicated_composites.shaderReplicatedComposites);
#endif
@@ -682,6 +695,9 @@ static const VulkanOptExtension optional_device_exts[] = {
{ VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME, FF_VK_EXT_SUBGROUP_ROTATE },
{ VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME, FF_VK_EXT_HOST_IMAGE_COPY },
{ VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME, FF_VK_EXT_EXPLICIT_MEM_LAYOUT },
#ifdef VK_EXT_shader_long_vector
{ VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME, FF_VK_EXT_LONG_VECTOR },
#endif
#ifdef VK_EXT_shader_replicated_composites
{ VK_EXT_SHADER_REPLICATED_COMPOSITES_EXTENSION_NAME, FF_VK_EXT_REPLICATED_COMPOSITES },
#endif
+5
View File
@@ -172,6 +172,11 @@ int ff_vk_load_props(FFVulkanContext *s)
FF_VK_STRUCT_EXT(s, &s->props, &s->host_image_props, FF_VK_EXT_HOST_IMAGE_COPY,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT);
#ifdef VK_EXT_shader_long_vector
FF_VK_STRUCT_EXT(s, &s->props, &s->long_vector_props, FF_VK_EXT_LONG_VECTOR,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_LONG_VECTOR_PROPERTIES_EXT);
#endif
s->feats = (VkPhysicalDeviceFeatures2) {
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
};
+3
View File
@@ -326,6 +326,9 @@ typedef struct FFVulkanContext {
VkPhysicalDeviceCooperativeMatrixPropertiesKHR coop_matrix_props;
VkPhysicalDevicePushDescriptorPropertiesKHR push_desc_props;
VkPhysicalDeviceOpticalFlowPropertiesNV optical_flow_props;
#ifdef VK_EXT_shader_long_vector
VkPhysicalDeviceShaderLongVectorPropertiesEXT long_vector_props;
#endif
VkQueueFamilyQueryResultStatusPropertiesKHR *query_props;
VkQueueFamilyVideoPropertiesKHR *video_props;
VkQueueFamilyProperties2 *qf_props;
+1
View File
@@ -53,6 +53,7 @@ typedef uint64_t FFVulkanExtensions;
#define FF_VK_EXT_ZERO_INITIALIZE (1ULL << 19) /* VK_EXT_zero_initialize_device_memory */
#define FF_VK_EXT_EXPLICIT_MEM_LAYOUT (1ULL << 20) /* VK_KHR_workgroup_memory_explicit_layout */
#define FF_VK_EXT_REPLICATED_COMPOSITES (1ULL << 21) /* VK_EXT_shader_replicated_composites */
#define FF_VK_EXT_LONG_VECTOR (1ULL << 22) /* VK_EXT_shader_long_vector */
/* Video extensions */
#define FF_VK_EXT_VIDEO_QUEUE (1ULL << 36) /* VK_KHR_video_queue */
+3
View File
@@ -61,6 +61,9 @@ static inline uint64_t ff_vk_extensions_to_mask(const char * const *extensions,
{ VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME, FF_VK_EXT_SUBGROUP_ROTATE },
{ VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME, FF_VK_EXT_HOST_IMAGE_COPY },
{ VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME, FF_VK_EXT_EXPLICIT_MEM_LAYOUT },
#ifdef VK_EXT_shader_long_vector
{ VK_EXT_SHADER_LONG_VECTOR_EXTENSION_NAME, FF_VK_EXT_LONG_VECTOR },
#endif
#ifdef VK_EXT_shader_replicated_composites
{ VK_EXT_SHADER_REPLICATED_COMPOSITES_EXTENSION_NAME, FF_VK_EXT_REPLICATED_COMPOSITES },
#endif