[2/2] wined3d: Mask texture stage state arguments with WINED3DTA_SELECTMASK when comparing them

H. Verbeet hverbeet at gmail.com
Sun Jun 17 16:39:24 CDT 2007


The comparisons currently fail if WINED3DTA_ALPHAREPLICATE or
WINED3DTA_COMPLEMENT is set on the arguments.

Changelog:
  - Mask texture stage state arguments with WINED3DTA_SELECTMASK when
comparing them
-------------- next part --------------
---

 dlls/wined3d/utils.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index d592bc4..65bff5c 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -834,9 +834,12 @@ static BOOL is_invalid_op(IWineD3DDeviceImpl *This, int stage, WINED3DTEXTUREOP
     if (op == WINED3DTOP_DISABLE) return FALSE;
     if (This->stateBlock->textures[stage]) return FALSE;
 
-    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;
+    if ((arg1 & WINED3DTA_SELECTMASK) == WINED3DTA_TEXTURE
+            && op != WINED3DTOP_SELECTARG2) return TRUE;
+    if ((arg2 & WINED3DTA_SELECTMASK) == WINED3DTA_TEXTURE
+            && op != WINED3DTOP_SELECTARG1) return TRUE;
+    if ((arg3 & WINED3DTA_SELECTMASK) == WINED3DTA_TEXTURE
+            && (op == WINED3DTOP_MULTIPLYADD || op == WINED3DTOP_LERP)) return TRUE;
 
     return FALSE;
 }


More information about the wine-patches mailing list