From c9458882a0364831bded52d003da5365c0725b3b Mon Sep 17 00:00:00 2001 From: Matteo Bruni Date: Tue, 25 Jun 2013 19:23:18 +0200 Subject: [PATCH] wined3d: Fix handling of cnd instruction with coissue flag. --- dlls/wined3d/arb_program_shader.c | 4 ++-- dlls/wined3d/glsl_shader.c | 7 ++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index a9894dafb90..b7f5ffda5c9 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -1630,8 +1630,8 @@ static void pshader_hw_cnd(const struct wined3d_shader_instruction *ins) shader_arb_get_dst_param(ins, dst, dst_name); shader_arb_get_src_param(ins, &ins->src[1], 1, src_name[1]); - /* The coissue flag changes the semantic of the cnd instruction in <= 1.3 shaders */ - if (shader_version <= WINED3D_SHADER_VERSION(1, 3) && ins->coissue) + if (shader_version <= WINED3D_SHADER_VERSION(1, 3) && ins->coissue + && ins->dst->write_mask != WINED3DSP_WRITEMASK_3) { shader_addline(buffer, "MOV%s %s, %s;\n", shader_arb_get_modifier(ins), dst_name, src_name[1]); } diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index ad9be6abf68..98671aa69c5 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -3029,14 +3029,11 @@ static void shader_glsl_cnd(const struct wined3d_shader_instruction *ins) shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param); - /* Fun: The D3DSI_COISSUE flag changes the semantic of the cnd instruction for < 1.4 shaders */ - if (ins->coissue) - { + if (ins->coissue && ins->dst->write_mask != WINED3DSP_WRITEMASK_3) shader_addline(ins->ctx->buffer, "%s /* COISSUE! */);\n", src1_param.param_str); - } else { + else shader_addline(ins->ctx->buffer, "%s > 0.5 ? %s : %s);\n", src0_param.param_str, src1_param.param_str, src2_param.param_str); - } return; }