This is part XI of cmd engine rewrite.
This serie moves the IF and FOR instruction into the new CMD_NODE structure.
I'm fully aware it's a large change (commit #1).
It touches simultaneously at several components:
- lexer is no longer trying to handle nested instructions; this is now
handled over to parser which will take care of it in a recursive
fashion
- moving the IF and FOR instructions into CMD_NODE; this impacts the
parser and the execution part
These three parts are so tightly linked that I can't figure out a simple
way to split first commit in smaller bits.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5942
--
v4: d3d11/tests: Test UpdateSubresource() for NV12 textures.
d3d11/tests: Test NV12 textures without render target.
d3d11/tests: Do not check pitches.
d3d11/tests: Check for NV12 texture support before testing them.
d3d11/tests: Check the result of compiling HLSL shaders.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5818
This is another step towards getting render states out of wined3d_state.
The idea here is similar to the "push constant buffers" used for d3d8/9 flat
constants, and reuses the same infrastructure. That is, we pack all of the
constants directly into a wined3d_buffer which is bound directly to the
wined3d_state as a normal constant buffer. For SPIR-V this buffer is placed in
the GPU, and the shader can simply access it directly, with no renderer-specific
changes needed other than to determine the buffer's location.
Currently this buffer is still stored on the CPU for GLSL, and the contents are
pulled back from the sysmem resource pointer, instead of being pulled from
state->render_states.
Eventually, at least for Vulkan, the idea will be to write a FFP replacement
shader which takes structured data (which, given the constraints of SPIR-V, is
broadly necessary; we cannot simply upload individual named uniforms as we can
with GLSL). In fact this will take the form of an HLSL shader compiled to Shader
Model 2 bytecode. This allows us to, once again, reuse pretty much all of the
existing infrastructure and avoid writing more backend-specific code, and has
the effect that this FFP replacement works not only with SPIR-V but also with
GLSL, allowing us to eventually remove the existing GLSL FFP pipeline, and
enabling me to develop the HLSL FFP pipeline mainly using the GL renderer [which
is useful since the Vulkan renderer is still missing a few other features].
The full branch is available at [1], and passes all tests when using the GL
renderer.
[1] https://gitlab.winehq.org/zfigura/wine/-/tree/himavant8
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5815
I'm currently, very unsuccessfully, tracking down a crash on the unix side that only happens on Gitlab, and although I'm still unable to reproduce it, it then would be useful to have gdb to attach on segfault when I will.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5367
GStreamer uses _SC_NPROCESSORS_CONF to determine 'max-threads'. On the
Steam Deck, this is configured to be 16 (which is double its number
of logical cores).
_SC_NPROCESSORS_CONF also disregards a process's CPU affinity, thus it
can create more threads than is useful, which ultimately wastes memory
resources.
Using affinity to set 'max-threads' addresses both these problems.
--
v6: winegstreamer: Set MAX_THREADS to 4 for i386.
winegstreamer: Use thread_count to determine 'max-threads' value.
winegstreamer: Use process affinity to calculate thread_count.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5923
Rémi Bernon (@rbernon) commented about dlls/winegstreamer/unixlib.c:
> return STATUS_UNSUCCESSFUL;
> }
>
> + if (SUCCEEDED(NtQueryInformationProcess( GetCurrentProcess(),
> + ProcessAffinityMask, &process_mask, sizeof(process_mask), NULL )))
> + thread_count = popcount(process_mask);
> + else
> + thread_count = 0;
```suggestion:-4+0
if (!NtQueryInformationProcess(GetCurrentProcess(),
ProcessAffinityMask, &process_mask, sizeof(process_mask), NULL)))
thread_count = popcount(process_mask);
else
thread_count = 0;
```
SUCCEEDED is for HRESULT, Nt API returns NTSTATUS and we often just check that it's 0. Also note the style fixes (no space in paren here, continuation indent is 8 spaces).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5923#note_74517