[PATCH vkd3d v2] vkd3d-shader: Print more info about skipped dxbc chunks.

Conor McCarthy cmccarthy at codeweavers.com
Mon Dec 2 08:36:52 CST 2019


Instead of a hex number, print the type of chunk, or at least the
four tag chars. This makes it easier to check if skipping a chunk is
a problem.

Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
Supersedes 174669.
---
 libs/vkd3d-shader/dxbc.c | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 98c51e4..866853b 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -1862,6 +1862,11 @@ bool shader_sm4_is_end(void *data, const DWORD **ptr)
 #define TAG_SHEX MAKE_TAG('S', 'H', 'E', 'X')
 #define TAG_AON9 MAKE_TAG('A', 'o', 'n', '9')
 #define TAG_RTS0 MAKE_TAG('R', 'T', 'S', '0')
+#define TAG_IFCE MAKE_TAG('I', 'F', 'C', 'E')
+#define TAG_RDEF MAKE_TAG('R', 'D', 'E', 'F')
+#define TAG_SFI0 MAKE_TAG('S', 'F', 'I', '0')
+#define TAG_SPDB MAKE_TAG('S', 'P', 'D', 'B')
+#define TAG_STAT MAKE_TAG('S', 'T', 'A', 'T')
 
 static bool require_space(size_t offset, size_t count, size_t size, size_t data_size)
 {
@@ -2092,6 +2097,7 @@ int shader_parse_input_signature(const void *dxbc, size_t dxbc_length,
 static int shdr_handler(const char *data, DWORD data_size, DWORD tag, void *context)
 {
     struct vkd3d_shader_desc *desc = context;
+    char tag_chars[sizeof(tag) + 1];
     int ret;
 
     switch (tag)
@@ -2142,8 +2148,33 @@ static int shdr_handler(const char *data, DWORD data_size, DWORD tag, void *cont
             TRACE("Skipping AON9 shader code chunk.\n");
             break;
 
+        case TAG_IFCE:
+            TRACE("Skipping interface/class reflection chunk.\n");
+            break;
+
+        case TAG_RDEF:
+            TRACE("Skipping resource reflection chunk.\n");
+            break;
+
+        case TAG_SFI0:
+            if (data_size >= sizeof(DWORD))
+                TRACE("Ignoring flag chunk, value %#x.\n", *(const DWORD *)data);
+            else
+                TRACE("Ignoring flag chunk.\n");
+            break;
+
+        case TAG_SPDB:
+            TRACE("Skipping debug info chunk.\n");
+            break;
+
+        case TAG_STAT:
+            TRACE("Skipping statistics chunk.\n");
+            break;
+
         default:
-            TRACE("Skipping chunk %#x.\n", tag);
+            memcpy(tag_chars, &tag, sizeof(tag));
+            tag_chars[sizeof(tag)] = 0;
+            TRACE("Skipping chunk %s.\n", debugstr_a(tag_chars));
             break;
     }
 
-- 
2.24.0




More information about the wine-devel mailing list