[PATCH 6/7] wined3d: Recognize SM4 _sat instruction modifier.

Józef Kucia jkucia at codeweavers.com
Mon Jan 18 14:16:47 CST 2016


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/wined3d/shader_sm4.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c
index fb104fc..d275923 100644
--- a/dlls/wined3d/shader_sm4.c
+++ b/dlls/wined3d/shader_sm4.c
@@ -30,7 +30,7 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d_bytecode);
 #define WINED3D_SM4_INSTRUCTION_LENGTH_MASK     (0x1fu << WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT)
 
 #define WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT     11
-#define WINED3D_SM4_INSTRUCTION_FLAGS_MASK      (0x3u << WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT)
+#define WINED3D_SM4_INSTRUCTION_FLAGS_MASK      (0x7u << WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT)
 
 #define WINED3D_SM4_RESOURCE_TYPE_SHIFT         11
 #define WINED3D_SM4_RESOURCE_TYPE_MASK          (0xfu << WINED3D_SM4_RESOURCE_TYPE_SHIFT)
@@ -75,6 +75,8 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d_bytecode);
 #define WINED3D_SM4_ADDRESSING_RELATIVE         0x2
 #define WINED3D_SM4_ADDRESSING_OFFSET           0x1
 
+#define WINED3D_SM4_INSTRUCTION_FLAG_SATURATE   0x4
+
 enum wined3d_sm4_opcode
 {
     WINED3D_SM4_OP_ADD                  = 0x00,
@@ -900,8 +902,16 @@ static void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct wi
     }
     else
     {
+        enum wined3d_shader_dst_modifier instruction_dst_modifier = WINED3DSPDM_NONE;
+
         ins->flags = (opcode_token & WINED3D_SM4_INSTRUCTION_FLAGS_MASK) >> WINED3D_SM4_INSTRUCTION_FLAGS_SHIFT;
 
+        if (ins->flags & WINED3D_SM4_INSTRUCTION_FLAG_SATURATE)
+        {
+            ins->flags &= ~WINED3D_SM4_INSTRUCTION_FLAG_SATURATE;
+            instruction_dst_modifier = WINED3DSPDM_SATURATE;
+        }
+
         for (i = 0; i < ins->dst_count; ++i)
         {
             if (!(shader_sm4_read_dst_param(priv, &p, map_data_type(opcode_info->dst_info[i]), &priv->dst_param[i])))
@@ -909,6 +919,7 @@ static void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct wi
                 ins->handler_idx = WINED3DSIH_TABLE_SIZE;
                 return;
             }
+            priv->dst_param[i].modifiers |= instruction_dst_modifier;
         }
 
         for (i = 0; i < ins->src_count; ++i)
-- 
2.4.10




More information about the wine-patches mailing list