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