[25/47] WineD3D: Move WINED3DRS_COLORWRITEENABLEx to the state table

Stefan Dösinger stefan at codeweavers.com
Sun Dec 10 16:20:22 CST 2006


This patch will temporarily cause some wrong startup ERRs, they will go away 
as soon as the applying is moved over to drawprim.
-------------- next part --------------
From f76f90134c15528aa6c08463f9114ed27c246172 Mon Sep 17 00:00:00 2001
From: Stefan Doesinger <stefan at codeweavers.com>
Date: Sun, 10 Dec 2006 19:01:19 +0100
Subject: [PATCH] WineD3D: Move WINED3DRS_COLORWRITEENABLEx to the state table

---
 dlls/wined3d/device.c |   29 ++++-------------------------
 dlls/wined3d/state.c  |   33 +++++++++++++++++++++++++++++----
 2 files changed, 33 insertions(+), 29 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 8017229..f3deab8 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3399,24 +3399,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl
     case WINED3DRS_POINTSCALE_B              :
     case WINED3DRS_POINTSCALE_C              :
     case WINED3DRS_POINTSCALEENABLE          :
+    case WINED3DRS_COLORWRITEENABLE          :
+    case WINED3DRS_COLORWRITEENABLE1         :
+    case WINED3DRS_COLORWRITEENABLE2         :
+    case WINED3DRS_COLORWRITEENABLE3         :
         StateTable[STATE_RENDER(State)].apply(STATE_RENDER(State), This->stateBlock);
         break;
 
-    case WINED3DRS_COLORWRITEENABLE          :
-      {
-        TRACE("Color mask: r(%d) g(%d) b(%d) a(%d)\n",
-              Value & WINED3DCOLORWRITEENABLE_RED   ? 1 : 0,
-              Value & WINED3DCOLORWRITEENABLE_GREEN ? 1 : 0,
-              Value & WINED3DCOLORWRITEENABLE_BLUE  ? 1 : 0,
-              Value & WINED3DCOLORWRITEENABLE_ALPHA ? 1 : 0);
-        glColorMask(Value & WINED3DCOLORWRITEENABLE_RED   ? GL_TRUE : GL_FALSE,
-                    Value & WINED3DCOLORWRITEENABLE_GREEN ? GL_TRUE : GL_FALSE,
-                    Value & WINED3DCOLORWRITEENABLE_BLUE  ? GL_TRUE : GL_FALSE,
-                    Value & WINED3DCOLORWRITEENABLE_ALPHA ? GL_TRUE : GL_FALSE);
-        checkGLcall("glColorMask(...)");
-      }
-      break;
-
     case WINED3DRS_LOCALVIEWER               :
       {
         GLint state = (Value) ? 1 : 0;
@@ -3677,16 +3666,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl
         break;
     }
 
-    case WINED3DRS_COLORWRITEENABLE1         :
-    case WINED3DRS_COLORWRITEENABLE2         :
-    case WINED3DRS_COLORWRITEENABLE3         :
-    {
-        /* depends on WINED3DRS_COLORWRITEENABLE. */
-        if(0x0000000F != Value)
-            ERR("(%p)->(%s,%d) not yet implemented. Missing of cap D3DPMISCCAPS_INDEPENDENTWRITEMASKS wasn't honored?\n", This, debug_d3drenderstate(State), Value);
-        break;
-    }
-
     case WINED3DRS_SRGBWRITEENABLE           :
     {
         if(Value)
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index cf5e4ef..a7d5e89 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -1001,6 +1001,31 @@ static void state_pscale(DWORD state, IW
     }
 }
 
+static void state_colorwrite(DWORD state, IWineD3DStateBlockImpl *stateblock) {
+    DWORD Value = stateblock->renderState[WINED3DRS_COLORWRITEENABLE];
+
+    TRACE("Color mask: r(%d) g(%d) b(%d) a(%d)\n",
+        Value & D3DCOLORWRITEENABLE_RED   ? 1 : 0,
+        Value & D3DCOLORWRITEENABLE_GREEN ? 1 : 0,
+        Value & D3DCOLORWRITEENABLE_BLUE  ? 1 : 0,
+        Value & D3DCOLORWRITEENABLE_ALPHA ? 1 : 0);
+    glColorMask(Value & D3DCOLORWRITEENABLE_RED   ? GL_TRUE : GL_FALSE,
+                Value & D3DCOLORWRITEENABLE_GREEN ? GL_TRUE : GL_FALSE,
+                Value & D3DCOLORWRITEENABLE_BLUE  ? GL_TRUE : GL_FALSE,
+                Value & D3DCOLORWRITEENABLE_ALPHA ? GL_TRUE : GL_FALSE);
+    checkGLcall("glColorMask(...)");
+
+    /* depends on WINED3DRS_COLORWRITEENABLE. */
+    if(stateblock->renderState[WINED3DRS_COLORWRITEENABLE1] != 0x0000000F ||
+       stateblock->renderState[WINED3DRS_COLORWRITEENABLE2] != 0x0000000F ||
+       stateblock->renderState[WINED3DRS_COLORWRITEENABLE3] != 0x0000000F ) {
+        ERR("(WINED3DRS_COLORWRITEENABLE1/2/3,%d,%d,%d) not yet implemented. Missing of cap D3DPMISCCAPS_INDEPENDENTWRITEMASKS wasn't honored?\n",
+            stateblock->renderState[WINED3DRS_COLORWRITEENABLE1],
+            stateblock->renderState[WINED3DRS_COLORWRITEENABLE2],
+            stateblock->renderState[WINED3DRS_COLORWRITEENABLE3]);
+    }
+}
+
 const struct StateEntry StateTable[] =
 {
       /* State name                                         representative,                                     apply function */
@@ -1174,7 +1199,7 @@ const struct StateEntry StateTable[] =
     { /*165, WINED3DRS_DEBUGMONITORTOKEN            */      STATE_RENDER(WINED3DRS_DEBUGMONITORTOKEN),          state_unknown       },
     { /*166, WINED3DRS_POINTSIZE_MAX                */      STATE_RENDER(WINED3DRS_POINTSIZE_MAX),              state_psizemax      },
     { /*167, WINED3DRS_INDEXEDVERTEXBLENDENABLE     */      0,                                                  state_nogl          },
-    { /*168, WINED3DRS_COLORWRITEENABLE             */      STATE_RENDER(WINED3DRS_COLORWRITEENABLE),           state_unknown       },
+    { /*168, WINED3DRS_COLORWRITEENABLE             */      STATE_RENDER(WINED3DRS_COLORWRITEENABLE),           state_colorwrite    },
     { /*169, Undefined                              */      0,                                                  state_undefined     },
     { /*170, WINED3DRS_TWEENFACTOR                  */      0,                                                  state_nogl          },
     { /*171, WINED3DRS_BLENDOP                      */      STATE_RENDER(WINED3DRS_BLENDOP),                    state_blendop       },
@@ -1198,9 +1223,9 @@ const struct StateEntry StateTable[] =
     { /*187, WINED3DRS_CCW_STENCILZFAIL             */      STATE_RENDER(WINED3DRS_STENCILENABLE),              state_stencil       },
     { /*188, WINED3DRS_CCW_STENCILPASS              */      STATE_RENDER(WINED3DRS_STENCILENABLE),              state_stencil       },
     { /*189, WINED3DRS_CCW_STENCILFUNC              */      STATE_RENDER(WINED3DRS_STENCILENABLE),              state_stencil       },
-    { /*190, WINED3DRS_COLORWRITEENABLE1            */      STATE_RENDER(WINED3DRS_COLORWRITEENABLE),           state_unknown       },
-    { /*191, WINED3DRS_COLORWRITEENABLE2            */      STATE_RENDER(WINED3DRS_COLORWRITEENABLE),           state_unknown       },
-    { /*192, WINED3DRS_COLORWRITEENABLE3            */      STATE_RENDER(WINED3DRS_COLORWRITEENABLE),           state_unknown       },
+    { /*190, WINED3DRS_COLORWRITEENABLE1            */      STATE_RENDER(WINED3DRS_COLORWRITEENABLE),           state_colorwrite    },
+    { /*191, WINED3DRS_COLORWRITEENABLE2            */      STATE_RENDER(WINED3DRS_COLORWRITEENABLE),           state_colorwrite    },
+    { /*192, WINED3DRS_COLORWRITEENABLE3            */      STATE_RENDER(WINED3DRS_COLORWRITEENABLE),           state_colorwrite    },
     { /*193, WINED3DRS_BLENDFACTOR                  */      STATE_RENDER(WINED3DRS_ALPHABLENDENABLE),           state_blend         },
     { /*194, WINED3DRS_SRGBWRITEENABLE              */      0,                                                  state_nogl          },
     { /*195, WINED3DRS_DEPTHBIAS                    */      STATE_RENDER(WINED3DRS_DEPTHBIAS),                  state_unknown       },
-- 
1.4.2.4



More information about the wine-patches mailing list