Second part of !50.
--
v4: vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_scope.
vkd3d-shader/hlsl: Add field-level documentation to function structs.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_buffer.
vkd3d-shader/hlsl: Add documentation to small hlsl.h structs.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_deref.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/61
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.
--
v5: vkd3d-shader/spirv: Merge all shader IR fork and join phases into a single phase.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/60
This regression occurred in the commit 091c92521ee22558bbc2adcdd8b18b213d818180 (`iphlpapi: Implement GetAdaptersAddresses() on top of nsi.`) This affects some dotnet core applications which make use of NetworkInterface.Supports which returns false when an interface supports IPv4 or IPv6.
--
v3: iphlpapi: Set Ipv4Enabled and Ipv6Enabled flags accordignly.
iphlpapi/tests: Test for Ipv4Enabled and Ipv6Enabled flags.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1985
This regression occurred in the commit 091c92521ee22558bbc2adcdd8b18b213d818180 (`iphlpapi: Implement GetAdaptersAddresses() on top of nsi.`) This affects some dotnet core applications which make use of NetworkInterface.Supports which returns false when an interface supports IPv4 or IPv6.
--
v2: iphlpapi: Set Ipv4Enabled and Ipv6Enabled flags accordignly.
iphlpapi/tests: Test for Ipv4Enabled and Ipv6Enabled flags.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1985
This regression occurred in the commit 091c92521ee22558bbc2adcdd8b18b213d818180 (`iphlpapi: Implement GetAdaptersAddresses() on top of nsi.`) This affects some dotnet core applications which make use of NetworkInterface.Supports which returns false when an interface supports IPv4 or IPv6.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1985
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
--
v5: kernelbase: Fix grouping repeat for number formatting.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1937
`EM_GETSEL` fills a `DWORD` only, so using a `SIZE_T` would leave upper bits to contain random values. We could initialize it to 0, but instead, just get rid of all the pointer cast hacks and use a proper pointer to check if it was found or not. In fact, this removes the duplication with setting pos to ~0, too.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1982
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
--
v3: kernelbase: Fix grouping repeat for number formatting.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1937
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
--
v4: kernelbase: Fix grouping repeat for number formatting.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1937
Relax some order of debug events in kernel32:debugger tests.
This reduces a bunch of failures when run on Windows.
Unfortunately, this is not sufficient to get rid of all of them
(still timeout in some cases, BZ 53144, wrong exit codes...).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1980
Second part of !50.
--
v3: vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_scope.
vkd3d-shader/hlsl: Add field-level documentation to function structs.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_buffer.
vkd3d-shader/hlsl: Add documentation to small hlsl.h structs.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_deref.
vkd3d-shader/hlsl: Add documentation to struct hlsl_reg.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/61
ICM_DECOMPRESS_GET_FORMAT does not work well with the BITMAPINFOHEADER from MS-CRAM, because a biBitCount of 24
(or anything above 8) indicates RGB555 encoding, which actually means the bit count is 16 bpp, but the decoder rejects
any format that doesn't have biBitCount of exactly 8 or 16.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54024
Signed-off-by: Torge Matthies <tmatthies(a)codeweavers.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1929
--
v4: tests: Print DLL versions when running tests on Windows.
tests: Run d3d9 and d3d12 tests on non-cross builds too.
tests: Distinguish between cross and non-cross Win32 builds.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/57
Currently it doesn't work as expected, namely gets stuck on delimiter and caret is moved before the delimiter.
Unnecessary more robust than Windows, which feels like doesn't do any checks at all.
EDIT1: v2: return length in `WB_RIGHT` if its bigger than default return value of 0 on invalid values
--
v3: comctl32: Fix PathWordBreakProc.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1977
Currently it doesn't work as expected, namely gets stuck on delimiter and caret is moved before the delimiter.
Unnecessary more robust than Windows, which feels like doesn't do any checks at all.
EDIT1: v2: return length in `WB_RIGHT` if its bigger than default return value of 0 on invalid values
--
v2: comctl32: Fix PathWordBreakProc.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1977
Currently it doesn't work as expected, namely gets stuck on delimiter and caret is moved before the delimiter.
Unnecessary more robust than Windows, which feels like doesn't do any checks at all.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1977
And fix some test failures on the way.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54289
--
v2: ntdll: Do not use extended context in RtlCopyContext() if extended state is not copied.
ntdll: Factor out context_copy_ranges() function.
ntdll/tests: Fix random test failure in test_restore_context().
ntdll/tests: Fix xstate tests failing on modern Windows and CPUs with more xstate features.
ntdll/tests: Fix the case of absent XSTATE context in test_copy_context().
https://gitlab.winehq.org/wine/wine/-/merge_requests/1939
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.
--
v4: vkd3d-shader/spirv: Merge all shader IR fork and join phases into a single phase.
vkd3d-shader/spirv: Pass a parser pointer to spirv_compiler_generate_spirv().
vkd3d-shader/sm4: Use the instruction array interface in compile_dxbc_tpf().
vkd3d-shader/glsl: Use the instruction array interface in vkd3d_glsl_generator_generate().
vkd3d-shader: Use the instruction array interface in scan_with_parser().
vkd3d-shader/trace: Use the instruction array interface in vkd3d_dxbc_binary_to_text().
vkd3d-shader: Initialise the instruction array in vkd3d_shader_parser_init().
vkd3d-shader/sm4: Store parsed instructions in an array.
vkd3d-shader/sm1: Store parsed instructions in an array.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/60
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>'
```
--
v8: vkd3d-shader/hlsl: Allow uninitialized static objects.
vkd3d-shader/hlsl: Validate that non-uniform objects are not referenced.
tests: Add additional object references tests.
tests: Test proper initialization of static structs to zero.
vkd3d-shader/hlsl: Initialize static variables to 0 by default.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/54
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
--
v2: kernelbase: Fix grouping repeat for number formatting.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1937
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>'
```
--
v7: vkd3d-shader/hlsl: Allow uninitialized static objects.
vkd3d-shader/hlsl: Validate that non-uniform objects are not referenced.
tests: Add additional object references tests.
tests: Test proper initialization of static structs to zero.
vkd3d-shader/hlsl: Initialize static variables to 0 by default.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/54
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.
--
v3: vkd3d-shader: Merge all shader fork and join phases into a single phase.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/60
> @julliard Could you please take a look at this build fix. It should be included in Wine 8.0 release.
The extra ifdefs are ugly, it should be possible to solve this in a cleaner way.
Note that in general, fixing compiler warnings is not in scope for code freeze.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1919#note_21034
As diagnosed by GCC 13:
dlls/localspl/provider.c: In function ‘fill_builtin_form_info’:
dlls/localspl/provider.c:3045:16: warning: ‘res_len’ may be used uninitialized [-Wmaybe-uninitialized]
3045 | if (res_len)
| ^
--
v3: localspl: Avoid uninitialized variable in fill_builtin_form_info
https://gitlab.winehq.org/wine/wine/-/merge_requests/1960
First relevant commit:
windows.media.speech: Add a worker thread to the recognition session.
--
v4: windows.media.speech: Store recorded audio in a temporary ringbuffer.
windows.media.speech: Partially implement the speech recognizer state.
windows.media.speech: Implement the audio capturing system.
windows.media.speech: Allow the recognition session worker to be paused.
windows.media.speech/tests: Check if stopping the session resets the paused state.
windows.media.speech: Add a worker thread to the recognition session.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1948
First relevant commit:
windows.media.speech: Add a worker thread to the recognition session.
--
v3: windows.media.speech: Store recorded audio in a temporary ringbuffer.
windows.media.speech: Implement the audio capturing system.
windows.media.speech: Allow the recognition session worker to be paused.
windows.media.speech/tests: Check if stopping the session resets the paused state.
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.
windows.media.speech: Move constraints vector to the recognition session.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1948
FFXIV depends on this. It calls SetFullscreenState when it receives WM_WINDOWPOSCHANGED. Through luck the recursion aborts after two calls. The user-visible bug is that after leaving fullscreen, the game's window is still TOPMOST because we overwrite the stored pre-fullscreen window flags.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1964
As diagnosed by GCC 13:
dlls/localspl/provider.c: In function ‘fill_builtin_form_info’:
dlls/localspl/provider.c:3045:16: warning: ‘res_len’ may be used uninitialized [-Wmaybe-uninitialized]
3045 | if (res_len)
| ^
--
v2: wrc: Avoid undefined behavior in the FreeBSD case
https://gitlab.winehq.org/wine/wine/-/merge_requests/1960
This video codec is used by games such as Richman 4, and Zwei: The Arges Adventure.
The decoder logic is based on code from the FFmpeg project.
--
v6: loader/wine.inf: Enable ir50_32 video codec.
ir50_32: Implement decompression to 24-bit and 15-bit RGB.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1301
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.
--
v2: win32u: Correct GetRawInputBuffer alignment under WoW64.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1949
Second part of !50.
--
v2: vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_scope.
vkd3d-shader/hlsl: Add field-level documentation to function structs.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_buffer.
vkd3d-shader/hlsl: Add documentation to small hlsl.h structs.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_deref.
vkd3d-shader/hlsl: Add documentation to struct hlsl_reg.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/61
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).
--
v8: 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.
tests: Test constant propagation through swizzles.
vkd3d-shader/hlsl: Support offset argument for the texture Load() method.
tests: Test offset argument for the texture Load() method.
vkd3d-shader/hlsl: Use aoffimmis when writing gather methods.
vkd3d-shader/hlsl: Replace loads with constants in copy prop.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/51
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.
--
v2: wined3d: Use a string channel desc to initialize typed formats.
wined3d: Separate a parse_channel_desc() helper.
d3d10core/tests: Add a basic test for vertex formats.
d3d11/tests: Add a basic test for vertex formats.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1943
As diagnosed by GCC 13:
dlls/localspl/provider.c: In function ‘fill_builtin_form_info’:
dlls/localspl/provider.c:3045:16: warning: ‘res_len’ may be used uninitialized [-Wmaybe-uninitialized]
3045 | if (res_len)
| ^
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1960