[WINED3D 4/6] Add D3DTA masks to the WINED3D namespace

Ivan Gyurdiev ivg231 at gmail.com
Tue Oct 24 05:05:00 CDT 2006


Also fix usage of D3DTSS/D3DTA in ddraw.
-------------- next part --------------
---
 dlls/ddraw/device.c          |   40 +++++++++++-----------
 dlls/wined3d/stateblock.c    |   14 ++++----
 dlls/wined3d/utils.c         |   78 +++++++++++++++++++++---------------------
 include/wine/wined3d_types.h |   11 ++++++
 4 files changed, 77 insertions(+), 66 deletions(-)

diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 345e974..af7b0da 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -2366,35 +2366,35 @@ IDirect3DDeviceImpl_7_SetRenderState(IDi
             switch ( (D3DTEXTUREBLEND) Value)
             {
                 case D3DTBLEND_MODULATE:
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG2, D3DTA_CURRENT);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLOROP, WINED3DTOP_MODULATE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAOP, WINED3DTOP_SELECTARG1);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLORARG1, WINED3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAARG1, WINED3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLORARG2, WINED3DTA_CURRENT);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLOROP, WINED3DTOP_MODULATE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAOP, WINED3DTOP_SELECTARG1);
                     break;
 
                 case D3DTBLEND_MODULATEALPHA:
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG2, D3DTA_CURRENT);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLOROP, WINED3DTOP_MODULATE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAOP, WINED3DTOP_MODULATE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLORARG1, WINED3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAARG1, WINED3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLORARG2, WINED3DTA_CURRENT);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAARG2, WINED3DTA_CURRENT);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLOROP, WINED3DTOP_MODULATE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAOP, WINED3DTOP_MODULATE);
                     break;
 
                 case D3DTBLEND_DECAL:
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLOROP, WINED3DTOP_SELECTARG1);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAOP, WINED3DTOP_SELECTARG1);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLORARG1, WINED3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAARG1, WINED3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLOROP, WINED3DTOP_SELECTARG1);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAOP, WINED3DTOP_SELECTARG1);
                     break;
 
                 case D3DTBLEND_DECALALPHA:
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLOROP, WINED3DTOP_SELECTARG1);
-                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAOP, WINED3DTOP_MODULATE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLORARG1, WINED3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAARG1, WINED3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAARG2, WINED3DTA_CURRENT);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_COLOROP, WINED3DTOP_SELECTARG1);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, WINED3DTSS_ALPHAOP, WINED3DTOP_MODULATE);
                     break;
 
                 default:
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index 2e31a9f..38bd927 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -986,11 +986,11 @@ static HRESULT  WINAPI IWineD3DStateBloc
         TRACE("Setting up default texture states for texture Stage %d\n", i);
         memcpy(&This->transforms[WINED3DTS_TEXTURE0 + i], &identity, sizeof(identity));
         This->textureState[i][WINED3DTSS_COLOROP               ] = (i==0)? WINED3DTOP_MODULATE :  WINED3DTOP_DISABLE;
-        This->textureState[i][WINED3DTSS_COLORARG1             ] = D3DTA_TEXTURE;
-        This->textureState[i][WINED3DTSS_COLORARG2             ] = D3DTA_CURRENT;
+        This->textureState[i][WINED3DTSS_COLORARG1             ] = WINED3DTA_TEXTURE;
+        This->textureState[i][WINED3DTSS_COLORARG2             ] = WINED3DTA_CURRENT;
         This->textureState[i][WINED3DTSS_ALPHAOP               ] = (i==0)? WINED3DTOP_SELECTARG1 :  WINED3DTOP_DISABLE;
-        This->textureState[i][WINED3DTSS_ALPHAARG1             ] = D3DTA_TEXTURE;
-        This->textureState[i][WINED3DTSS_ALPHAARG2             ] = D3DTA_CURRENT;
+        This->textureState[i][WINED3DTSS_ALPHAARG1             ] = WINED3DTA_TEXTURE;
+        This->textureState[i][WINED3DTSS_ALPHAARG2             ] = WINED3DTA_CURRENT;
         This->textureState[i][WINED3DTSS_BUMPENVMAT00          ] = (DWORD) 0.0;
         This->textureState[i][WINED3DTSS_BUMPENVMAT01          ] = (DWORD) 0.0;
         This->textureState[i][WINED3DTSS_BUMPENVMAT10          ] = (DWORD) 0.0;
@@ -1000,9 +1000,9 @@ static HRESULT  WINAPI IWineD3DStateBloc
         This->textureState[i][WINED3DTSS_BUMPENVLOFFSET        ] = (DWORD) 0.0;
         This->textureState[i][WINED3DTSS_TEXTURETRANSFORMFLAGS ] = WINED3DTTFF_DISABLE;
         This->textureState[i][WINED3DTSS_ADDRESSW              ] = WINED3DTADDRESS_WRAP;
-        This->textureState[i][WINED3DTSS_COLORARG0             ] = D3DTA_CURRENT;
-        This->textureState[i][WINED3DTSS_ALPHAARG0             ] = D3DTA_CURRENT;
-        This->textureState[i][WINED3DTSS_RESULTARG             ] = D3DTA_CURRENT;
+        This->textureState[i][WINED3DTSS_COLORARG0             ] = WINED3DTA_CURRENT;
+        This->textureState[i][WINED3DTSS_ALPHAARG0             ] = WINED3DTA_CURRENT;
+        This->textureState[i][WINED3DTSS_RESULTARG             ] = WINED3DTA_CURRENT;
     }
 
         /* Sampler states*/
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 1b4426d..1e2975e 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -683,31 +683,31 @@ GLenum CompareFunc(DWORD func) {
 
 static GLenum d3dta_to_combiner_input(DWORD d3dta, DWORD stage, INT texture_idx) {
     switch (d3dta) {
-        case D3DTA_DIFFUSE:
+        case WINED3DTA_DIFFUSE:
             return GL_PRIMARY_COLOR_NV;
 
-        case D3DTA_CURRENT:
+        case WINED3DTA_CURRENT:
             if (stage) return GL_SPARE0_NV;
             else return GL_PRIMARY_COLOR_NV;
 
-        case D3DTA_TEXTURE:
+        case WINED3DTA_TEXTURE:
             if (texture_idx > -1) return GL_TEXTURE0_ARB + texture_idx;
             else return GL_PRIMARY_COLOR_NV;
 
-        case D3DTA_TFACTOR:
+        case WINED3DTA_TFACTOR:
             return GL_CONSTANT_COLOR0_NV;
 
-        case D3DTA_SPECULAR:
+        case WINED3DTA_SPECULAR:
             return GL_SECONDARY_COLOR_NV;
 
-        case D3DTA_TEMP:
+        case WINED3DTA_TEMP:
             /* TODO: Support WINED3DTSS_RESULTARG */
-            FIXME("D3DTA_TEMP, not properly supported.\n");
+            FIXME("WINED3DTA_TEMP, not properly supported.\n");
             return GL_SPARE1_NV;
 
-        case D3DTA_CONSTANT:
+        case WINED3DTA_CONSTANT:
             /* TODO: Support per stage constants (WINED3DTSS_CONSTANT, NV_register_combiners2) */
-            FIXME("D3DTA_CONSTANT, not properly supported.\n");
+            FIXME("WINED3DTA_CONSTANT, not properly supported.\n");
             return GL_CONSTANT_COLOR1_NV;
 
         default:
@@ -725,17 +725,17 @@ static GLenum invert_mapping(GLenum mapp
 }
 
 static void get_src_and_opr_nvrc(DWORD stage, DWORD arg, BOOL is_alpha, GLenum* input, GLenum* mapping, GLenum *component_usage, INT texture_idx) {
-    /* The D3DTA_COMPLEMENT flag specifies the complement of the input should
+    /* The WINED3DTA_COMPLEMENT flag specifies the complement of the input should
      * be used. */
-    if (arg & D3DTA_COMPLEMENT) *mapping = GL_UNSIGNED_INVERT_NV;
+    if (arg & WINED3DTA_COMPLEMENT) *mapping = GL_UNSIGNED_INVERT_NV;
     else *mapping = GL_SIGNED_IDENTITY_NV;
 
-    /* The D3DTA_ALPHAREPLICATE flag specifies the alpha component of the input
+    /* The WINED3DTA_ALPHAREPLICATE flag specifies the alpha component of the input
      * should be used for all input components. */
-    if (is_alpha || arg & D3DTA_ALPHAREPLICATE) *component_usage = GL_ALPHA;
+    if (is_alpha || arg & WINED3DTA_ALPHAREPLICATE) *component_usage = GL_ALPHA;
     else *component_usage = GL_RGB;
 
-    *input = d3dta_to_combiner_input(arg & D3DTA_SELECTMASK, stage, texture_idx);
+    *input = d3dta_to_combiner_input(arg & WINED3DTA_SELECTMASK, stage, texture_idx);
 }
 
 typedef struct {
@@ -748,9 +748,9 @@ static BOOL is_invalid_op(IWineD3DDevice
     if (op == WINED3DTOP_DISABLE) return FALSE;
     if (This->stateBlock->textures[stage]) return FALSE;
 
-    if (arg1 == D3DTA_TEXTURE && op != WINED3DTOP_SELECTARG2) return TRUE;
-    if (arg2 == D3DTA_TEXTURE && op != WINED3DTOP_SELECTARG1) return TRUE;
-    if (arg3 == D3DTA_TEXTURE && (op == WINED3DTOP_MULTIPLYADD || op == WINED3DTOP_LERP)) return TRUE;
+    if (arg1 == WINED3DTA_TEXTURE && op != WINED3DTOP_SELECTARG2) return TRUE;
+    if (arg2 == WINED3DTA_TEXTURE && op != WINED3DTOP_SELECTARG1) return TRUE;
+    if (arg3 == WINED3DTA_TEXTURE && (op == WINED3DTOP_MULTIPLYADD || op == WINED3DTOP_LERP)) return TRUE;
 
     return FALSE;
 }
@@ -767,7 +767,7 @@ void set_tex_op_nvrc(IWineD3DDevice *ifa
     /* If a texture stage references an invalid texture unit the stage just
      * passes through the result from the previous stage */
     if (is_invalid_op(This, stage, op, arg1, arg2, arg3)) {
-        arg1 = D3DTA_CURRENT;
+        arg1 = WINED3DTA_CURRENT;
         op = WINED3DTOP_SELECTARG1;
     }
 
@@ -901,11 +901,11 @@ void set_tex_op_nvrc(IWineD3DDevice *ifa
         case WINED3DTOP_BLENDCURRENTALPHA:
         {
             GLenum alpha_src = GL_PRIMARY_COLOR_NV;
-            if (op == WINED3DTOP_BLENDDIFFUSEALPHA) alpha_src = d3dta_to_combiner_input(D3DTA_DIFFUSE, stage, texture_idx);
-            else if (op == WINED3DTOP_BLENDTEXTUREALPHA) alpha_src = d3dta_to_combiner_input(D3DTA_TEXTURE, stage, texture_idx);
-            else if (op == WINED3DTOP_BLENDFACTORALPHA) alpha_src = d3dta_to_combiner_input(D3DTA_TFACTOR, stage, texture_idx);
-            else if (op == WINED3DTOP_BLENDTEXTUREALPHAPM) alpha_src = d3dta_to_combiner_input(D3DTA_TEXTURE, stage, texture_idx);
-            else if (op == WINED3DTOP_BLENDCURRENTALPHA) alpha_src = d3dta_to_combiner_input(D3DTA_CURRENT, stage, texture_idx);
+            if (op == WINED3DTOP_BLENDDIFFUSEALPHA) alpha_src = d3dta_to_combiner_input(WINED3DTA_DIFFUSE, stage, texture_idx);
+            else if (op == WINED3DTOP_BLENDTEXTUREALPHA) alpha_src = d3dta_to_combiner_input(WINED3DTA_TEXTURE, stage, texture_idx);
+            else if (op == WINED3DTOP_BLENDFACTORALPHA) alpha_src = d3dta_to_combiner_input(WINED3DTA_TFACTOR, stage, texture_idx);
+            else if (op == WINED3DTOP_BLENDTEXTUREALPHAPM) alpha_src = d3dta_to_combiner_input(WINED3DTA_TEXTURE, stage, texture_idx);
+            else if (op == WINED3DTOP_BLENDCURRENTALPHA) alpha_src = d3dta_to_combiner_input(WINED3DTA_CURRENT, stage, texture_idx);
             else FIXME("Unhandled WINED3DTOP %s, shouldn't happen\n", debug_d3dtop(op));
 
             /* Input, arg1*alpha_src+arg2*(1-alpha_src) */
@@ -1054,11 +1054,11 @@ void set_tex_op_nvrc(IWineD3DDevice *ifa
 }
 
 static void get_src_and_opr(DWORD arg, BOOL is_alpha, GLenum* source, GLenum* operand) {
-    /* The D3DTA_ALPHAREPLICATE flag specifies the alpha component of the
-     * input should be used for all input components. The D3DTA_COMPLEMENT
+    /* The WINED3DTA_ALPHAREPLICATE flag specifies the alpha component of the
+     * input should be used for all input components. The WINED3DTA_COMPLEMENT
      * flag specifies the complement of the input should be used. */
-    BOOL from_alpha = is_alpha || arg & D3DTA_ALPHAREPLICATE;
-    BOOL complement = arg & D3DTA_COMPLEMENT;
+    BOOL from_alpha = is_alpha || arg & WINED3DTA_ALPHAREPLICATE;
+    BOOL complement = arg & WINED3DTA_COMPLEMENT;
 
     /* Calculate the operand */
     if (complement) {
@@ -1070,18 +1070,18 @@ static void get_src_and_opr(DWORD arg, B
     }
 
     /* Calculate the source */
-    switch (arg & D3DTA_SELECTMASK) {
-        case D3DTA_CURRENT: *source = GL_PREVIOUS_EXT; break;
-        case D3DTA_DIFFUSE: *source = GL_PRIMARY_COLOR_EXT; break;
-        case D3DTA_TEXTURE: *source = GL_TEXTURE; break;
-        case D3DTA_TFACTOR: *source = GL_CONSTANT_EXT; break;
-        case D3DTA_SPECULAR:
+    switch (arg & WINED3DTA_SELECTMASK) {
+        case WINED3DTA_CURRENT: *source = GL_PREVIOUS_EXT; break;
+        case WINED3DTA_DIFFUSE: *source = GL_PRIMARY_COLOR_EXT; break;
+        case WINED3DTA_TEXTURE: *source = GL_TEXTURE; break;
+        case WINED3DTA_TFACTOR: *source = GL_CONSTANT_EXT; break;
+        case WINED3DTA_SPECULAR:
             /*
              * According to the GL_ARB_texture_env_combine specs, SPECULAR is
              * 'Secondary color' and isn't supported until base GL supports it
              * There is no concept of temp registers as far as I can tell
              */
-            FIXME("Unhandled texture arg D3DTA_SPECULAR\n");
+            FIXME("Unhandled texture arg WINED3DTA_SPECULAR\n");
             *source = GL_TEXTURE;
             break;
         default:
@@ -1165,16 +1165,16 @@ #define GLINFO_LOCATION ((IWineD3DImpl *
         /* If a texture stage references an invalid texture unit the stage just
          * passes through the result from the previous stage */
         if (is_invalid_op(This, Stage, op, arg1, arg2, arg3)) {
-            arg1 = D3DTA_CURRENT;
+            arg1 = WINED3DTA_CURRENT;
             op = WINED3DTOP_SELECTARG1;
         }
 
         /* From MSDN (WINED3DTSS_ALPHAARG1) :
-           The default argument is D3DTA_TEXTURE. If no texture is set for this stage,
-                   then the default argument is D3DTA_DIFFUSE.
+           The default argument is WINED3DTA_TEXTURE. If no texture is set for this stage,
+                   then the default argument is WINED3DTA_DIFFUSE.
                    FIXME? If texture added/removed, may need to reset back as well?    */
-        if (isAlpha && This->stateBlock->textures[Stage] == NULL && arg1 == D3DTA_TEXTURE) {
-            get_src_and_opr(D3DTA_DIFFUSE, isAlpha, &src1, &opr1);
+        if (isAlpha && This->stateBlock->textures[Stage] == NULL && arg1 == WINED3DTA_TEXTURE) {
+            get_src_and_opr(WINED3DTA_DIFFUSE, isAlpha, &src1, &opr1);
         } else {
             get_src_and_opr(arg1, isAlpha, &src1, &opr1);
         }
diff --git a/include/wine/wined3d_types.h b/include/wine/wined3d_types.h
index 36f2b41..2341e94 100644
--- a/include/wine/wined3d_types.h
+++ b/include/wine/wined3d_types.h
@@ -593,6 +593,17 @@ typedef enum _WINED3DTEXTUREOP {
     WINED3DTOP_FORCE_DWORD               = 0x7fffffff,
 } WINED3DTEXTUREOP;
 
+#define WINED3DTA_SELECTMASK        0x0000000f
+#define WINED3DTA_DIFFUSE           0x00000000
+#define WINED3DTA_CURRENT           0x00000001
+#define WINED3DTA_TEXTURE           0x00000002
+#define WINED3DTA_TFACTOR           0x00000003
+#define WINED3DTA_SPECULAR          0x00000004
+#define WINED3DTA_TEMP              0x00000005
+#define WINED3DTA_CONSTANT          0x00000006
+#define WINED3DTA_COMPLEMENT        0x00000010
+#define WINED3DTA_ALPHAREPLICATE    0x00000020
+
 typedef enum _WINED3DTEXTUREADDRESS {
     WINED3DTADDRESS_WRAP            = 1,
     WINED3DTADDRESS_MIRROR          = 2,
-- 
1.4.2.4



More information about the wine-patches mailing list