Module: wine Branch: master Commit: c251d0217102b6c8c987f87795d1c1ef7bbb8b5f URL: http://source.winehq.org/git/wine.git/?a=commit;h=c251d0217102b6c8c987f87795...
Author: Józef Kucia jkucia@codeweavers.com Date: Wed Dec 9 14:48:02 2015 +0100
wined3d: Use correct initial color for FFP texture blending in ARB program shader backend.
Signed-off-by: Józef Kucia jkucia@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wined3d/arb_program_shader.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 2af9845..be3d727 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -6082,8 +6082,7 @@ static const char *get_argreg(struct wined3d_string_buffer *buffer, DWORD argnum ret = "fragment.color.primary"; break;
case WINED3DTA_CURRENT: - if (!stage) ret = "fragment.color.primary"; - else ret = "ret"; + ret = "ret"; break;
case WINED3DTA_TEXTURE: @@ -6163,8 +6162,6 @@ static void gen_ffp_instr(struct wined3d_string_buffer *buffer, unsigned int sta switch (op) { case WINED3D_TOP_DISABLE: - if (!stage) - shader_addline(buffer, "MOV %s%s, fragment.color.primary;\n", dstreg, dstmask); break;
case WINED3D_TOP_SELECT_ARG2: @@ -6309,7 +6306,6 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, con DWORD arg0, arg1, arg2; BOOL tempreg_used = FALSE, tfactor_used = FALSE; BOOL op_equal; - const char *final_combiner_src = "ret"; BOOL custom_linear_fog = FALSE; struct color_fixup_masks masks;
@@ -6440,7 +6436,7 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, con if (tempreg_used || settings->sRGB_write) shader_addline(&buffer, "MOV tempreg, 0.0;\n");
- /* Generate texture sampling instructions) */ + /* Generate texture sampling instructions */ for (stage = 0; stage < MAX_TEXTURES && settings->op[stage].cop != WINED3D_TOP_DISABLE; ++stage) { if (!tex_read[stage]) @@ -6516,15 +6512,13 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, con shader_addline(&buffer, "KIL -TMP;\n"); /* discard if true */ }
+ shader_addline(&buffer, "MOV ret, fragment.color.primary;\n"); + /* Generate the main shader */ for (stage = 0; stage < MAX_TEXTURES; ++stage) { if (settings->op[stage].cop == WINED3D_TOP_DISABLE) - { - if (!stage) - final_combiner_src = "fragment.color.primary"; break; - }
if (settings->op[stage].cop == WINED3D_TOP_SELECT_ARG1 && settings->op[stage].aop == WINED3D_TOP_SELECT_ARG1) @@ -6549,8 +6543,6 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, con gen_ffp_instr(&buffer, stage, TRUE, FALSE, settings->op[stage].dst, settings->op[stage].cop, settings->op[stage].carg0, settings->op[stage].carg1, settings->op[stage].carg2); - if (!stage) - shader_addline(&buffer, "MOV ret.w, fragment.color.primary.w;\n"); } else if (op_equal) { @@ -6569,7 +6561,7 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, con
if (settings->sRGB_write || custom_linear_fog) { - shader_addline(&buffer, "MAD ret, fragment.color.secondary, specular_enable, %s;\n", final_combiner_src); + shader_addline(&buffer, "MAD ret, fragment.color.secondary, specular_enable, ret;\n"); if (settings->sRGB_write) arbfp_add_sRGB_correction(&buffer, "ret", "arg0", "arg1", "arg2", "tempreg", FALSE); if (custom_linear_fog) @@ -6578,8 +6570,7 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, con } else { - shader_addline(&buffer, "MAD result.color, fragment.color.secondary, specular_enable, %s;\n", - final_combiner_src); + shader_addline(&buffer, "MAD result.color, fragment.color.secondary, specular_enable, ret;\n"); }
/* Footer */