From: Conor McCarthy Subject: [PATCH vkd3d] vkd3d/shader: Print more info about skipped dxbc chunks. Message-Id: <20191127151808.21217-1-cmccarthy@codeweavers.com> Date: Thu, 28 Nov 2019 01:18:08 +1000 Instead of a hex number, print the type of chunk, or at least the four tag chars. This makes it easier to check if a skipped chunk is a problem. Signed-off-by: Conor McCarthy --- 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..20a273c 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_ICFE MAKE_TAG('I', 'C', 'F', '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_ICFE: + 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", tag_chars); break; } -- 2.24.0