mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
vkd3d: Only request properties and features when the corresponding extension is available.
This fixes a number of validation errors.
This commit is contained in:
parent
ea090a34cd
commit
ca35023ed0
Notes:
Alexandre Julliard
2024-05-08 22:52:26 +02:00
Approved-by: Conor McCarthy (@cmccarthy) Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/852
@ -869,29 +869,41 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i
|
|||||||
info->features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
|
info->features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
|
||||||
|
|
||||||
conditional_rendering_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT;
|
conditional_rendering_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, conditional_rendering_features);
|
if (vulkan_info->EXT_conditional_rendering)
|
||||||
|
vk_prepend_struct(&info->features2, conditional_rendering_features);
|
||||||
depth_clip_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT;
|
depth_clip_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, depth_clip_features);
|
if (vulkan_info->EXT_depth_clip_enable)
|
||||||
|
vk_prepend_struct(&info->features2, depth_clip_features);
|
||||||
descriptor_indexing_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT;
|
descriptor_indexing_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, descriptor_indexing_features);
|
if (vulkan_info->EXT_descriptor_indexing)
|
||||||
|
vk_prepend_struct(&info->features2, descriptor_indexing_features);
|
||||||
fragment_shader_interlock_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT;
|
fragment_shader_interlock_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, fragment_shader_interlock_features);
|
if (vulkan_info->EXT_fragment_shader_interlock)
|
||||||
|
vk_prepend_struct(&info->features2, fragment_shader_interlock_features);
|
||||||
robustness2_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT;
|
robustness2_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, robustness2_features);
|
if (vulkan_info->EXT_robustness2)
|
||||||
|
vk_prepend_struct(&info->features2, robustness2_features);
|
||||||
demote_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT;
|
demote_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, demote_features);
|
if (vulkan_info->EXT_shader_demote_to_helper_invocation)
|
||||||
|
vk_prepend_struct(&info->features2, demote_features);
|
||||||
buffer_alignment_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT;
|
buffer_alignment_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, buffer_alignment_features);
|
if (vulkan_info->EXT_texel_buffer_alignment)
|
||||||
|
vk_prepend_struct(&info->features2, buffer_alignment_features);
|
||||||
xfb_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
|
xfb_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, xfb_features);
|
if (vulkan_info->EXT_transform_feedback)
|
||||||
|
vk_prepend_struct(&info->features2, xfb_features);
|
||||||
vertex_divisor_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
|
vertex_divisor_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, vertex_divisor_features);
|
if (vulkan_info->EXT_vertex_attribute_divisor)
|
||||||
|
vk_prepend_struct(&info->features2, vertex_divisor_features);
|
||||||
timeline_semaphore_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR;
|
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_timeline_semaphore)
|
||||||
|
vk_prepend_struct(&info->features2, timeline_semaphore_features);
|
||||||
mutable_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT;
|
mutable_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, mutable_features);
|
if (vulkan_info->EXT_mutable_descriptor_type)
|
||||||
|
vk_prepend_struct(&info->features2, mutable_features);
|
||||||
formats4444_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT;
|
formats4444_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT;
|
||||||
vk_prepend_struct(&info->features2, formats4444_features);
|
if (vulkan_info->EXT_4444_formats)
|
||||||
|
vk_prepend_struct(&info->features2, formats4444_features);
|
||||||
|
|
||||||
if (vulkan_info->KHR_get_physical_device_properties2)
|
if (vulkan_info->KHR_get_physical_device_properties2)
|
||||||
VK_CALL(vkGetPhysicalDeviceFeatures2KHR(physical_device, &info->features2));
|
VK_CALL(vkGetPhysicalDeviceFeatures2KHR(physical_device, &info->features2));
|
||||||
@ -901,15 +913,20 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i
|
|||||||
info->properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
|
info->properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
|
||||||
|
|
||||||
maintenance3_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES;
|
maintenance3_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES;
|
||||||
vk_prepend_struct(&info->properties2, maintenance3_properties);
|
if (vulkan_info->KHR_maintenance3)
|
||||||
|
vk_prepend_struct(&info->properties2, maintenance3_properties);
|
||||||
descriptor_indexing_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT;
|
descriptor_indexing_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT;
|
||||||
vk_prepend_struct(&info->properties2, descriptor_indexing_properties);
|
if (vulkan_info->EXT_descriptor_indexing)
|
||||||
|
vk_prepend_struct(&info->properties2, descriptor_indexing_properties);
|
||||||
buffer_alignment_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT;
|
buffer_alignment_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT;
|
||||||
vk_prepend_struct(&info->properties2, buffer_alignment_properties);
|
if (vulkan_info->EXT_texel_buffer_alignment)
|
||||||
|
vk_prepend_struct(&info->properties2, buffer_alignment_properties);
|
||||||
xfb_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT;
|
xfb_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT;
|
||||||
vk_prepend_struct(&info->properties2, xfb_properties);
|
if (vulkan_info->EXT_transform_feedback)
|
||||||
|
vk_prepend_struct(&info->properties2, xfb_properties);
|
||||||
vertex_divisor_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT;
|
vertex_divisor_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT;
|
||||||
vk_prepend_struct(&info->properties2, vertex_divisor_properties);
|
if (vulkan_info->EXT_vertex_attribute_divisor)
|
||||||
|
vk_prepend_struct(&info->properties2, vertex_divisor_properties);
|
||||||
subgroup_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES;
|
subgroup_properties->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES;
|
||||||
if (d3d12_device_environment_is_vulkan_min_1_1(device))
|
if (d3d12_device_environment_is_vulkan_min_1_1(device))
|
||||||
vk_prepend_struct(&info->properties2, subgroup_properties);
|
vk_prepend_struct(&info->properties2, subgroup_properties);
|
||||||
|
Loading…
Reference in New Issue
Block a user