=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: libs/vkd3d-shader: Parse precise flags.

Alexandre Julliard julliard at winehq.org
Tue May 29 13:43:46 CDT 2018


Module: vkd3d
Branch: master
Commit: 3ddb29c16a0e011963d71de054c686f193e9ced2
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=3ddb29c16a0e011963d71de054c686f193e9ced2

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue May 29 12:50:30 2018 +0200

libs/vkd3d-shader: Parse precise flags.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d-shader/dxbc.c                 | 7 ++++++-
 libs/vkd3d-shader/vkd3d_shader_private.h | 8 ++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 87b2d71..c8e5b08 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -56,6 +56,9 @@
 #define VKD3D_SM4_GLOBAL_FLAGS_SHIFT          11
 #define VKD3D_SM4_GLOBAL_FLAGS_MASK           (0xffu << VKD3D_SM4_GLOBAL_FLAGS_SHIFT)
 
+#define VKD3D_SM5_PRECISE_SHIFT               19
+#define VKD3D_SM5_PRECISE_MASK                (0xfu << VKD3D_SM5_PRECISE_SHIFT)
+
 #define VKD3D_SM5_CONTROL_POINT_COUNT_SHIFT   11
 #define VKD3D_SM5_CONTROL_POINT_COUNT_MASK    (0xffu << VKD3D_SM5_CONTROL_POINT_COUNT_SHIFT)
 
@@ -1641,6 +1644,7 @@ void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct vkd3d_sha
     unsigned int i, len;
     SIZE_T remaining;
     const DWORD *p;
+    DWORD precise;
 
     list_move_head(&priv->src_free, &priv->src);
 
@@ -1703,12 +1707,13 @@ void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct vkd3d_sha
             shader_sm4_read_instruction_modifier(previous_token = *p++, ins);
 
         ins->flags = (opcode_token & VKD3D_SM4_INSTRUCTION_FLAGS_MASK) >> VKD3D_SM4_INSTRUCTION_FLAGS_SHIFT;
-
         if (ins->flags & VKD3D_SM4_INSTRUCTION_FLAG_SATURATE)
         {
             ins->flags &= ~VKD3D_SM4_INSTRUCTION_FLAG_SATURATE;
             instruction_dst_modifier = VKD3DSPDM_SATURATE;
         }
+        precise = (opcode_token & VKD3D_SM5_PRECISE_MASK) >> VKD3D_SM5_PRECISE_SHIFT;
+        ins->flags |= precise << VKD3DSI_PRECISE_SHIFT;
 
         for (i = 0; i < ins->dst_count; ++i)
         {
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 4aeeb50..1721977 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -480,6 +480,14 @@ enum vkd3d_tessellator_partitioning
 #define VKD3DSI_SAMPLE_INFO_UINT  0x1
 #define VKD3DSI_SAMPLER_COMPARISON_MODE 0x1
 
+#define VKD3DSI_PRECISE_X         0x100
+#define VKD3DSI_PRECISE_Y         0x200
+#define VKD3DSI_PRECISE_Z         0x400
+#define VKD3DSI_PRECISE_W         0x800
+#define VKD3DSI_PRECISE_XYZW      (VKD3DSI_PRECISE_X | VKD3DSI_PRECISE_Y \
+                                  | VKD3DSI_PRECISE_Z | VKD3DSI_PRECISE_W)
+#define VKD3DSI_PRECISE_SHIFT     8
+
 enum vkd3d_shader_rel_op
 {
     VKD3D_SHADER_REL_OP_GT = 1,




More information about the wine-cvs mailing list