Henri Verbeet : wined3d: Recognize the SM4 ABS and NEG source modifiers.

Alexandre Julliard julliard at winehq.org
Wed Oct 13 11:43:09 CDT 2010


Module: wine
Branch: master
Commit: e54d9afbc32edc9dba3faac7002eb3dae4ed160e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e54d9afbc32edc9dba3faac7002eb3dae4ed160e

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Oct 13 12:26:33 2010 +0200

wined3d: Recognize the SM4 ABS and NEG source modifiers.

---

 dlls/wined3d/shader_sm4.c |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c
index 080f53b..47cece3 100644
--- a/dlls/wined3d/shader_sm4.c
+++ b/dlls/wined3d/shader_sm4.c
@@ -366,7 +366,29 @@ static void shader_sm4_read_src_param(void *data, const DWORD **ptr, struct wine
     if (token & WINED3D_SM4_REGISTER_MODIFIER)
     {
         DWORD modifier = *(*ptr)++;
-        FIXME("Skipping modifier 0x%08x.\n", modifier);
+
+        /* FIXME: This will probably break down at some point. The SM4
+         * modifiers look like flags, while wined3d currently has an enum
+         * with possible combinations, e.g. WINED3DSPSM_ABSNEG. */
+        switch (modifier)
+        {
+            case 0x41:
+                src_param->modifiers = WINED3DSPSM_NEG;
+                break;
+
+            case 0x81:
+                src_param->modifiers = WINED3DSPSM_ABS;
+                break;
+
+            default:
+                FIXME("Skipping modifier 0x%08x.\n", modifier);
+                src_param->modifiers = WINED3DSPSM_NONE;
+                break;
+        }
+    }
+    else
+    {
+        src_param->modifiers = WINED3DSPSM_NONE;
     }
 
     order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT;
@@ -409,7 +431,6 @@ static void shader_sm4_read_src_param(void *data, const DWORD **ptr, struct wine
         src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT;
     }
 
-    src_param->modifiers = 0;
     src_param->reg.rel_addr = NULL;
 
     map_register(priv, &src_param->reg);




More information about the wine-cvs mailing list