This is required by https://bugs.winehq.org/show_bug.cgi?id=54660 .
--
v6: vkd3d-shader/hlsl: Consider duplicated input semantic types equivalent in SM1.
vkd3d-shader/hlsl: Handle possibly different types in input semantic var load.
vkd3d-shader/hlsl: Error out when a semantic is used with incompatible types.
vkd3d-shader/hlsl: Error out when an output semantic is used more than once.
vkd3d-shader/hlsl: Support semantics for array types.
vkd3d-shader/hlsl: Don't create semantic vars more than once.
vkd3d-shader/hlsl: Move get_array_size() and get_array_type() to hlsl.c.
tests: Test duplicated semantics.
tests: Test array types with semantics.
vkd3d-shader/hlsl: Avoid invalid input/output copies for non-numeric types.
tests: Allow invalid vertex shader tests.
tests: Expect S_OK result on [vertex shader].
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/148
The `nb_threads` counter in ntdll is decremented by `abort_thread` but not `exit_thread`, which is used when `NtTerminateThread` is called on the current thread. That results in `nb_threads` being off by one, so neither `abort_thread` nor `exit_thread` will notice when the final thread is killed or call `abort_process`/`exit_process` of its own volition.
In some instances that results in the final thread of a process hanging around and continuing to do work until it's killed by the server's SIGKILL timer. Since most of the process' internal state has been torn down by that point, that usually results in syscall faults or server `write` failures.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2701
--
v2: vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_resource_store().
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_resource_load().
vkd3d-shader/hlsl: Return an hlsl_ir_node pointer from hlsl_new_loop().
vkd3d-shader/hlsl: Pass an hlsl_block pointer to hlsl_new_loop().
vkd3d-shader/hlsl: Reuse the "init" instruction list if possible in create_loop().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/176
SPIR-V already handled DSX/DSY, so only D3DBC/TPF needed new case blocks.
You'll notice that there's no test for this one - in addition to being a pretty straightforward translation for all possible formats, this feature uses the render target width/height and I wasn't sure if there was a good way to ensure that the test would always make sense.
Instead, I did the test manually, and it's what you'd expect:
HLSL:
```
uniform float f;
float4 main() : sv_target
{
float4 x = ddx(f);
float4 y = ddy(f);
return x + y;
}
```
D3DBC:
```
ps_3_0
mov r0.x, c0.x
dsx r1.x, r0.x
dsy r0.x, r0.x
mov r1.xyzw, r1.x
mov r0.xyzw, r0.x
add r0.xyzw, r1.xyzw, r0.xyzw
mov oC0.xyzw, r0.xyzw
```
DXBC-TPF:
```
ps_4_0
dcl_constantBuffer cb0[1], immediateIndexed
dcl_output o0.xyzw
dcl_temps 2
mov r0.x, cb0[0].x
dsx r0.y, r0.x
dsy r0.x, r0.x
mov r1.xyzw, r0.y
mov r0.xyzw, r0.x
add r0.xyzw, r1.xyzw, r0.xyzw
mov o0.xyzw, r0.xyzw
ret
```
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/179
custom.c does not use the test.h and debug.h definitions and presumably has a good reason not to. But this resulted in the printf-format compiler attribute getting lost. So copy it from debug.h to allow proper checks of the ok_() format string.
Also fix said format strings.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2692
Mainly comprises support for allocating arrays of resources, and loading from them, for both SM1 and SM4.
--
v3: vkd3d-shader/hlsl: Support resource arrays when writting SM4.
vkd3d-shader/hlsl: Write resource loads in SM1.
vkd3d-shader/hlsl: Write sampler declarations in SM1.
vkd3d-shader/hlsl: Track objects sampling dimension.
vkd3d-shader/hlsl: Track object components usage and allocate registers accordingly.
tests: Test objects as parameters.
vkd3d-shader/hlsl: Skip object components when creating input/output copies.
vkd3d-shader/hlsl: Add fixme for uniform copies for objects within structs.
vkd3d-shader/hlsl: Support multiple-register variables in object regsets.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/159