From 8f9a14e312a382be1c7e33720c92eecb5165a8ad Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Sat, 29 Mar 2008 00:41:07 +0100 Subject: [PATCH] wined3d: Prepare the atifs shader generator for temp register support. --- dlls/wined3d/ati_fragment_shader.c | 249 ++++++++++++++++++++++--------------- 1 file changed, 152 insertions(+), 97 deletions(-) diff --git a/dlls/wined3d/ati_fragment_shader.c b/dlls/wined3d/ati_fragment_shader.c index d4b95dbef1f..d483c22b2cd 100644 --- a/dlls/wined3d/ati_fragment_shader.c +++ b/dlls/wined3d/ati_fragment_shader.c @@ -149,7 +149,7 @@ static const char *debug_swizzle(GLuint swizzle) { } #define GLINFO_LOCATION (*gl_info) -static GLuint register_for_arg(DWORD arg, WineD3D_GL_Info *gl_info, unsigned int stage, GLuint *mod) { +static GLuint register_for_arg(DWORD arg, WineD3D_GL_Info *gl_info, unsigned int stage, GLuint *mod, GLuint tmparg) { GLenum ret; if(mod) *mod = GL_NONE; @@ -186,8 +186,7 @@ static GLuint register_for_arg(DWORD arg, WineD3D_GL_Info *gl_info, unsigned int break; case WINED3DTA_TEMP: - FIXME("Unhandled source argument WINED3DTA_TEMP\n"); - ret = 0; + ret = tmparg; break; case WINED3DTA_CONSTANT: @@ -215,6 +214,8 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G GLuint arg0, arg1, arg2, extrarg; GLuint dstmod, argmod0, argmod1, argmod2, argmodextra; GLuint swizzle; + GLuint tmparg = -1; + GLuint dstreg; if(!ret) { ERR("Failed to generate a GL_ATI_fragment_shader shader id\n"); @@ -357,9 +358,11 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G break; } - arg0 = register_for_arg(op[stage].carg0, gl_info, stage, &argmod0); - arg1 = register_for_arg(op[stage].carg1, gl_info, stage, &argmod1); - arg2 = register_for_arg(op[stage].carg2, gl_info, stage, &argmod2); + dstreg = GL_REG_0_ATI; + + arg0 = register_for_arg(op[stage].carg0, gl_info, stage, &argmod0, tmparg); + arg1 = register_for_arg(op[stage].carg1, gl_info, stage, &argmod1, tmparg); + arg2 = register_for_arg(op[stage].carg2, gl_info, stage, &argmod2, tmparg); dstmod = GL_NONE; argmodextra = GL_NONE; extrarg = GL_NONE; @@ -369,9 +372,9 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G arg1 = arg2; argmod1 = argmod2; case WINED3DTOP_SELECTARG1: - TRACE("glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s)\n", - debug_register(arg1), debug_argmod(argmod1)); - GL_EXTCALL(glColorFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, + TRACE("glColorFragmentOp1ATI(GL_MOV_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s)\n", + debug_register(dstreg), debug_register(arg1), debug_argmod(argmod1)); + GL_EXTCALL(glColorFragmentOp1ATI(GL_MOV_ATI, dstreg, GL_NONE, GL_NONE, arg1, GL_NONE, argmod1)); break; @@ -380,9 +383,11 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G case WINED3DTOP_MODULATE2X: if(dstmod == GL_NONE) dstmod = GL_2X_BIT_ATI; case WINED3DTOP_MODULATE: - TRACE("glColorFragmentOp2ATI(GL_MUL_ATI, GL_REG_0_ATI, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2)); - GL_EXTCALL(glColorFragmentOp2ATI(GL_MUL_ATI, GL_REG_0_ATI, GL_NONE, dstmod, + TRACE("glColorFragmentOp2ATI(GL_MUL_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), debug_dstmod(dstmod), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmod2)); + GL_EXTCALL(glColorFragmentOp2ATI(GL_MUL_ATI, dstreg, GL_NONE, dstmod, arg1, GL_NONE, argmod1, arg2, GL_NONE, argmod2)); break; @@ -392,55 +397,68 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G case WINED3DTOP_ADDSIGNED: argmodextra = GL_BIAS_BIT_ATI; case WINED3DTOP_ADD: - TRACE("glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmodextra | argmod2)); + TRACE("glColorFragmentOp2ATI(GL_ADD_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), debug_dstmod(dstmod), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmodextra | argmod2)); GL_EXTCALL(glColorFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, GL_NONE, dstmod, - arg1, GL_NONE, argmod1, - arg2, GL_NONE, argmodextra | argmod2)); + arg1, GL_NONE, argmod1, + arg2, GL_NONE, argmodextra | argmod2)); break; case WINED3DTOP_SUBTRACT: - TRACE("glColorFragmentOp2ATI(GL_SUB_ATI, GL_REG_0_ATI, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2)); - GL_EXTCALL(glColorFragmentOp2ATI(GL_SUB_ATI, GL_REG_0_ATI, GL_NONE, dstmod, - arg1, GL_NONE, argmod1, - arg2, GL_NONE, argmod2)); + TRACE("glColorFragmentOp2ATI(GL_SUB_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), debug_dstmod(dstmod), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmod2)); + GL_EXTCALL(glColorFragmentOp2ATI(GL_SUB_ATI, dstreg, GL_NONE, dstmod, + arg1, GL_NONE, argmod1, + arg2, GL_NONE, argmod2)); break; case WINED3DTOP_ADDSMOOTH: argmodextra = argmod1 & GL_COMP_BIT_ATI ? argmod1 & ~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI; - TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(argmod1)); + TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg1), debug_argmod(argmodextra), + debug_register(arg1), debug_argmod(argmod1)); /* Dst = arg1 + * arg2(1 -arg 1) * = arg2 * (1 - arg1) + arg1 */ - GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, + GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE, arg2, GL_NONE, argmod2, arg1, GL_NONE, argmodextra, arg1, GL_NONE, argmod1)); break; case WINED3DTOP_BLENDCURRENTALPHA: - if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL); + if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL, -1); case WINED3DTOP_BLENDFACTORALPHA: - if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL); + if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL, -1); case WINED3DTOP_BLENDTEXTUREALPHA: - if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL); + if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1); case WINED3DTOP_BLENDDIFFUSEALPHA: - if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL); - TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(extrarg), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2)); - GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, + if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL, -1); + TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(extrarg), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmod2)); + GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, dstreg, GL_NONE, GL_NONE, extrarg, GL_ALPHA, GL_NONE, arg1, GL_NONE, argmod1, arg2, GL_NONE, argmod2)); break; case WINED3DTOP_BLENDTEXTUREALPHAPM: - arg0 = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL); - TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, GL_NONE, %s)\n", - debug_register(arg2), debug_argmod(argmod2), debug_register(arg0), debug_register(arg1), debug_argmod(argmod1)); - GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, + arg0 = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1); + TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg0), + debug_register(arg1), debug_argmod(argmod1)); + GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE, arg2, GL_NONE, argmod2, arg0, GL_ALPHA, GL_COMP_BIT_ATI, arg1, GL_NONE, argmod1)); @@ -452,9 +470,11 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G argmodextra = argmod1 & GL_COMP_BIT_ATI ? argmod1 & ~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI; case WINED3DTOP_MODULATEALPHA_ADDCOLOR: if(!argmodextra) argmodextra = argmod1; - TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, %s, %s, GL_NONE, %s)\n", - debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(arg1)); - GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, + TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(arg1)); + GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE, arg2, GL_NONE, argmod2, arg1, GL_ALPHA, argmodextra, arg1, GL_NONE, argmod1)); @@ -464,38 +484,49 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G argmodextra = argmod1 & GL_COMP_BIT_ATI ? argmod1 & ~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI; case WINED3DTOP_MODULATECOLOR_ADDALPHA: if(!argmodextra) argmodextra = argmod1; - TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_ALPHA, %s)\n", - debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(argmod1)); - GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, + TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_ALPHA, %s)\n", + debug_register(dstreg), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg1), debug_argmod(argmodextra), + debug_register(arg1), debug_argmod(argmod1)); + GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE, arg2, GL_NONE, argmod2, arg1, GL_NONE, argmodextra, arg1, GL_ALPHA, argmod1)); break; case WINED3DTOP_DOTPRODUCT3: - TRACE("glColorFragmentOp2ATI(GL_DOT3_ATI, GL_REG_0_ATI, GL_NONE, GL_4X_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(arg1), debug_argmod(argmod1 | GL_BIAS_BIT_ATI), debug_register(arg2), debug_argmod(argmod2 | GL_BIAS_BIT_ATI)); - GL_EXTCALL(glColorFragmentOp2ATI(GL_DOT3_ATI, GL_REG_0_ATI, GL_NONE, GL_4X_BIT_ATI, + TRACE("glColorFragmentOp2ATI(GL_DOT3_ATI, %s, GL_NONE, GL_4X_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg1), debug_argmod(argmod1 | GL_BIAS_BIT_ATI), + debug_register(arg2), debug_argmod(argmod2 | GL_BIAS_BIT_ATI)); + GL_EXTCALL(glColorFragmentOp2ATI(GL_DOT3_ATI, dstreg, GL_NONE, GL_4X_BIT_ATI, arg1, GL_NONE, argmod1 | GL_BIAS_BIT_ATI, arg2, GL_NONE, argmod2 | GL_BIAS_BIT_ATI)); break; case WINED3DTOP_MULTIPLYADD: - TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(arg0), debug_argmod(argmod0), debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmod1)); - GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, - arg0, GL_NONE, argmod0, - arg2, GL_NONE, argmod2, - arg1, GL_NONE, argmod1)); + TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg0), debug_argmod(argmod0), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg1), debug_argmod(argmod1)); + GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, GL_NONE, + arg0, GL_NONE, argmod0, + arg2, GL_NONE, argmod2, + arg1, GL_NONE, argmod1)); break; case WINED3DTOP_LERP: - TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2), debug_register(arg0), debug_argmod(argmod0)); - GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, GL_NONE, - arg1, GL_NONE, argmod1, - arg2, GL_NONE, argmod2, - arg0, GL_NONE, argmod0)); + TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg0), debug_argmod(argmod0)); + GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, dstreg, GL_NONE, GL_NONE, + arg1, GL_NONE, argmod1, + arg2, GL_NONE, argmod2, + arg0, GL_NONE, argmod0)); break; case WINED3DTOP_BUMPENVMAP: @@ -506,9 +537,9 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G default: FIXME("Unhandled color operation %d on stage %d\n", op[stage].cop, stage); } - arg0 = register_for_arg(op[stage].aarg0, gl_info, stage, &argmod0); - arg1 = register_for_arg(op[stage].aarg1, gl_info, stage, &argmod1); - arg2 = register_for_arg(op[stage].aarg2, gl_info, stage, &argmod2); + arg0 = register_for_arg(op[stage].aarg0, gl_info, stage, &argmod0, tmparg); + arg1 = register_for_arg(op[stage].aarg1, gl_info, stage, &argmod1, tmparg); + arg2 = register_for_arg(op[stage].aarg2, gl_info, stage, &argmod2, tmparg); dstmod = GL_NONE; argmodextra = GL_NONE; extrarg = GL_NONE; @@ -527,9 +558,10 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G arg1 = arg2; argmod1 = argmod2; case WINED3DTOP_SELECTARG1: - TRACE("glAlphaFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s)\n", + TRACE("glAlphaFragmentOp1ATI(GL_MOV_ATI, %s, GL_NONE, %s, GL_NONE, %s)\n", + debug_register(dstreg), debug_register(arg1), debug_argmod(argmod1)); - GL_EXTCALL(glAlphaFragmentOp1ATI(GL_MOV_ATI, GL_REG_0_ATI, GL_NONE, + GL_EXTCALL(glAlphaFragmentOp1ATI(GL_MOV_ATI, dstreg, GL_NONE, arg1, GL_NONE, argmod1)); break; @@ -538,9 +570,11 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G case WINED3DTOP_MODULATE2X: if(dstmod == GL_NONE) dstmod = GL_2X_BIT_ATI; case WINED3DTOP_MODULATE: - TRACE("glAlphaFragmentOp2ATI(GL_MUL_ATI, GL_REG_0_ATI, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2)); - GL_EXTCALL(glAlphaFragmentOp2ATI(GL_MUL_ATI, GL_REG_0_ATI, dstmod, + TRACE("glAlphaFragmentOp2ATI(GL_MUL_ATI, %s, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), debug_dstmod(dstmod), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmod2)); + GL_EXTCALL(glAlphaFragmentOp2ATI(GL_MUL_ATI, dstreg, dstmod, arg1, GL_NONE, argmod1, arg2, GL_NONE, argmod2)); break; @@ -550,55 +584,68 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G case WINED3DTOP_ADDSIGNED: argmodextra = GL_BIAS_BIT_ATI; case WINED3DTOP_ADD: - TRACE("glAlphaFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmodextra | argmod2)); - GL_EXTCALL(glAlphaFragmentOp2ATI(GL_ADD_ATI, GL_REG_0_ATI, dstmod, - arg1, GL_NONE, argmod1, - arg2, GL_NONE, argmodextra | argmod2)); + TRACE("glAlphaFragmentOp2ATI(GL_ADD_ATI, %s, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), debug_dstmod(dstmod), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmodextra | argmod2)); + GL_EXTCALL(glAlphaFragmentOp2ATI(GL_ADD_ATI, dstreg, dstmod, + arg1, GL_NONE, argmod1, + arg2, GL_NONE, argmodextra | argmod2)); break; case WINED3DTOP_SUBTRACT: - TRACE("glAlphaFragmentOp2ATI(GL_SUB_ATI, GL_REG_0_ATI, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_dstmod(dstmod), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2)); - GL_EXTCALL(glAlphaFragmentOp2ATI(GL_SUB_ATI, GL_REG_0_ATI, dstmod, - arg1, GL_NONE, argmod1, - arg2, GL_NONE, argmod2)); + TRACE("glAlphaFragmentOp2ATI(GL_SUB_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), debug_dstmod(dstmod), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmod2)); + GL_EXTCALL(glAlphaFragmentOp2ATI(GL_SUB_ATI, dstreg, dstmod, + arg1, GL_NONE, argmod1, + arg2, GL_NONE, argmod2)); break; case WINED3DTOP_ADDSMOOTH: argmodextra = argmod1 & GL_COMP_BIT_ATI ? argmod1 & ~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI; - TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmodextra), debug_register(arg1), debug_argmod(argmod1)); + TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg1), debug_argmod(argmodextra), + debug_register(arg1), debug_argmod(argmod1)); /* Dst = arg1 + * arg2(1 -arg 1) * = arg2 * (1 - arg1) + arg1 */ - GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, + GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, arg2, GL_NONE, argmod2, arg1, GL_NONE, argmodextra, arg1, GL_NONE, argmod1)); break; case WINED3DTOP_BLENDCURRENTALPHA: - if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL); + if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL, -1); case WINED3DTOP_BLENDFACTORALPHA: - if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL); + if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL, -1); case WINED3DTOP_BLENDTEXTUREALPHA: - if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL); + if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1); case WINED3DTOP_BLENDDIFFUSEALPHA: - if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL); - TRACE("glAlphaFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(extrarg), debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2)); - GL_EXTCALL(glAlphaFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, + if(extrarg == GL_NONE) extrarg = register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL, -1); + TRACE("glAlphaFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(extrarg), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmod2)); + GL_EXTCALL(glAlphaFragmentOp3ATI(GL_LERP_ATI, dstreg, GL_NONE, extrarg, GL_ALPHA, GL_NONE, arg1, GL_NONE, argmod1, arg2, GL_NONE, argmod2)); break; case WINED3DTOP_BLENDTEXTUREALPHAPM: - arg0 = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL); - TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, GL_NONE, %s)\n", - debug_register(arg2), debug_argmod(argmod2), debug_register(arg0), debug_register(arg1), debug_argmod(argmod1)); - GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, + arg0 = register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1); + TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg0), + debug_register(arg1), debug_argmod(argmod1)); + GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, arg2, GL_NONE, argmod2, arg0, GL_ALPHA, GL_COMP_BIT_ATI, arg1, GL_NONE, argmod1)); @@ -607,26 +654,34 @@ static GLuint gen_ati_shader(struct texture_stage_op op[MAX_TEXTURES], WineD3D_G /* D3DTOP_PREMODULATE ???? */ case WINED3DTOP_DOTPRODUCT3: - TRACE("glAlphaFragmentOp2ATI(GL_DOT3_ATI, GL_REG_0_ATI, GL_NONE, GL_4X_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(arg1), debug_argmod(argmod1 | GL_BIAS_BIT_ATI), debug_register(arg2), debug_argmod(argmod2 | GL_BIAS_BIT_ATI)); - GL_EXTCALL(glAlphaFragmentOp2ATI(GL_DOT3_ATI, GL_REG_0_ATI, GL_4X_BIT_ATI, + TRACE("glAlphaFragmentOp2ATI(GL_DOT3_ATI, %s, GL_NONE, GL_4X_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg1), debug_argmod(argmod1 | GL_BIAS_BIT_ATI), + debug_register(arg2), debug_argmod(argmod2 | GL_BIAS_BIT_ATI)); + GL_EXTCALL(glAlphaFragmentOp2ATI(GL_DOT3_ATI, dstreg, GL_4X_BIT_ATI, arg1, GL_NONE, argmod1 | GL_BIAS_BIT_ATI, arg2, GL_NONE, argmod2 | GL_BIAS_BIT_ATI)); break; case WINED3DTOP_MULTIPLYADD: - TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(arg0), debug_argmod(argmod0), debug_register(arg2), debug_argmod(argmod2), debug_register(arg1), debug_argmod(argmod1)); - GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, GL_REG_0_ATI, GL_NONE, + TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg0), debug_argmod(argmod0), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg1), debug_argmod(argmod1)); + GL_EXTCALL(glAlphaFragmentOp3ATI(GL_MAD_ATI, dstreg, GL_NONE, arg0, GL_NONE, argmod0, arg2, GL_NONE, argmod2, arg1, GL_NONE, argmod1)); break; case WINED3DTOP_LERP: - TRACE("glAlphaFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", - debug_register(arg1), debug_argmod(argmod1), debug_register(arg2), debug_argmod(argmod2), debug_register(arg0), debug_argmod(argmod0)); - GL_EXTCALL(glAlphaFragmentOp3ATI(GL_LERP_ATI, GL_REG_0_ATI, GL_NONE, + TRACE("glAlphaFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n", + debug_register(dstreg), + debug_register(arg1), debug_argmod(argmod1), + debug_register(arg2), debug_argmod(argmod2), + debug_register(arg0), debug_argmod(argmod0)); + GL_EXTCALL(glAlphaFragmentOp3ATI(GL_LERP_ATI, dstreg, GL_NONE, arg1, GL_NONE, argmod1, arg2, GL_NONE, argmod2, arg0, GL_NONE, argmod0)); -- 2.11.4.GIT