From: Matteo Bruni Subject: [PATCH 3/7] wined3d: Initialize unwritten texcoord varyings in the FFP replacement vertex shader. Message-Id: <1443790490-26613-3-git-send-email-mbruni@codeweavers.com> Date: Fri, 2 Oct 2015 14:54:46 +0200 In-Reply-To: <1443790490-26613-1-git-send-email-mbruni@codeweavers.com> References: <1443790490-26613-1-git-send-email-mbruni@codeweavers.com> Only when the GPU supports enough varyings. Signed-off-by: Matteo Bruni --- dlls/wined3d/glsl_shader.c | 2 ++ dlls/wined3d/utils.c | 7 +++++++ dlls/wined3d/wined3d_private.h | 1 + 3 files changed, 10 insertions(+) diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index af44989..9fd48c4 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -5802,6 +5802,8 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct wined3d_string_buffe if (settings->texcoords & (1u << i)) shader_addline(buffer, "gl_TexCoord[%u] = ffp_texture_matrix[%u] * ffp_attrib_texcoord%u;\n", i, i, i); + else if (gl_info->limits.glsl_varyings >= wined3d_max_compat_varyings(gl_info)) + shader_addline(buffer, "gl_TexCoord[%u] = vec4(0.0);\n", i); break; case WINED3DTSS_TCI_CAMERASPACENORMAL: diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index d31c285..1a2cbdd 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -4343,6 +4343,13 @@ DWORD get_flexible_vertex_size(DWORD d3dvtVertexType) { return size; } +unsigned int wined3d_max_compat_varyings(const struct wined3d_gl_info *gl_info) +{ + /* On core profile we have to also count diffuse and specular colors and the + * fog coordinate. */ + return gl_info->supported[WINED3D_GL_LEGACY_CONTEXT] ? MAX_TEXTURES * 4 : (MAX_TEXTURES + 2) * 4 + 1; +} + void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d_state *state, struct ffp_frag_settings *settings, BOOL ignore_textype) { diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 758af54..d3c362b 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1877,6 +1877,7 @@ extern const struct wine_rb_functions wined3d_ffp_frag_program_rb_functions DECL extern const struct wine_rb_functions wined3d_ffp_vertex_program_rb_functions DECLSPEC_HIDDEN; extern const struct wined3d_parent_ops wined3d_null_parent_ops DECLSPEC_HIDDEN; +unsigned int wined3d_max_compat_varyings(const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN; void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d_state *state, struct ffp_frag_settings *settings, BOOL ignore_textype) DECLSPEC_HIDDEN; const struct ffp_frag_desc *find_ffp_frag_shader(const struct wine_rb_tree *fragment_shaders, -- 2.4.6