=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Add FIXME() messages for unhandled shader bytecode UAV flags.

Alexandre Julliard julliard at winehq.org
Wed Mar 8 16:01:39 CST 2017


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

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Wed Mar  8 12:07:19 2017 +0100

wined3d: Add FIXME() messages for unhandled shader bytecode UAV flags.

The new definition of WINED3D_SM5_UAV_FLAGS_MASK doesn't overlap with
WINED3D_SM4_RESOURCE_TYPE_MASK.

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>

---

 dlls/wined3d/shader.c          | 11 +++++++++--
 dlls/wined3d/shader_sm4.c      |  7 +++++--
 dlls/wined3d/wined3d_private.h |  4 ++--
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index 9601b2d..d7a4c04 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -995,6 +995,8 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st
                     }
                     reg_maps->uav_resource_info[reg_idx].type = semantic->resource_type;
                     reg_maps->uav_resource_info[reg_idx].data_type = semantic->resource_data_type;
+                    if (ins.flags)
+                        FIXME("Ignoring typed UAV flags %#x.\n", ins.flags);
                     break;
 
                 default:
@@ -1110,6 +1112,8 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st
                 ERR("Invalid UAV resource index %u.\n", reg_idx);
                 break;
             }
+            if (ins.flags)
+                FIXME("Ignoring raw UAV flags %#x.\n", ins.flags);
             reg_maps->uav_resource_info[reg_idx].type = WINED3D_SHADER_RESOURCE_BUFFER;
             reg_maps->uav_resource_info[reg_idx].data_type = WINED3D_DATA_UINT;
             reg_maps->uav_resource_info[reg_idx].flags = WINED3D_VIEW_BUFFER_RAW;
@@ -1731,7 +1735,8 @@ static void shader_dump_sysval_semantic(struct wined3d_string_buffer *buffer, en
 }
 
 static void shader_dump_decl_usage(struct wined3d_string_buffer *buffer,
-        const struct wined3d_shader_semantic *semantic, const struct wined3d_shader_version *shader_version)
+        const struct wined3d_shader_semantic *semantic, unsigned int flags,
+        const struct wined3d_shader_version *shader_version)
 {
     shader_addline(buffer, "dcl");
 
@@ -1808,6 +1813,8 @@ static void shader_dump_decl_usage(struct wined3d_string_buffer *buffer,
                 shader_addline(buffer, "unknown");
                 break;
         }
+        if (semantic->reg.reg.type == WINED3DSPR_UAV)
+            shader_dump_uav_flags(buffer, flags);
         switch (semantic->resource_data_type)
         {
             case WINED3D_DATA_FLOAT:
@@ -2502,7 +2509,7 @@ static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe
 
         if (ins.handler_idx == WINED3DSIH_DCL || ins.handler_idx == WINED3DSIH_DCL_UAV_TYPED)
         {
-            shader_dump_decl_usage(&buffer, &ins.declaration.semantic, &shader_version);
+            shader_dump_decl_usage(&buffer, &ins.declaration.semantic, ins.flags, &shader_version);
             shader_dump_ins_modifiers(&buffer, &ins.declaration.semantic.reg);
             shader_addline(&buffer, " ");
             shader_dump_dst_param(&buffer, &ins.declaration.semantic.reg, &shader_version);
diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c
index cd3c3ae..bd974a2 100644
--- a/dlls/wined3d/shader_sm4.c
+++ b/dlls/wined3d/shader_sm4.c
@@ -67,8 +67,8 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d_bytecode);
 #define WINED3D_SM5_FP_ARRAY_SIZE_SHIFT         16
 #define WINED3D_SM5_FP_TABLE_COUNT_MASK         0xffffu
 
-#define WINED3D_SM5_UAV_FLAGS_SHIFT             11
-#define WINED3D_SM5_UAV_FLAGS_MASK              (0x1fffu << WINED3D_SM5_UAV_FLAGS_SHIFT)
+#define WINED3D_SM5_UAV_FLAGS_SHIFT             15
+#define WINED3D_SM5_UAV_FLAGS_MASK              (0x1ffu << WINED3D_SM5_UAV_FLAGS_SHIFT)
 
 #define WINED3D_SM5_SYNC_FLAGS_SHIFT            11
 #define WINED3D_SM5_SYNC_FLAGS_MASK             (0xffu << WINED3D_SM5_SYNC_FLAGS_SHIFT)
@@ -546,6 +546,9 @@ static void shader_sm4_read_dcl_resource(struct wined3d_shader_instruction *ins,
     {
         ins->declaration.semantic.resource_data_type = data_type_table[data_type];
     }
+
+    if (reg_data_type == WINED3D_DATA_UAV)
+        ins->flags = (opcode_token & WINED3D_SM5_UAV_FLAGS_MASK) >> WINED3D_SM5_UAV_FLAGS_SHIFT;
 }
 
 static void shader_sm4_read_dcl_constant_buffer(struct wined3d_shader_instruction *ins,
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index b269c52..6d2412d 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -562,8 +562,8 @@ enum wined3d_shader_sync_flags
 
 enum wined3d_shader_uav_flags
 {
-    WINED3DSUF_GLOBALLY_COHERENT = 0x20,
-    WINED3DSUF_ORDER_PRESERVING_COUNTER = 0x1000,
+    WINED3DSUF_GLOBALLY_COHERENT = 0x2,
+    WINED3DSUF_ORDER_PRESERVING_COUNTER = 0x100,
 };
 
 enum wined3d_tessellator_domain




More information about the wine-cvs mailing list