And a previously created context is passed, which may later be destroyed
on its own, causing a double free.
This happens when running the ntlm tests.
--
v2: msv1_0: Avoid double free when SpInitLsaModeContext fails.
msv1_0: Avoid double free when SpAcceptLsaModeContext fails.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1955
The tests are actually racy, and the async operation is cancellable in
a very short period of time after its creation, but before it started
executing.
This will be hard to test precisely and it's not related to dinput tests
in any way. Let's remove this to fix some spurious Windows failures.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54283
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1959
OCSP support was introduced in the latest development cycle. In improves revocation check performance in general, although the caching is currently performed by CRL revocation check only. Also, even that result is not used before performing OCSP check which goes first, effectively forcing OCSP check to be always performed when a certificate has OCSP info. That leads to performance regression in some cases.
I believe once we validated revocation either way it is safe to assume the cached result valid until NextUpdate regardless of the method (that what the first patch does). Then, we can also cache the result of OCSP response the same way we do for CRL (second patch).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1940
These can be reproduced when running many of the tests, including but not only, the ole32 tests. I tried to keep the changes minimal to fix the failing tests, hopefully it should cover all the mismatches (though I'm a bit worried about the apparent dependency with combase, which has been changed to use msvcrt heap).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1956
When doing a parallel build on multi-arch tree, it sometimes
generates errors like:
/usr/lib/gcc/x86_64-w64-mingw32/12.2.1/../../../../x86_64-w64-mingw32/bin/ld: cannot find authz.dll-63db5999.spec.o: Aucun fichier ou dossier de ce type
I added a couple of traces, showing that the two winegcc invocations
for linking the DLL on the two arch:s are run in parallel *BUT*
end up with the same output file.
The one generated from tools.h / make_temp_file() called in
winegcc{build_spec_obj()}.
build_spec_obj() invokes 'winebuild -o XXX.spec.o' that starts (in -o
option handling) by unlinking XXXX.spec.o.
This opens a race condition on the output file name:
1) the XXX.spec.o is chosen by first arch in winegcc
2) XXX.spec.o is unlinked in winebuild (for first arch)
3) XXX.spec.o is chosen by second arch in winegcc
4) both winebuild invocations (first & second arch) now
write to the same file
In a nutshell, make_temp_file() isn't sufficient to ensure unicity
of filename when such filename is erased (even briefly) in the
build process.
Proposed workaround:
- use target name in generation of .spec.o filename to avoid collision.
There's might other areas which could suffer from same kind of issue.
Alternative options:
- explicitly insert getpid() or target_alias in generated name in
make_temp_file()
- change value in make_temp_file (using time(NULL) + getpid() in
parallel build can generate rather likely the same value in two
consecutive processes)
time(NULL) ^ getpid() might generate less collisions (even if
it doesn't eradicate them).
- change winebuild not to unlink output file but rather use
open(O_TRUNC) (didn't look into it)
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1927
The existing mitigation for this (memcpy/overhead) leaves the first 8 bytes of RAWINPUT.data in the location of the wParam, and the upper 4 bytes of the wParam in the lower 4 bytes of the hDevice.
Marking this as a draft due to code freeze.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1949
In the generate code, Converity is reporting __frame->code unitilized in the failed case.
When we initialize the object, then __f will also point to a fully initizliaed structure.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1950
SPIR-V doesn't support parallelisation in patch constant functions.
Merging into one phase allows generation of a single patch constant
function and normalises to the shader model 6 pattern.
--
v2: vkd3d-shader: Merge all shader fork and join phases into a single phase.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/60
First relevant commit:
windows.media.speech: Add a worker thread to the recognition session.
--
v2: windows.media.speech: Store recorded audio in a temporary ringbuffer.
windows.media.speech: Implement the audio capturing system.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1948
--
v12: windows.media.speech: Implement the audio capturing system.
windows.media.speech: Allow the recognition session worker to be paused.
windows.media.speech: Add a worker thread to the recognition session.
https://gitlab.winehq.org/wine/wine/-/merge_requests/729
--
v4: vkd3d-shader/hlsl: Get rid of the "intrinsic" field of struct hlsl_ir_function.
vkd3d-shader/hlsl: Forbid returning void expressions from void functions.
vkd3d-shader/hlsl: Generate IR for user-defined function calls.
vkd3d-shader/hlsl: Avoid assuming that expressions have at least one argument.
tests: Test specifying a UAV address as an in/out parameter to a function.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/47
SPIR-V doesn't support parallelisation in patch constant functions.
Merging into one phase allows generation of a single patch constant
function and normalises to the shader model 6 pattern.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/60
This is not a regression, and probably not a visible bug fix either.
On the other hand, it is a clear bug fix, and a relatively safe one as well.
I don't know whether it makes more sense to defer this until after code freeze.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1943
If a hlsl_ir_load loads a variable whose components are stored from different
instructions, copy propagation doesn't replace it.
But if all these instructions are constants (which currently is the case
for value constructors), the load can be replaced with a constant value, which
is what the first patch of this series does.
For instance, this shader:
```
sampler s;
Texture2D t;
float4 main() : sv_target
{
return t.Gather(s, float2(0.6, 0.6), int2(0, 0));
}
```
results in the following IR before applying the patch:
```
float | 6.00000024e-01
float | 6.00000024e-01
uint | 0
| = (<constructor-2>[@4].x @2)
uint | 1
| = (<constructor-2>[@6].x @3)
float2 | <constructor-2>
int | 0
int | 0
uint | 0
| = (<constructor-5>[@11].x @9)
uint | 1
| = (<constructor-5>[@13].x @10)
int2 | <constructor-5>
float4 | gather_red(resource = t, sampler = s, coords = @8, offset = @15)
| return
| = (<output-sv_target0> @16)
```
and this IR afterwards:
```
float2 | {6.00000024e-01 6.00000024e-01 }
int2 | {0 0 }
float4 | gather_red(resource = t, sampler = s, coords = @2, offset = @3)
| return
| = (<output-sv_target0> @4)
```
This is required to write texel_offsets as aoffimmi modifiers in the sm4 backend, since it expects the texel_offset arguments to be hlsl_ir_constant.
This series also:
* Allows Gather() methods to use aoffimmi modifiers instead of an additional source register (which is the only way allowed for shader model 4.1), when possible.
* Adds support to texel_offsets in the Load() method via aoffimmi modifiers (the only allowed method).
--
v7: vkd3d-shader/hlsl: Fold swizzle chains.
vkd3d-shader/hlsl: Refactor common code on copy-prop of both loads and swizzles.
vkd3d-shader/hlsl: Propagate copies through swizzles.
vkd3d-shader/hlsl: Replace swizzles with constants in copy prop.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/51
If a hlsl_ir_load loads a variable whose components are stored from different
instructions, copy propagation doesn't replace it.
But if all these instructions are constants (which currently is the case
for value constructors), the load can be replaced with a constant value, which
is what the first patch of this series does.
For instance, this shader:
```
sampler s;
Texture2D t;
float4 main() : sv_target
{
return t.Gather(s, float2(0.6, 0.6), int2(0, 0));
}
```
results in the following IR before applying the patch:
```
float | 6.00000024e-01
float | 6.00000024e-01
uint | 0
| = (<constructor-2>[@4].x @2)
uint | 1
| = (<constructor-2>[@6].x @3)
float2 | <constructor-2>
int | 0
int | 0
uint | 0
| = (<constructor-5>[@11].x @9)
uint | 1
| = (<constructor-5>[@13].x @10)
int2 | <constructor-5>
float4 | gather_red(resource = t, sampler = s, coords = @8, offset = @15)
| return
| = (<output-sv_target0> @16)
```
and this IR afterwards:
```
float2 | {6.00000024e-01 6.00000024e-01 }
int2 | {0 0 }
float4 | gather_red(resource = t, sampler = s, coords = @2, offset = @3)
| return
| = (<output-sv_target0> @4)
```
This is required to write texel_offsets as aoffimmi modifiers in the sm4 backend, since it expects the texel_offset arguments to be hlsl_ir_constant.
This series also:
* Allows Gather() methods to use aoffimmi modifiers instead of an additional source register (which is the only way allowed for shader model 4.1), when possible.
* Adds support to texel_offsets in the Load() method via aoffimmi modifiers (the only allowed method).
--
v6: vkd3d-shader/hlsl: Fold swizzle chains.
vkd3d-shader/hlsl: Propagate copies through swizzles.
vkd3d-shader/hlsl: Replace swizzles with constants in copy prop.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/51
Implements navigation bar featuring:
- back/forward buttons
- go up button
- address crumbs
- hides crumbs when there's not enough space to display all of them
- always shows at least 2 crumbs
- truncating them if needed
- first crumb is at least 56px
- aligns label to the left if truncated
- right clicking on the crumb, or free space, opens a menu with `Copy address as text` and `Edit address` options
- reuses existing crumbs to avoid some flickering
- overflow menu
- ~~first crumb is always moved here~~
- removes the split, if there are no items in the menu
- hidden crumbs are moved here
- left ~~or right~~ click on the button starts address editing
- address edit
- accepts an existing path
- expands environment variables, e.g. `%APPDATA%\Microsoft` -> `C:\users\%USERNAME%\AppData\Roaming\Microsoft`
- errors with a `MessageBox` on nonexistent paths
- refresh button
- changes into go to button when editing address
- DPI scaling
Screenshots:






Remaining issues:
- crumbs not lighting up when hovered sometimes
- can be observed in current file dialog, hovering over dropdown arrow of a file type fixes it for a moment
- crumbs flickering on address change sometimes
- mostly when there's not enough space to display all of them
- `DeferWindowPos` doesn't seem to be atomic in Wine, presumably is in native Windows?
- unexpected address conversion for some PIDLs
- e.g. `Desktop` -> `C:\users\%USERNAME%\Desktop`, which is an entirely different location
- or `My Computer` into an empty string
- known folders are not handled by address edit, e.g. `Desktop`, `My Computer`
- icons are not DPI scaled
- while writing this:
```
0024:fixme:bitmap:NtGdiCreateBitmap planes = 0
0024:err:system:user_check_not_lock BUG: holding USER lock
wine/dlls/win32u/sysparams.c:396: user_check_not_lock: Assertion `0' failed.
wine: Assertion failed at address F7FF8549 (thread 0024), starting debugger...
```
- can't reproduce, happened when clicking on an item in overflow menu
- race condition? cosmic ray?
Addresses following bugs:
- https://bugs.winehq.org/show_bug.cgi?id=29912
- https://bugs.winehq.org/show_bug.cgi?id=50338
- https://bugs.winehq.org/show_bug.cgi?id=51855 (partially? no search box)
--
v12: fixup: comdlg32: Add address edit to IFileDialog navigation bar.
comdlg32: Add refresh/go to button to IFileDialog navigation bar.
comdlg32: Add address edit to IFileDialog navigation bar.
comdlg32: Add breadcrumb overflow menu to IFileDialog navigation bar.
comdlg32: Add address breadcrumbs to IFileDialog navigation bar.
comdlg32: Add go up button to IFileDialog navigation bar.
comdlg32: Add IFileDialog navigation bar.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1857
Some window managers have trouble moving fullscreen windows to another monitor. For example, KWin
doesn't allow moving windows with _NET_WM_STATE_FULLSCREEN set. FVWM used by TestBots keeps
the size for fullscreen windows after they are moved to another monitor and when the window is also
fullscreen on the new monitor, which could be a bug in FVWM. But let's work around this in the tests
as well. The changed tests don't need created windows being fullscreen at the start.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54172
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1932
copy_propagation_transform_object_load() currently retrieves true, which
indicates that there was progress, even if the input dereference remains
the same.
This can happen repeatedly if an uninitialized object is copied onto
itself, as in the tests added in this patch. This results on the
compilation getting stuck on an endless loop.
This patch checks if the deref didn't change, to retrieve false in that
case.
--
v5: vkd3d-shader/hlsl: Validate that referenced objects are uniform.
tests: Test uninitialized object references.
vkd3d-shader/hlsl: Avoid infinite loop in copy propagation.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/59
LOCALE_SGROUPING's string and the `Grouping` field in NUMBERFMTW are confusingly different. The former, which is what is fixed here, treats a '0' as a repeat of the previous grouping. But a 0 at the end of the `Grouping` field prevents it from repeating (it repeats by default otherwise) so it's the opposite. Note that without a '0' in the LOCALE_SGROUPING string, it shouldn't even repeat in the first place.
This fixes the typical "3;0" default grouping, for example.
See: https://learn.microsoft.com/en-us/windows/win32/intl/locale-sgrouping
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1937
copy_propagation_transform_object_load() currently retrieves true, which
indicates that there was progress, even if the input dereference remains
the same.
This can happen repeatedly if an uninitialized object is copied onto
itself, as in the tests added in this patch. This results on the
compilation getting stuck on an endless loop.
This patch checks if the deref didn't change, to retrieve false in that
case.
--
v4: vkd3d-shader/hlsl: Validate that referenced objects are uniform.
tests: Test uninitialized object references.
vkd3d-shader/hlsl: Avoid infinite loop in copy propagation.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/59
We are currently not initializing static values to zero by default.
Consider the following shader:
```hlsl
static float4 va;
float4 main() : sv_target
{
return va;
}
```
we get the following output:
```
ps_5_0
dcl_output o0.xyzw
dcl_temps 2
mov r0.xyzw, r1.xyzw
mov o0.xyzw, r0.xyzw
ret
```
where r1.xyzw is not initialized.
This patch solves this by assigning the static variable the value of an
uint 0, and thus, relying on complex broadcasts.
This seems to be the behaviour of the the native compiler, since it retrieves
the following error on a shader that lacks an initializer on a data type with
object components:
```
error X3017: cannot convert from 'uint' to 'struct <unnamed>'
```
--
v6: vkd3d-shader/hlsl: Allow uninitialized static objects.
vkd3d-shader/hlsl: Validate that non-uniform objects are not referenced.
tests: Add additional object references tests.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/54
--
v3: vkd3d-shader/hlsl: Get rid of the "intrinsic" field of struct hlsl_ir_function.
vkd3d-shader/hlsl: Forbid returning void expressions from void functions.
vkd3d-shader/hlsl: Generate IR for user-defined function calls.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/47
For the console tests, I prefer to run new/modified tests on all VM configurations so I can quickly see which behaviour or return codes are commonly correct. In some cases, this lets me determine in which version some expected behaviour changed.
This all started with the font family registry value MR. I wanted to check the value name on XP, since I thought it was correct but couldn’t be certain. That’s when I discovered the tests weren’t running and decided to see how much effort it would take to fix them.
I know the value of these patches isn’t worth much, but I still find them useful.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1899#note_20678
> I don't see the maintenance cost or burden as high, nor do I mind monitoring this, if that's a concern.
Seeing the number of patches you had to write (and will have to continue to write on an ongoing basis), I'd say the cost is significant.
What's the upside? What behavior do you need to test on XP, and why?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1899#note_20671
I don't see the maintenance cost or burden as high, nor do I mind monitoring this, if that's a concern.
Looking at recent test patches, I can see function addresses used. It's really only adding the macro part, then calling the pointer. Everything else is the same as normal.
I think I'm actually to blame for the issues in the console tests...
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1899#note_20669
> There are times when it is useful to test changes on the Windows XP and 2003 VMs, but the direct use of functions not on those platforms makes this impossible.
>
> Once applied, the kernel32 tests will run on the Windows XP and 2003 testbot VMs.
We have decided to no longer care about XP/2003 results, precisely because the maintenance cost of keeping the tests running is bigger than the benefits of supporting obsolete platforms.
If there's a case where you need to investigate the XP/2003 behavior, I'd suggest extracting just that test to a separate exe.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1899#note_20668
--
v2: vkd3d-shader/hlsl: Get rid of the "intrinsic" field of struct hlsl_ir_function.
vkd3d-shader/hlsl: Forbid returning void expressions from void functions.
vkd3d-shader/hlsl: Generate IR for user-defined function calls.
vkd3d-shader/hlsl: Avoid assuming that expressions have at least one argument.
tests: Test specifying a UAV address as an in/out parameter to a function.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/47
This functions should also work with document fragments, in wine they only return NULL.
--
v5: mshtml: Implement HTMLDocument_get_body for document fragments.
mshtml: Implement get_all for document fragments.
mshtml/tests: Test for get_all and get_body in document fragments.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1918
This patch series includes an implementation of the long-pending `transpose` intrinsic and the `smoothstep` intrinsic.
While implementing `smoothstep` I realized that some intrinsics have different rules for the allowed data types than expressions:
- Vectors and matrices at the same time are not allowed, regardless of their dimensions. Even if they have the same number of components.
- Any combination of matrices is always allowed, even those when no matrix fits inside another, e.g.:
`float2x3` is compatible with `float3x2`, resulting in `float2x2`.
The common data type is the min on each dimension.
This is the case for `max`, `pow`, `ldexp`, `clamp` and `smoothstep`; which suggest that it is the case for all intrinsics where the operation is applied element-wise. So this was corrected.
A minor fix in `pow`'s type conversion is also included.
--
v4: vkd3d-shader/hlsl: Use add_unary_arithmetic_expr() in intrinsic_pow().
vkd3d-shader/hlsl: Introduce elementwise_intrinsic_float_convert_args().
vkd3d-shader/hlsl: Convert elementwise intrinsics args to the proper common type.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/53
First part of v2 of !38, trying to follow the wide feedback provided.
Following patches in: https://gitlab.winehq.org/fcasas/vkd3d/-/tree/documentation
--
v3: vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_src.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_ir_node.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_ctx.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_ir_var.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_struct_field.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_type.
vkd3d-shader/hlsl: Rename hlsl_struct_field.modifiers to "storage_modifiers".
vkd3d-shader/hlsl: Rename hlsl_ir_var.modifiers to "storage_modifiers".
vkd3d-shader/hlsl: Rename HLSL_STORAGE_VOLATILE to HLSL_MODIFIER_VOLATILE.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/50
Since commit 182feddd4b02e83f3c69863bc2e6e63945eb2df1 DwmGetCompositionTimingInfo() returns success. Currently wine-gecko fails to display anything if prefix version is Win10. That is due to zero qpcVBlank field in DwmGetCompositionTimingInfo() output which is currently missing. Before the referenced commit it was handling the failure (see gfx/thebes/gfxWindowsPlatform.cpp:VBlankLoop() (line 2840 in the current wine-gecko snapshot from https://sourceforge.net/p/wine/wine-gecko/ci/master/tree/).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1928
--
v11: windows.media.speech: Allow the recognition session worker to be paused.
windows.media.speech: Add a worker thread to the recognition session.
windows.media.speech/tests: Test starting, stopping, pausing and resuming the recognition session.
windows.media.speech/tests: Test the recognizer state.
windows.media.speech: Return IAsyncAction from session_PauseAsync.
windows.media.speech: Return IAsyncAction from session_StopAsync.
windows.media.speech: Do not force calling convention on internal callbacks.
https://gitlab.winehq.org/wine/wine/-/merge_requests/729
Implements navigation bar featuring:
- back/forward buttons
- go up button
- address crumbs
- hides crumbs when there's not enough space to display all of them
- always shows at least 2 crumbs
- truncating them if needed
- first crumb is at least 56px
- aligns label to the left if truncated
- right clicking on the crumb, or free space, opens a menu with `Copy address as text` and `Edit address` options
- reuses existing crumbs to avoid some flickering
- overflow menu
- ~~first crumb is always moved here~~
- removes the split, if there are no items in the menu
- hidden crumbs are moved here
- left ~~or right~~ click on the button starts address editing
- address edit
- accepts an existing path
- expands environment variables, e.g. `%APPDATA%\Microsoft` -> `C:\users\%USERNAME%\AppData\Roaming\Microsoft`
- errors with a `MessageBox` on nonexistent paths
- refresh button
- changes into go to button when editing address
- DPI scaling
Screenshots:






Remaining issues:
- crumbs not lighting up when hovered sometimes
- can be observed in current file dialog, hovering over dropdown arrow of a file type fixes it for a moment
- crumbs flickering on address change sometimes
- mostly when there's not enough space to display all of them
- `DeferWindowPos` doesn't seem to be atomic in Wine, presumably is in native Windows?
- unexpected address conversion for some PIDLs
- e.g. `Desktop` -> `C:\users\%USERNAME%\Desktop`, which is an entirely different location
- or `My Computer` into an empty string
- known folders are not handled by address edit, e.g. `Desktop`, `My Computer`
- icons are not DPI scaled
- while writing this:
```
0024:fixme:bitmap:NtGdiCreateBitmap planes = 0
0024:err:system:user_check_not_lock BUG: holding USER lock
wine/dlls/win32u/sysparams.c:396: user_check_not_lock: Assertion `0' failed.
wine: Assertion failed at address F7FF8549 (thread 0024), starting debugger...
```
- can't reproduce, happened when clicking on an item in overflow menu
- race condition? cosmic ray?
Addresses following bugs:
- https://bugs.winehq.org/show_bug.cgi?id=29912
- https://bugs.winehq.org/show_bug.cgi?id=50338
- https://bugs.winehq.org/show_bug.cgi?id=51855 (partially? no search box)
--
v11: fixup: address edit | limited known folder support
comdlg32: Add refresh/go to button to IFileDialog navigation bar.
comdlg32: Add address edit to IFileDialog navigation bar.
comdlg32: Add breadcrumb overflow menu to IFileDialog navigation bar.
comdlg32: Add address breadcrumbs to IFileDialog navigation bar.
comdlg32: Add go up button to IFileDialog navigation bar.
comdlg32: Add IFileDialog navigation bar.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1857
This series tries to fix WM_PASTE tests error on edit control (both user32 & comctl32).
The test failures where systematic on a local Win10 for comctl32 (yet very rare on
user32, perhaps one in 20 runs).
Since the failures are not systematic, it ought to be a synchronisation / timing
issue.
Flushing the msg queue before starting the paste test cycle seems to fix the issue.
- 0 occurence on comctl32 and user32 in 50 run (local VM)
- 0 occurence on Testbot (comctl32) in 1 run.
It's hard to be fully conclusive about bug resolution, but it's at least a step into
the right direction.
--
v4: comctl32/tests: Fix failing WM_PASTE tests for edit control on Win10+.
comctl32/tests: Retry when opening the clipboard.
user32/tests: Fix failing WM_PASTE tests for edit control on Win10+.
user32/tests: Retry when opening the clipboard.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1886
copy_propagation_transform_object_load() currently retrieves true, which
indicates that there was progress, even if the input dereference remains
the same.
This can happen repeatedly if an uninitialized object is copied onto
itself, as in the tests added in this patch. This results on the
compilation getting stuck on an endless loop.
This patch checks if the deref didn't change, to retrieve false in that
case.
--
v3: vkd3d-shader/hlsl: Validate that referenced objects are uniform.
tests: Test uninitialized object references.
vkd3d-shader/hlsl: Avoid infinite loop in copy propagation.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/59