Commit 2b77c00b authored by Józef Kucia's avatar Józef Kucia Committed by Alexandre Julliard

wined3d: Do not declare pixel shader inputs when they are not used.

This is a workaround for a bug in Mesa GLSL linker. The bug is triggered by GLSL generated for SM3 shaders when shader inputs are not read and interface blocks are used for shader inputs/outputs (core profile code path). Declarations for unused shader inputs are not generated for pixel shaders. We still declare shader outputs in the previous shader stage, but it's allowed by the GLSL 1.50 spec: "Only output variables that are read by the subsequent pipeline stage need to be written; it is allowed to have superfluous declarations of output variables." The table in section 4.3.4 (Input Variables) of the GLSL 4.20 spec even more explicitly allows shader output variables with no matching input variables declared in the consuming shader. Signed-off-by: 's avatarJózef Kucia <jkucia@codeweavers.com> Signed-off-by: 's avatarHenri Verbeet <hverbeet@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 28216851
......@@ -7250,7 +7250,7 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
{
unsigned int in_count = min(vec4_varyings(version->major, gl_info), shader->limits->packed_input);
if (args->vp_mode == vertexshader)
if (args->vp_mode == vertexshader && reg_maps->input_registers)
shader_glsl_declare_shader_inputs(gl_info, buffer, in_count);
shader_addline(buffer, "vec4 %s_in[%u];\n", prefix, in_count);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment