[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