This MR replaces `vkd3d_shader_register.immconst_type` with `vkd3d_shader_register.dimension` which is intended for all register types and not just immconsts.
This dimension is parsed in tpf.c, and initialized according to the register type in d3dbc.c.
Having this field in vkd3d_shader_register allows us to avoid hardcoding special cases for the register dimensions when writing sm4 bytecode (e.g. for the sampler src register in gather instructions). Also, it allows for some fixes to d3d_asm.c, which are introduced in part 2 (https://gitlab.winehq.org/fcasas/vkd3d/-/commits/add_vkd3d_reg_dim).
--
v2: vkd3d-shader: Initialize registers using shader_register_init().
vkd3d-shader: Make shader_register_init() extern.
vkd3d-shader/d3dbc: Initialize register dimension for all register types.
vkd3d-shader/tpf: Parse register dimension for all register types.
vkd3d-shader: Turn vkd3d_shader_register.immconst_type into vkd3d_shader_register.dimension.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/319
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.
--
v2: vkd3d-shader: Validate source parameters.
vkd3d-shader: Validate destination parameters.
vkd3d-shader: Check that registers are valid.
vkd3d-shader: Check that instructions are valid.
vkd3d-shader: Introduce a boilerplate to validate the generated IR.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/317
The "GdiInterop" is a sample application (source code is avaiable in [Github][source_code], relative guide in [MSDN][msdn_guide]) that demostracts how to display DirectWrite text on a GDI surface. After set dpi to 168 in `winecfg`, and run sample application with wine, the font size is normal, but the position of glyph is incorrect.
| Dpi: 96 | Dpi: 168 |
|:----------------:|:-----------------:|
| ![ss1][sc_96dpi] | ![ss2][sc_168dpi] |
There is the sample application after compile: [Release_x64.tar.gz](/uploads/c70e32824efcaa5d16ab39bbb4b86e30/Release_x64.tar.gz)
After change transform matrix that pass to `IDWriteFactory7_CreateGlyphRunAnalysis`, it can display glyph correctly.
[source_code]: https://github.com/microsoft/Windows-classic-samples/blob/main/Samples/Win7…
[msdn_guide]: https://learn.microsoft.com/en-us/windows/win32/directwrite/render-to-a-gdi…
[sc_96dpi]: /uploads/59cc343cfaa025f4ff4c32a84ab8cfeb/图片.png
[sc_168dpi]: /uploads/938be653362bb6ac58471b69ab66099a/图片.png
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3718
---
See the added comment for details what is going on.
--
v4: d3d9/tests: Wait longer in test_occlusion_query for software renderers.
d3d9/tests: The device window may restore behind our back in test_wndproc.
d3d9/tests: Work around test_reset_fullscreen failing on gitlab CI.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3565
--
v3: dmsynth/tests: Test DirectMusicSynth class in isolation.
dmsynth/tests: Test DirectMusicSynthSink class in isolation.
dmsynth/tests: Import and use a check_interface helper.
dmsynth/tests: Avoid dynamic format string.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3675