From: Henri Verbeet hverbeet@codeweavers.com
Shader model 4 fragment shaders can have more than 12 input varyings. That's fine though, because we don't need to build a varying map for them in the first place. Note that in principle the ERR in question could still be triggered by e.g. attempting to use a shader model 4 fragment shader with a shader model 3 vertex shader. --- dlls/wined3d/shader_spirv.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/dlls/wined3d/shader_spirv.c b/dlls/wined3d/shader_spirv.c index 3919368ac45..d4b30f20424 100644 --- a/dlls/wined3d/shader_spirv.c +++ b/dlls/wined3d/shader_spirv.c @@ -169,16 +169,15 @@ static void shader_spirv_compile_arguments_init(struct shader_spirv_compile_argu { struct wined3d_shader *ps = state->shader[WINED3D_SHADER_TYPE_PIXEL];
- if (ps) + if (shader->reg_maps.shader_version.major < 4 && ps) { struct shader_spirv_graphics_program_vk *vs_program = shader->backend_data; struct shader_spirv_graphics_program_vk *ps_program = ps->backend_data;
if (ps_program->signature_info.input.element_count > ARRAY_SIZE(args->u.vs.varying_map)) ERR("Unexpected inter-stage varying count %u.\n", ps_program->signature_info.input.element_count); - if (shader->reg_maps.shader_version.major < 4) - vkd3d_shader_build_varying_map(&vs_program->signature_info.output, - &ps_program->signature_info.input, &args->u.vs.varying_count, args->u.vs.varying_map); + vkd3d_shader_build_varying_map(&vs_program->signature_info.output, + &ps_program->signature_info.input, &args->u.vs.varying_count, args->u.vs.varying_map); } break; }