[PATCH vkd3d v2 6/9] vkd3d-shader: Extract minimum precision operand modifier.

Conor McCarthy cmccarthy at codeweavers.com
Mon Aug 23 10:23:25 CDT 2021


The modifier if present is ignored and a warning emitted.

Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
 libs/vkd3d-shader/dxbc.c | 6 +++++-
 libs/vkd3d-shader/sm4.h  | 3 +++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 8bb07a2b..c188a2b6 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -1204,6 +1204,7 @@ static bool shader_sm4_read_param(struct vkd3d_sm4_data *priv, const DWORD **ptr
 
         if (type == VKD3D_SM4_EXTENDED_OPERAND_MODIFIER)
         {
+            unsigned int min_precis = (m & VKD3D_SM4_REGISTER_MIN_PRECIS_MASK) >> VKD3D_SM4_REGISTER_MIN_PRECIS_SHIFT;
             unsigned int op_modifier = (m & VKD3D_SM4_REGISTER_MODIFIER_MASK) >> VKD3D_SM4_REGISTER_MODIFIER_SHIFT;
 
             switch (op_modifier & VKD3D_SM4_REGISTER_MODIFIER_ABS_NEGATE)
@@ -1226,13 +1227,16 @@ static bool shader_sm4_read_param(struct vkd3d_sm4_data *priv, const DWORD **ptr
             op_modifier &= ~VKD3D_SM4_REGISTER_MODIFIER_ABS_NEGATE;
             if (op_modifier)
                 FIXME("Skipping modifier flags %#x.\n", op_modifier);
+
+            if (min_precis)
+                WARN("Ignoring minimum precision %#x.\n", min_precis);
         }
         else if (type)
         {
             FIXME("Unhandled extended operand type %#x.\n", type);
         }
 
-        m &= ~0u << VKD3D_SM4_REGISTER_MIN_PRECIS_SHIFT;
+        m &= ~0u << VKD3D_SM4_REGISTER_NON_UNIFORM_SHIFT;
         if (m)
             FIXME("Skipping modifier 0x%08x.\n", m);
     }
diff --git a/libs/vkd3d-shader/sm4.h b/libs/vkd3d-shader/sm4.h
index 8dd00590..2e2eea75 100644
--- a/libs/vkd3d-shader/sm4.h
+++ b/libs/vkd3d-shader/sm4.h
@@ -102,6 +102,9 @@
 #define VKD3D_SM4_REGISTER_MODIFIER_MASK      (0xffu << VKD3D_SM4_REGISTER_MODIFIER_SHIFT)
 
 #define VKD3D_SM4_REGISTER_MIN_PRECIS_SHIFT   14
+#define VKD3D_SM4_REGISTER_MIN_PRECIS_MASK    (0x7u << VKD3D_SM4_REGISTER_MIN_PRECIS_SHIFT)
+
+#define VKD3D_SM4_REGISTER_NON_UNIFORM_SHIFT  17
 
 #define VKD3D_SM4_ADDRESSING_SHIFT2           28
 #define VKD3D_SM4_ADDRESSING_MASK2            (0x3u << VKD3D_SM4_ADDRESSING_SHIFT2)
-- 
2.32.0




More information about the wine-devel mailing list