Test module references created by resolving forwarded exports.
The following diagram explains what happens in bug #52094 under the hood:
```mermaid
graph TB
subgraph state_00["Initial"]
direction LR
s00_ida[ida64.dll] ~~~ s00_idapy[idapython64.dll] -. "(import)" .-> s00_py3[python3.dll] -. "(forwards to)" .-> s00_py311[python311.dll]
end
state_00 -. "1. <strong><code><span style='color:#28f'>Load</span>Library("</code></strong>configured Python version (e.g., python311.dll)<strong><code>")</code></strong>" .-> state_01
subgraph state_01["python311.dll loaded"]
direction LR
s01_ida[ida64.dll] ~~~ s01_idapy[idapython64.dll] -. "(import)" .-> s01_py3[python3.dll] -. "(forwards to)" .-> s01_py311[python311.dll]
s01_ida -- "<em>dynamic</em> ref" --> s01_py311
end
state_01 -. "2. <strong><code><span style='color:#28f'>Load</span>Library("</code></strong>idapython64.dll<strong><code>")</code></strong>" .-> state_02
subgraph state_02["idapython64.dll loaded"]
direction LR
s02_ida[ida64.dll] -- "<em>dynamic</em> ref" --> s02_idapy[idapython64.dll] -- "<em><strong>static</strong></em> ref" --> s02_py3[python3.dll] -. "(forwards to)" .-> s02_py311[python311.dll]
s02_ida -- "<em>dynamic</em> ref" --> s02_py311
s02_idapy -- "<span style='color:red'><em><strong>static forwarded</strong></em> ref</span>" --> s02_py311
end
state_02 -. "3. <strong><code><span style='color:#d70'>Free</span>Library("</code></strong>configured Python version (e.g., python311.dll)<strong><code>")</code></strong>" .-> state_03
subgraph state_03["python311.dll reference removed"]
direction LR
style s03_py311 color:#f00,stroke:#f00
s03_ida[ida64.dll] -- "<em>dynamic</em> ref" --> s03_idapy[idapython64.dll] -- "<em><strong>static</strong></em> ref" --> s03_py3[python3.dll] -. "(forwards to)" .-> s03_py311[python311.dll]
s03_ida -. "<del><em>dynamic</em> ref (deleted)</del>" .-> s03_py311
s03_idapy -- "<span style='color:red'><em><strong>static forwarded</strong></em> ref</span>" --> s03_py311
end
```
On Windows, the <em><strong>static forwarded</strong></em> ref keeps `python311.dll` from being unloaded; however, Wine is missing this behavior, causing it to be unloaded and segfault immediately (since further initialization happens just after step 3 FreeLibrary). The tests aim to reproduce this condition.
---
### Alternative options
1. Find existing DLLs satisfying this scenario: I haven't found any in wine tree. Let me know if I missed anything.
2. Construct PE for the DLLs on-the-fly: This sounds more complicated than a handful of test DLLs.
--
v5: kernel32/tests: Test module refcounting with forwarded exports.
https://gitlab.winehq.org/wine/wine/-/merge_requests/364
This patchset aims to fix #46070 without supplying unix\_name for all server files.
--
v3: kernelbase: Replace FileAllInformation with FileStatInformation in GetFileInformationByHandle().
ntdll: Implement NtQueryInformationFile FileStatInformation.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5111
We used to expect a fixed number of DBI substreams (the expected number depended
on the DBI header version).
Recent MSVC generate a different number as we expected.
Implement a more flexible scheme where we allow any number of streams.
This lets these recent PDB files to be properly displayed by winedump, and
loaded/parsed by dbghelp.
--
v2: dbghelp: Don't expected a fixed number of substreams in DBI header (PDB).
winedump: Don't expect a fixed number of substreams in DBI header (PDB).
https://gitlab.winehq.org/wine/wine/-/merge_requests/5112
How about the [attached](/uploads/d104ebd37a462b4fd375640b9e97eb93/patches.mbox.xz) series? I turns out that it's a bit awkward to make the "rasteriser_ordered" flag specific to UAVs due to the way "resource_format" is currently used, but making it a resource flag seems close enough to me. The series has a minor conflict with 569.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/652#note_61911
We used to expect a fixed number of DBI substreams (the expected number depended
on the DBI header version).
Recent MSVC generate a different number as we expected.
Implement a more flexible scheme where we allow any number of streams.
This lets these recent PDB files to be properly displayed by winedump, and
loaded/parsed by dbghelp.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5112
Also removes the unused `cgsize_win_from_mac()`.
--
v2: winemac.drv: Remove dead cgsize_win_from_mac() function.
winemac.drv: Parametrize retina in cgpoint_win_from_mac().
winemac.drv: Parametrize retina in cgpoint_mac_from_win().
winemac.drv: Parametrize retina in cgsize_mac_from_win().
winemac.drv: Parametrize retina in cgrect_win_from_mac().
winemac.drv: Parametrize retina in cgrect_mac_from_win().
https://gitlab.winehq.org/wine/wine/-/merge_requests/5110
Co-authored-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
These may happen when storing to structured buffers, and we are not
handling them properly yet. The included test reaches unreacheable code
before this patch.
Storing to buffers is complicated since we need to split the index
chain in two paths:
- The path within the variable where the resource is.
- The subpath to the part of the resource element that is being stored
to.
For now, we will emit a fixme when the index chain in the lhs is not a
direct resource access.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/655
--
v7: vkd3d-shader/fx: Do not align structured data section.
vkd3d-shader/fx: Add initial support for writing buffers descriptions.
vkd3d-shader/fx: Do not align strings for fx_4/fx_5 profiles.
vkd3d-shader/fx: Use variable pointer in write_group().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/636
> ```
> Tests have already been implemented in 92044d5e; this commit loosens
> some of the todos (because now they're implemented!).
> ```
I get what you're saying here, but I think the use of "loosens" here is slightly odd; you're narrowing the scope of the todo's, not broadening it.
> ```diff
> + const char *fn_name = asin_mode
> + ? fn_name_asin
> + : fn_name_acos;
> ```
Continuations get double indentation, like template[] above this code, and the hlsl_sprintf_alloc() call below this code. This could of course also simply go on a single line.
> ```diff
> + static const char* atan2_name = "atan2";
> + static const char* atan_name = "atan";
> ```
We'll want
```c
static const char atan2_name[] = "atan2";
static const char atan_name[] = "atan";
```
here. That applies to "atan2_header_template" and "atan_header_template" as well.
> ```diff
> + if (!(buf = hlsl_get_string_buffer(ctx))) {
> + return false;
> + }
> +
> + if (atan2_mode) {
> + ok = vkd3d_string_buffer_printf(buf, atan2_header_template,
> + type->name, type->name, type->name, type->name);
> + } else {
> + ok = vkd3d_string_buffer_printf(buf, atan_header_template,
> + type->name, type->name, type->name);
> + }
> + if (ok < 0)
> + return false;
> +
> + ok = vkd3d_string_buffer_printf(buf, body_template, type->name);
> + if (ok < 0)
> + return false;
> +
> + func = hlsl_compile_internal_function(ctx,
> + atan2_mode ? atan2_name : atan_name, buf->buffer);
> ```
Couple of issues here:
- "{" and "}" would go on their own line, but could also simply be omitted here.
- Continuations get double indentation.
- You're leaking "buf" on the error paths.
- "ok" is an unusual name for the return code, it's more commonly called either "ret" or "rc".
- There's a trailing space on the line containing the hlsl_compile_internal_function() call.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/364#note_61887
--
v4: vkd3d-shader/dxil: Implement DX intrinsic RawBufferStore.
vkd3d-shader/dxil: Handle raw and structured buffers in sm6_parser_emit_dx_buffer_store().
vkd3d-shader/dxil: Implement DX intrinsic BufferStore.
tests/shader-runner: Add a test for a signed int structured buffer UAV.
tests/shader-runner: Add a test for a signed int typed buffer UAV.
tests/shader-runner: Support structured buffer UAVs.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/642
--
v3: vkd3d-shader/dxil: Implement DX intrinsic RawBufferStore.
vkd3d-shader/dxil: Handle raw and structured buffers in sm6_parser_emit_dx_buffer_store().
vkd3d-shader/dxil: Implement DX intrinsic BufferStore.
tests/shader-runner: Add a test for a signed int structured buffer UAV.
tests/shader-runner: Add a test for a signed int typed buffer UAV.
tests/shader-runner: Support structured buffer UAVs.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/642
First part of Proton shared memory series. The full branch can be seen at https://gitlab.winehq.org/rbernon/wine/-/commits/mr/shared-memories.
--
v18: user32: Use the desktop shared data for GetCursorPos().
include: Add ReadNoFence64 inline helpers.
server: Expose the desktop shared mapping to clients.
server: Add a sequence number to the shared data.
server: Move the cursor position and last change time to the shared data.
server: Create a desktop shared mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3103
Certain characters are considered by GetTextExtentExPointA/W/I to have no width, even if they have a non-zero width and a shape in the font. This MR attempts to bring Wine's implementation of these functions closer to native behavior.
One remaining difference is caused by GetGlyphIndicesA/W returning 0 instead of 0xffff for some characters, for some reason. This also affects the handling by GetTextExtentExPointA/W/I of affected characters. I have compared this with both Uniscribe and DWrite behavior and neither of them match this behavior, so it seems to be a peculiarity of these older functions.
Remaining differences are probably caused by differences in the fallback fonts used when a character is missing from the selected font. Notably, on my system there doesn't seem to be a fallback font for `\t`/`\n`/`\r` that marks those characters as zero-width, and since applications are likely to depend on the metrics of those characters (I know of at least one), I have opted to explicitly make them zero-width in this MR, even though that is technically not what Windows does.
--
v6: win32u: Handle glyphs that are marked by the font as zero-width in GetTextExtentExPoint[AWI].
win32u: Use maximum of (A, A+C, A+C+B) width for character fit test in GetTextExtentExPoint[AWI].
gdi32/tests: Add test for width of carriage return and line feed.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3876
On Mon Feb 19 09:21:14 2024 +0000, Rémi Bernon wrote:
> Fwiw this, and more specifically the test in
> 6b853a9354dfe62df838b255b4af33b423e74642, triggers an assertion in
> threadpool. It somehow doesn't make the test report a failure but I
> think it can cause some spurious failures like in
> https://gitlab.winehq.org/rbernon/wine/-/jobs/56730#L1220 which doesn't
> seem related to the H264 decoder changes from the corresponding MR.
I will take a look. Thanks.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3572#note_61850
--
v14: vkd3d-shader/dxil: Bitcast the result of image atomic ops if necessary.
vkd3d-shader/dxil: Emit an error for mesh, amplification and library shaders.
vkd3d-shader/dxil: Support SV_ShadingRate.
vkd3d-shader/dxil: Support the barycentrics register type.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/648
--
v13: vkd3d-shader/spirv: Support 64-bit UAV atomics.
vkd3d-shader/dxil: Implement DX intrinsic WaveQuadReadLaneAt.
vkd3d-shader/dxil: Implement DX intrinsic WavePrefixOp.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/648
--
v12: vkd3d-shader/dxil: Ignore "llvm.lifetime.*" intrinsics.
vkd3d-shader/dxil: Implement DX intrinsic AnnotateHandle.
vkd3d-shader/dxil: Implement DX intrinsic CreateHandleFromBinding.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/648
copy implementation of CopyFileExW into CopyFile2,
then implement CopyFileExW in terms of CopyFile2
should fix https://bugs.winehq.org/show_bug.cgi?id=55897, as Python does not use any new functionality nor the callback parameter from CopyFile2.
I have not written extensive documentation since the original function didn't seem to have any; I can do that if recommended.
I originally intended to implement the callback functionality in this MR as well, but realized that would be better as a follow-up.
--
v10: kernelbase: Implement CopyFile2()
https://gitlab.winehq.org/wine/wine/-/merge_requests/5020
copy implementation of CopyFileExW into CopyFile2,
then implement CopyFileExW in terms of CopyFile2
should fix https://bugs.winehq.org/show_bug.cgi?id=55897, as Python does not use any new functionality nor the callback parameter from CopyFile2.
I have not written extensive documentation since the original function didn't seem to have any; I can do that if recommended.
I originally intended to implement the callback functionality in this MR as well, but realized that would be better as a follow-up.
--
v9: implement CopyFile2
https://gitlab.winehq.org/wine/wine/-/merge_requests/5020
As per discussion in 606, plumbing constant buffer reflection through
vkd3d-shader requires interface design and API documentation for an interface
which is inherently quite specific to one format. Instead of wasting time on
this interface, just implement RDEF parsing in vkd3d-utils itself. If we change
our mind about this, we can always move the implementation to vkd3d-shader
anyway.
This does not copy the existing implementation from Wine, because:
* Wine does not validate offsets; adding this changes the parsing code
significantly;
* Wine incorrectly handles types, deduplicating them into an rbtree;
* Wine skips several fields which I have been able to find the purpose of.
The implementation is not that complex to begin with, so reimplementing it from
scratch is not much work.
--
v3: tests: Add more tests for resource and struct RDEF contents.
tests: Test constant and resource reflection via D3DReflect().
vkd3d-shader/tpf: Set the user-packed flag for sm5.0 resources as well.
vkd3d-shader/tpf: Write the component count as the column count for structs.
vkd3d-shader/tpf: Explicitly write the class and base type for non-numeric types.
vkd3d-shader/tpf: Do not write structs with no numeric fields into the RDEF.
vkd3d-shader/tpf: Do not write non-numeric struct fields into the RDEF.
vkd3d-shader/hlsl: Allocate register reservations for structs as well.
vkd3d-utils: Implement ID3D12ShaderReflectionType::GetMemberTypeByIndex().
vkd3d-utils: Implement ID3D12ShaderReflectionVariable::GetType().
vkd3d-utils: Implement ID3D12ShaderReflectionConstantBuffer::GetVariableByIndex().
vkd3d-utils: Parse the RD11 section.
vkd3d-utils: Implement ID3D12ShaderReflection::GetConstantBufferByIndex().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/626
On the client side, frame aperture may be included or omitted. This can be used to include or drop the frame padding, and the VideoProcessor MFT supports it.
On GStreamer side, we can only use the unpadded frame size in the caps, because this is how decoders work, and padding needs to be added as a property of the input/output video buffers. Then, frame size needs to be adjusted to be consistent between input and output, and any difference considered as extra padding to be added on one side or the other.
--
v2: winegstreamer: Respect video format padding for input buffers too.
winegstreamer: Exclude padding from wg_format video frame size.
winegstreamer: Use video info stride in buffer meta rather than videoflip.
winegstreamer: Use a new wg_video_buffer_pool class to add buffer meta.
winegstreamer: Update the output_format when stream format changes.
winegstreamer: Pass optional GstVideoInfo to read_transform_output_data.
winegstreamer: Split read_transform_output_data in two helpers.
winegstreamer: Introduce a new sample_needs_copy_buffer helper.
winegstreamer: Introduce a new sample_set_flags_from_buffer helper.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5055
Add a dummy track parser, that reads through MIDI tracks and events. To make sure we understand the file structure correctly, no actual tracks or events are generated.
Also add test cases to make sure we read through a MIDI file correctly.
This is skeleton of the actual MIDI parser. Pending on the merge of !4982
--
v15: dmime/tests: Improve error reporting from expect_track.
dmime: Read through a MIDI file.
dmime: Don't skip chunk for MIDI files.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5081
This is a preparation for supporting more xstate features in the contexts.
The remaining parts are:
- support arbitrary xstate in usr1_handler();
- support arbitrary xstate in the server contexts (probably transferring only the present part);
- support arbitrary xstate in context manipulation functions;
- enabling more xstates in system.c and in user shared data.
--
v4: ntdll: Don't hardcode xstate size in exception stack layout.
ntdll: Don't hardcode xstate size in syscall frame.
ntdll: Don't hardcode xstate feature mask.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4987
This is a preparation for supporting more xstate features in the contexts.
The remaining parts are:
- support arbitrary xstate in usr1_handler();
- support arbitrary xstate in the server contexts (probably transferring only the present part);
- support arbitrary xstate in context manipulation functions;
- enabling more xstates in system.c and in user shared data.
--
v3: ntdll: Don't hardcode xstate size in exception stack layout.
ntdll: Don't hardcode xstate size in syscall frame.
ntdll: Don't hardcode xstate feature mask.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4987
This allows to declare SRV buffers in the shader tests using `[buffer srv n]` blocks, and passing them to the different backends.
Also, 1/2 includes a missing bit required to parse `Buffer<>` types in the HLSL compiler.
This is a step towards supporting StructuredBuffer types in further patches.
--
v10: vkd3d-shader/hlsl: Parse Buffer types.
tests/shader-runner: Change probe directive syntax on shader_test files.
tests/shader-runner: Change resource declaration syntax on shader_test files.
tests/shader-runner: Support SRV buffers.
tests/shader-runner: Separate resource_type into type and dimension.
vkd3d-shader/hlsl: Record valid methods in object_methods[].
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/569
Based on [a patch](https://www.winehq.org/mailman3/hyperkitty/list/wine-devel@winehq.or… by Jinoh Kang (@iamahuman) from February 2022.
I removed the need for the event object and implemented fast paths for Linux.
On macOS 10.14+ `thread_get_register_pointer_values` is called on every thread of the process.
On Linux 4.14+ `membarrier(MEMBARRIER_CMD_GLOBAL_EXPEDITED, ...)` is used.
On x86 Linux <= 4.13 and on other platforms `madvise(..., MADV_DONTNEED)` is used, which sends IPIs to all cores causing them to do a memory barrier.
--
v11: ntdll: Add thread_get_register_pointer_values-based implementation of NtFlushProcessWriteBuffers.
ntdll: Add sys_membarrier-based implementation of NtFlushProcessWriteBuffers.
ntdll: Add MADV_DONTNEED-based implementation of NtFlushProcessWriteBuffers.
https://gitlab.winehq.org/wine/wine/-/merge_requests/741
This includes viewport and scissor rect (core in 1.0), and depth/stencil state
(comprised entirely of elements in EXT_extended_dynamic_state).
Further patches add other dynamic state extensions and make other parts of the
pipeline state dynamic.
Theoretically dynamic state should be an improvement, giving greater freedom to
the driver and hardware to optimize, and (perhaps more importantly) reducing the
time needed to look up and compile new pipeline states. In practice I haven't
observed a clear and measureable difference in either performance or stutter;
however, my testing has been extremely scarce.
Note: This patch series in particular introduces a new validation warning which
prints on almost every draw. The warning is described at [1]. Similar warnings
are triggered by future patches making other parts of the pipeline state dynamic.
An unfortunately internal Khronos discussion has determined that the warning is
undesirable, and there is currently motion to adjust the specification
accordingly; however, the validation layers have not yet been adjusted.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5078
Giovanni Mascellani (@giomasce) commented about libs/vkd3d-shader/dxil.c:
> [DX_LEGACY_F32TOF16 ] = {"i", "f", sm6_parser_emit_dx_unary},
> [DX_LOAD_INPUT ] = {"o", "ii8i", sm6_parser_emit_dx_load_input},
> [DX_LOG ] = {"g", "R", sm6_parser_emit_dx_unary},
> + [DX_RAW_BUFFER_LOAD ] = {"o", "Hii8i", sm6_parser_emit_dx_raw_buffer_load},
I just realized that the last parameter is never read. Is that intended? What is supposed to be there? Maybe you could add a comment in the code to explain this? Apparently something similar happens for `DX_LOAD_INPUT` too and maybe other DX opcodes.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/583#note_61454
The state table, as may have been described elsewhere, is not very friendly to
modern CPUs (due to its indirect calls). Additionally, interdependencies between
states are often more obscure (or at least harder to account for) than they
might be with a linear function.
Hence, we'd like to transform the table into a linear function, with "dirty"
state guarding explicitly spelled out. For the FFP tables, the approach I've
taken to achieve this is to gradually move states out of the table and into the
existing vp_enable() and fp_enable() functions, eventually making those
functions the aforementioned single linear functions.
--
v3: wined3d/arb: Move fragment program compilation from fragment_prog_arbfp() to arbfp_apply_draw_state().
wined3d: Pass a non-const wined3d_context pointer to the FFP *_apply_draw_state() methods.
wined3d: Pass a wined3d_state pointer to the vp_enable() and fp_enable() methods.
wined3d: Introduce a separate fp_disable() method.
wined3d: Introduce a separate vp_disable() method.
wined3d: Merge shader_load_constants() into shader_select().
https://gitlab.winehq.org/wine/wine/-/merge_requests/5053
--
v4: server: Enumerate desktop processes for rawinput messages.
server: Keep a list of threads connected to each desktop.
server: Send hardware input to the visible input desktop.
server: Keep track of the winstation input desktop.
win32u: Introduce new NtUserSwitchDesktop syscall stub.
user32/tests: Run in-desktop tests from a new thread.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5066
--
v3: vkd3d-shader/dxil: Implement DX intrinsic GetDimensions.
vkd3d-shader/dxil: Move the resource kind helper functions up.
vkd3d-shader/spirv: Introduce a sample info flag value for a scalar uint dst parameter.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/629
--
v2: vkd3d-shader/dxil: Implement DX intrinsic GetDimensions.
vkd3d-shader/dxil: Move the resource kind helper functions up.
vkd3d-shader/spirv: Introduce a sample info flag value for a scalar uint dst parameter.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/629
On the client side, frame aperture may be included or omitted. This can be used to include or drop the frame padding, and the VideoProcessor MFT supports it.
On GStreamer side, we can only use the unpadded frame size in the caps, because this is how decoders work, and padding needs to be added as a property of the input/output video buffers. Then, frame size needs to be adjusted to be consistent between input and output, and any difference considered as extra padding to be added on one side or the other.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5055
--
v11: vkd3d-shader/dxil: Implement DX intrinsic AnnotateHandle.
vkd3d-shader/dxil: Implement DX intrinsic CreateHandleFromBinding.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/648
--
v10: vkd3d-shader/dxil: Also set the result type for cast to minimum-precision.
vkd3d-shader/dxil: Emit a minimum 4-byte stride for minimum-precision TGSMs.
vkd3d-shader/dxil: Handle resource descriptor additional tag/value pairs.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/648
--
v3: server: Enumerate desktop processes for rawinput messages.
server: Keep a list of threads connected to each desktop.
server: Send hardware input to the visible input desktop.
server: Keep track of the winstation input desktop.
win32u: Introduce new NtUserSwitchDesktop syscall stub.
user32/tests: Run in-desktop tests from a new thread.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5066
This allows to declare SRV buffers in the shader tests using `[buffer srv n]` blocks, and passing them to the different backends.
Also, 1/2 includes a missing bit required to parse `Buffer<>` types in the HLSL compiler.
This is a step towards supporting StructuredBuffer types in further patches.
--
v9: vkd3d-shader/hlsl: Parse Buffer types.
tests/shader-runner: Change probe directive syntax on shader_test files.
tests/shader-runner: Change resource declaration syntax on shader_test files.
tests/shader-runner: Support SRV buffers.
tests/shader-runner: Separate resource_type into type and dimension.
vkd3d-shader/hlsl: Record valid methods in object_methods[].
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/569