hwcontext_vulkan: enable long vector extension
This enables us to do some neat tricks.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user