Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1786 commits
Select commit Hold shift + click to select a range
2690766
winegstreamer/media-converter: Split videoconv event caps push to a s…
rbernon Mar 5, 2024
f2153ef
winegstreamer/media-converter: Open the blank file on videoconv state…
rbernon Mar 5, 2024
31e0e18
winegstreamer/media-converter: Use an enum for video conv state flags.
rbernon Mar 5, 2024
a64f65e
winegstreamer/media-converter: Wrap around the blank video if shorter…
rbernon Mar 29, 2024
1df0832
winegstreamer/media-converter: Use gst_util_uint64_scale_round to rou…
rbernon Mar 29, 2024
33bd40f
winegstreamer/media-converter: Implement support for push mode in vid…
rbernon Mar 29, 2024
2d62129
winegstreamer/media-converter: Wrap videoconv and a demuxer in a new …
rbernon Mar 5, 2024
06ecc3c
winegstreamer/media-converter: Automatically add an audio decoder to …
rbernon Mar 5, 2024
a0ef16a
HACK: mfplat: Enable new media source by default for more games.
rbernon Apr 12, 2024
e06ba03
winegstreamer: Destroy wg_transform in video_decoder/transform_SetInp…
Apr 4, 2024
79ad8f2
Revert "winegstreamer: HACK: Disable MF_SA_D3D11_AWARE for The Finals."
Apr 18, 2024
a506607
Revert "HACK: mfplat: Enable new media source by default for more gam…
ivyl May 3, 2024
0c3679b
Revert "win32u: Only send mouse input in ReleaseCapture() when a wind…
ivyl May 3, 2024
bce4a14
Revert "user32/tests: Add some ReleaseCapture() tests."
ivyl May 3, 2024
c07b7c9
HACK: mfplat: Enable the new media source for Twisted Sails
alasky17 May 9, 2024
ad0f0d7
win32u: Disable undecorated windows hack for Halo Infinite.
May 15, 2024
dda4f1f
winex11.drv: HACK: Reduce SM_CYCAPTION on low resolutions.
May 15, 2024
a58af64
HACK: mfplat: Enable the new media source for Planet of the Apes: Last
alasky17 May 16, 2024
95a7181
winegstreamer: Respond to the URI query.
Mar 29, 2024
7b5e0a0
winegstreamer: Fix wow64 support for wg_parser_connect.
May 1, 2024
5b2681e
winegstreamer: Log query after setting the URI.
May 1, 2024
4c73233
winegstreamer: Pass filename to wg_parser when available.
May 10, 2024
bcb3f3f
winegstreamer: Don't send stream_start in PULL mode.
May 10, 2024
6bcc14d
mfmediaengine: Implement SVR.
Apr 11, 2024
e4ffb3e
wine.inf: Add Explorer\Advanced registry key.
May 21, 2024
e9103cd
pdh: Add stub for PdhGetFormattedCounterArray().
May 22, 2024
6e93776
win32u: HACK: Hide a window for Syberia.
May 24, 2024
1b7bd6b
mf: Implement audio capture device enumeration in MFEnumDeviceSources().
May 25, 2024
01a2e47
mfmediaengine: Request second sample if we only have one.
May 27, 2024
ec5518a
ntdll: Provide fallback values for some DMI table entries.
Jun 3, 2024
b5015cc
windowscodecs: Add conversions from PixelFormat32bppBGRA->PixelFormat…
Czahrien Jun 1, 2024
838b726
kernel32/tests: Test error code when FindFirstFileA uses file as dire…
May 28, 2024
c5d6ce3
ntdll/tests: Test error code when NtOpenFile uses file as directory.
May 29, 2024
db54595
server: Don't always return STATUS_OBJECT_NAME_INVALID on ENOTDIR.
May 29, 2024
bc4770b
autogen.sh: Run tools/make_specfiles.
jhollingworth May 31, 2024
294ee1c
winex11.drv: Always call resize_vk_surfaces() from sync_client_positi…
May 24, 2024
e2d50b4
winex11.drv: Detach offscreen Vulkan surfaces.
May 24, 2024
3d58245
winex11.drv: Invalidate Vulkan surfaces when detaching.
May 24, 2024
2b58d28
amd_ags_x64: Check for NULL context in agsDriverExtensionsDX11_Init().
Jun 12, 2024
ed55731
fshack: winex11.drv: Enable GL fshack blitting to GL_FRONT for Arcanu…
Jun 13, 2024
9dff209
winex11.drv: fshack: Ensure 60Hz display mode otherwise matching curr…
Jun 14, 2024
29a4a9d
ntdll: Treat XDG_SESSION_TYPE as special env variable.
Jun 12, 2024
bb85620
mmdevai: Store device_name as a pointer in struct audio_client.
Jun 18, 2024
bdfcf4d
mmdevapi: Stub AUDCLNT_STREAMFLAGS_LOOPBACK support.
Jun 17, 2024
4b9d3b0
winepulse.drv: Factor out wait_pa_operation_complete().
Jun 18, 2024
1370c97
winepulse.drv: Implement pulse_get_loopback_capture_device().
Jun 17, 2024
6cbeede
dcomp: HACK: Try to workaround Chromium race fixed by Chromium commit…
Jun 19, 2024
49cf8de
kernel32/tests: Add some tests for WriteProcessMemory/NtWriteVirtualM…
julliard Jun 18, 2024
fa4060e
kernelbase: Make memory writable in WriteProcessMemory if necessary.
julliard Jun 18, 2024
65aefde
kernelbase: Send cross process notifications in WriteProcessMemory on…
julliard Jun 18, 2024
bbfd144
kernelbase: Send cross process notifications in FlushInstructionCache…
julliard Jun 18, 2024
c9092f9
kernelbase: Don't use WRITECOPY protection on anonymous mappings.
julliard Jun 19, 2024
3790b64
kernelbase: Don't call NtFlushInstructionCache() in FlushInstructionC…
Jun 21, 2024
be48416
kernel32: Get rid of an extra wrapper in GetProcAddress().
Jun 26, 2024
e27d2e3
Revert "kernel32: Get rid of an extra wrapper in GetProcAddress()."
Jun 27, 2024
0d80ca9
kernel32: Implement the GetProcAddress wrapper on ARM64EC.
julliard Jun 7, 2024
030fd56
winegstreamer: Merge audio_mpeg1 into audio field.
ziqingh Apr 2, 2024
22e2b9c
winegstreamer: Merge audio_mpeg4 into audio field.
ziqingh Apr 2, 2024
c986a5c
winegstreamer: Merge audio_wma into audio field.
ziqingh Apr 2, 2024
ccd0a9b
winegstreamer: Merge audio_encoded into audio field.
ziqingh Apr 26, 2024
1ad28e1
winegstreamer: Merge video_cinepak into video field.
ziqingh Apr 3, 2024
0bcec7f
winegstreamer: Merge video_h264 into video field.
ziqingh Apr 3, 2024
6595e09
winegstreamer: Merge video_wmv into video field.
ziqingh Apr 3, 2024
adfb0f8
winegstreamer: Merge video_indeo into video field.
ziqingh Apr 3, 2024
fe20115
winegstreamer: Merge video_mpeg1 into video field.
ziqingh Apr 3, 2024
4a35c6c
winegstreamer: Merge video_encoded into video field.
ziqingh Apr 26, 2024
9dfbe96
winegstreamer: Complete H264 current output type reported attributes.
rbernon Feb 17, 2024
fdb077f
winegstreamer: Set other aperture attributes on video media types.
rbernon Apr 26, 2024
f39355f
winegstreamer: Always set aperture attributes on video decoder output…
rbernon Apr 26, 2024
41504ae
winegstreamer: Introduce a new wg_transform_create_quartz helper.
rbernon Mar 5, 2024
353b048
winegstreamer: Implement mf_media_type_to_wg_format_video_wmv.
ziqingh Apr 12, 2024
9655bce
winegstreamer/video_decoder: Set input/output infos in h264_decoder_c…
ziqingh Apr 12, 2024
5edae60
winegstreamer/video_decoder: Change decoder attributes.
ziqingh Apr 24, 2024
ed5324c
winegstreamer/video_decoder: Add wg_transform_attrs member.
ziqingh Apr 15, 2024
1430f48
winegstreamer/video_decoder: Support aggregation.
ziqingh Apr 17, 2024
4d35d82
mfplat/mediatype: Implement MFCreateMediaTypeFromRepresentation.
rbernon Mar 5, 2024
582966e
winegstreamer/video_decoder: Use video_decoder to implement wmv decoder.
ziqingh Apr 11, 2024
2693413
winegstreamer/video_decoder: Make output_plane_align specific to h264.
ziqingh May 8, 2024
3d4ca5d
winegstreamer/media-converter: Expose untranscoded stream codec format.
ziqingh Apr 29, 2024
f4765df
winegstreamer/wg_parser: HACK: Return untranscoded codec format for t…
ziqingh May 7, 2024
121f355
winegstreamer/video_decoder: HACK: Create wmv decoder even if plugins…
ziqingh Apr 30, 2024
c9018ac
winegstreamer/video_decoder: HACK: Try use I420 input if failed to cr…
ziqingh Apr 30, 2024
b67621e
qasf/tests: Add more tests for dmo_wrapper_sink_Receive.
ziqingh May 16, 2024
7777fcb
qasf/dmowrapper: Introduce get_output_samples.
ziqingh May 16, 2024
c32a7de
qasf/dmowrapper: Introduce release_output_samples.
ziqingh Jun 4, 2024
4b0929b
qasf/dmowrapper: Return failure in dmo_wrapper_sink_Receive if sample…
ziqingh Jun 4, 2024
284b612
qasf/dmowrapper: Allocate output samples before calling ProcessInput().
ziqingh Jun 5, 2024
5be9642
qasf/dmowrapper: Return VFW_E_WRONG_STATE in dmo_wrapper_sink_Receive.
ziqingh May 16, 2024
0fdf705
qasf/dmowrapper: Sync Stop() and Receive() for dmo wrapper filter.
ziqingh May 24, 2024
a136efe
ntdll: Report the space completely outside of reserved areas as alloc…
Jun 28, 2024
4180fe7
ntdll: Implement HashLinks field in LDR module data.
mmueller2012 Apr 3, 2017
30bec51
winegstreamer: Use MFCalculateImageSize to compute output info size.
rbernon Feb 20, 2024
bccc16a
mscoree: Update Wine Mono to 9.2.0.
madewokherd Jun 26, 2024
373b1c7
fixup! HACK: quartz: Return the decodebin filter on WMVideo Decoder D…
Jul 1, 2024
179a7cd
amend! HACK: quartz: Return the decodebin filter on WMVideo Decoder D…
Jul 1, 2024
d34b85d
fixup! HACK: winegstreamer/quartz_parser: Format the decodebin output…
Jul 1, 2024
8be2402
amend! HACK: winegstreamer/quartz_parser: Format the decodebin output…
Jul 1, 2024
7d43ebf
psapi/tests: Add tests for QueryWorkingSetEx() with multiple addresses.
Jun 21, 2024
fed7ae3
ntdll: Validate length in get_working_set_ex().
Jun 21, 2024
9288470
ntdll: Factor OS-specific parts out of get_working_set_ex().
Jun 20, 2024
8b53ed7
ntdll: Iterate views instead of requested addresses in get_working_se…
Jun 20, 2024
9286b93
ntdll: Limit vprot scan range to the needed interval in get_working_s…
Jun 20, 2024
f0e5027
ntdll: Fill range of output in fill_working_set_info().
Jun 20, 2024
f4dd2ce
ntdll: Buffer pagemap reads in fill_working_set_info().
Jun 20, 2024
3b3c57a
kernelbase: HACK: Force disable direct composition for Super.
Jul 2, 2024
a361a52
winex11.drv: Sync window position when maximizing window on Gamescope.
Jul 2, 2024
eb5fcb3
winhttp/tests: Add test for trailing spaces in reply header.
Jul 2, 2024
647f62e
winhttp: Construct raw header from the parse result in read_reply().
Jul 2, 2024
9644224
winhttp: Skip trailing spaces in reply header names.
Jul 2, 2024
cb2123f
winegstreamer: Use process affinity to calculate thread_count.
Jun 26, 2024
8ea9829
winegstreamer: Use thread_count to determine 'max-threads' value.
Jun 26, 2024
f02be02
winegstreamer: Set 'max_threads' to 4 for 32-bit processors.
Jun 26, 2024
d9544ea
Revert "HACK: proton: server: Avoid relocating steamclient DLLs."
Jul 4, 2024
dd7595c
HACK: ntdll: Fixup OptionalHeader.ImageBase back in steamclient.dll.
Jul 4, 2024
b7662b8
gdi32/tests: Add test for Regular TTF with heavy weight.
Jul 5, 2024
3046fb5
win32u: Always set weight from OS/2 header in freetype_set_outline_te…
Jul 5, 2024
5becb21
win32u: Do not embolden heavy weighted fonts.
Jul 5, 2024
0cd0b03
qcap/tests: Add a test for simultaneous video capture usage.
Jul 8, 2024
09a6f2a
qcap: Delay setting v4l device format until stream initialization.
Jul 8, 2024
70e256d
mmdevapi: Support getting IAudioClockAdjustment interface.
Etaash-mathamsetty Jul 5, 2024
670b449
ntdll/tests: Add tests for opening some objects with zero access.
Jul 10, 2024
ae5d93f
ntoskrnl.exe: Open directory object with nonzero access in test_perma…
Jul 10, 2024
d6d9d72
server: Do not allow zero access mask when opening some objects.
Jul 10, 2024
0624f10
server: Skip inaccessible threads in (get_next_thread).
Jul 10, 2024
671adfe
mshtml: Make sure we aren't detached before setting interactive ready…
g-insn Jul 12, 2024
c964d1e
mshtml: Zero output iface on failure in get_document_node().
Jul 12, 2024
25e9f67
server: Renamed KEY_WOWSHARE constant to KEY_WOWREFLECT.
Jul 12, 2024
82afff1
server: Force WoW sharing on HKCU/Software key.
Jul 12, 2024
1185616
kernelbase: Factor out get_key_name().
Jul 12, 2024
3ef01cf
kernelbase: Force WoW sharing on HKCU/Software key.
Jul 12, 2024
a12dfa2
advapi32/tests: Add tests for WoW shared HKCU/Software key.
Jul 12, 2024
d6f77af
mshtml/tests: Test for IMarkupServices.
tati-frog Dec 10, 2022
5f6fce2
mshtml: Implement MarkupServices_CreateMarkupContainer.
tati-frog Dec 19, 2022
2e71fe5
mshtml: Implement MarkupServices_ParseString.
tati-frog Dec 20, 2022
c0a5c4b
dxdiagn: Fill szHardwareId for sound render devices.
Jul 16, 2024
8538b50
fixup! fshack: winex11.drv: Interpolate image in x11drv_surface_flush…
Jul 17, 2024
48cd14f
winegstreamer: Remove 'au' alignment for h264.
rbernon Jul 18, 2024
5ffe4f3
winegstreamer: Prepend a h264parse element before decoder.
rbernon Jul 19, 2024
dbd001c
winebus: Ignore non-Steam virtual devices over evdev backend.
rbernon Jul 19, 2024
e417910
ntdll: Use the correct io callback when writing to a socket.
ivyl Jul 18, 2024
9326da9
Revert "win32u: Add support for raising EVENT_OBJECT_DESTROY events o…
madewokherd Jul 19, 2024
24d3d22
win32u: Implement EVENT_OBJECT_DESTROY.
madewokherd Jun 14, 2024
93933f2
Revert "mmdevapi: Support getting IAudioClockAdjustment interface."
ivyl Jul 19, 2024
9015051
Revert "win32u: Implement EVENT_OBJECT_STATECHANGE."
madewokherd Jul 20, 2024
6e3317b
win32u: Implement EVENT_OBJECT_STATECHANGE for WS_DISABLED.
madewokherd Jul 17, 2024
34d8b36
mf: Retry PROCESSINPUTNOTIFY if TRANSFORM_TYPE_NOT_SET is returned.
Jul 11, 2024
15bc651
gdiplus: Support string alignment in GdipMeasureString.
tati-frog Jul 17, 2024
0783613
fixup! win32u: Implement winevents for scrollbars.
madewokherd Jul 22, 2024
b8324e2
win32u: Implement EVENT_OBJECT_VALUECHANGE for scrollbars.
madewokherd Jul 19, 2024
c52dd9c
d3dx9/tests: Mark failing tests as todo.
julliard Mar 7, 2024
32d1449
d3dx9/tests: Add more tests for misaligned compressed surface loading.
Conmanx360 Mar 6, 2024
8e8b540
d3dx9: Use base image pointer when decompressing source image.
Conmanx360 Feb 29, 2024
7bb9f70
d3dx9: Split D3DXLoadSurfaceFromMemory functionality into a separate …
Conmanx360 Feb 27, 2024
d1ec323
d3dx9: Split off image decompression into a helper function.
Conmanx360 Feb 29, 2024
a265ad7
d3dx9: Preserve the contents of unaligned compressed destination surf…
Conmanx360 Feb 29, 2024
7f4c72d
d3dx9/tests: Remove xfile dumping functionality.
cjacek Dec 9, 2023
886b4a6
d3dx9/tests: Add a test for negative values in the source rectangle p…
Conmanx360 Apr 25, 2024
a48305f
d3dx9/tests: Add a new compressed surface loading test.
Conmanx360 Apr 25, 2024
b98308c
d3dx9: Only do direct copies of full blocks for compressed formats.
Conmanx360 Apr 25, 2024
7e73446
d3dx9: Fix destination rectangles passed from D3DXLoadSurfaceFromMemo…
Conmanx360 Apr 25, 2024
37d6786
d3dx9: Refactor WIC GUID to D3DXIMAGE_FILEFORMAT conversion code.
Conmanx360 Apr 26, 2024
348bb43
d3dx9: Refactor WIC image info retrieval code in D3DXGetImageInfoFrom…
Conmanx360 Apr 26, 2024
ed0233a
d3dx9: Introduce d3dx_image structure for use in D3DXGetImageInfoFrom…
Conmanx360 May 24, 2024
d5b54c1
d3dx9: Use d3dx_image structure in D3DXLoadSurfaceFromFileInMemory().
Conmanx360 May 26, 2024
b5827d2
d3dx9: Introduce d3dx_load_pixels_from_pixels() helper function.
Conmanx360 May 26, 2024
92cac9d
d3dx9: Use d3dx_pixels structure in decompression helper function.
Conmanx360 May 26, 2024
d6a37ec
d3dx9: Use d3dx_load_pixels_from_pixels() in D3DXLoadVolumeFromMemory().
Conmanx360 May 30, 2024
8ef9688
d3dx9/tests: Add tests for the source info argument of D3DXCreateText…
Conmanx360 Jun 3, 2024
7201daf
d3dx9/tests: Add more tests for loading files with multiple mip level…
Conmanx360 Jun 3, 2024
1aab540
d3dx9: Refactor texture creation and cleanup in D3DXCreateTextureFrom…
Conmanx360 Jun 3, 2024
cd3f634
d3dx9: Use d3dx_image structure inside of D3DXCreateTextureFromFileIn…
Conmanx360 Jun 3, 2024
fc54d18
d3dx9: Use struct volume inside of struct d3dx_image for storing dime…
Conmanx360 Jun 5, 2024
9451772
d3dx9: Add support for specifying a starting mip level when initializ…
Conmanx360 Jun 5, 2024
6c1fba0
d3dx9: Cleanup texture value argument handling in D3DXCreateTextureFr…
Conmanx360 Jun 5, 2024
e57c03e
d3dx9: Add support for specifying which mip level to get pixel data f…
Conmanx360 Jun 5, 2024
ff7d78e
d3dx9: Use the correct interfaces for some COM calls.
Jun 22, 2024
69017d4
d3dx9/tests: Define COBJMACROS.
Jun 22, 2024
0a52817
d3dx9/tests: Move the images used across multiple test files into a s…
Conmanx360 Jun 7, 2024
c1d4d48
d3dx9/tests: Add more D3DXLoadVolumeFromFileInMemory() tests.
Conmanx360 Jun 19, 2024
82ab741
d3dx9: Use shared code in D3DXLoadVolumeFromFileInMemory().
Conmanx360 Jun 19, 2024
b3f1852
d3dx9/tests: Add more tests for D3DXCreateVolumeTextureFromFileInMemo…
Conmanx360 Jun 19, 2024
38bef47
d3dx9: Refactor texture creation and cleanup in D3DXCreateVolumeTextu…
Conmanx360 Jun 19, 2024
b87745e
d3dx9: Cleanup texture value argument handling in D3DXCreateVolumeTex…
Conmanx360 Jun 19, 2024
55fabd8
d3dx9: Use d3dx_image structure inside of D3DXCreateVolumeTextureFrom…
Conmanx360 Jun 19, 2024
5e3300b
d3dx9: Add support for mipmap generation to D3DXCreateVolumeTextureFr…
Conmanx360 Jun 19, 2024
461c4b3
d3dx9: Remove superflous nullcheck (coverity).
DarkShadow44 Jun 30, 2024
845860c
d3dx9/tests: Add tests for DDS skip mip level bits.
Conmanx360 Jun 30, 2024
12a85f1
d3dx9: Apply the DDS skip mip level bitmask.
Conmanx360 Jul 1, 2024
b7bde99
d3dx9/tests: Add more DDS header tests for volume texture files.
Conmanx360 Jul 1, 2024
fca2b24
d3dx9: Check the proper flag for DDS files representing a volume text…
Conmanx360 Jul 1, 2024
6cc7bf9
d3dx9/tests: Add more DDS header tests for cube texture files.
Conmanx360 Jul 1, 2024
19f257a
d3dx9: Return failure if a cubemap DDS file does not contain all faces.
Conmanx360 Jul 1, 2024
594ebba
ntdll: Partially support querying directory entries for '\\Device\\Na…
Jul 24, 2024
6ea26ca
fixup! HACK: ntdll: Fixup OptionalHeader.ImageBase back in steamclien…
Jul 25, 2024
d501552
fixup! HACK: winegstreamer: Detect h264 use and create a tag file.
ivyl Jul 26, 2024
8e54ab0
fixup! winegstreamer: Integrate media-converter to winegstreamer.
ivyl Jul 26, 2024
39c5927
gdi32/tests: Add test for text background fill extends with ETO_OPAQUE.
Jul 23, 2024
4b1ca0a
win32u: Account for overhang in background fill in NtGdiExtTextOutW().
Jul 23, 2024
4a22a2a
kernelbase: Implement CopyFile2().
kartva Feb 17, 2024
8aa303a
kernelbase: HACK: Force disable direct composition for Banyu Lintar A…
Jul 30, 2024
e1f0874
nsiproxy.sys: Only get owning pid when needed in udp_endpoint_enumera…
Aug 1, 2024
09d34e6
mmdevapi: Return stub interface from ASM_GetSessionEnumerator().
Aug 1, 2024
aea0961
mmdevapi: Add implementation for IAudioSessionEnumerator.
Aug 1, 2024
84f51b6
mmdevapi/tests: Add test for IAudioSessionEnumerator.
Aug 1, 2024
1fe68bf
win32u: Update Nvidia's DriverVersion to 999.99.
ivyl May 23, 2024
aea0bc9
ntdll: Stub NtQuerySystemInformation[Ex]( SystemProcessorIdleCycleTim…
Aug 5, 2024
73bdebc
kernel32: Implement QueryIdleProcessorCycleTime[Ex]().
Aug 5, 2024
4a4adbc
ntdll: Implement NtQuerySystemInformationEx( SystemProcessorIdleCycle…
Aug 6, 2024
a9a7b0b
winegstreamer/video_decoder: HACK: Accept unavailable input types for…
ziqingh Aug 6, 2024
9e9501c
mmdevapi: Unlock session in create_session_enumerator().
Aug 7, 2024
591289a
shell32: Register ShellItem coclass.
Aug 13, 2024
6dda500
include: Add some shell copy engine related constants.
Aug 13, 2024
48e7b6e
shell32/tests: Add tests for IFileOperation_MoveItem.
Aug 14, 2024
fa8c6b4
shell32/tests: Add tests for IFileOperation_MoveItem notifications.
Aug 13, 2024
bbb63cc
shell32: Implement file_operation_[Un]Advise().
Aug 13, 2024
9c940cf
shell32: Store operation requested in file_operation_MoveItem().
Aug 13, 2024
20c6a26
shell32: Partially implement MoveItem file operation execution.
Aug 14, 2024
130bd9c
shell32: Implement directory merge for MoveItem.
Aug 13, 2024
dcc9abe
shell32: Support sink notifications for file MoveItem operation.
Aug 14, 2024
9ab90dd
kernelbase: Better match Windows behaviour in PathCchStripToRoot().
Aug 19, 2024
7d25d23
kernelbase: Better match Windows behaviour in PathCchRemoveFileSpec().
Aug 19, 2024
a9a30d4
kernelbase: Better match Windows behaviour in PathCchIsRoot().
Aug 20, 2024
d889a8a
kernelbase: Reimplement PathIsRootA/W() on top of PathCchIsRoot().
Aug 16, 2024
0731d02
kernelbase: Reimplement PathStripToRootA/W() on top of PathCchStripTo…
Aug 20, 2024
e7375ef
kernelbase: Remimplement PathRemoveFileSpecA/W().
Aug 16, 2024
638b9b7
kernelbase/tests: Add more tests for some file manipulation functions.
Aug 20, 2024
93e7daf
win32u: Disable undecorated windows hack for Dog Brew.
Aug 20, 2024
d787efc
winegstreamer/media-converter: Log error if failed to pull data from …
ziqingh Aug 7, 2024
f7bcf41
winegstreamer/quartz_parser: Handle 0 size in read_thread.
ziqingh Aug 7, 2024
e977678
ntdll: Add ftracelog debug channel enabling dumping logs to ftrace.
Aug 21, 2024
d1ce1c2
ws2_32/tests: Test UDP broadcast without SO_BROADCAST.
Aug 22, 2024
94c64a0
server: Support IPV4 UDP broadcast on connected socket without SO_BRO…
Aug 22, 2024
a9096cb
winex11.drv: Disable fshack when virtual desktop is on.
zzhiyi Aug 19, 2024
4a6682d
fixup! win32u: Store desktop flags in shared memory and use that in i…
zzhiyi Aug 21, 2024
8ea9886
winex11.drv: Delete unused parameters for X11DRV_init_desktop().
zzhiyi Aug 22, 2024
54c7976
winex11.drv: Properly check if the desktop window is fullscreen on mu…
zzhiyi Aug 22, 2024
b3e709e
dxcore: Prefer native.
Aug 28, 2024
a598455
windows.gaming.input: Zero 'value' in GetCurrentReading until first s…
Aug 28, 2024
62295ac
concrt140: Add stub for _Cancellation_beacon::_Confirm_cancel().
infyquest Jan 17, 2024
ca71d93
concrt140: Don't forward _IsSynchronouslyBlocked functions.
Aug 29, 2024
bddbd2b
sxs: Skip file copy when assembly is already installed.
Jan 12, 2024
5abb07c
win32u: Don't check ansi_cp when adding fallback child font.
Jul 10, 2024
51a77ac
win32u: Include Microsoft Sans Serif as a child font.
Jul 10, 2024
5394152
win32u: Include Tahoma and its linked fonts in child font list.
Jul 10, 2024
c5d438e
uxtheme: Define a constant for default transparent colour.
Aug 29, 2024
e401d9a
uxtheme: Try to avoid TransparentBlt() when possible.
Aug 29, 2024
3023d21
fixup! HACK: proton: wine.inf: Add native,builtin overrides for msvcr…
ivyl Aug 30, 2024
59a1fbc
qcap: Implement Inifinite Pin Tee.
Jun 19, 2023
68775b3
Revert "HACK: qcap: Return failure from PPB_Load() for UNO."
Aug 30, 2024
7d0b6c2
Add support for Thrustmaster Hotas X axis order
Greviste Aug 31, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ F: dlls/winegstreamer/mfplat.c
F: dlls/winegstreamer/resampler.c
F: dlls/winegstreamer/video_decoder.c
F: dlls/winegstreamer/video_processor.c
F: dlls/winegstreamer/wg_source.c
F: dlls/winegstreamer/wg_sample.c
F: dlls/winegstreamer/wg_transform.c
F: dlls/winegstreamer/wma_decoder.c
Expand Down
196 changes: 196 additions & 0 deletions README.esync
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
This is eventfd-based synchronization, or 'esync' for short. Turn it on with
WINEESYNC=1; debug it with +esync.

== BUGS AND LIMITATIONS ==

Please let me know if you find any bugs. If you can, also attach a log with
+seh,+pid,+esync,+server,+timestamp.

If you get something like "eventfd: Too many open files" and then things start
crashing, you've probably run out of file descriptors. esync creates one
eventfd descriptor for each synchronization object, and some games may use a
large number of these. Linux by default limits a process to 4096 file
descriptors, which probably was reasonable back in the nineties but isn't
really anymore. (Fortunately Debian and derivatives [Ubuntu, Mint] already
have a reasonable limit.) To raise the limit you'll want to edit
/etc/security/limits.conf and add a line like

* hard nofile 1048576

then restart your session.

On distributions using systemd, the settings in `/etc/security/limits.conf`
will be overridden by systemd's own settings. If you run `ulimit -Hn` and it
returns a lower number than the one you've previously set, then you can set

DefaultLimitNOFILE=1024:1048576

in both `/etc/systemd/system.conf` and `/etc/systemd/user.conf`. You can then
execute `sudo systemctl daemon-reexec` and restart your session. Check again
with `ulimit -Hn` that the limit is correct.

Also note that if the wineserver has esync active, all clients also must, and
vice versa. Otherwise things will probably crash quite badly.

== EXPLANATION ==

The aim is to execute all synchronization operations in "user-space", that is,
without going through wineserver. We do this using Linux's eventfd
facility. The main impetus to using eventfd is so that we can poll multiple
objects at once; in particular we can't do this with futexes, or pthread
semaphores, or the like. The only way I know of to wait on any of multiple
objects is to use select/poll/epoll to wait on multiple fds, and eventfd gives
us those fds in a quite usable way.

Whenever a semaphore, event, or mutex is created, we have the server, instead
of creating a traditional server-side event/semaphore/mutex, instead create an
'esync' primitive. These live in esync.c and are very slim objects; in fact,
they don't even know what type of primitive they are. The server is involved
at all because we still need a way of creating named objects, passing handles
to another process, etc.

The server creates an eventfd file descriptor with the requested parameters
and passes it back to ntdll. ntdll creates an object of the appropriate type,
then caches it in a table. This table is copied almost wholesale from the fd
cache code in server.c.

Specific operations follow quite straightforwardly from eventfd:

* To release an object, or set an event, we simply write() to it.
* An object is signalled if read() succeeds on it. Notably, we create all
eventfd descriptors with O_NONBLOCK, so that we can atomically check if an
object is signalled and grab it if it is. This also lets us reset events.
* For objects whose state should not be reset upon waiting—e.g. manual-reset
events—we simply check for the POLLIN flag instead of reading.
* Semaphores are handled by the EFD_SEMAPHORE flag. This matches up quite well
(although with some difficulties; see below).
* Mutexes store their owner thread locally. This isn't reliable information if
a different process's thread owns the mutex, but this doesn't matter—a
thread should only care whether it owns the mutex, so it knows whether to
try waiting on it or simply to increase the recursion count.

The interesting part about esync is that (almost) all waits happen in ntdll,
including those on server-bound objects. The idea here is that on the server
side, for any waitable object, we create an eventfd file descriptor (not an
esync primitive), and then pass it to ntdll if the program tries to wait on
it. These are cached too, so only the first wait will require a round trip to
the server. Then the server signals the file descriptor as appropriate, and
thereby wakes up the client. So far this is implemented for processes,
threads, message queues (difficult; see below), and device managers (necessary
for drivers to work). All of these are necessarily server-bound, so we
wouldn't really gain anything by signalling on the client side instead. Of
course, except possibly for message queues, it's not likely that any program
(cutting-edge D3D game or not) is going to be causing a great wineserver load
by waiting on any of these objects; the motivation was rather to provide a way
to wait on ntdll-bound and server-bound objects at the same time.

Some cases are still passed to the server, and there's probably no reason not
to keep them that way. Those that I noticed while testing include: async
objects, which are internal to the file APIs and never exposed to userspace,
startup_info objects, which are internal to the loader and signalled when a
process starts, and keyed events, which are exposed through an ntdll API
(although not through kernel32) but can't be mixed with other objects (you
have to use NtWaitForKeyedEvent()). Other cases include: named pipes, debug
events, sockets, and timers. It's unlikely we'll want to optimize debug events
or sockets (or any of the other, rather rare, objects), but it is possible
we'll want to optimize named pipes or timers.

There were two sort of complications when working out the above. The first one
was events. The trouble is that (1) the server actually creates some events by
itself and (2) the server sometimes manipulates events passed by the
client. Resolving the first case was easy enough, and merely entailed creating
eventfd descriptors for the events the same way as for processes and threads
(note that we don't really lose anything this way; the events include
"LowMemoryCondition" and the event that signals system processes to shut
down). For the second case I basically had to hook the server-side event
functions to redirect to esync versions if the event was actually an esync
primitive.

The second complication was message queues. The difficulty here is that X11
signals events by writing into a pipe (at least I think it's a pipe?), and so
as a result wineserver has to poll on that descriptor. In theory we could just
let wineserver do so and then signal us as appropriate, except that wineserver
only polls on the pipe when the thread is waiting for events (otherwise we'd
get e.g. keyboard input while the thread is doing something else, and spin
forever trying to wake up a thread that doesn't care). The obvious solution is
just to poll on that fd ourselves, and that's what I did—it's just that
getting the fd from wineserver was kind of ugly, and the code for waiting was
also kind of ugly basically because we have to wait on both X11's fd and the
"normal" process/thread-style wineserver fd that we use to signal sent
messages. The upshot about the whole thing was that races are basically
impossible, since a thread can only wait on its own queue.

System APCs already work, since the server will forcibly suspend a thread if
it's not already waiting, and so we just need to check for EINTR from
poll(). User APCs and alertable waits are implemented in a similar style to
message queues (well, sort of): whenever someone executes an alertable wait,
we add an additional eventfd to the list, which the server signals when an APC
arrives. If that eventfd gets signaled, we hand it off to the server to take
care of, and return STATUS_USER_APC.

Originally I kept the volatile state of semaphores and mutexes inside a
variable local to the handle, with the knowledge that this would break if
someone tried to open the handle elsewhere or duplicate it. It did, and so now
this state is stored inside shared memory. This is of the POSIX variety, is
allocated by the server (but never mapped there) and lives under the path
"/wine-esync".

There are a couple things that this infrastructure can't handle, although
surprisingly there aren't that many. In particular:
* Implementing wait-all, i.e. WaitForMultipleObjects(..., TRUE, ...), is not
exactly possible the way we'd like it to be possible. In theory that
function should wait until it knows all objects are available, then grab
them all at once atomically. The server (like the kernel) can do this
because the server is single-threaded and can't race with itself. We can't
do this in ntdll, though. The approach I've taken I've laid out in great
detail in the relevant patch, but for a quick summary we poll on each object
until it's signaled (but don't grab it), check them all again, and if
they're all signaled we try to grab them all at once in a tight loop, and if
we fail on any of them we reset the count on whatever we shouldn't have
consumed. Such a blip would necessarily be very quick.
* The whole patchset only works on Linux, where eventfd is available. However,
it should be possible to make it work on a Mac, since eventfd is just a
quicker, easier way to use pipes (i.e. instead of writing 1 to the fd you'd
write 1 byte; instead of reading a 64-bit value from the fd you'd read as
many bytes as you can carry, which is admittedly less than 2**64 but
can probably be something reasonable.) It's also possible, although I
haven't yet looked, to use some different kind of synchronization
primitives, but pipes would be easiest to tack onto this framework.
* PulseEvent() can't work the way it's supposed to work. Fortunately it's rare
and deprecated. It's also explicitly mentioned on MSDN that a thread can
miss the notification for a kernel APC, so in a sense we're not necessarily
doing anything wrong.

There are some things that are perfectly implementable but that I just haven't
done yet:
* Other synchronizable server primitives. It's unlikely we'll need any of
these, except perhaps named pipes (which would honestly be rather difficult)
and (maybe) timers.
* Access masks. We'd need to store these inside ntdll, and validate them when
someone tries to execute esync operations.

This patchset was inspired by Daniel Santos' "hybrid synchronization"
patchset. My idea was to create a framework whereby even contended waits could
be executed in userspace, eliminating a lot of the complexity that his
synchronization primitives used. I do however owe some significant gratitude
toward him for setting me on the right path.

I've tried to maximize code separation, both to make any potential rebases
easier and to ensure that esync is only active when configured. All code in
existing source files is guarded with "if (do_esync())", and generally that
condition is followed by "return esync_version_of_this_method(...);", where
the latter lives in esync.c and is declared in esync.h. I've also tried to
make the patchset very clear and readable—to write it as if I were going to
submit it upstream. (Some intermediate patches do break things, which Wine is
generally against, but I think it's for the better in this case.) I have cut
some corners, though; there is some error checking missing, or implicit
assumptions that the program is behaving correctly.

I've tried to be careful about races. There are a lot of comments whose
purpose are basically to assure me that races are impossible. In most cases we
don't have to worry about races since all of the low-level synchronization is
done by the kernel.

Anyway, yeah, this is esync. Use it if you like.

--Zebediah Figura
9 changes: 9 additions & 0 deletions autogen.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh
set -e
tools/make_requests
dlls/winevulkan/make_vulkan -x vk.xml
tools/make_specfiles
autoreconf -ifv
rm -rf autom4te.cache

echo "Now run ./configure"
Loading