[PATCH vkd3d 1/2] vkd3d: Add queries for KHR_timeline_semaphore extension.

Sveinar Søpler cybermax at dexter.no
Fri Dec 13 10:25:38 CST 2019


On 12.12.2019 20:02, Rémi Bernon wrote:
> Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
> ---
>   libs/vkd3d/device.c        | 23 +++++++++++++++++++++++
>   libs/vkd3d/vkd3d_private.h |  3 +++
>   libs/vkd3d/vulkan_procs.h  |  3 +++
>   3 files changed, 29 insertions(+)
>
> diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
> index 757d4ac8..3f99ef9a 100644
> --- a/libs/vkd3d/device.c
> +++ b/libs/vkd3d/device.c
> @@ -127,6 +127,7 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] =
>       VK_EXTENSION(KHR_IMAGE_FORMAT_LIST, KHR_image_format_list),
>       VK_EXTENSION(KHR_MAINTENANCE3, KHR_maintenance3),
>       VK_EXTENSION(KHR_PUSH_DESCRIPTOR, KHR_push_descriptor),
> +    VK_EXTENSION(KHR_TIMELINE_SEMAPHORE, KHR_timeline_semaphore),
>       /* EXT extensions */
>       VK_EXTENSION(EXT_CONDITIONAL_RENDERING, EXT_conditional_rendering),
>       VK_EXTENSION(EXT_DEBUG_MARKER, EXT_debug_marker),
> @@ -664,6 +665,7 @@ struct vkd3d_physical_device_info
>       VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT texel_buffer_alignment_properties;
>       VkPhysicalDeviceTransformFeedbackPropertiesEXT xfb_properties;
>       VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT vertex_divisor_properties;
> +    VkPhysicalDeviceTimelineSemaphorePropertiesKHR timeline_semaphore_properties;
>   
>       VkPhysicalDeviceProperties2KHR properties2;
>   
> @@ -675,6 +677,7 @@ struct vkd3d_physical_device_info
>       VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT texel_buffer_alignment_features;
>       VkPhysicalDeviceTransformFeedbackFeaturesEXT xfb_features;
>       VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT vertex_divisor_features;
> +    VkPhysicalDeviceTimelineSemaphoreFeaturesKHR timeline_semaphore_features;
>   
>       VkPhysicalDeviceFeatures2 features2;
>   };
> @@ -693,8 +696,10 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i
>       VkPhysicalDeviceDepthClipEnableFeaturesEXT *depth_clip_features;
>       VkPhysicalDeviceMaintenance3Properties *maintenance3_properties;
>       VkPhysicalDeviceTransformFeedbackPropertiesEXT *xfb_properties;
> +    VkPhysicalDeviceTimelineSemaphorePropertiesKHR *timeline_semaphore_properties;
>       VkPhysicalDevice physical_device = device->vk_physical_device;
>       VkPhysicalDeviceTransformFeedbackFeaturesEXT *xfb_features;
> +    VkPhysicalDeviceTimelineSemaphoreFeaturesKHR *timeline_semaphore_features;
>       struct vkd3d_vulkan_info *vulkan_info = &device->vk_info;
>   
>       memset(info, 0, sizeof(*info));
> @@ -710,6 +715,8 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i
>       vertex_divisor_properties = &info->vertex_divisor_properties;
>       xfb_features = &info->xfb_features;
>       xfb_properties = &info->xfb_properties;
> +    timeline_semaphore_properties = &info->timeline_semaphore_properties;
> +    timeline_semaphore_features = &info->timeline_semaphore_features;
>   
>       info->features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
>   
> @@ -727,6 +734,8 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i
>       vk_prepend_struct(&info->features2, xfb_features);
>       vertex_divisor_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
>       vk_prepend_struct(&info->features2, vertex_divisor_features);
> +    timeline_semaphore_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR;
> +    vk_prepend_struct(&info->features2, timeline_semaphore_features);
>   
>       if (vulkan_info->KHR_get_physical_device_properties2)
>           VK_CALL(vkGetPhysicalDeviceFeatures2KHR(physical_device, &info->features2));
> @@ -745,6 +754,8 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i
>       vk_prepend_struct(&info->properties2, xfb_properties);
>       vertex_divisor_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT;
>       vk_prepend_struct(&info->properties2, vertex_divisor_properties);
> +    timeline_semaphore_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR;
> +    vk_prepend_struct(&info->properties2, timeline_semaphore_properties);
>   
>       if (vulkan_info->KHR_get_physical_device_properties2)
>           VK_CALL(vkGetPhysicalDeviceProperties2KHR(physical_device, &info->properties2));
> @@ -817,6 +828,7 @@ static void vkd3d_trace_physical_device_limits(const struct vkd3d_physical_devic
>       const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT *buffer_alignment;
>       const VkPhysicalDeviceMaintenance3Properties *maintenance3;
>       const VkPhysicalDeviceTransformFeedbackPropertiesEXT *xfb;
> +    const VkPhysicalDeviceTimelineSemaphorePropertiesKHR *timeline_semaphore;
>   
>       TRACE("Device limits:\n");
>       TRACE("  maxImageDimension1D: %u.\n", limits->maxImageDimension1D);
> @@ -1021,6 +1033,10 @@ static void vkd3d_trace_physical_device_limits(const struct vkd3d_physical_devic
>       divisor_properties = &info->vertex_divisor_properties;
>       TRACE("  VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT:\n");
>       TRACE("    maxVertexAttribDivisor: %u.\n", divisor_properties->maxVertexAttribDivisor);
> +
> +    timeline_semaphore = &info->timeline_semaphore_properties;
> +    TRACE("  VkPhysicalDeviceTimelineSemaphorePropertiesKHR:\n");
> +    TRACE("    maxTimelineSemaphoreValueDifference: %u.\n", timeline_semaphore->maxTimelineSemaphoreValueDifference);

Should it be %lu? (Atleast seems to compile fine when changed to %lu.)


libs/vkd3d/device.c:1039:11: warning: format ‘%u’ expects argument of 
type ‘unsigned int’, but argument 4 has type ‘uint64_t’ {aka ‘const long 
unsigned int’} [-Wformat=]
1039 | TRACE(" maxTimelineSemaphoreValueDifference: %u.\n", 
timeline_semaphore->maxTimelineSemaphoreValueDifference);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| uint64_t {aka const long unsigned int}

>   }
>   
>   static void vkd3d_trace_physical_device_features(const struct vkd3d_physical_device_info *info)
> @@ -1033,6 +1049,7 @@ static void vkd3d_trace_physical_device_features(const struct vkd3d_physical_dev
>       const VkPhysicalDeviceDepthClipEnableFeaturesEXT *depth_clip_features;
>       const VkPhysicalDeviceFeatures *features = &info->features2.features;
>       const VkPhysicalDeviceTransformFeedbackFeaturesEXT *xfb;
> +    const VkPhysicalDeviceTimelineSemaphoreFeaturesKHR *timeline_semaphore;
>   
>       TRACE("Device features:\n");
>       TRACE("  robustBufferAccess: %#x.\n", features->robustBufferAccess);
> @@ -1165,6 +1182,10 @@ static void vkd3d_trace_physical_device_features(const struct vkd3d_physical_dev
>               divisor_features->vertexAttributeInstanceRateDivisor);
>       TRACE("    vertexAttributeInstanceRateZeroDivisor: %#x.\n",
>               divisor_features->vertexAttributeInstanceRateZeroDivisor);
> +
> +    timeline_semaphore = &info->timeline_semaphore_features;
> +    TRACE("  VkPhysicalDeviceTimelineSemaphoreFeaturesKHR:\n");
> +    TRACE("    timelineSemaphore: %#x.\n", timeline_semaphore->timelineSemaphore);
>   }
>   
>   static void vkd3d_init_feature_level(struct vkd3d_vulkan_info *vk_info,
> @@ -1294,6 +1315,8 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device,
>       vulkan_info->transform_feedback_queries = physical_device_info->xfb_properties.transformFeedbackQueries;
>       vulkan_info->max_vertex_attrib_divisor = max(physical_device_info->vertex_divisor_properties.maxVertexAttribDivisor, 1);
>   
> +    vulkan_info->max_timeline_semaphore_value_difference = max(physical_device_info->timeline_semaphore_properties.maxTimelineSemaphoreValueDifference, 1);
> +
>       device->feature_options.DoublePrecisionFloatShaderOps = features->shaderFloat64;
>       device->feature_options.OutputMergerLogicOp = features->logicOp;
>       /* SPV_KHR_16bit_storage */
> diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
> index 0c031d20..84abcb8d 100644
> --- a/libs/vkd3d/vkd3d_private.h
> +++ b/libs/vkd3d/vkd3d_private.h
> @@ -100,6 +100,7 @@ struct vkd3d_vulkan_info
>       bool KHR_image_format_list;
>       bool KHR_maintenance3;
>       bool KHR_push_descriptor;
> +    bool KHR_timeline_semaphore;
>       /* EXT device extensions */
>       bool EXT_conditional_rendering;
>       bool EXT_debug_marker;
> @@ -116,6 +117,8 @@ struct vkd3d_vulkan_info
>       bool vertex_attrib_zero_divisor;
>       unsigned int max_vertex_attrib_divisor;
>   
> +    uint64_t max_timeline_semaphore_value_difference;
> +
>       VkPhysicalDeviceLimits device_limits;
>       VkPhysicalDeviceSparseProperties sparse_properties;
>   
> diff --git a/libs/vkd3d/vulkan_procs.h b/libs/vkd3d/vulkan_procs.h
> index ec29eb45..d080278a 100644
> --- a/libs/vkd3d/vulkan_procs.h
> +++ b/libs/vkd3d/vulkan_procs.h
> @@ -206,6 +206,9 @@ VK_DEVICE_EXT_PFN(vkCmdBindTransformFeedbackBuffersEXT)
>   VK_DEVICE_EXT_PFN(vkCmdEndQueryIndexedEXT)
>   VK_DEVICE_EXT_PFN(vkCmdEndTransformFeedbackEXT)
>   
> +/* VK_KHR_timeline_semaphore */
> +VK_DEVICE_EXT_PFN(vkSignalSemaphoreKHR)
> +
>   #undef VK_INSTANCE_PFN
>   #undef VK_INSTANCE_EXT_PFN
>   #undef VK_DEVICE_PFN



More information about the wine-devel mailing list