[PATCH] WineD3D: Implement D3DTA_ALPHAREPLICATE in arbfp and =

Stefan Doesinger stefan at codeweavers.com
Tue Aug 19 10:43:03 CDT 2008


atifs=0A=
=0A=
Also adds a simple test for this. In the fixed function and nvrc/nvts =
code this already works=0A=
properly=0A=
---=0A=
 dlls/d3d9/tests/visual.c           |   43 +++++++++=0A=
 dlls/wined3d/arb_program_shader.c  |    6 +=0A=
 dlls/wined3d/ati_fragment_shader.c |  178 =
+++++++++++++++++++-----------------=0A=
 3 files changed, 145 insertions(+), 82 deletions(-)=0A=
=0A=
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c=0A=
index 25085f0..6562187 100644=0A=
--- a/dlls/d3d9/tests/visual.c=0A=
+++ b/dlls/d3d9/tests/visual.c=0A=
@@ -9492,6 +9492,48 @@ static void texop_range_test(IDirect3DDevice9 =
*device)=0A=
     IDirect3DTexture9_Release(texture);=0A=
 }=0A=
 =0A=
+static void alphareplicate_test(IDirect3DDevice9 *device) {=0A=
+    struct vertex quad[] =3D {=0A=
+        { -1.0,    -1.0,    0.1,    0x80ff00ff },=0A=
+        {  1.0,    -1.0,    0.1,    0x80ff00ff },=0A=
+        { -1.0,     1.0,    0.1,    0x80ff00ff },=0A=
+        {  1.0,     1.0,    0.1,    0x80ff00ff },=0A=
+    };=0A=
+    HRESULT hr;=0A=
+    DWORD color;=0A=
+=0A=
+    hr =3D IDirect3DDevice9_Clear(device, 0, NULL, D3DCLEAR_TARGET | =
D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);=0A=
+    ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_Clear failed with 0x%08x\n", =
hr);=0A=
+=0A=
+    hr =3D IDirect3DDevice9_SetFVF(device, D3DFVF_XYZ | D3DFVF_DIFFUSE);=0A=
+    ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_SetFVF failed with =
0x%08x\n", hr);=0A=
+=0A=
+    hr =3D IDirect3DDevice9_SetTextureStageState(device, 0, =
D3DTSS_COLOROP, D3DTOP_SELECTARG1);=0A=
+    ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_SetTextureStageState failed =
with 0x%08x\n", hr);=0A=
+    hr =3D IDirect3DDevice9_SetTextureStageState(device, 0, =
D3DTSS_COLORARG1, D3DTA_DIFFUSE | D3DTA_ALPHAREPLICATE);=0A=
+    ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_SetTextureStageState failed =
with 0x%08x\n", hr);=0A=
+=0A=
+    hr =3D IDirect3DDevice9_BeginScene(device);=0A=
+    ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_BeginScene failed with =
0x%08x\n", hr);=0A=
+    if(SUCCEEDED(hr)) {=0A=
+        hr =3D IDirect3DDevice9_DrawPrimitiveUP(device, =
D3DPT_TRIANGLESTRIP, 2, quad, sizeof(*quad));=0A=
+        ok(SUCCEEDED(hr), "DrawPrimitiveUP failed with 0x%08x\n", hr);=0A=
+        hr =3D IDirect3DDevice9_EndScene(device);=0A=
+        ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_BeginScene failed with =
0x%08x\n", hr);=0A=
+    }=0A=
+=0A=
+    hr =3D IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL);=0A=
+    ok(SUCCEEDED(hr), "Present failed with 0x%08x\n", hr);=0A=
+=0A=
+    color =3D getPixelColor(device, 320, 240);=0A=
+    ok(color_match(color, 0x00808080, 1), "alphareplicate test 0x%08x, =
expected 0x00808080\n",=0A=
+       color);=0A=
+=0A=
+    hr =3D IDirect3DDevice9_SetTextureStageState(device, 0, =
D3DTSS_COLOROP, D3DTOP_DISABLE);=0A=
+    ok(hr =3D=3D D3D_OK, "IDirect3DDevice9_SetTextureStageState failed =
with 0x%08x\n", hr);=0A=
+=0A=
+}=0A=
+=0A=
 START_TEST(visual)=0A=
 {=0A=
     IDirect3DDevice9 *device_ptr;=0A=
@@ -9650,6 +9692,7 @@ START_TEST(visual)=0A=
     else skip("No ps_1_1 support\n");=0A=
     texop_test(device_ptr);=0A=
     texop_range_test(device_ptr);=0A=
+    alphareplicate_test(device_ptr);=0A=
 =0A=
 cleanup:=0A=
     if(device_ptr) {=0A=
diff --git a/dlls/wined3d/arb_program_shader.c =
b/dlls/wined3d/arb_program_shader.c=0A=
index 1f27ec4..250845a 100644=0A=
--- a/dlls/wined3d/arb_program_shader.c=0A=
+++ b/dlls/wined3d/arb_program_shader.c=0A=
@@ -2464,6 +2464,12 @@ static const char *get_argreg(SHADER_BUFFER =
*buffer, DWORD argnum, unsigned int=0A=
         if(argnum =3D=3D 1) ret =3D "arg1";=0A=
         if(argnum =3D=3D 2) ret =3D "arg2";=0A=
     }=0A=
+    if(arg & WINED3DTA_ALPHAREPLICATE) {=0A=
+        shader_addline(buffer, "MOV arg%u, %s.a;\n", argnum, ret);=0A=
+        if(argnum =3D=3D 0) ret =3D "arg0";=0A=
+        if(argnum =3D=3D 1) ret =3D "arg1";=0A=
+        if(argnum =3D=3D 2) ret =3D "arg2";=0A=
+    }=0A=
     return ret;=0A=
 }=0A=
 =0A=
diff --git a/dlls/wined3d/ati_fragment_shader.c =
b/dlls/wined3d/ati_fragment_shader.c=0A=
index e6b43d8..667a95c 100644=0A=
--- a/dlls/wined3d/ati_fragment_shader.c=0A=
+++ b/dlls/wined3d/ati_fragment_shader.c=0A=
@@ -148,8 +148,18 @@ static const char *debug_swizzle(GLuint swizzle) {=0A=
     }=0A=
 }=0A=
 =0A=
+static const char *debug_rep(GLuint rep) {=0A=
+    switch(rep) {=0A=
+        case GL_NONE:                   return "GL_NONE";=0A=
+        case GL_RED:                    return "GL_RED";=0A=
+        case GL_GREEN:                  return "GL_GREEN";=0A=
+        case GL_BLUE:                   return "GL_BLUE";=0A=
+        default:                        return "unknown argrep";=0A=
+    }=0A=
+}=0A=
+=0A=
 #define GLINFO_LOCATION (*gl_info)=0A=
-static GLuint register_for_arg(DWORD arg, WineD3D_GL_Info *gl_info, =
unsigned int stage, GLuint *mod, GLuint tmparg) {=0A=
+static GLuint register_for_arg(DWORD arg, WineD3D_GL_Info *gl_info, =
unsigned int stage, GLuint *mod, GLuint *rep, GLuint tmparg) {=0A=
     GLenum ret;=0A=
 =0A=
     if(mod) *mod =3D GL_NONE;=0A=
@@ -203,7 +213,9 @@ static GLuint register_for_arg(DWORD arg, =
WineD3D_GL_Info *gl_info, unsigned int=0A=
         if(mod) *mod |=3D GL_COMP_BIT_ATI;=0A=
     }=0A=
     if(arg & WINED3DTA_ALPHAREPLICATE) {=0A=
-        FIXME("Unhandled read modifier WINED3DTA_ALPHAREPLICATE\n");=0A=
+        if(rep) *rep =3D GL_ALPHA;=0A=
+    } else {=0A=
+        if(rep) *rep =3D GL_NONE;=0A=
     }=0A=
     return ret;=0A=
 }=0A=
@@ -273,6 +285,7 @@ static GLuint gen_ati_shader(struct texture_stage_op =
op[MAX_TEXTURES], WineD3D_G=0A=
     unsigned int stage;=0A=
     GLuint arg0, arg1, arg2, extrarg;=0A=
     GLuint dstmod, argmod0, argmod1, argmod2, argmodextra;=0A=
+    GLuint rep0, rep1, rep2;=0A=
     GLuint swizzle;=0A=
     GLuint tmparg =3D find_tmpreg(op);=0A=
     GLuint dstreg;=0A=
@@ -429,9 +442,9 @@ static GLuint gen_ati_shader(struct texture_stage_op =
op[MAX_TEXTURES], WineD3D_G=0A=
             dstreg =3D GL_REG_0_ATI;=0A=
         }=0A=
 =0A=
-        arg0 =3D register_for_arg(op[stage].carg0, gl_info, stage, =
&argmod0, tmparg);=0A=
-        arg1 =3D register_for_arg(op[stage].carg1, gl_info, stage, =
&argmod1, tmparg);=0A=
-        arg2 =3D register_for_arg(op[stage].carg2, gl_info, stage, =
&argmod2, tmparg);=0A=
+        arg0 =3D register_for_arg(op[stage].carg0, gl_info, stage, =
&argmod0, &rep0, tmparg);=0A=
+        arg1 =3D register_for_arg(op[stage].carg1, gl_info, stage, =
&argmod1, &rep1, tmparg);=0A=
+        arg2 =3D register_for_arg(op[stage].carg2, gl_info, stage, =
&argmod2, &rep2, tmparg);=0A=
         dstmod =3D GL_NONE;=0A=
         argmodextra =3D GL_NONE;=0A=
         extrarg =3D GL_NONE;=0A=
@@ -440,11 +453,12 @@ static GLuint gen_ati_shader(struct =
texture_stage_op op[MAX_TEXTURES], WineD3D_G=0A=
             case WINED3DTOP_SELECTARG2:=0A=
                 arg1 =3D arg2;=0A=
                 argmod1 =3D argmod2;=0A=
+                rep1 =3D rep2;=0A=
             case WINED3DTOP_SELECTARG1:=0A=
-                TRACE("glColorFragmentOp1ATI(GL_MOV_ATI, %s, GL_NONE, =
GL_NONE, %s, GL_NONE, %s)\n",=0A=
-                      debug_register(dstreg), debug_register(arg1), =
debug_argmod(argmod1));=0A=
+                TRACE("glColorFragmentOp1ATI(GL_MOV_ATI, %s, GL_NONE, =
GL_NONE, %s, %s, %s)\n",=0A=
+                      debug_register(dstreg), debug_register(arg1), =
debug_rep(rep1), debug_argmod(argmod1));=0A=
                 GL_EXTCALL(glColorFragmentOp1ATI(GL_MOV_ATI, dstreg, =
GL_NONE, GL_NONE,=0A=
-                                                 arg1, GL_NONE, =
argmod1));=0A=
+                                                 arg1, rep1, argmod1));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_MODULATE4X:=0A=
@@ -453,13 +467,13 @@ static GLuint gen_ati_shader(struct =
texture_stage_op op[MAX_TEXTURES], WineD3D_G=0A=
                 if(dstmod =3D=3D GL_NONE) dstmod =3D GL_2X_BIT_ATI;=0A=
                 dstmod |=3D GL_SATURATE_BIT_ATI;=0A=
             case WINED3DTOP_MODULATE:=0A=
-                TRACE("glColorFragmentOp2ATI(GL_MUL_ATI, %s, GL_NONE, =
%s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",=0A=
+                TRACE("glColorFragmentOp2ATI(GL_MUL_ATI, %s, GL_NONE, =
%s, %s, %s, %s, %s, %s, %s)\n",=0A=
                       debug_register(dstreg), debug_dstmod(dstmod),=0A=
-                      debug_register(arg1), debug_argmod(argmod1),=0A=
-                      debug_register(arg2), debug_argmod(argmod2));=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmod1),=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2));=0A=
                 GL_EXTCALL(glColorFragmentOp2ATI(GL_MUL_ATI, dstreg, =
GL_NONE, dstmod,=0A=
-                                                 arg1, GL_NONE, argmod1,=0A=
-                                                 arg2, GL_NONE, =
argmod2));=0A=
+                                                 arg1, rep1, argmod1,=0A=
+                                                 arg2, rep2, argmod2));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_ADDSIGNED2X:=0A=
@@ -468,72 +482,72 @@ static GLuint gen_ati_shader(struct =
texture_stage_op op[MAX_TEXTURES], WineD3D_G=0A=
                 argmodextra =3D GL_BIAS_BIT_ATI;=0A=
             case WINED3DTOP_ADD:=0A=
                 dstmod |=3D GL_SATURATE_BIT_ATI;=0A=
-                TRACE("glColorFragmentOp2ATI(GL_ADD_ATI, %s, GL_NONE, =
%s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",=0A=
+                TRACE("glColorFragmentOp2ATI(GL_ADD_ATI, %s, GL_NONE, =
%s, %s, %s, %s, %s, %s, %s)\n",=0A=
                       debug_register(dstreg), debug_dstmod(dstmod),=0A=
-                      debug_register(arg1), debug_argmod(argmod1),=0A=
-                      debug_register(arg2), debug_argmod(argmodextra | =
argmod2));=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmod1),=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmodextra | argmod2));=0A=
                 GL_EXTCALL(glColorFragmentOp2ATI(GL_ADD_ATI, =
GL_REG_0_ATI, GL_NONE, dstmod,=0A=
-                                                 arg1, GL_NONE, argmod1,=0A=
-                                                 arg2, GL_NONE, =
argmodextra | argmod2));=0A=
+                                                 arg1, rep1, argmod1,=0A=
+                                                 arg2, rep2, =
argmodextra | argmod2));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_SUBTRACT:=0A=
                 dstmod |=3D GL_SATURATE_BIT_ATI;=0A=
-                TRACE("glColorFragmentOp2ATI(GL_SUB_ATI, %s, GL_NONE, =
%s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",=0A=
+                TRACE("glColorFragmentOp2ATI(GL_SUB_ATI, %s, GL_NONE, =
%s, %s, %s, %s, %s, %s, %s)\n",=0A=
                       debug_register(dstreg), debug_dstmod(dstmod),=0A=
-                      debug_register(arg1), debug_argmod(argmod1),=0A=
-                      debug_register(arg2), debug_argmod(argmod2));=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmod1),=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2));=0A=
                 GL_EXTCALL(glColorFragmentOp2ATI(GL_SUB_ATI, dstreg, =
GL_NONE, dstmod,=0A=
-                                                 arg1, GL_NONE, argmod1,=0A=
-                                                 arg2, GL_NONE, =
argmod2));=0A=
+                                                 arg1, rep1, argmod1,=0A=
+                                                 arg2, rep2, argmod2));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_ADDSMOOTH:=0A=
                 argmodextra =3D argmod1 & GL_COMP_BIT_ATI ? argmod1 & =
~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI;=0A=
-                TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, =
GL_SATURATE_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, =
%s)\n",=0A=
+                TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, =
GL_SATURATE_BIT_ATI, %s, %s, %s, %s, %s, %s, %s, %s, %s)\n",=0A=
                       debug_register(dstreg),=0A=
-                      debug_register(arg2), debug_argmod(argmod2),=0A=
-                      debug_register(arg1), debug_argmod(argmodextra),=0A=
-                      debug_register(arg1), debug_argmod(argmod1));=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2),=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmodextra),=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmod1));=0A=
                 /* Dst =3D arg1 + * arg2(1 -arg 1)=0A=
                  *     =3D arg2 * (1 - arg1) + arg1=0A=
                  */=0A=
                 GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, =
GL_NONE, GL_SATURATE_BIT_ATI,=0A=
-                                                 arg2, GL_NONE, argmod2,=0A=
-                                                 arg1, GL_NONE, =
argmodextra,=0A=
-                                                 arg1, GL_NONE, =
argmod1));=0A=
+                                                 arg2, rep2, argmod2,=0A=
+                                                 arg1, rep1, =
argmodextra,=0A=
+                                                 arg1, rep1, argmod1));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_BLENDCURRENTALPHA:=0A=
-                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL, -1);=0A=
+                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL, NULL, -1);=0A=
             case WINED3DTOP_BLENDFACTORALPHA:=0A=
-                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL, -1);=0A=
+                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL, NULL, -1);=0A=
             case WINED3DTOP_BLENDTEXTUREALPHA:=0A=
-                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1);=0A=
+                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, NULL, -1);=0A=
             case WINED3DTOP_BLENDDIFFUSEALPHA:=0A=
-                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL, -1);=0A=
-                TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, =
GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",=0A=
+                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL, NULL, -1);=0A=
+                TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, =
GL_NONE, %s, GL_ALPHA, GL_NONE, %s, %s, %s, %s, %s, %s)\n",=0A=
                       debug_register(dstreg),=0A=
                       debug_register(extrarg),=0A=
-                      debug_register(arg1), debug_argmod(argmod1),=0A=
-                      debug_register(arg2), debug_argmod(argmod2));=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmod1),=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2));=0A=
                 GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, dstreg, =
GL_NONE, GL_NONE,=0A=
                                                  extrarg, GL_ALPHA, =
GL_NONE,=0A=
-                                                 arg1, GL_NONE, argmod1,=0A=
-                                                 arg2, GL_NONE, =
argmod2));=0A=
+                                                 arg1, rep1, argmod1,=0A=
+                                                 arg2, rep2, argmod2));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
-                arg0 =3D register_for_arg(WINED3DTA_TEXTURE, gl_info, =
stage, NULL, -1);=0A=
-                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",=0A=
+                arg0 =3D register_for_arg(WINED3DTA_TEXTURE, gl_info, =
stage, NULL, NULL, -1);=0A=
+                TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, =
GL_NONE, %s, %s, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, %s, %s)\n",=0A=
                       debug_register(dstreg),=0A=
-                      debug_register(arg2), debug_argmod(argmod2),=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2),=0A=
                       debug_register(arg0),=0A=
-                      debug_register(arg1), debug_argmod(argmod1));=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmod1));=0A=
                 GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, =
GL_NONE, GL_NONE,=0A=
-                                                 arg2, GL_NONE,  =
argmod2,=0A=
+                                                 arg2, rep2,  argmod2,=0A=
                                                  arg0, GL_ALPHA, =
GL_COMP_BIT_ATI,=0A=
-                                                 arg1, GL_NONE,  =
argmod1));=0A=
+                                                 arg1, rep1,  argmod1));=0A=
                 break;=0A=
 =0A=
             /* D3DTOP_PREMODULATE ???? */=0A=
@@ -542,63 +556,63 @@ static GLuint gen_ati_shader(struct =
texture_stage_op op[MAX_TEXTURES], WineD3D_G=0A=
                 argmodextra =3D argmod1 & GL_COMP_BIT_ATI ? argmod1 & =
~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI;=0A=
             case WINED3DTOP_MODULATEALPHA_ADDCOLOR:=0A=
                 if(!argmodextra) argmodextra =3D argmod1;=0A=
-                TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, =
GL_SATURATE_BIT_ATI, %s, GL_NONE, %s, %s, GL_ALPHA, %s, %s, GL_NONE, =
%s)\n",=0A=
+                TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, =
GL_SATURATE_BIT_ATI, %s, %s, %s, %s, GL_ALPHA, %s, %s, %s, %s)\n",=0A=
                       debug_register(dstreg),=0A=
-                      debug_register(arg2), debug_argmod(argmod2),=0A=
-                      debug_register(arg1), debug_argmod(argmodextra), =
debug_register(arg1), debug_argmod(arg1));=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2),=0A=
+                      debug_register(arg1), debug_argmod(argmodextra), =
debug_register(arg1), debug_rep(rep1), debug_argmod(arg1));=0A=
                 GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, =
GL_NONE, GL_SATURATE_BIT_ATI,=0A=
-                                                 arg2, GL_NONE,  =
argmod2,=0A=
+                                                 arg2, rep2,  argmod2,=0A=
                                                  arg1, GL_ALPHA, =
argmodextra,=0A=
-                                                 arg1, GL_NONE,  =
argmod1));=0A=
+                                                 arg1, rep1,  argmod1));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_MODULATEINVCOLOR_ADDALPHA:=0A=
                 argmodextra =3D argmod1 & GL_COMP_BIT_ATI ? argmod1 & =
~GL_COMP_BIT_ATI : argmod1 | GL_COMP_BIT_ATI;=0A=
             case WINED3DTOP_MODULATECOLOR_ADDALPHA:=0A=
                 if(!argmodextra) argmodextra =3D argmod1;=0A=
-                TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, =
GL_SATURATE_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_ALPHA, =
%s)\n",=0A=
+                TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, =
GL_SATURATE_BIT_ATI, %s, %s, %s, %s, %s, %s, %s, GL_ALPHA, %s)\n",=0A=
                       debug_register(dstreg),=0A=
-                      debug_register(arg2), debug_argmod(argmod2),=0A=
-                      debug_register(arg1), debug_argmod(argmodextra),=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2),=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmodextra),=0A=
                       debug_register(arg1), debug_argmod(argmod1));=0A=
                 GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, =
GL_NONE, GL_SATURATE_BIT_ATI,=0A=
-                                                 arg2, GL_NONE,  =
argmod2,=0A=
-                                                 arg1, GL_NONE,  =
argmodextra,=0A=
+                                                 arg2, rep2,  argmod2,=0A=
+                                                 arg1, rep1,  =
argmodextra,=0A=
                                                  arg1, GL_ALPHA, =
argmod1));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_DOTPRODUCT3:=0A=
-                TRACE("glColorFragmentOp2ATI(GL_DOT3_ATI, %s, GL_NONE, =
GL_4X_BIT_ATI | GL_SATURATE_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, =
%s)\n",=0A=
+                TRACE("glColorFragmentOp2ATI(GL_DOT3_ATI, %s, GL_NONE, =
GL_4X_BIT_ATI | GL_SATURATE_BIT_ATI, %s, %s, %s, %s, %s, %s)\n",=0A=
                       debug_register(dstreg),=0A=
-                      debug_register(arg1), debug_argmod(argmod1 | =
GL_BIAS_BIT_ATI),=0A=
-                      debug_register(arg2), debug_argmod(argmod2 | =
GL_BIAS_BIT_ATI));=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmod1 | GL_BIAS_BIT_ATI),=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2 | GL_BIAS_BIT_ATI));=0A=
                 GL_EXTCALL(glColorFragmentOp2ATI(GL_DOT3_ATI, dstreg, =
GL_NONE, GL_4X_BIT_ATI | GL_SATURATE_BIT_ATI,=0A=
-                                                 arg1, GL_NONE, argmod1 =
| GL_BIAS_BIT_ATI,=0A=
-                                                 arg2, GL_NONE, argmod2 =
| GL_BIAS_BIT_ATI));=0A=
+                                                 arg1, rep1, argmod1 | =
GL_BIAS_BIT_ATI,=0A=
+                                                 arg2, rep2, argmod2 | =
GL_BIAS_BIT_ATI));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_MULTIPLYADD:=0A=
-                TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, =
GL_SATURATE_BIT_ATI, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, =
%s)\n",=0A=
+                TRACE("glColorFragmentOp3ATI(GL_MAD_ATI, %s, GL_NONE, =
GL_SATURATE_BIT_ATI, %s, %s, %s, %s, %s, %s, %s, %s, %s)\n",=0A=
                       debug_register(dstreg),=0A=
-                      debug_register(arg1), debug_argmod(argmod1),=0A=
-                      debug_register(arg2), debug_argmod(argmod2),=0A=
-                      debug_register(arg0), debug_argmod(argmod0));=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmod1),=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2),=0A=
+                      debug_register(arg0), debug_rep(rep0), =
debug_argmod(argmod0));=0A=
                 GL_EXTCALL(glColorFragmentOp3ATI(GL_MAD_ATI, dstreg, =
GL_NONE, GL_SATURATE_BIT_ATI,=0A=
-                                                 arg1, GL_NONE, argmod1,=0A=
-                                                 arg2, GL_NONE, argmod2,=0A=
-                                                 arg0, GL_NONE, =
argmod0));=0A=
+                                                 arg1, rep1, argmod1,=0A=
+                                                 arg2, rep2, argmod2,=0A=
+                                                 arg0, rep0, argmod0));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_LERP:=0A=
-                TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, =
GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",=0A=
+                TRACE("glColorFragmentOp3ATI(GL_LERP_ATI, %s, GL_NONE, =
GL_NONE, %s, %s, %s, %s, %s, %s, %s, %s, %s)\n",=0A=
                       debug_register(dstreg),=0A=
-                      debug_register(arg1), debug_argmod(argmod1),=0A=
-                      debug_register(arg2), debug_argmod(argmod2),=0A=
-                      debug_register(arg0), debug_argmod(argmod0));=0A=
+                      debug_register(arg1), debug_rep(rep1), =
debug_argmod(argmod1),=0A=
+                      debug_register(arg2), debug_rep(rep2), =
debug_argmod(argmod2),=0A=
+                      debug_register(arg0), debug_rep(rep0), =
debug_argmod(argmod0));=0A=
                 GL_EXTCALL(glColorFragmentOp3ATI(GL_LERP_ATI, dstreg, =
GL_NONE, GL_NONE,=0A=
-                                                 arg0, GL_NONE, argmod0,=0A=
-                                                 arg1, GL_NONE, argmod1,=0A=
-                                                 arg2, GL_NONE, =
argmod2));=0A=
+                                                 arg0, rep0, argmod0,=0A=
+                                                 arg1, rep1, argmod1,=0A=
+                                                 arg2, rep2, argmod2));=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_BUMPENVMAP:=0A=
@@ -609,9 +623,9 @@ static GLuint gen_ati_shader(struct texture_stage_op =
op[MAX_TEXTURES], WineD3D_G=0A=
             default: FIXME("Unhandled color operation %d on stage =
%d\n", op[stage].cop, stage);=0A=
         }=0A=
 =0A=
-        arg0 =3D register_for_arg(op[stage].aarg0, gl_info, stage, =
&argmod0, tmparg);=0A=
-        arg1 =3D register_for_arg(op[stage].aarg1, gl_info, stage, =
&argmod1, tmparg);=0A=
-        arg2 =3D register_for_arg(op[stage].aarg2, gl_info, stage, =
&argmod2, tmparg);=0A=
+        arg0 =3D register_for_arg(op[stage].aarg0, gl_info, stage, =
&argmod0, NULL, tmparg);=0A=
+        arg1 =3D register_for_arg(op[stage].aarg1, gl_info, stage, =
&argmod1, NULL, tmparg);=0A=
+        arg2 =3D register_for_arg(op[stage].aarg2, gl_info, stage, =
&argmod2, NULL, tmparg);=0A=
         dstmod =3D GL_NONE;=0A=
         argmodextra =3D GL_NONE;=0A=
         extrarg =3D GL_NONE;=0A=
@@ -695,13 +709,13 @@ static GLuint gen_ati_shader(struct =
texture_stage_op op[MAX_TEXTURES], WineD3D_G=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_BLENDCURRENTALPHA:=0A=
-                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL, -1);=0A=
+                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_CURRENT, gl_info, stage, NULL, NULL, -1);=0A=
             case WINED3DTOP_BLENDFACTORALPHA:=0A=
-                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL, -1);=0A=
+                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_TFACTOR, gl_info, stage, NULL, NULL, -1);=0A=
             case WINED3DTOP_BLENDTEXTUREALPHA:=0A=
-                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, -1);=0A=
+                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_TEXTURE, gl_info, stage, NULL, NULL, -1);=0A=
             case WINED3DTOP_BLENDDIFFUSEALPHA:=0A=
-                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL, -1);=0A=
+                if(extrarg =3D=3D GL_NONE) extrarg =3D =
register_for_arg(WINED3DTA_DIFFUSE, gl_info, stage, NULL, NULL, -1);=0A=
                 TRACE("glAlphaFragmentOp3ATI(GL_LERP_ATI, %s,          =
GL_NONE, %s, GL_ALPHA, GL_NONE, %s, GL_NONE, %s, %s, GL_NONE, %s)\n",=0A=
                       debug_register(dstreg),=0A=
                       debug_register(extrarg),=0A=
@@ -714,7 +728,7 @@ static GLuint gen_ati_shader(struct texture_stage_op =
op[MAX_TEXTURES], WineD3D_G=0A=
                 break;=0A=
 =0A=
             case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
-                arg0 =3D register_for_arg(WINED3DTA_TEXTURE, gl_info, =
stage, NULL, -1);=0A=
+                arg0 =3D register_for_arg(WINED3DTA_TEXTURE, gl_info, =
stage, NULL, NULL, -1);=0A=
                 TRACE("glAlphaFragmentOp3ATI(GL_MAD_ATI, %s,          =
GL_NONE, %s, GL_NONE, %s, %s, GL_ALPHA, GL_COMP_BIT_ATI, %s, GL_NONE, =
%s)\n",=0A=
                       debug_register(dstreg),=0A=
                       debug_register(arg2), debug_argmod(argmod2),=0A=
-- =0A=
1.5.6.4=0A=
=0A=

------=_NextPart_000_001F_01C90695.AB73B330--




More information about the wine-patches mailing list