From e452519dcb65ac0740341df623634cce0f39272c Mon Sep 17 00:00:00 2001 From: Elizabeth Figura Date: Fri, 27 Oct 2023 11:59:09 -0500 Subject: [PATCH] tests/shader_runner: Build a varying map in the Vulkan runner. This adds todos to two tests. The tests in question have mismatching masks and previously failed Vulkan validation anyway. --- tests/hlsl/entry-point-semantics.shader_test | 4 ++-- tests/hlsl/interface-packing.shader_test | 2 +- tests/shader_runner_vulkan.c | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/tests/hlsl/entry-point-semantics.shader_test b/tests/hlsl/entry-point-semantics.shader_test index 403fd66c..f9ad158b 100644 --- a/tests/hlsl/entry-point-semantics.shader_test +++ b/tests/hlsl/entry-point-semantics.shader_test @@ -85,7 +85,7 @@ float4 main(in apple a) : sv_target } [test] -draw quad +todo(sm<4) draw quad probe (0, 0) rgba (10.0, 20.0, 30.0, 40.0) @@ -287,7 +287,7 @@ float4 main(in float4 a : TEXCOORD0, in float3 b : TEXCOORD1) : sv_target } [test] -draw quad +todo(sm<4) draw quad probe (0, 0) rgba (10.0, 11.0, 20.0, 21.0) diff --git a/tests/hlsl/interface-packing.shader_test b/tests/hlsl/interface-packing.shader_test index 3873a61f..05228cae 100644 --- a/tests/hlsl/interface-packing.shader_test +++ b/tests/hlsl/interface-packing.shader_test @@ -159,4 +159,4 @@ float4 main(float4 pos : SV_Position, float4 color : COLOR) : SV_Target [test] todo(mvk & sm<4) draw triangle list 3 -todo(sm<4) probe (0, 0) rgba (1.0, 10.0, 11.0, 4.0) +probe (0, 0) rgba(1.0, 10.0, 11.0, 4.0) diff --git a/tests/shader_runner_vulkan.c b/tests/shader_runner_vulkan.c index 003f8295..6ce8977c 100644 --- a/tests/shader_runner_vulkan.c +++ b/tests/shader_runner_vulkan.c @@ -294,6 +294,7 @@ static bool compile_hlsl_and_scan(struct vulkan_shader_runner *runner, enum shad static bool compile_d3d_code(struct vulkan_shader_runner *runner, enum shader_type type, struct vkd3d_shader_code *spirv) { + struct vkd3d_shader_varying_map_info varying_map_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_VARYING_MAP_INFO}; struct vkd3d_shader_spirv_target_info spirv_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_TARGET_INFO}; struct vkd3d_shader_interface_info interface_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO}; struct vkd3d_shader_parameter_info parameter_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_PARAMETER_INFO}; @@ -301,6 +302,7 @@ static bool compile_d3d_code(struct vulkan_shader_runner *runner, struct vkd3d_shader_resource_binding bindings[MAX_RESOURCES + MAX_SAMPLERS]; struct vkd3d_shader_push_constant_buffer push_constants; enum vkd3d_shader_spirv_extension spirv_extensions[2]; + struct vkd3d_shader_varying_map varying_map[12]; struct vkd3d_shader_resource_binding *binding; struct vkd3d_shader_compile_option options[2]; struct vkd3d_shader_parameter1 parameters[17]; @@ -325,6 +327,18 @@ static bool compile_d3d_code(struct vulkan_shader_runner *runner, info.option_count = ARRAY_SIZE(options); info.options = options; + if (type == SHADER_TYPE_VS && info.source_type == VKD3D_SHADER_SOURCE_D3D_BYTECODE) + { + info.next = &varying_map_info; + + varying_map_info.next = &spirv_info; + varying_map_info.varying_map = varying_map; + vkd3d_shader_build_varying_map(&runner->signatures[SHADER_TYPE_VS].output, + &runner->signatures[SHADER_TYPE_PS].input, &varying_map_info.varying_count, varying_map); + ok(varying_map_info.varying_count <= ARRAY_SIZE(varying_map), + "Got unexpected count %u.\n", varying_map_info.varying_count); + } + spirv_info.next = &interface_info; spirv_info.environment = VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0; spirv_info.extensions = spirv_extensions;