From: Zebediah Figura zfigura@codeweavers.com
This fixes a validation error:
[ VUID-VkShaderModuleCreateInfo-pCode-01091 ] Object 0: handle = 0x7fbdb300, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xa7bb8db6 | vkCreateShaderModule(): The SPIR-V Capability (DrawParameters) was declared, but none of the requirements were met to use it. The Vulkan spec states: If pCode declares any of the capabilities listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.htm...) --- dlls/wined3d/adapter_vk.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index 21a53db6d1d..a728b840d07 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -244,6 +244,7 @@ struct wined3d_physical_device_info VkPhysicalDeviceTransformFeedbackFeaturesEXT xfb_features; VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT vertex_divisor_features; VkPhysicalDeviceHostQueryResetFeatures host_query_reset_features; + VkPhysicalDeviceShaderDrawParametersFeatures draw_parameters_features;
VkPhysicalDeviceFeatures2 features2; }; @@ -336,6 +337,7 @@ static const struct wined3d_allocator_ops wined3d_allocator_vk_ops = static void get_physical_device_info(const struct wined3d_adapter_vk *adapter_vk, struct wined3d_physical_device_info *info) { VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *vertex_divisor_features = &info->vertex_divisor_features; + VkPhysicalDeviceShaderDrawParametersFeatures *draw_parameters_features = &info->draw_parameters_features; VkPhysicalDeviceHostQueryResetFeatures *host_query_reset_features = &info->host_query_reset_features; VkPhysicalDeviceTransformFeedbackFeaturesEXT *xfb_features = &info->xfb_features; VkPhysicalDevice physical_device = adapter_vk->physical_device; @@ -344,6 +346,11 @@ static void get_physical_device_info(const struct wined3d_adapter_vk *adapter_vk
memset(info, 0, sizeof(*info));
+ draw_parameters_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES; + + if (vk_info->api_version >= VK_API_VERSION_1_1) + xfb_features->pNext = draw_parameters_features; + xfb_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
vertex_divisor_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT;
From: Zebediah Figura zfigura@codeweavers.com
vkd3d-shader only needs it for SV_VertexID and SV_InstanceID, which are specific to shader model 4 and higher. --- dlls/wined3d/adapter_vk.c | 6 +++++- dlls/wined3d/wined3d_vk.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index a728b840d07..3bedce4d0b4 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -350,6 +350,8 @@ static void get_physical_device_info(const struct wined3d_adapter_vk *adapter_vk
if (vk_info->api_version >= VK_API_VERSION_1_1) xfb_features->pNext = draw_parameters_features; + else + draw_parameters_features->shaderDrawParameters = vk_info->supported[WINED3D_VK_KHR_SHADER_DRAW_PARAMETERS];
xfb_features->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
@@ -2224,6 +2226,7 @@ static bool feature_level_10_supported(const struct wined3d_physical_device_info && info->features2.features.pipelineStatisticsQuery && info->features2.features.shaderClipDistance && info->features2.features.shaderCullDistance + && info->draw_parameters_features.shaderDrawParameters && info->vertex_divisor_features.vertexAttributeInstanceRateDivisor && info->vertex_divisor_features.vertexAttributeInstanceRateZeroDivisor; } @@ -2389,7 +2392,7 @@ static bool wined3d_adapter_vk_init_device_extensions(struct wined3d_adapter_vk {VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, ~0u, true}, {VK_KHR_MAINTENANCE1_EXTENSION_NAME, VK_API_VERSION_1_1, true}, {VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME,VK_API_VERSION_1_2}, - {VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_API_VERSION_1_1, true}, + {VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_API_VERSION_1_1}, {VK_KHR_SWAPCHAIN_EXTENSION_NAME, ~0u, true}, {VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_API_VERSION_1_2}, }; @@ -2403,6 +2406,7 @@ static bool wined3d_adapter_vk_init_device_extensions(struct wined3d_adapter_vk { {VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, WINED3D_VK_EXT_TRANSFORM_FEEDBACK}, {VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, WINED3D_VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE}, + {VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, WINED3D_VK_KHR_SHADER_DRAW_PARAMETERS}, {VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, WINED3D_VK_EXT_HOST_QUERY_RESET}, };
diff --git a/dlls/wined3d/wined3d_vk.h b/dlls/wined3d/wined3d_vk.h index 74bab95be2a..963328a215f 100644 --- a/dlls/wined3d/wined3d_vk.h +++ b/dlls/wined3d/wined3d_vk.h @@ -217,6 +217,7 @@ enum wined3d_vk_extension
WINED3D_VK_EXT_TRANSFORM_FEEDBACK, WINED3D_VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE, + WINED3D_VK_KHR_SHADER_DRAW_PARAMETERS, WINED3D_VK_EXT_HOST_QUERY_RESET,
WINED3D_VK_EXT_COUNT,
From: Zebediah Figura zfigura@codeweavers.com
--- dlls/wined3d/adapter_vk.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index 3bedce4d0b4..c3161906387 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -2300,6 +2300,9 @@ static void wined3d_adapter_vk_init_d3d_info(struct wined3d_adapter_vk *adapter_
get_physical_device_info(adapter_vk, &device_info);
+ if (!device_info.host_query_reset_features.hostQueryReset) + adapter_vk->vk_info.supported[WINED3D_VK_EXT_HOST_QUERY_RESET] = FALSE; + adapter_vk->a.shader_backend->shader_get_caps(&adapter_vk->a, &shader_caps); adapter_vk->a.vertex_pipe->vp_get_caps(&adapter_vk->a, &vertex_caps); adapter_vk->a.fragment_pipe->get_caps(&adapter_vk->a, &fragment_caps);
From: Zebediah Figura zfigura@codeweavers.com
--- dlls/wined3d/adapter_vk.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index c3161906387..fffe33a76d4 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -2303,6 +2303,9 @@ static void wined3d_adapter_vk_init_d3d_info(struct wined3d_adapter_vk *adapter_ if (!device_info.host_query_reset_features.hostQueryReset) adapter_vk->vk_info.supported[WINED3D_VK_EXT_HOST_QUERY_RESET] = FALSE;
+ if (!device_info.xfb_features.transformFeedback) + adapter_vk->vk_info.supported[WINED3D_VK_EXT_TRANSFORM_FEEDBACK] = FALSE; + adapter_vk->a.shader_backend->shader_get_caps(&adapter_vk->a, &shader_caps); adapter_vk->a.vertex_pipe->vp_get_caps(&adapter_vk->a, &vertex_caps); adapter_vk->a.fragment_pipe->get_caps(&adapter_vk->a, &fragment_caps);
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=137303
Your paranoid android.
=== debian11b (64 bit WoW report) ===
uiautomationcore: uiautomation: Timeout
This merge request was approved by Jan Sikorski.