https://bugs.winehq.org/show_bug.cgi?id=54464
--- Comment #3 from Henri Verbeet hverbeet@gmail.com --- (In reply to Andrey Gusev from comment #2)
vkd3d:trace:vkd3d_shader_parse_input_signature dxbc {00007F5294751C60, 148}, signature 000000000011F1F0, messages 0000000000000000. vkd3d:trace:parse_dxbc tag: 0x43425844. vkd3d:warn:parse_dxbc Checksum {0x00000000, 0x00000000, 0x00000000, 0x00000000} does not match calculated checksum {0x038659c8, 0xbd7ea4c8, 0x6c853f11, 0x073027f0}. vkd3d:err:shader_parse_input_signature Failed to parse input signature. vkd3d:trace:vkd3d_shader_parse_input_signature <anonymous>: E0003: Invalid DXBC checksum. 0b58:err:d3d11:d3d11_input_layout_to_wined3d_declaration Failed to extract input signature, ret -3.
That's suspicious, the shaders in question all have zeroed out checksums, and that causes these to fail validation.
The wined3d code indeed didn't validate the checksums, so in that sense this probably explains the regression. It doesn't explain how these shaders ended up with an empty checksum in the first places though.
The log also contains a bunch of traces like these:
0bc0:fixme:d3dcompiler:write_u32_unknown Writing unknown u32 0x00000000. 0bc0:fixme:d3dcompiler:write_u32_unknown Writing unknown u32 0x00000000. 0bc0:fixme:d3dcompiler:write_u32_unknown Writing unknown u32 0x00000000. 0bc0:fixme:d3dcompiler:write_u32_unknown Writing unknown u32 0x00000000. 0bc0:fixme:d3dcompiler:write_u32_unknown Writing unknown u32 0x00000001.
I guess those are from something like D3DStripShader(), D3DGetInputSignatureBlob(), or similar, which indeed don't seem to write a valid DXBC checksum. Does using native d3dcompiler help?