Rebase against 88220e0ee41640940e7686fe0cab7f1e0bfb42f1.

This commit is contained in:
Alistair Leslie-Hughes 2021-01-19 11:50:03 +11:00
parent 2414b1da6a
commit caa2471e20
6 changed files with 75 additions and 192 deletions

View File

@ -1,122 +0,0 @@
From 065142976ed5c7814830579e36612d3c515d90c3 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 5 Jan 2021 11:36:25 +1100
Subject: [PATCH] dsound: IDirectSoundBuffer8 GetStatus return
DSBSTATUS_LOCSOFTWARE for deferred buffers
Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=21014
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/dsound/buffer.c | 2 +
dlls/dsound/tests/dsound8.c | 74 +++++++++++++++++++++++++++++++++++++
2 files changed, 76 insertions(+)
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index 96391ebba03..6393656c9fa 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -421,6 +421,8 @@ static HRESULT WINAPI IDirectSoundBufferImpl_GetStatus(IDirectSoundBuffer8 *ifac
if (This->playflags & DSBPLAY_LOOPING)
*status |= DSBSTATUS_LOOPING;
}
+ if (This->dsbd.dwFlags & DSBCAPS_LOCDEFER)
+ *status |= DSBSTATUS_LOCSOFTWARE;
ReleaseSRWLockShared(&This->lock);
TRACE("status=%x\n", *status);
diff --git a/dlls/dsound/tests/dsound8.c b/dlls/dsound/tests/dsound8.c
index 81c5710dbaf..85272dd9b55 100644
--- a/dlls/dsound/tests/dsound8.c
+++ b/dlls/dsound/tests/dsound8.c
@@ -1809,6 +1809,79 @@ static void test_effects(void)
ok(!ref, "Got outstanding refcount %u.\n", ref);
}
+static void test_AcquireResources(void)
+{
+ IDirectSound8 *dsound;
+ IDirectSoundBuffer *primary, *secondary;
+ DSBUFFERDESC bufdesc;
+ WAVEFORMATEX fmt;
+ HRESULT hr;
+
+ hr = DirectSoundCreate8(NULL, &dsound, NULL);
+ ok(hr == DS_OK || hr == DSERR_NODRIVER, "Got hr %#x.\n", hr);
+ if (FAILED(hr))
+ return;
+
+ hr = IDirectSound8_SetCooperativeLevel(dsound, get_hwnd(), DSSCL_PRIORITY);
+ ok(hr == DS_OK, "Got hr %#x.\n", hr);
+
+ bufdesc.dwSize = sizeof(bufdesc);
+ bufdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_PRIMARYBUFFER;
+ bufdesc.dwBufferBytes = 0;
+ bufdesc.dwReserved = 0;
+ bufdesc.lpwfxFormat = NULL;
+ bufdesc.guid3DAlgorithm = GUID_NULL;
+
+ hr = IDirectSound8_CreateSoundBuffer(dsound, &bufdesc, &primary, NULL);
+ ok(hr == S_OK, "CreateSoundBuffer failed: %08x\n", hr);
+ if(hr != S_OK) {
+ IDirectSound_Release(dsound);
+ return;
+ }
+
+ fmt.wFormatTag = WAVE_FORMAT_PCM;
+ fmt.nChannels = 2;
+ fmt.nSamplesPerSec = 48000;
+ fmt.wBitsPerSample = 16;
+ fmt.nBlockAlign = fmt.nChannels * fmt.wBitsPerSample / 8;
+ fmt.nAvgBytesPerSec = fmt.nBlockAlign * fmt.nSamplesPerSec;
+ fmt.cbSize = 0;
+
+ bufdesc.lpwfxFormat = &fmt;
+ bufdesc.dwBufferBytes = fmt.nSamplesPerSec * fmt.nBlockAlign / 10;
+ bufdesc.dwFlags = DSBCAPS_LOCDEFER | DSBCAPS_CTRLVOLUME;
+
+ /* see if we can create one more */
+ hr = IDirectSound8_CreateSoundBuffer(dsound, &bufdesc, &secondary, NULL);
+ ok(hr == S_OK, "CreateSoundBuffer gave wrong error: %08x\n", hr);
+ if(hr == S_OK) {
+ DWORD status;
+ IDirectSoundBuffer8 *buffer8;
+
+ hr = IDirectSoundBuffer_QueryInterface(secondary, &IID_IDirectSoundBuffer8, (void **)&buffer8);
+ ok(hr == S_OK, "got: %08x\n", hr);
+
+ status = 0xFFFF;
+ hr = IDirectSoundBuffer8_GetStatus(buffer8, &status);
+ ok(hr == S_OK, "got: %08x\n", hr);
+ todo_wine ok(status == 0, "got: %08x\n", status);
+
+ hr = IDirectSoundBuffer8_AcquireResources(buffer8, 0, 0, NULL);
+ ok(hr == S_OK, "got: %08x\n", hr);
+
+ status = 0xFFFF;
+ hr = IDirectSoundBuffer8_GetStatus(buffer8, &status);
+ ok(hr == S_OK, "got: %08x\n", hr);
+ ok(status == DSBSTATUS_LOCSOFTWARE, "got: %08x\n", status);
+
+ IDirectSoundBuffer8_Release(buffer8);
+ IDirectSoundBuffer_Release(secondary);
+ }
+
+ IDirectSoundBuffer_Release(primary);
+ IDirectSound_Release(dsound);
+}
+
START_TEST(dsound8)
{
DWORD cookie;
@@ -1822,6 +1895,7 @@ START_TEST(dsound8)
test_hw_buffers();
test_first_device();
test_primary_flags();
+ test_AcquireResources();
hr = CoRegisterClassObject(&testdmo_clsid, (IUnknown *)&testdmo_cf,
CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie);
--
2.29.2

View File

@ -1 +0,0 @@
Fixes: [21014] dsound: IDirectSoundBuffer8 GetStatus return DSBSTATUS_LOCSOFTWARE for deferred buffers

View File

@ -1,4 +1,4 @@
From 195fb3b4d9c203bcac532d0c5d7db7a37d5298c4 Mon Sep 17 00:00:00 2001
From c17380797162d65051f0922c673c327506799bb7 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Thu, 9 Jan 2020 13:44:01 -0600
Subject: [PATCH] ntdll/tests: Move some tests to a new sync.c file.
@ -24,7 +24,7 @@ index ed15c51339f..9a99c01bd7c 100644
time.c \
virtual.c
diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
index cebac8b36c0..dabc81a73f3 100644
index f78f42e0a88..f366a661a16 100644
--- a/dlls/ntdll/tests/om.c
+++ b/dlls/ntdll/tests/om.c
@@ -28,10 +28,6 @@
@ -46,8 +46,8 @@ index cebac8b36c0..dabc81a73f3 100644
-static NTSTATUS (WINAPI *pNtReleaseMutant)( HANDLE, PLONG );
static NTSTATUS (WINAPI *pNtCreateSemaphore)( PHANDLE, ACCESS_MASK,const POBJECT_ATTRIBUTES,LONG,LONG );
static NTSTATUS (WINAPI *pNtOpenSemaphore)( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES );
static NTSTATUS (WINAPI *pNtCreateTimer) ( PHANDLE, ACCESS_MASK, const POBJECT_ATTRIBUTES, TIMER_TYPE );
@@ -64,22 +58,12 @@ static NTSTATUS (WINAPI *pNtQueryObject)(HANDLE,OBJECT_INFORMATION_CLASS,PVOID,U
static NTSTATUS (WINAPI *pNtQuerySemaphore)( PHANDLE, SEMAPHORE_INFORMATION_CLASS, PVOID, ULONG, PULONG );
@@ -65,22 +59,12 @@ static NTSTATUS (WINAPI *pNtQueryObject)(HANDLE,OBJECT_INFORMATION_CLASS,PVOID,U
static NTSTATUS (WINAPI *pNtReleaseSemaphore)(HANDLE, ULONG, PULONG);
static NTSTATUS (WINAPI *pNtCreateKeyedEvent)( HANDLE *, ACCESS_MASK, const OBJECT_ATTRIBUTES *, ULONG );
static NTSTATUS (WINAPI *pNtOpenKeyedEvent)( HANDLE *, ACCESS_MASK, const OBJECT_ATTRIBUTES * );
@ -70,7 +70,7 @@ index cebac8b36c0..dabc81a73f3 100644
#define ROUND_UP(value, alignment) (((value) + ((alignment) - 1)) & ~((alignment)-1))
static LPCSTR wine_dbgstr_us( const UNICODE_STRING *us )
@@ -1696,266 +1680,6 @@ static void test_type_mismatch(void)
@@ -1697,266 +1681,6 @@ static void test_type_mismatch(void)
pNtClose( h );
}
@ -337,7 +337,7 @@ index cebac8b36c0..dabc81a73f3 100644
static void test_null_device(void)
{
OBJECT_ATTRIBUTES attr;
@@ -2029,192 +1753,6 @@ static void test_null_device(void)
@@ -2030,119 +1754,6 @@ static void test_null_device(void)
CloseHandle(ov.hEvent);
}
@ -454,6 +454,13 @@ index cebac8b36c0..dabc81a73f3 100644
- NtClose( mutant );
-}
-
static void test_semaphore(void)
{
SEMAPHORE_BASIC_INFORMATION info;
@@ -2219,79 +1830,6 @@ static void test_semaphore(void)
NtClose( semaphore );
}
-static void test_wait_on_address(void)
-{
- DWORD ticks;
@ -530,7 +537,7 @@ index cebac8b36c0..dabc81a73f3 100644
static void test_process(void)
{
OBJECT_ATTRIBUTES attr;
@@ -2278,13 +1816,7 @@ START_TEST(om)
@@ -2355,13 +1893,7 @@ START_TEST(om)
pNtCreateMailslotFile = (void *)GetProcAddress(hntdll, "NtCreateMailslotFile");
pNtCreateMutant = (void *)GetProcAddress(hntdll, "NtCreateMutant");
pNtOpenEvent = (void *)GetProcAddress(hntdll, "NtOpenEvent");
@ -544,7 +551,7 @@ index cebac8b36c0..dabc81a73f3 100644
pNtOpenFile = (void *)GetProcAddress(hntdll, "NtOpenFile");
pNtClose = (void *)GetProcAddress(hntdll, "NtClose");
pRtlInitUnicodeString = (void *)GetProcAddress(hntdll, "RtlInitUnicodeString");
@@ -2304,15 +1836,9 @@ START_TEST(om)
@@ -2382,15 +1914,9 @@ START_TEST(om)
pNtReleaseSemaphore = (void *)GetProcAddress(hntdll, "NtReleaseSemaphore");
pNtCreateKeyedEvent = (void *)GetProcAddress(hntdll, "NtCreateKeyedEvent");
pNtOpenKeyedEvent = (void *)GetProcAddress(hntdll, "NtOpenKeyedEvent");
@ -560,12 +567,13 @@ index cebac8b36c0..dabc81a73f3 100644
pNtOpenProcess = (void *)GetProcAddress(hntdll, "NtOpenProcess");
pNtQuerySystemInformation = (void *)GetProcAddress(hntdll, "NtQuerySystemInformation");
@@ -2325,10 +1851,6 @@ START_TEST(om)
@@ -2403,11 +1929,7 @@ START_TEST(om)
test_query_object();
test_query_object_types();
test_type_mismatch();
- test_event();
- test_mutant();
test_semaphore();
- test_keyed_events();
test_null_device();
- test_wait_on_address();

View File

@ -1,7 +1,7 @@
From 4450fe4cd6c48fcd3293c7ae0c2836640d383eaa Mon Sep 17 00:00:00 2001
From 978c8cad7a5f44402fc2daba9bccc32fa9ea64d4 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Sun, 22 Nov 2020 20:51:10 -0600
Subject: [PATCH 13/13] ntdll: Reimplement SRW locks on top of Win32 futexes.
Subject: [PATCH] ntdll: Reimplement SRW locks on top of Win32 futexes.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
---
@ -10,11 +10,12 @@ Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
dlls/ntdll/unix/sync.c | 309 --------------------------------
dlls/ntdll/unix/unix_private.h | 6 -
dlls/ntdll/unixlib.h | 8 -
include/winbase.h | 24 +++
6 files changed, 166 insertions(+), 503 deletions(-)
include/winbase.h | 1 -
include/winnt.h | 24 +++
7 files changed, 166 insertions(+), 504 deletions(-)
diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c
index 133ae6d4ead..f792c8a2fb0 100644
index 0e86ecead3d..34b076d6b71 100644
--- a/dlls/ntdll/sync.c
+++ b/dlls/ntdll/sync.c
@@ -161,127 +161,23 @@ DWORD WINAPI RtlRunOnceExecuteOnce( RTL_RUN_ONCE *once, PRTL_RUN_ONCE_INIT_FN fu
@ -171,9 +172,7 @@ index 133ae6d4ead..f792c8a2fb0 100644
+ union { RTL_SRWLOCK *rtl; struct srw_lock *s; LONG *l; } u = { lock };
+
+ InterlockedIncrement16( &u.s->exclusive_waiters );
- if (srwlock_lock_exclusive( (unsigned int *)&lock->Ptr, SRWLOCK_RES_EXCLUSIVE ))
- NtWaitForKeyedEvent( 0, srwlock_key_exclusive(lock), FALSE, NULL );
+
+ for (;;)
+ {
+ union { struct srw_lock s; LONG l; } old, new;
@ -196,7 +195,9 @@ index 133ae6d4ead..f792c8a2fb0 100644
+ wait = TRUE;
+ }
+ } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
+
- if (srwlock_lock_exclusive( (unsigned int *)&lock->Ptr, SRWLOCK_RES_EXCLUSIVE ))
- NtWaitForKeyedEvent( 0, srwlock_key_exclusive(lock), FALSE, NULL );
+ if (!wait) return;
+ RtlWaitOnAddress( &u.s->owners, &new.s.owners, sizeof(short), NULL );
+ }
@ -208,11 +209,11 @@ index 133ae6d4ead..f792c8a2fb0 100644
void WINAPI RtlAcquireSRWLockShared( RTL_SRWLOCK *lock )
{
- unsigned int val, tmp;
+ union { RTL_SRWLOCK *rtl; struct srw_lock *s; LONG *l; } u = { lock };
-
- if (unix_funcs->fast_RtlAcquireSRWLockShared( lock ) != STATUS_NOT_IMPLEMENTED)
- return;
-
+ union { RTL_SRWLOCK *rtl; struct srw_lock *s; LONG *l; } u = { lock };
- /* Acquires a shared lock. If it's currently not possible to add elements to
- * the shared queue, then request exclusive access instead. */
- for (val = *(unsigned int *)&lock->Ptr;; val = tmp)
@ -240,7 +241,9 @@ index 133ae6d4ead..f792c8a2fb0 100644
+ {
+ old.s = *u.s;
+ new = old;
+
- if (val & SRWLOCK_MASK_EXCLUSIVE_QUEUE)
- NtWaitForKeyedEvent( 0, srwlock_key_shared(lock), FALSE, NULL );
+ if (old.s.owners != -1 && !old.s.exclusive_waiters)
+ {
+ /* Not locked exclusive, and no exclusive waiters.
@ -253,9 +256,7 @@ index 133ae6d4ead..f792c8a2fb0 100644
+ wait = TRUE;
+ }
+ } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
- if (val & SRWLOCK_MASK_EXCLUSIVE_QUEUE)
- NtWaitForKeyedEvent( 0, srwlock_key_shared(lock), FALSE, NULL );
+
+ if (!wait) return;
+ RtlWaitOnAddress( u.s, &new.s, sizeof(struct srw_lock), NULL );
+ }
@ -275,11 +276,11 @@ index 133ae6d4ead..f792c8a2fb0 100644
+ {
+ old.s = *u.s;
+ new = old;
+
+ if (old.s.owners != -1) ERR("Lock %p is not owned exclusive!\n", lock);
- srwlock_leave_exclusive( lock, srwlock_unlock_exclusive( (unsigned int *)&lock->Ptr,
- - SRWLOCK_RES_EXCLUSIVE ) - SRWLOCK_RES_EXCLUSIVE );
+ if (old.s.owners != -1) ERR("Lock %p is not owned exclusive!\n", lock);
+
+ new.s.owners = 0;
+ } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
+
@ -303,12 +304,12 @@ index 133ae6d4ead..f792c8a2fb0 100644
+ {
+ old.s = *u.s;
+ new = old;
+
+ if (old.s.owners == -1) ERR("Lock %p is owned exclusive!\n", lock);
+ else if (!old.s.owners) ERR("Lock %p is not owned shared!\n", lock);
- srwlock_leave_shared( lock, srwlock_lock_exclusive( (unsigned int *)&lock->Ptr,
- - SRWLOCK_RES_SHARED ) - SRWLOCK_RES_SHARED );
+ if (old.s.owners == -1) ERR("Lock %p is owned exclusive!\n", lock);
+ else if (!old.s.owners) ERR("Lock %p is not owned shared!\n", lock);
+
+ --new.s.owners;
+ } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
+
@ -332,9 +333,7 @@ index 133ae6d4ead..f792c8a2fb0 100644
+ {
+ old.s = *u.s;
+ new.s = old.s;
- return InterlockedCompareExchange( (int *)&lock->Ptr, SRWLOCK_MASK_IN_EXCLUSIVE |
- SRWLOCK_RES_EXCLUSIVE, 0 ) == 0;
+
+ if (!old.s.owners)
+ {
+ /* Not locked exclusive or shared. We can try to grab it. */
@ -346,7 +345,9 @@ index 133ae6d4ead..f792c8a2fb0 100644
+ ret = FALSE;
+ }
+ } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
+
- return InterlockedCompareExchange( (int *)&lock->Ptr, SRWLOCK_MASK_IN_EXCLUSIVE |
- SRWLOCK_RES_EXCLUSIVE, 0 ) == 0;
+ return ret;
}
@ -394,10 +395,10 @@ index 133ae6d4ead..f792c8a2fb0 100644
/***********************************************************************
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
index 1633aeb97eb..8a30e6fc749 100644
index 8539e70dd82..4a83df1ec2f 100644
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -1511,12 +1511,6 @@ static struct unix_funcs unix_funcs =
@@ -1512,12 +1512,6 @@ static struct unix_funcs unix_funcs =
NtCurrentTeb,
DbgUiIssueRemoteBreakin,
RtlGetSystemTimePrecise,
@ -411,10 +412,10 @@ index 1633aeb97eb..8a30e6fc749 100644
ntdll_ceil,
ntdll_cos,
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
index 3645c9f9549..c32b62f9e0a 100644
index 6b72ba3023b..455f4ffc365 100644
--- a/dlls/ntdll/unix/sync.c
+++ b/dlls/ntdll/unix/sync.c
@@ -114,8 +114,6 @@ static inline ULONGLONG monotonic_counter(void)
@@ -115,8 +115,6 @@ static inline ULONGLONG monotonic_counter(void)
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
@ -423,7 +424,7 @@ index 3645c9f9549..c32b62f9e0a 100644
static int futex_private = 128;
@@ -129,16 +127,6 @@ static inline int futex_wake( const int *addr, int val )
@@ -130,16 +128,6 @@ static inline int futex_wake( const int *addr, int val )
return syscall( __NR_futex, addr, FUTEX_WAKE | futex_private, val, NULL, 0, 0 );
}
@ -440,7 +441,7 @@ index 3645c9f9549..c32b62f9e0a 100644
static inline int use_futexes(void)
{
static int supported = -1;
@@ -156,16 +144,6 @@ static inline int use_futexes(void)
@@ -157,16 +145,6 @@ static inline int use_futexes(void)
return supported;
}
@ -457,7 +458,7 @@ index 3645c9f9549..c32b62f9e0a 100644
#endif
@@ -2232,290 +2210,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
@@ -2287,290 +2265,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
return NtWaitForSingleObject( ntdll_get_thread_data()->tid_alert_event, FALSE, timeout );
#endif
}
@ -749,10 +750,10 @@ index 3645c9f9549..c32b62f9e0a 100644
-
-#endif
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index 4462c3ad218..fe6813551e2 100644
index e78c0c8839c..ad5bb216949 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -93,12 +93,6 @@ extern void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULON
@@ -95,12 +95,6 @@ extern void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULON
extern NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*) DECLSPEC_HIDDEN;
extern void (WINAPI *pLdrInitializeThunk)(CONTEXT*,void**,ULONG_PTR,ULONG_PTR) DECLSPEC_HIDDEN;
extern void (WINAPI *pRtlUserThreadStart)( PRTL_THREAD_START_ROUTINE entry, void *arg ) DECLSPEC_HIDDEN;
@ -785,10 +786,22 @@ index 6116f408572..5ffb09ce397 100644
double (CDECL *atan)( double d );
double (CDECL *ceil)( double d );
diff --git a/include/winbase.h b/include/winbase.h
index dc8aa081be4..2ebcb3e735a 100644
index 0262e50d980..968d636f86e 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -2928,14 +2928,18 @@ extern WCHAR * CDECL wine_get_dos_file_name( LPCSTR str );
@@ -2918,7 +2918,6 @@ WINBASEAPI UINT WINAPI _lwrite(HFILE,LPCSTR,UINT);
extern char * CDECL wine_get_unix_file_name( LPCWSTR dos );
extern WCHAR * CDECL wine_get_dos_file_name( LPCSTR str );
-
#ifdef __WINESRC__
static FORCEINLINE HANDLE WINAPI GetCurrentProcess(void)
diff --git a/include/winnt.h b/include/winnt.h
index 200f67080a8..05093d525f1 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -6907,20 +6907,29 @@ static inline BOOLEAN BitScanReverse(DWORD *index, DWORD mask)
#pragma intrinsic(_InterlockedExchange)
#pragma intrinsic(_InterlockedExchangeAdd)
#pragma intrinsic(_InterlockedIncrement)
@ -807,8 +820,7 @@ index dc8aa081be4..2ebcb3e735a 100644
static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
{
@@ -2962,11 +2966,21 @@ static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
return _InterlockedIncrement( (long volatile *)dest );
return _InterlockedCompareExchange( (long volatile *)dest, xchg, compare );
}
+static FORCEINLINE short WINAPI InterlockedIncrement16( short volatile *dest )
@ -816,8 +828,10 @@ index dc8aa081be4..2ebcb3e735a 100644
+ return _InterlockedIncrement16( (short volatile *)dest );
+}
+
static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
{
return _InterlockedCompareExchange64( (long long volatile *)dest, compare, xchg );
@@ -6946,6 +6955,11 @@ static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
return _InterlockedDecrement( (long volatile *)dest );
}
@ -829,7 +843,7 @@ index dc8aa081be4..2ebcb3e735a 100644
#ifndef __i386__
#pragma intrinsic(_InterlockedCompareExchangePointer)
@@ -3031,11 +3045,21 @@ static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
@@ -7010,11 +7024,21 @@ static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
return __sync_add_and_fetch( dest, 1 );
}
@ -848,9 +862,9 @@ index dc8aa081be4..2ebcb3e735a 100644
+ return __sync_add_and_fetch( dest, -1 );
+}
+
static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
static FORCEINLINE void * WINAPI InterlockedExchangePointer( void *volatile *dest, void *val )
{
PVOID ret;
void *ret;
--
2.29.2

View File

@ -51,7 +51,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "477fe4ba2fceaffe96ea3910595befeb22b717a5"
echo "88220e0ee41640940e7686fe0cab7f1e0bfb42f1"
}
# Show version information
@ -122,7 +122,6 @@ patch_enable_all ()
enable_dinput_remap_joystick="$1"
enable_dsound_EAX="$1"
enable_dsound_Fast_Mixer="$1"
enable_dsound_localder="$1"
enable_dwrite_FontFallback="$1"
enable_dxdiag_new_dlls="$1"
enable_eventfd_synchronization="$1"
@ -454,9 +453,6 @@ patch_enable ()
dsound-Fast_Mixer)
enable_dsound_Fast_Mixer="$2"
;;
dsound-localder)
enable_dsound_localder="$2"
;;
dwrite-FontFallback)
enable_dwrite_FontFallback="$2"
;;
@ -2375,18 +2371,6 @@ if test "$enable_dsound_EAX" -eq 1; then
patch_apply dsound-EAX/0022-dsound-Enable-EAX-by-default.patch
fi
# Patchset dsound-localder
# |
# | This patchset fixes the following Wine bugs:
# | * [#21014] dsound: IDirectSoundBuffer8 GetStatus return DSBSTATUS_LOCSOFTWARE for deferred buffers
# |
# | Modified files:
# | * dlls/dsound/buffer.c, dlls/dsound/tests/dsound8.c
# |
if test "$enable_dsound_localder" -eq 1; then
patch_apply dsound-localder/0001-dsound-IDirectSoundBuffer8-GetStatus-return-DSBSTATU.patch
fi
# Patchset dwrite-FontFallback
# |
# | This patchset fixes the following Wine bugs:

View File

@ -1 +1 @@
477fe4ba2fceaffe96ea3910595befeb22b717a5
88220e0ee41640940e7686fe0cab7f1e0bfb42f1