This series is basically a single patch but that requires @cmccarthy's !225 first. So, the 2 patches from !225 are included as 1/3 and 2/3.
As can be implied from !225, in SM4 bytecode, all the information regarding whether the register uses a writemask, a swizzle, a dimension index, or none of these, is encoded in the register itself, and doesn't depend on the instruction nor argument position on which the register is used.
The possible register encodings are given by the following diagram:
![diagram3.drawio](/uploads/db330c2f7cc47801e3c3672828ae23b9/diagram3.drawio.png)
Where the swizzle_type (MASK4, VEC4, or SCALAR) only matter when the dim is VEC4.
Thus, it makes sense to merge these two types of registers into a single data type as 3/3 does. This has the added benefit of removing additional writemask and swizzle_type arguments to be initialized by pointer in several helper functions.
Also, this would help me to simplify a new version of !229.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/269
On Wed Jul 19 19:09:02 2023 +0000, Huw Davies wrote:
> There are a lot of changes in this MR, in particular the second commit
> could do with splitting and then the MR itself would ideally be split
> into two.
Done.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3328#note_39522
With this pipeline vkd3d automatically gets built on Linux (in an image based on Debian unstable), both in 32 and 64 bit mode. Both builds are tested with radv and llvmpipe. A number of caveats apply, though:
* A number of tests currently fail in llvmpipe, so the llvmpipe jobs are marked as allowed to fail. Ideally we'll eventually fix our bugs and mark the llvmpipe ones in the tests, so that the CI tests completely pass and possible problems in the Vulkan driver are recorded at a better granularity (this is the reason why GitLab says that the pipeline is passed with warnings: the warnings are that there are jobs that failed, even if they were allowed to fail).
* ~~The runners provided by the GitLab instance don't have a GPU available, so I configured my own computer (equipped with an AMD Radeon RX 5700 RX) to provide a runner with access to the GPU. This setup is not currently satisfying: for me, because I use that computer for other things and I don't like having random code submitted to it (it is theoretically sandboxed, but sandboxes are not always bullet-proof, especially if they have access to a GPU); for the users, because my computer might be unavailable at any time. I'll work on a better solution. For the time being I intend the runner to only accept jobs from the master branch; once a better solution is implemented I'd like to run the pipeline for MRs too.~~ **Fixed**, now there is a shared worker with an AMD GPU available.
* While the `Dockerfile` and related assets do not necessarily need to be available in this repository, given that the CI accesses the binary image from the Docker hub anyway, I think it's still valuable to have them, so others can improve them (and for sure improvement opportunities are nowhere near missing). However, other ways to make them available can be found, if for some reason it is not liked to have them in this repository (they are not pretty!).
* ~~One of the reason they are not pretty is that I have a custom hack to compile `widl` from the Wine sources without compiling (or installing from the distribution) the whole of Wine, in the interest of keeping the Docker image small (well, small-ish: Vulkan drivers, compilers and X libraries are not small anyway).~~ **A better solution was implemented**
* ~~Again on the subject of the Docker image, I am currently putting the binary image in my own namespace on the Docker hub. Using the GitLab container registry in the namespace of the Wine project would probably be better, so that I am not a bottleneck in the future.~~ **Done**
* ~~Even if we discount all the points above, this MR cannot be merged yet, because my runner is currently configured for my namespace only. I guess I need the intervention of a GitLab admin to fix that. However, I think there's already material enough for valuable feedback.~~ **Fixed too**
--
v5: ci: Introduce a CI pipeline for GitLab.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/271
I expect this is going to be tricky to get in. I ran into the following issues:
* test_ShowWindow behaves very strangely on Windows. It seems this isn't typical behavior, and is caused by an interaction with test_SetFocus, but I'm not sure exactly what it does to the thread state that causes this.
* Many of the SetWindowPos flag combinations tested don't actually show the window on Windows, therefore they don't send EVENT_SYSTEM_FOREGROUND. I was able to reproduce this with a stand-alone test, so it seems to be normal behavior.
* Windows can show a window without activating it, and Wine on X11 can't do that reliably for managed windows.
* There are a couple of cases where Windows sends an event and Wine doesn't. I figure it's OK to not cover every case, but I can go back and investigate those if needed.
This interacts with https://gitlab.winehq.org/wine/wine/-/merge_requests/2314, in that the tests don't really test much without it. I applied that MR for my own testing.
--
v2: win32u: Implement EVENT_SYSTEM_FOREGROUND.
user32: Run tests that notice focus changes early.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2853
Supersedes !3329.
--
v3: server: Cancel pipe asyncs when the last handle in process is closed.
server: Cancel socket asyncs when the last handle in process is closed.
ws2_32/tests: Add test for async cancel on socket's last process handle close.
ntdll/tests: Add test for async cancel on pipe's last process handle close.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3339
Knowing the content of the edit field is more useful than knowing the
strcmp() result. The text field may contain carriage returns and
linefeeds so use wine_dbgstr_a() so they are clearly visible in the
failure message.
Also prefix the ok messages with a unique string to indicate which
test_WM_PASTE() test failed.
---
The old failure messages all look the same so one has to refer to the
line number to know which test actually failed which is pretty tiresome.
Thisis even more so when checking old reports on test.winehq.org or
TestBot job results. It also prevents the TestBot from correctly
identifying failure modes (i.e. all test_WM_PASTE() failures looked the
same to it).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3356
Windows only provides the 32-bit API and using todo_wine win_skip() in
the 64-bit case would imply Wine needs fixing. So it's simpler to use
a plain skip().
Other schemes like picking between skip() and win_skip() based on bitness feel like they would be way overkill.
--
v2: msvcrt/tests: Check that some functions are only available in 32-bit code.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2811
It's a clean-room reimplementation that mimics Windows 10 program's output format.
It prints all the information that is available via KerbQueryTicketCacheMessage.
Also tested to work on Windows if dynamically linked + built with winegcc.
For further extension of the functonality, implementing
KerbQueryTicketCacheEx{,2,3}Message is required.
--
v9: klist: Add a program that lists Kerberos tickets.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3347
Decoding a GIF with no color table currently crashes on Wine.
Windows supports such files, and the GIF spec explicitly allows it.
--
v3: windowscodecs: Allow GIF with no color table.
windowscodecs: Factor out common GIF palette copying logic.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3344
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54748
--
v5: gdiplus: Fix GdipGetAllPropertyItems return value when no properties exist.
gdiplus: Fix GdipGetPropertySize return value when no properties exist.
gdiplus/tests: Pare down image property tests that are not run for Wine.
gdiplus/tests: Use test context for test ran in a loop.
gdiplus/tests: Add GIF to image properties tests.
gdiplus/tests: Use consistent no-alternate value for image properties.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3302
Instead of querying the registry, just calls `GetDpiForWindow`.
Winecfg's DPI slider sets `Control Panel\\Desktop\\LogPixels`.
See `programs/winecfg/x11drvdlg.c`
Notepad queries `Software\\Fonts\\LogPixels`, and so doesn't pick up
on the change.
I don't believe this changes how Notepad looks to the user, but it is
necessary for a further MR I'm working on that adds more information
to the status bar.
--
v6: notepad: Use GetDpiForWindow()
https://gitlab.winehq.org/wine/wine/-/merge_requests/3353
Instead of querying the registry, just calls `GetDpiForWindow`.
Winecfg's DPI slider sets `Control Panel\\Desktop\\LogPixels`.
See `programs/winecfg/x11drvdlg.c`
Notepad queries `Software\\Fonts\\LogPixels`, and so doesn't pick up
on the change.
I don't believe this changes how Notepad looks to the user, but it is
necessary for a further MR I'm working on that adds more information
to the status bar.
--
v5: notepad: Use GetDpiForWindow()
https://gitlab.winehq.org/wine/wine/-/merge_requests/3353
On Tue Jul 18 18:38:06 2023 +0000, Brendan Shanks wrote:
> Also, the commit title should start with `notepad:`, something like
> `notepad: Use GetDpiForWindow()`.
While changing the commit title, it might be worth-while to pare down the rest of the commit message. Specifically, while the last paragraph is relevant to the MR, I don't think it will serve any lasting value in the commit history.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3353#note_39330
Instead of querying the registry, just calls `GetDpiForWindow`.
Winecfg's DPI slider sets `Control Panel\\Desktop\\LogPixels`.
See `programs/winecfg/x11drvdlg.c`
Notepad queries `Software\\Fonts\\LogPixels`, and so doesn't pick up
on the change.
I don't believe this changes how Notepad looks to the user, but it is
necessary for a further MR I'm working on that adds more information
to the status bar.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3353
It's a clean-room reimplementation that mimics Windows 10 program's output format.
It prints all the information that is available via KerbQueryTicketCacheMessage.
Also tested to work on Windows if dynamically linked + built with winegcc.
For further extension of the functonality, implementing
KerbQueryTicketCacheEx{,2,3}Message is required.
--
v6: klist: Add a program that lists Kerberos tickets.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3347
With this pipeline vkd3d automatically gets built on Linux (in an image based on Debian unstable), both in 32 and 64 bit mode. Both builds are tested with radv and llvmpipe. A number of caveats apply, though:
* A number of tests currently fail in llvmpipe, so the llvmpipe jobs are marked as allowed to fail. Ideally we'll eventually fix our bugs and mark the llvmpipe ones in the tests, so that the CI tests completely pass and possible problems in the Vulkan driver are recorded at a better granularity (this is the reason why GitLab says that the pipeline is passed with warnings: the warnings are that there are jobs that failed, even if they were allowed to fail).
* ~~The runners provided by the GitLab instance don't have a GPU available, so I configured my own computer (equipped with an AMD Radeon RX 5700 RX) to provide a runner with access to the GPU. This setup is not currently satisfying: for me, because I use that computer for other things and I don't like having random code submitted to it (it is theoretically sandboxed, but sandboxes are not always bullet-proof, especially if they have access to a GPU); for the users, because my computer might be unavailable at any time. I'll work on a better solution. For the time being I intend the runner to only accept jobs from the master branch; once a better solution is implemented I'd like to run the pipeline for MRs too.~~ **Fixed**, now there is a shared worker with an AMD GPU available.
* While the `Dockerfile` and related assets do not necessarily need to be available in this repository, given that the CI accesses the binary image from the Docker hub anyway, I think it's still valuable to have them, so others can improve them (and for sure improvement opportunities are nowhere near missing). However, other ways to make them available can be found, if for some reason it is not liked to have them in this repository (they are not pretty!).
* ~~One of the reason they are not pretty is that I have a custom hack to compile `widl` from the Wine sources without compiling (or installing from the distribution) the whole of Wine, in the interest of keeping the Docker image small (well, small-ish: Vulkan drivers, compilers and X libraries are not small anyway).~~ **A better solution was implemented**
* Again on the subject of the Docker image, I am currently putting the binary image in my own namespace on the Docker hub. Using the GitLab container registry in the namespace of the Wine project would probably be better, so that I am not a bottleneck in the future.
* ~~Even if we discount all the points above, this MR cannot be merged yet, because my runner is currently configured for my namespace only. I guess I need the intervention of a GitLab admin to fix that. However, I think there's already material enough for valuable feedback.~~ **Fixed too**
--
v4: ci: Introduce a CI pipeline for GitLab.
configure: Require widl >= 3.21.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/271