The validation code is meant both as a check that the frontend is behaving properly and as a sort of the documentation to establish what is allowed and what is not in the IR.
~~Currently an assertion is thrown if validation fails. I realize this is a rather strong proposal, but it's of course up for debate. In theory asserting here is the right thing, as it is expected that the frontend is generating correct IR code. However vkd3d is already used in production for many programs, and it could very well be that some of those are working properly even if the generated IR is somewhat out of specs; allowing the assertion might cause regressions as soon as enough checks are implemented in the validator. Please let me know your opinions.~~ **Solved in favor of a softer failure, and only when validation is enabled**
--
v7: vkd3d-shader/ir: Validate source parameters.
vkd3d-shader/ir: Validate destination parameters.
vkd3d-shader/ir: Validate register types.
vkd3d-shader/ir: Validate instruction handlers.
vkd3d-shader/ir: Introduce a boilerplate to validate the generated IR.
vkd3d-shader: Embed the parsing location in vkd3d_shader_instruction.
vkd3d-shader/dxil: Destroy the SM6 parser on parsing errors.
vkd3d-shader/tpf: Destroy the SM4 parser on parsing errors.
vkd3d-shader/d3dbc: Destroy the SM1 parser on parsing errors.
vkd3d-shader/d3dbc: Ignore DCL source parameters.
vkd3d-shader/ir: Simplify the control flow in shader_instruction_normalise_io_params().
vkd3d-shader/ir: Fully reinitialize an instruction when making it a NOP.
vkd3d-shader: Rename shader_instruction_init().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/317
If a Windows program writes a registry key of type REG_DWORD but puts more than 4 bytes of data in—I can't imagine why, but I am working with such a program—currently it is persisted as-is in the `WINEPATH` but `regedit` exports it as a `dword:%08x`, truncating the data.
This patch makes sure that only 4-byte DWORDs are exported as `dword:`; any other size falls through as a `hex(4):`.
(I chose to use the literal `4` here instead of `sizeof(DWORD)` because this value isn't directly coupled to the size of a `DWORD` as the compiler sees it; in the (extremely hypothetical?) world in which Wine is compiled with a `DWORD` of some other size, this value should still be 4, because `export_dword_data` will only correctly export something that can be represented in 8 hexadecimal characters.)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3793