From 7e776b7a902ff5819affabd1e7ab9ff9f9af337b Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Wed, 13 Apr 2016 18:04:24 +0200 Subject: [PATCH] Rebase against 24a730187e08699b51c698d4fed58ba2947f0c5d. [kernel32-CompareString_Length] Removed patch to make sure CompareString aborts on first non-matching character (accepted upstream). [kernel32-GetLogicalProcessorInformationEx] Removed patch to return TRUE from GetLogicalProcessorInformationEx stub (accepted upstream). [user32-WM_CAPTURECHANGE] Removed patch to send WM_CAPTURECHANGE also when capture has not changed (accepted upstream). [wined3d-Multisampling] Removed patch to allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE (fixed upstream). --- ...emulation-of-SIDT-instruction-when-u.patch | 25 +- ...StringW-should-abort-on-the-first-no.patch | 92 ------- ...dd-some-more-tests-for-NORM_IGNORESY.patch | 31 --- ...dd-further-tests-for-comparing-strin.patch | 32 --- .../kernel32-CompareString_Length/definition | 1 - ...tLogicalProcessorInformationEx-a-stu.patch | 38 --- .../definition | 1 - ...lar-code-in-NtReadFile-and-FILE_Asyn.patch | 25 +- ...ng-for-partially-received-messages-i.patch | 8 +- ...ption-if-invalid-handle-is-passed-to.patch | 52 ++-- ...gString-should-throw-the-exception-a.patch | 24 +- ...k-architecture-before-loading-module.patch | 8 +- ...l-Use-wrapper-functions-for-syscalls.patch | 148 +++++------ ...for-WinSqmStartSession-WinSqmEndSess.patch | 33 ++- ...ts-Add-kernel-compliant-test-functio.patch | 16 +- patches/patchinstall.sh | 83 +----- ...dd-test-for-process-object-destructi.patch | 32 ++- ...-WM_CAPTURECHANGE-when-capture-has-n.patch | 117 --------- patches/user32-WM_CAPTURECHANGE/definition | 1 - ...-values-for-memory-accounting-on-NVI.patch | 24 +- .../wined3d-CSMT_Main/9999-IfDefined.patch | 248 +++++++++--------- ...-specify-multisampling-AA-quality-le.patch | 75 ------ patches/wined3d-Multisampling/definition | 2 - ...e-a-separate-mainloop-and-ctx-for-pu.patch | 29 +- 24 files changed, 344 insertions(+), 801 deletions(-) delete mode 100644 patches/kernel32-CompareString_Length/0001-kernel32-CompareStringW-should-abort-on-the-first-no.patch delete mode 100644 patches/kernel32-CompareString_Length/0002-kernel32-tests-Add-some-more-tests-for-NORM_IGNORESY.patch delete mode 100644 patches/kernel32-CompareString_Length/0003-kenrel32-tests-Add-further-tests-for-comparing-strin.patch delete mode 100644 patches/kernel32-CompareString_Length/definition delete mode 100644 patches/kernel32-GetLogicalProcessorInformationEx/0001-kernel32-Make-GetLogicalProcessorInformationEx-a-stu.patch delete mode 100644 patches/kernel32-GetLogicalProcessorInformationEx/definition delete mode 100644 patches/user32-WM_CAPTURECHANGE/0001-user32-Also-send-WM_CAPTURECHANGE-when-capture-has-n.patch delete mode 100644 patches/user32-WM_CAPTURECHANGE/definition delete mode 100644 patches/wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch delete mode 100644 patches/wined3d-Multisampling/definition diff --git a/patches/Exagear/0001-ntdll-Implement-emulation-of-SIDT-instruction-when-u.patch b/patches/Exagear/0001-ntdll-Implement-emulation-of-SIDT-instruction-when-u.patch index f30d5f7f..45863c63 100644 --- a/patches/Exagear/0001-ntdll-Implement-emulation-of-SIDT-instruction-when-u.patch +++ b/patches/Exagear/0001-ntdll-Implement-emulation-of-SIDT-instruction-when-u.patch @@ -1,12 +1,12 @@ -From 7cb209e122fc503190dcad411483147ebc6d6cb4 Mon Sep 17 00:00:00 2001 +From 940f22fae1e118faab3aa2926d050ad3c84a3e79 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Tue, 11 Nov 2014 03:11:33 +0100 Subject: ntdll: Implement emulation of SIDT instruction when using Exagear. --- configure.ac | 8 ++ - dlls/ntdll/signal_i386.c | 224 +++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 232 insertions(+) + dlls/ntdll/signal_i386.c | 223 +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 231 insertions(+) diff --git a/configure.ac b/configure.ac index 92d78a2..c88a139 100644 @@ -20,7 +20,7 @@ index 92d78a2..c88a139 100644 AC_ARG_WITH(alsa, AS_HELP_STRING([--without-alsa],[do not use the Alsa sound support]), [if test "x$withval" = "xno"; then ac_cv_header_sys_asoundlib_h=no; ac_cv_header_alsa_asoundlib_h=no; fi]) -@@ -367,6 +368,13 @@ fi +@@ -363,6 +364,13 @@ fi WINE_WARNING_WITH(gettext,[test "$MSGFMT" = false], [gettext tools not found (or too old), translations won't be built.]) @@ -35,7 +35,7 @@ index 92d78a2..c88a139 100644 dnl Check for -li386 for NetBSD and OpenBSD diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c -index 13df4bb..edf5ea8 100644 +index 5708aae..f27ce56 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -96,6 +96,14 @@ typedef struct @@ -53,11 +53,10 @@ index 13df4bb..edf5ea8 100644 /*********************************************************************** * signal context platform-specific definitions */ -@@ -1573,6 +1581,214 @@ static inline DWORD is_privileged_instr( CONTEXT *context ) - } +@@ -1898,6 +1906,213 @@ static inline DWORD get_fpu_code( const CONTEXT *context ) } -+ + +#ifdef EXAGEAR_COMPAT + +/*********************************************************************** @@ -265,10 +264,10 @@ index 13df4bb..edf5ea8 100644 +#endif /* EXAGEAR_COMPAT */ + + - /*********************************************************************** - * check_invalid_gs - * -@@ -1902,6 +2118,14 @@ static void WINAPI raise_segv_exception( EXCEPTION_RECORD *rec, CONTEXT *context + /********************************************************************** + * raise_segv_exception + */ +@@ -1907,6 +2122,14 @@ static void WINAPI raise_segv_exception( EXCEPTION_RECORD *rec, CONTEXT *context switch(rec->ExceptionCode) { @@ -284,5 +283,5 @@ index 13df4bb..edf5ea8 100644 if (rec->NumberParameters == 2) { -- -2.1.3 +2.7.1 diff --git a/patches/kernel32-CompareString_Length/0001-kernel32-CompareStringW-should-abort-on-the-first-no.patch b/patches/kernel32-CompareString_Length/0001-kernel32-CompareStringW-should-abort-on-the-first-no.patch deleted file mode 100644 index 6268d099..00000000 --- a/patches/kernel32-CompareString_Length/0001-kernel32-CompareStringW-should-abort-on-the-first-no.patch +++ /dev/null @@ -1,92 +0,0 @@ -From f8acf44d20407c213dd1f48691b432c2e9f555df Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Fri, 13 Nov 2015 20:36:54 +0800 -Subject: kernel32: CompareStringW should abort on the first nonmatching - character to avoid invalid memory access. (v2) - -For bug 37556. - -Changes in v2 (by Sebastian Lackner): -* Use loop to handle strings ending with multiple \0 characters correctly. - -Signed-off-by: Dmitry Timoshkov -Signed-off-by: Sebastian Lackner ---- - libs/wine/sortkey.c | 39 ++++++++++++++++++++++++++++++--------- - 1 file changed, 30 insertions(+), 9 deletions(-) - -diff --git a/libs/wine/sortkey.c b/libs/wine/sortkey.c -index 17b5537..7280501 100644 ---- a/libs/wine/sortkey.c -+++ b/libs/wine/sortkey.c -@@ -223,6 +223,16 @@ static inline int compare_unicode_weights(int flags, const WCHAR *str1, int len1 - len1--; - len2--; - } -+ while (len1 && !*str1) -+ { -+ str1++; -+ len1--; -+ } -+ while (len2 && !*str2) -+ { -+ str2++; -+ len2--; -+ } - return len1 - len2; - } - -@@ -272,6 +282,16 @@ static inline int compare_diacritic_weights(int flags, const WCHAR *str1, int le - len1--; - len2--; - } -+ while (len1 && !*str1) -+ { -+ str1++; -+ len1--; -+ } -+ while (len2 && !*str2) -+ { -+ str2++; -+ len2--; -+ } - return len1 - len2; - } - -@@ -321,23 +341,24 @@ static inline int compare_case_weights(int flags, const WCHAR *str1, int len1, - len1--; - len2--; - } -+ while (len1 && !*str1) -+ { -+ str1++; -+ len1--; -+ } -+ while (len2 && !*str2) -+ { -+ str2++; -+ len2--; -+ } - return len1 - len2; - } - --static inline int real_length(const WCHAR *str, int len) --{ -- while (len && !str[len - 1]) len--; -- return len; --} -- - int wine_compare_string(int flags, const WCHAR *str1, int len1, - const WCHAR *str2, int len2) - { - int ret; - -- len1 = real_length(str1, len1); -- len2 = real_length(str2, len2); -- - ret = compare_unicode_weights(flags, str1, len1, str2, len2); - if (!ret) - { --- -2.6.4 - diff --git a/patches/kernel32-CompareString_Length/0002-kernel32-tests-Add-some-more-tests-for-NORM_IGNORESY.patch b/patches/kernel32-CompareString_Length/0002-kernel32-tests-Add-some-more-tests-for-NORM_IGNORESY.patch deleted file mode 100644 index 4188aaab..00000000 --- a/patches/kernel32-CompareString_Length/0002-kernel32-tests-Add-some-more-tests-for-NORM_IGNORESY.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 9261fada866235424392ac94d78e2d3a3a02ecc7 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Sat, 14 Nov 2015 20:43:39 +0100 -Subject: kernel32/tests: Add some more tests for NORM_IGNORESYMBOLS. - ---- - dlls/kernel32/tests/locale.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c -index 7b0212e..a70dc13 100644 ---- a/dlls/kernel32/tests/locale.c -+++ b/dlls/kernel32/tests/locale.c -@@ -1634,7 +1634,13 @@ static const struct comparestringa_entry comparestringa_data[] = { - { LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "'o", -1, "/m", -1, CSTR_LESS_THAN }, - { LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "/m", -1, "'o", -1, CSTR_GREATER_THAN }, - { LOCALE_SYSTEM_DEFAULT, 0, "aLuZkUtZ", 8, "aLuZkUtZ", 9, CSTR_EQUAL }, -- { LOCALE_SYSTEM_DEFAULT, 0, "aLuZkUtZ", 7, "aLuZkUtZ\0A", 10, CSTR_LESS_THAN } -+ { LOCALE_SYSTEM_DEFAULT, 0, "aLuZkUtZ", 7, "aLuZkUtZ\0A", 10, CSTR_LESS_THAN }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a-", 3, "a\0", 3, CSTR_GREATER_THAN }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a'", 3, "a\0", 3, CSTR_GREATER_THAN }, -+ { LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "a-", 3, "a\0", 3, CSTR_GREATER_THAN }, -+ { LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "a'", 3, "a\0", 3, CSTR_GREATER_THAN }, -+ { LOCALE_SYSTEM_DEFAULT, NORM_IGNORESYMBOLS, "a.", 3, "a\0", 3, CSTR_EQUAL }, -+ { LOCALE_SYSTEM_DEFAULT, NORM_IGNORESYMBOLS, "a ", 3, "a\0", 3, CSTR_EQUAL }, - }; - - static void test_CompareStringA(void) --- -2.6.2 - diff --git a/patches/kernel32-CompareString_Length/0003-kenrel32-tests-Add-further-tests-for-comparing-strin.patch b/patches/kernel32-CompareString_Length/0003-kenrel32-tests-Add-further-tests-for-comparing-strin.patch deleted file mode 100644 index 5ea40830..00000000 --- a/patches/kernel32-CompareString_Length/0003-kenrel32-tests-Add-further-tests-for-comparing-strin.patch +++ /dev/null @@ -1,32 +0,0 @@ -From c855cfddc7853fa8aed1ce4aac9a85c7ff7cb1f1 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Fri, 22 Jan 2016 15:13:36 +0100 -Subject: kenrel32/tests: Add further tests for comparing strings ending with - multiple \0 characters. - ---- - dlls/kernel32/tests/locale.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c -index d531272..4a9e540 100644 ---- a/dlls/kernel32/tests/locale.c -+++ b/dlls/kernel32/tests/locale.c -@@ -1643,6 +1643,14 @@ static const struct comparestringa_entry comparestringa_data[] = { - { LOCALE_SYSTEM_DEFAULT, SORT_STRINGSORT, "a'", 3, "a\0", 3, CSTR_GREATER_THAN }, - { LOCALE_SYSTEM_DEFAULT, NORM_IGNORESYMBOLS, "a.", 3, "a\0", 3, CSTR_EQUAL }, - { LOCALE_SYSTEM_DEFAULT, NORM_IGNORESYMBOLS, "a ", 3, "a\0", 3, CSTR_EQUAL }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a", 1, "a\0\0", 4, CSTR_EQUAL }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a", 2, "a\0\0", 4, CSTR_EQUAL }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a\0\0", 4, "a", 1, CSTR_EQUAL }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a\0\0", 4, "a", 2, CSTR_EQUAL }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a", 1, "a\0x", 4, CSTR_LESS_THAN }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a", 2, "a\0x", 4, CSTR_LESS_THAN }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a\0x", 4, "a", 1, CSTR_GREATER_THAN }, -+ { LOCALE_SYSTEM_DEFAULT, 0, "a\0x", 4, "a", 2, CSTR_GREATER_THAN }, - }; - - static void test_CompareStringA(void) --- -2.6.4 - diff --git a/patches/kernel32-CompareString_Length/definition b/patches/kernel32-CompareString_Length/definition deleted file mode 100644 index 24e6fcee..00000000 --- a/patches/kernel32-CompareString_Length/definition +++ /dev/null @@ -1 +0,0 @@ -Fixes: [37556] CompareString should abort on first non-matching character diff --git a/patches/kernel32-GetLogicalProcessorInformationEx/0001-kernel32-Make-GetLogicalProcessorInformationEx-a-stu.patch b/patches/kernel32-GetLogicalProcessorInformationEx/0001-kernel32-Make-GetLogicalProcessorInformationEx-a-stu.patch deleted file mode 100644 index 474aaa31..00000000 --- a/patches/kernel32-GetLogicalProcessorInformationEx/0001-kernel32-Make-GetLogicalProcessorInformationEx-a-stu.patch +++ /dev/null @@ -1,38 +0,0 @@ -From f7ea420c1ca707503214eba3c9bfce6719e66fdc Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Fri, 20 Jun 2014 21:16:39 +0200 -Subject: kernel32: Make GetLogicalProcessorInformationEx a stub which returns - TRUE. - ---- - dlls/kernel32/process.c | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) - -diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c -index b371e73..24da577 100644 ---- a/dlls/kernel32/process.c -+++ b/dlls/kernel32/process.c -@@ -3831,8 +3831,18 @@ BOOL WINAPI GetLogicalProcessorInformation(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION - BOOL WINAPI GetLogicalProcessorInformationEx(LOGICAL_PROCESSOR_RELATIONSHIP relationship, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX buffer, PDWORD pBufLen) - { - FIXME("(%u,%p,%p): stub\n", relationship, buffer, pBufLen); -- SetLastError(ERROR_CALL_NOT_IMPLEMENTED); -- return FALSE; -+ -+ if (!pBufLen) -+ { -+ SetLastError(ERROR_INVALID_PARAMETER); -+ return FALSE; -+ } -+ -+ /* MSDN says '[...] at least one SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX -+ * structure is written to the output buffer.' - don't be surprised if this -+ * stub doesn't work always. */ -+ *pBufLen = 0; -+ return TRUE; - } - - /*********************************************************************** --- -2.3.0 - diff --git a/patches/kernel32-GetLogicalProcessorInformationEx/definition b/patches/kernel32-GetLogicalProcessorInformationEx/definition deleted file mode 100644 index 2392d95c..00000000 --- a/patches/kernel32-GetLogicalProcessorInformationEx/definition +++ /dev/null @@ -1 +0,0 @@ -Fixes: CPU-Z fails to start because GetLogicalProcessorInformationEx returns FALSE diff --git a/patches/kernel32-Named_Pipe/0006-ntdll-Unify-similar-code-in-NtReadFile-and-FILE_Asyn.patch b/patches/kernel32-Named_Pipe/0006-ntdll-Unify-similar-code-in-NtReadFile-and-FILE_Asyn.patch index b475b63a..5cd2001e 100644 --- a/patches/kernel32-Named_Pipe/0006-ntdll-Unify-similar-code-in-NtReadFile-and-FILE_Asyn.patch +++ b/patches/kernel32-Named_Pipe/0006-ntdll-Unify-similar-code-in-NtReadFile-and-FILE_Asyn.patch @@ -1,4 +1,4 @@ -From 8ad4ff3e0ed7e3065a1f408873a69d51cb6b3b51 Mon Sep 17 00:00:00 2001 +From 3963fc7dff07587084a7d91553727bba88871677 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Fri, 15 Aug 2014 22:23:08 +0200 Subject: ntdll: Unify similar code in NtReadFile and FILE_AsyncReadService. @@ -15,14 +15,14 @@ Changes in FILE_AsyncReadService: whereas NtReadFile uses different behaviour based on the fd type. Now both implementations match, and behave the same way. --- - dlls/ntdll/file.c | 108 +++++++++++++++++++++++------------------------------- - 1 file changed, 46 insertions(+), 62 deletions(-) + dlls/ntdll/file.c | 113 ++++++++++++++++++++++-------------------------------- + 1 file changed, 46 insertions(+), 67 deletions(-) diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index 79daec5..fd88777 100644 +index 6531569..e42cf46 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c -@@ -471,6 +471,45 @@ NTSTATUS FILE_GetNtStatus(void) +@@ -486,6 +486,45 @@ NTSTATUS FILE_GetNtStatus(void) } } @@ -48,7 +48,7 @@ index 79daec5..fd88777 100644 + case FD_TYPE_DEVICE: + return length ? STATUS_END_OF_FILE : STATUS_SUCCESS; + case FD_TYPE_SERIAL: -+ return STATUS_PENDING; ++ return length ? STATUS_PENDING : STATUS_SUCCESS; + default: + return STATUS_PIPE_BROKEN; + } @@ -68,7 +68,7 @@ index 79daec5..fd88777 100644 /*********************************************************************** * FILE_AsyncReadService (INTERNAL) */ -@@ -478,44 +517,19 @@ static NTSTATUS FILE_AsyncReadService( void *user, IO_STATUS_BLOCK *iosb, +@@ -493,44 +532,19 @@ static NTSTATUS FILE_AsyncReadService( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status, void **apc, void **arg ) { struct async_fileio_read *fileio = user; @@ -118,7 +118,7 @@ index 79daec5..fd88777 100644 break; case STATUS_TIMEOUT: -@@ -762,7 +776,6 @@ static NTSTATUS get_io_avail_mode( HANDLE handle, enum server_fd_type type, BOOL +@@ -777,7 +791,6 @@ static NTSTATUS get_io_avail_mode( HANDLE handle, enum server_fd_type type, BOOL return status; } @@ -126,7 +126,7 @@ index 79daec5..fd88777 100644 /****************************************************************************** * NtReadFile [NTDLL.@] * ZwReadFile [NTDLL.@] -@@ -858,38 +871,9 @@ NTSTATUS WINAPI NtReadFile(HANDLE hFile, HANDLE hEvent, +@@ -873,43 +886,9 @@ NTSTATUS WINAPI NtReadFile(HANDLE hFile, HANDLE hEvent, for (;;) { @@ -148,6 +148,11 @@ index 79daec5..fd88777 100644 - status = length ? STATUS_END_OF_FILE : STATUS_SUCCESS; - goto done; - case FD_TYPE_SERIAL: +- if (!length) +- { +- status = STATUS_SUCCESS; +- goto done; +- } - break; - default: - status = STATUS_PIPE_BROKEN; @@ -168,5 +173,5 @@ index 79daec5..fd88777 100644 if (async_read) { -- -2.4.0 +2.7.1 diff --git a/patches/kernel32-Named_Pipe/0010-ntdll-Add-handling-for-partially-received-messages-i.patch b/patches/kernel32-Named_Pipe/0010-ntdll-Add-handling-for-partially-received-messages-i.patch index 6447342f..9a9c9e46 100644 --- a/patches/kernel32-Named_Pipe/0010-ntdll-Add-handling-for-partially-received-messages-i.patch +++ b/patches/kernel32-Named_Pipe/0010-ntdll-Add-handling-for-partially-received-messages-i.patch @@ -1,4 +1,4 @@ -From cdb1ae761d777e7a1cf4c73edd946c94d1e73700 Mon Sep 17 00:00:00 2001 +From 39c68a41a2f5f9bf8fd95c278786f70050ff765b Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 11 Aug 2014 05:01:11 +0200 Subject: ntdll: Add handling for partially received messages in NtReadFile. @@ -248,7 +248,7 @@ index 5f5553b..3811ccd 100644 ok(overlapped.InternalHigh == 0, "expected 0, got %lu\n", overlapped.InternalHigh); diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index fd6c605..18ee740 100644 +index 75ad1aa..da0948c 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -490,7 +490,7 @@ NTSTATUS FILE_GetNtStatus(void) @@ -294,7 +294,7 @@ index fd6c605..18ee740 100644 @@ -577,11 +586,18 @@ static NTSTATUS read_unix_fd(int fd, char *buf, ULONG *total, ULONG length, return length ? STATUS_END_OF_FILE : STATUS_SUCCESS; case FD_TYPE_SERIAL: - return STATUS_PENDING; + return length ? STATUS_PENDING : STATUS_SUCCESS; + case FD_TYPE_PIPE: + { + NTSTATUS status = unix_fd_avail( fd, &result ); @@ -321,5 +321,5 @@ index fd6c605..18ee740 100644 io_status->u.Status = status; io_status->Information = total; -- -2.6.2 +2.7.1 diff --git a/patches/ntdll-Exception/0001-ntdll-Throw-exception-if-invalid-handle-is-passed-to.patch b/patches/ntdll-Exception/0001-ntdll-Throw-exception-if-invalid-handle-is-passed-to.patch index 9ee81fa5..ab979c9f 100644 --- a/patches/ntdll-Exception/0001-ntdll-Throw-exception-if-invalid-handle-is-passed-to.patch +++ b/patches/ntdll-Exception/0001-ntdll-Throw-exception-if-invalid-handle-is-passed-to.patch @@ -1,4 +1,4 @@ -From 1d4383d08858f302927f08138bbe81093efbfd14 Mon Sep 17 00:00:00 2001 +From 0cdb31619be9eda07a99f339e1072423b613bb5d Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 28 Sep 2014 22:42:46 +0200 Subject: ntdll: Throw exception if invalid handle is passed to NtClose and @@ -10,7 +10,7 @@ Subject: ntdll: Throw exception if invalid handle is passed to NtClose and 2 files changed, 92 insertions(+) diff --git a/dlls/ntdll/om.c b/dlls/ntdll/om.c -index 47a2614..bcc6d69 100644 +index 3fadba7..6527501 100644 --- a/dlls/ntdll/om.c +++ b/dlls/ntdll/om.c @@ -38,6 +38,7 @@ @@ -21,7 +21,7 @@ index 47a2614..bcc6d69 100644 WINE_DEFAULT_DEBUG_CHANNEL(ntdll); -@@ -343,6 +344,13 @@ NTSTATUS WINAPI NtDuplicateObject( HANDLE source_process, HANDLE source, +@@ -377,6 +378,13 @@ NTSTATUS WINAPI NtDuplicateObject( HANDLE source_process, HANDLE source, return ret; } @@ -35,7 +35,7 @@ index 47a2614..bcc6d69 100644 /* Everquest 2 / Pirates of the Burning Sea hooks NtClose, so we need a wrapper */ NTSTATUS close_handle( HANDLE handle ) { -@@ -356,6 +364,25 @@ NTSTATUS close_handle( HANDLE handle ) +@@ -390,6 +398,25 @@ NTSTATUS close_handle( HANDLE handle ) } SERVER_END_REQ; if (fd != -1) close( fd ); @@ -62,10 +62,10 @@ index 47a2614..bcc6d69 100644 } diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c -index 5cbab71..7a97ae5 100644 +index c62dcb3..440655c 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c -@@ -53,6 +53,7 @@ static NTSTATUS (WINAPI *pNtTerminateProcess)(HANDLE handle, LONG exit_code); +@@ -52,6 +52,7 @@ static NTSTATUS (WINAPI *pNtTerminateProcess)(HANDLE handle, LONG exit_code); static NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG); static NTSTATUS (WINAPI *pNtSetInformationProcess)(HANDLE, PROCESSINFOCLASS, PVOID, ULONG); static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL); @@ -73,11 +73,11 @@ index 5cbab71..7a97ae5 100644 #if defined(__x86_64__) static BOOLEAN (CDECL *pRtlAddFunctionTable)(RUNTIME_FUNCTION*, DWORD, DWORD64); -@@ -938,6 +939,16 @@ static void test_debugger(void) - /* here we handle exception */ - } +@@ -963,6 +964,16 @@ static void test_debugger(void) + + if (stage == 10) continuestatus = DBG_EXCEPTION_NOT_HANDLED; } -+ else if (stage == 7 || stage == 8) ++ else if (stage == 11 || stage == 12) + { + ok(de.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_INVALID_HANDLE, + "unexpected exception code %08x, expected %08x\n", de.u.Exception.ExceptionRecord.ExceptionCode, @@ -85,12 +85,12 @@ index 5cbab71..7a97ae5 100644 + ok(de.u.Exception.ExceptionRecord.NumberParameters == 0, + "unexpected number of parameters %d, expected 0\n", de.u.Exception.ExceptionRecord.NumberParameters); + -+ if (stage == 8) continuestatus = DBG_EXCEPTION_NOT_HANDLED; ++ if (stage == 12) continuestatus = DBG_EXCEPTION_NOT_HANDLED; + } else ok(FALSE, "unexpected stage %x\n", stage); -@@ -1791,6 +1802,53 @@ static void test_ripevent(DWORD numexc) +@@ -2078,6 +2089,53 @@ static void test_breakpoint(DWORD numexc) pRtlRemoveVectoredExceptionHandler(vectored_handler); } @@ -144,7 +144,7 @@ index 5cbab71..7a97ae5 100644 static void test_vectored_continue_handler(void) { PVOID handler1, handler2; -@@ -1843,6 +1901,7 @@ START_TEST(exception) +@@ -2130,6 +2188,7 @@ START_TEST(exception) pNtGetContextThread = (void *)GetProcAddress( hntdll, "NtGetContextThread" ); pNtSetContextThread = (void *)GetProcAddress( hntdll, "NtSetContextThread" ); pNtReadVirtualMemory = (void *)GetProcAddress( hntdll, "NtReadVirtualMemory" ); @@ -152,33 +152,33 @@ index 5cbab71..7a97ae5 100644 pRtlUnwind = (void *)GetProcAddress( hntdll, "RtlUnwind" ); pRtlRaiseException = (void *)GetProcAddress( hntdll, "RtlRaiseException" ); pNtTerminateProcess = (void *)GetProcAddress( hntdll, "NtTerminateProcess" ); -@@ -1910,6 +1969,10 @@ START_TEST(exception) - test_ripevent(0); - test_stage = 6; - test_ripevent(1); -+ test_stage = 7; +@@ -2205,6 +2264,10 @@ START_TEST(exception) + test_breakpoint(0); + test_stage = 10; + test_breakpoint(1); ++ test_stage = 11; + test_closehandle(0); -+ test_stage = 8; ++ test_stage = 12; + test_closehandle(1); } else skip( "RtlRaiseException not found\n" ); -@@ -1923,6 +1986,7 @@ START_TEST(exception) - test_rtlraiseexception(); - test_outputdebugstring(1, FALSE); +@@ -2220,6 +2283,7 @@ START_TEST(exception) test_ripevent(1); + test_debug_service(1); + test_breakpoint(1); + test_closehandle(0); test_vectored_continue_handler(); test_debugger(); test_simd_exceptions(); -@@ -1942,6 +2006,7 @@ START_TEST(exception) - - test_outputdebugstring(1, FALSE); +@@ -2241,6 +2305,7 @@ START_TEST(exception) test_ripevent(1); + test_debug_service(1); + test_breakpoint(1); + test_closehandle(0); test_vectored_continue_handler(); test_virtual_unwind(); -- -2.1.3 +2.7.1 diff --git a/patches/ntdll-Exception/0002-ntdll-OutputDebugString-should-throw-the-exception-a.patch b/patches/ntdll-Exception/0002-ntdll-OutputDebugString-should-throw-the-exception-a.patch index 7a907500..08a9a455 100644 --- a/patches/ntdll-Exception/0002-ntdll-OutputDebugString-should-throw-the-exception-a.patch +++ b/patches/ntdll-Exception/0002-ntdll-OutputDebugString-should-throw-the-exception-a.patch @@ -1,4 +1,4 @@ -From 51935986a1e973ab26dc3035905a47e1f19c6062 Mon Sep 17 00:00:00 2001 +From 21a4d707055fc3e7781fbefec814095cd109fcd2 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 28 Sep 2014 23:39:51 +0200 Subject: ntdll: OutputDebugString should throw the exception a second time, if @@ -38,10 +38,10 @@ index d4d66b2..981661b 100644 if (!mutex_inited) { diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c -index 7a97ae5..b0f0fac 100644 +index 440655c..70ccf82 100644 --- a/dlls/ntdll/tests/exception.c +++ b/dlls/ntdll/tests/exception.c -@@ -1727,7 +1727,7 @@ static LONG CALLBACK outputdebugstring_vectored_handler(EXCEPTION_POINTERS *Exce +@@ -1780,7 +1780,7 @@ static LONG CALLBACK outputdebugstring_vectored_handler(EXCEPTION_POINTERS *Exce return EXCEPTION_CONTINUE_SEARCH; } @@ -50,7 +50,7 @@ index 7a97ae5..b0f0fac 100644 { PVOID vectored_handler; -@@ -1742,13 +1742,8 @@ static void test_outputdebugstring(DWORD numexc, BOOL todo) +@@ -1795,13 +1795,8 @@ static void test_outputdebugstring(DWORD numexc, BOOL todo) outputdebugstring_exceptions = 0; OutputDebugStringA("Hello World"); @@ -66,7 +66,7 @@ index 7a97ae5..b0f0fac 100644 pRtlRemoveVectoredExceptionHandler(vectored_handler); } -@@ -1962,9 +1957,9 @@ START_TEST(exception) +@@ -2249,9 +2244,9 @@ START_TEST(exception) run_rtlraiseexception_test(EXCEPTION_BREAKPOINT); run_rtlraiseexception_test(EXCEPTION_INVALID_HANDLE); test_stage = 3; @@ -78,24 +78,24 @@ index 7a97ae5..b0f0fac 100644 test_stage = 5; test_ripevent(0); test_stage = 6; -@@ -1984,7 +1979,7 @@ START_TEST(exception) +@@ -2279,7 +2274,7 @@ START_TEST(exception) test_unwind(); test_exceptions(); test_rtlraiseexception(); - test_outputdebugstring(1, FALSE); + test_outputdebugstring(1); test_ripevent(1); - test_closehandle(0); - test_vectored_continue_handler(); -@@ -2004,7 +1999,7 @@ START_TEST(exception) + test_debug_service(1); + test_breakpoint(1); +@@ -2301,7 +2296,7 @@ START_TEST(exception) pRtlLookupFunctionEntry = (void *)GetProcAddress( hntdll, "RtlLookupFunctionEntry" ); - test_outputdebugstring(1, FALSE); + test_outputdebugstring(1); test_ripevent(1); - test_closehandle(0); - test_vectored_continue_handler(); + test_debug_service(1); + test_breakpoint(1); -- -2.1.3 +2.7.1 diff --git a/patches/ntdll-Loader_Machine_Type/0001-ntdll-Check-architecture-before-loading-module.patch b/patches/ntdll-Loader_Machine_Type/0001-ntdll-Check-architecture-before-loading-module.patch index 9635e456..08cc58e6 100644 --- a/patches/ntdll-Loader_Machine_Type/0001-ntdll-Check-architecture-before-loading-module.patch +++ b/patches/ntdll-Loader_Machine_Type/0001-ntdll-Check-architecture-before-loading-module.patch @@ -1,4 +1,4 @@ -From a01523c116eb0fa430e618683bea55f1e3b6b0d5 Mon Sep 17 00:00:00 2001 +From 70913f6c98d75d46e542ccb0cde9bdaf9e819b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 18 Jul 2015 04:52:55 +0200 Subject: ntdll: Check architecture before loading module. @@ -8,7 +8,7 @@ Subject: ntdll: Check architecture before loading module. 1 file changed, 131 insertions(+), 8 deletions(-) diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c -index 74feb97..ee1e5e2 100644 +index cb9a4e2..06c0475 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -2078,6 +2078,108 @@ done: @@ -153,7 +153,7 @@ index 74feb97..ee1e5e2 100644 @@ -2150,7 +2256,23 @@ static NTSTATUS find_dll_file( const WCHAR *load_path, const WCHAR *libname, attr.SecurityDescriptor = NULL; attr.SecurityQualityOfService = NULL; - if (NtOpenFile( handle, GENERIC_READ, &attr, &io, FILE_SHARE_READ|FILE_SHARE_DELETE, FILE_SYNCHRONOUS_IO_NONALERT|FILE_NON_DIRECTORY_FILE )) *handle = 0; + if (NtOpenFile( handle, GENERIC_READ|SYNCHRONIZE, &attr, &io, FILE_SHARE_READ|FILE_SHARE_DELETE, FILE_SYNCHRONOUS_IO_NONALERT|FILE_NON_DIRECTORY_FILE )) *handle = 0; - goto found; + #ifdef CURRENT_ARCH + if (*handle && check_arch) @@ -202,5 +202,5 @@ index 74feb97..ee1e5e2 100644 if (status != STATUS_BUFFER_TOO_SMALL) break; /* grow the buffer and retry */ -- -2.6.2 +2.7.1 diff --git a/patches/ntdll-Syscall_Wrappers/0002-ntdll-Use-wrapper-functions-for-syscalls.patch b/patches/ntdll-Syscall_Wrappers/0002-ntdll-Use-wrapper-functions-for-syscalls.patch index a1c69246..4cec9eed 100644 --- a/patches/ntdll-Syscall_Wrappers/0002-ntdll-Use-wrapper-functions-for-syscalls.patch +++ b/patches/ntdll-Syscall_Wrappers/0002-ntdll-Use-wrapper-functions-for-syscalls.patch @@ -1,4 +1,4 @@ -From 1a0efd8b70bcf35e4e12326ba77bfd93b4bf0367 Mon Sep 17 00:00:00 2001 +From 8508872c4fe953065444add329dec4e60ec03eb1 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Fri, 16 Oct 2015 02:32:58 +0200 Subject: ntdll: Use wrapper functions for syscalls. @@ -81,10 +81,10 @@ index 304b7f6..222fde9 100644 { NTSTATUS status; diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c -index 4faafe9..770cd3f 100644 +index 8a972c8..4787b25 100644 --- a/dlls/ntdll/directory.c +++ b/dlls/ntdll/directory.c -@@ -2236,7 +2236,8 @@ done: +@@ -2222,7 +2222,8 @@ done: * NtQueryDirectoryFile [NTDLL.@] * ZwQueryDirectoryFile [NTDLL.@] */ @@ -141,7 +141,7 @@ index 5c42010..12b2995 100644 HARDERROR_RESPONSE_OPTION ResponseOption, PHARDERROR_RESPONSE Response ) { diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index 1027b54..1cde19c 100644 +index e03d860..1544dbd 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -298,7 +298,8 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT @@ -174,7 +174,7 @@ index 1027b54..1cde19c 100644 PIO_APC_ROUTINE apc, void* apc_user, PIO_STATUS_BLOCK io_status, void* buffer, ULONG length, PLARGE_INTEGER offset, PULONG key) -@@ -1011,7 +1014,8 @@ err: +@@ -1016,7 +1019,8 @@ err: * NtReadFileScatter [NTDLL.@] * ZwReadFileScatter [NTDLL.@] */ @@ -184,7 +184,7 @@ index 1027b54..1cde19c 100644 PIO_STATUS_BLOCK io_status, FILE_SEGMENT_ELEMENT *segments, ULONG length, PLARGE_INTEGER offset, PULONG key ) { -@@ -1183,7 +1187,8 @@ static NTSTATUS set_pending_write( HANDLE device ) +@@ -1188,7 +1192,8 @@ static NTSTATUS set_pending_write( HANDLE device ) * The number of bytes written. * Failure: An NTSTATUS error code describing the error. */ @@ -194,7 +194,7 @@ index 1027b54..1cde19c 100644 PIO_APC_ROUTINE apc, void* apc_user, PIO_STATUS_BLOCK io_status, const void* buffer, ULONG length, -@@ -1417,7 +1422,8 @@ err: +@@ -1422,7 +1427,8 @@ err: * NtWriteFileGather [NTDLL.@] * ZwWriteFileGather [NTDLL.@] */ @@ -204,7 +204,7 @@ index 1027b54..1cde19c 100644 PIO_STATUS_BLOCK io_status, FILE_SEGMENT_ELEMENT *segments, ULONG length, PLARGE_INTEGER offset, PULONG key ) { -@@ -1606,7 +1612,8 @@ static void ignore_server_ioctl_struct_holes (ULONG code, const void *in_buffer, +@@ -1611,7 +1617,8 @@ static void ignore_server_ioctl_struct_holes (ULONG code, const void *in_buffer, * Success: 0. IoStatusBlock is updated. * Failure: An NTSTATUS error code describing the error. */ @@ -214,7 +214,7 @@ index 1027b54..1cde19c 100644 PIO_APC_ROUTINE apc, PVOID apc_context, PIO_STATUS_BLOCK io, ULONG code, PVOID in_buffer, ULONG in_size, -@@ -1670,7 +1677,8 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event, +@@ -1675,7 +1682,8 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event, * Success: 0. IoStatusBlock is updated. * Failure: An NTSTATUS error code describing the error. */ @@ -224,7 +224,7 @@ index 1027b54..1cde19c 100644 PVOID apc_context, PIO_STATUS_BLOCK io, ULONG code, PVOID in_buffer, ULONG in_size, PVOID out_buffer, ULONG out_size) { -@@ -1913,7 +1921,8 @@ static NTSTATUS read_changes_apc( void *user, IO_STATUS_BLOCK *iosb, +@@ -1918,7 +1926,8 @@ static NTSTATUS read_changes_apc( void *user, IO_STATUS_BLOCK *iosb, /****************************************************************************** * NtNotifyChangeDirectoryFile [NTDLL.@] */ @@ -234,7 +234,7 @@ index 1027b54..1cde19c 100644 void *apc_context, PIO_STATUS_BLOCK iosb, void *buffer, ULONG buffer_size, ULONG filter, BOOLEAN subtree ) { -@@ -1972,7 +1981,8 @@ NTSTATUS WINAPI NtNotifyChangeDirectoryFile( HANDLE handle, HANDLE event, PIO_AP +@@ -1977,7 +1986,8 @@ NTSTATUS WINAPI NtNotifyChangeDirectoryFile( HANDLE handle, HANDLE event, PIO_AP * Success: 0. IoStatusBlock is updated. * Failure: An NTSTATUS error code describing the error. */ @@ -244,7 +244,7 @@ index 1027b54..1cde19c 100644 IN HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID FsInformation, -@@ -2277,7 +2287,8 @@ static NTSTATUS fill_name_info( const ANSI_STRING *unix_name, FILE_NAME_INFORMAT +@@ -2282,7 +2292,8 @@ static NTSTATUS fill_name_info( const ANSI_STRING *unix_name, FILE_NAME_INFORMAT * Success: 0. IoStatusBlock and FileInformation are updated. * Failure: An NTSTATUS error code describing the error. */ @@ -254,7 +254,7 @@ index 1027b54..1cde19c 100644 PVOID ptr, LONG len, FILE_INFORMATION_CLASS class ) { static const size_t info_sizes[] = -@@ -2603,7 +2614,8 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io, +@@ -2608,7 +2619,8 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io, * Success: 0. io is updated. * Failure: An NTSTATUS error code describing the error. */ @@ -264,7 +264,7 @@ index 1027b54..1cde19c 100644 PVOID ptr, ULONG len, FILE_INFORMATION_CLASS class) { int fd, needs_close; -@@ -2900,7 +2912,8 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io, +@@ -2905,7 +2917,8 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io, /****************************************************************************** * NtQueryFullAttributesFile (NTDLL.@) */ @@ -274,7 +274,7 @@ index 1027b54..1cde19c 100644 FILE_NETWORK_OPEN_INFORMATION *info ) { ANSI_STRING unix_name; -@@ -2944,7 +2957,8 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr, +@@ -2949,7 +2962,8 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr, * NtQueryAttributesFile (NTDLL.@) * ZwQueryAttributesFile (NTDLL.@) */ @@ -284,7 +284,7 @@ index 1027b54..1cde19c 100644 { ANSI_STRING unix_name; NTSTATUS status; -@@ -3165,7 +3179,8 @@ static NTSTATUS get_device_info( int fd, FILE_FS_DEVICE_INFORMATION *info ) +@@ -3170,7 +3184,8 @@ static NTSTATUS get_device_info( int fd, FILE_FS_DEVICE_INFORMATION *info ) * Success: 0. io and buffer are updated. * Failure: An NTSTATUS error code describing the error. */ @@ -294,7 +294,7 @@ index 1027b54..1cde19c 100644 PVOID buffer, ULONG length, FS_INFORMATION_CLASS info_class ) { -@@ -3313,7 +3328,8 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, PIO_STATUS_BLOCK io +@@ -3318,7 +3333,8 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, PIO_STATUS_BLOCK io * Success: 0. Atrributes read into buffer * Failure: An NTSTATUS error code describing the error. */ @@ -304,7 +304,7 @@ index 1027b54..1cde19c 100644 BOOLEAN single_entry, PVOID ea_list, ULONG ea_list_len, PULONG ea_index, BOOLEAN restart ) { -@@ -3339,7 +3355,8 @@ NTSTATUS WINAPI NtQueryEaFile( HANDLE hFile, PIO_STATUS_BLOCK iosb, PVOID buffer +@@ -3344,7 +3360,8 @@ NTSTATUS WINAPI NtQueryEaFile( HANDLE hFile, PIO_STATUS_BLOCK iosb, PVOID buffer * Success: 0. Attributes are updated * Failure: An NTSTATUS error code describing the error. */ @@ -314,7 +314,7 @@ index 1027b54..1cde19c 100644 { FIXME("(%p,%p,%p,%d) stub\n", hFile, iosb, buffer, length); return STATUS_ACCESS_DENIED; -@@ -3359,7 +3376,8 @@ NTSTATUS WINAPI NtSetEaFile( HANDLE hFile, PIO_STATUS_BLOCK iosb, PVOID buffer, +@@ -3364,7 +3381,8 @@ NTSTATUS WINAPI NtSetEaFile( HANDLE hFile, PIO_STATUS_BLOCK iosb, PVOID buffer, * Success: 0. IoStatusBlock is updated. * Failure: An NTSTATUS error code describing the error. */ @@ -324,7 +324,7 @@ index 1027b54..1cde19c 100644 { NTSTATUS ret; HANDLE hEvent = NULL; -@@ -3401,7 +3419,8 @@ NTSTATUS WINAPI NtFlushBuffersFile( HANDLE hFile, IO_STATUS_BLOCK* IoStatusBlock +@@ -3406,7 +3424,8 @@ NTSTATUS WINAPI NtFlushBuffersFile( HANDLE hFile, IO_STATUS_BLOCK* IoStatusBlock * * */ @@ -334,7 +334,7 @@ index 1027b54..1cde19c 100644 PIO_APC_ROUTINE apc, void* apc_user, PIO_STATUS_BLOCK io_status, PLARGE_INTEGER offset, PLARGE_INTEGER count, ULONG* key, BOOLEAN dont_wait, -@@ -3473,7 +3492,8 @@ NTSTATUS WINAPI NtLockFile( HANDLE hFile, HANDLE lock_granted_event, +@@ -3478,7 +3497,8 @@ NTSTATUS WINAPI NtLockFile( HANDLE hFile, HANDLE lock_granted_event, * * */ @@ -344,7 +344,7 @@ index 1027b54..1cde19c 100644 PLARGE_INTEGER offset, PLARGE_INTEGER count, PULONG key ) { -@@ -3504,7 +3524,8 @@ NTSTATUS WINAPI NtUnlockFile( HANDLE hFile, PIO_STATUS_BLOCK io_status, +@@ -3509,7 +3529,8 @@ NTSTATUS WINAPI NtUnlockFile( HANDLE hFile, PIO_STATUS_BLOCK io_status, * * */ @@ -354,7 +354,7 @@ index 1027b54..1cde19c 100644 POBJECT_ATTRIBUTES attr, PIO_STATUS_BLOCK iosb, ULONG sharing, ULONG dispo, ULONG options, ULONG pipe_type, ULONG read_mode, -@@ -3563,7 +3584,8 @@ NTSTATUS WINAPI NtCreateNamedPipeFile( PHANDLE handle, ULONG access, +@@ -3568,7 +3589,8 @@ NTSTATUS WINAPI NtCreateNamedPipeFile( PHANDLE handle, ULONG access, * * */ @@ -364,7 +364,7 @@ index 1027b54..1cde19c 100644 { NTSTATUS status; HANDLE hFile; -@@ -3583,7 +3605,8 @@ NTSTATUS WINAPI NtDeleteFile( POBJECT_ATTRIBUTES ObjectAttributes ) +@@ -3588,7 +3610,8 @@ NTSTATUS WINAPI NtDeleteFile( POBJECT_ATTRIBUTES ObjectAttributes ) * * */ @@ -374,7 +374,7 @@ index 1027b54..1cde19c 100644 { TRACE("%p %p %p\n", hFile, iosb, io_status ); -@@ -3604,7 +3627,8 @@ NTSTATUS WINAPI NtCancelIoFileEx( HANDLE hFile, PIO_STATUS_BLOCK iosb, PIO_STATU +@@ -3609,7 +3632,8 @@ NTSTATUS WINAPI NtCancelIoFileEx( HANDLE hFile, PIO_STATUS_BLOCK iosb, PIO_STATU * * */ @@ -384,7 +384,7 @@ index 1027b54..1cde19c 100644 { TRACE("%p %p\n", hFile, io_status ); -@@ -3637,7 +3661,8 @@ NTSTATUS WINAPI NtCancelIoFile( HANDLE hFile, PIO_STATUS_BLOCK io_status ) +@@ -3642,7 +3666,8 @@ NTSTATUS WINAPI NtCancelIoFile( HANDLE hFile, PIO_STATUS_BLOCK io_status ) * RETURNS * An NT status code */ @@ -395,7 +395,7 @@ index 1027b54..1cde19c 100644 ULONG CreateOptions, ULONG MailslotQuota, ULONG MaxMessageSize, PLARGE_INTEGER TimeOut) diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c -index 74feb97..e5ea736 100644 +index cb9a4e2..2b3ad9e 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -3200,7 +3200,8 @@ PVOID WINAPI RtlPcToFileHeader( PVOID pc, PVOID *address ) @@ -419,7 +419,7 @@ index 74feb97..e5ea736 100644 FIXME("(%p), stub!\n",DriverServiceName); return STATUS_NOT_IMPLEMENTED; diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c -index 8ea1ddd..19d5b6e 100644 +index 0a96efe..9270fc7 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c @@ -74,7 +74,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(ntdll); @@ -632,7 +632,7 @@ index 8ea1ddd..19d5b6e 100644 ULONG Interval, KPROFILE_SOURCE Source) { -@@ -1676,7 +1697,8 @@ static NTSTATUS create_logical_proc_info(SYSTEM_LOGICAL_PROCESSOR_INFORMATION ** +@@ -1838,7 +1859,8 @@ static NTSTATUS create_logical_proc_info(SYSTEM_LOGICAL_PROCESSOR_INFORMATION ** * Length size of the structure * ResultLength Data written */ @@ -642,7 +642,7 @@ index 8ea1ddd..19d5b6e 100644 IN SYSTEM_INFORMATION_CLASS SystemInformationClass, OUT PVOID SystemInformation, IN ULONG Length, -@@ -2142,7 +2164,8 @@ NTSTATUS WINAPI NtQuerySystemInformation( +@@ -2372,7 +2394,8 @@ NTSTATUS WINAPI NtQuerySystemInformationEx(SYSTEM_INFORMATION_CLASS SystemInform * NtSetSystemInformation [NTDLL.@] * ZwSetSystemInformation [NTDLL.@] */ @@ -652,7 +652,7 @@ index 8ea1ddd..19d5b6e 100644 { FIXME("(0x%08x,%p,0x%08x) stub\n",SystemInformationClass,SystemInformation,Length); return STATUS_SUCCESS; -@@ -2152,7 +2175,8 @@ NTSTATUS WINAPI NtSetSystemInformation(SYSTEM_INFORMATION_CLASS SystemInformatio +@@ -2382,7 +2405,8 @@ NTSTATUS WINAPI NtSetSystemInformation(SYSTEM_INFORMATION_CLASS SystemInformatio * NtCreatePagingFile [NTDLL.@] * ZwCreatePagingFile [NTDLL.@] */ @@ -662,7 +662,7 @@ index 8ea1ddd..19d5b6e 100644 PUNICODE_STRING PageFileName, PLARGE_INTEGER MinimumSize, PLARGE_INTEGER MaximumSize, -@@ -2167,7 +2191,8 @@ NTSTATUS WINAPI NtCreatePagingFile( +@@ -2397,7 +2421,8 @@ NTSTATUS WINAPI NtCreatePagingFile( * * writes a string to the nt-textmode screen eg. during startup */ @@ -672,7 +672,7 @@ index 8ea1ddd..19d5b6e 100644 { STRING stringA; NTSTATUS ret; -@@ -2184,7 +2209,8 @@ NTSTATUS WINAPI NtDisplayString ( PUNICODE_STRING string ) +@@ -2414,7 +2439,8 @@ NTSTATUS WINAPI NtDisplayString ( PUNICODE_STRING string ) * NtInitiatePowerAction [NTDLL.@] * */ @@ -682,7 +682,7 @@ index 8ea1ddd..19d5b6e 100644 IN POWER_ACTION SystemAction, IN SYSTEM_POWER_STATE MinSystemState, IN ULONG Flags, -@@ -2228,7 +2254,8 @@ static ULONG mhz_from_cpuinfo(void) +@@ -2458,7 +2484,8 @@ static ULONG mhz_from_cpuinfo(void) * NtPowerInformation [NTDLL.@] * */ @@ -692,7 +692,7 @@ index 8ea1ddd..19d5b6e 100644 IN POWER_INFORMATION_LEVEL InformationLevel, IN PVOID lpInputBuffer, IN ULONG nInputBufferSize, -@@ -2418,7 +2445,8 @@ NTSTATUS WINAPI NtPowerInformation( +@@ -2648,7 +2675,8 @@ NTSTATUS WINAPI NtPowerInformation( * NtShutdownSystem [NTDLL.@] * */ @@ -702,7 +702,7 @@ index 8ea1ddd..19d5b6e 100644 { FIXME("%d\n",Action); return STATUS_SUCCESS; -@@ -2427,7 +2455,8 @@ NTSTATUS WINAPI NtShutdownSystem(SHUTDOWN_ACTION Action) +@@ -2657,7 +2685,8 @@ NTSTATUS WINAPI NtShutdownSystem(SHUTDOWN_ACTION Action) /****************************************************************************** * NtAllocateLocallyUniqueId (NTDLL.@) */ @@ -712,7 +712,7 @@ index 8ea1ddd..19d5b6e 100644 { NTSTATUS status; -@@ -2485,7 +2514,8 @@ ULONGLONG WINAPI VerSetConditionMask( ULONGLONG dwlConditionMask, DWORD dwTypeBi +@@ -2715,7 +2744,8 @@ ULONGLONG WINAPI VerSetConditionMask( ULONGLONG dwlConditionMask, DWORD dwTypeBi * NtAccessCheckAndAuditAlarm (NTDLL.@) * ZwAccessCheckAndAuditAlarm (NTDLL.@) */ @@ -722,7 +722,7 @@ index 8ea1ddd..19d5b6e 100644 PUNICODE_STRING ObjectName, PSECURITY_DESCRIPTOR SecurityDescriptor, ACCESS_MASK DesiredAccess, PGENERIC_MAPPING GenericMapping, BOOLEAN ObjectCreation, PACCESS_MASK GrantedAccess, PBOOLEAN AccessStatus, PBOOLEAN GenerateOnClose) -@@ -2501,7 +2531,8 @@ NTSTATUS WINAPI NtAccessCheckAndAuditAlarm(PUNICODE_STRING SubsystemName, HANDLE +@@ -2731,7 +2761,8 @@ NTSTATUS WINAPI NtAccessCheckAndAuditAlarm(PUNICODE_STRING SubsystemName, HANDLE * NtSystemDebugControl (NTDLL.@) * ZwSystemDebugControl (NTDLL.@) */ @@ -950,7 +950,7 @@ index ca9462a..37c08f1 100644 { NTSTATUS status; diff --git a/dlls/ntdll/reg.c b/dlls/ntdll/reg.c -index 0701426..b74c464 100644 +index 788f1a7..716e35e 100644 --- a/dlls/ntdll/reg.c +++ b/dlls/ntdll/reg.c @@ -51,7 +51,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(reg); @@ -983,7 +983,7 @@ index 0701426..b74c464 100644 { FIXME( "(%p %s)\n", handle, debugstr_us(name) ); return STATUS_NOT_IMPLEMENTED; -@@ -124,7 +127,8 @@ NTSTATUS WINAPI RtlpNtCreateKey( PHANDLE retkey, ACCESS_MASK access, const OBJEC +@@ -153,7 +156,8 @@ static NTSTATUS open_key( PHANDLE retkey, ACCESS_MASK access, const OBJECT_ATTRI * NtOpenKeyEx [NTDLL.@] * ZwOpenKeyEx [NTDLL.@] */ @@ -991,9 +991,9 @@ index 0701426..b74c464 100644 +DEFINE_SYSCALL_ENTRYPOINT( NtOpenKeyEx, 4 ); +NTSTATUS WINAPI SYSCALL(NtOpenKeyEx)( PHANDLE retkey, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr, ULONG options ) { - NTSTATUS ret; - DWORD len; -@@ -161,19 +165,22 @@ NTSTATUS WINAPI NtOpenKeyEx( PHANDLE retkey, ACCESS_MASK access, const OBJECT_AT + return open_key( retkey, access, attr, options ); + } +@@ -166,19 +170,22 @@ NTSTATUS WINAPI NtOpenKeyEx( PHANDLE retkey, ACCESS_MASK access, const OBJECT_AT * IN ACCESS_MASK access * IN POBJECT_ATTRIBUTES attr */ @@ -1001,7 +1001,7 @@ index 0701426..b74c464 100644 +DEFINE_SYSCALL_ENTRYPOINT( NtOpenKey, 3 ); +NTSTATUS WINAPI SYSCALL(NtOpenKey)( PHANDLE retkey, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr ) { - return NtOpenKeyEx( retkey, access, attr, 0 ); + return open_key( retkey, access, attr, 0 ); } -NTSTATUS WINAPI NtOpenKeyTransactedEx( PHANDLE retkey, ACCESS_MASK access, const OBJECT_ATTRIBUTES *attr, @@ -1019,7 +1019,7 @@ index 0701426..b74c464 100644 HANDLE transaction ) { return NtOpenKeyTransactedEx( retkey, access, attr, 0, transaction ); -@@ -195,7 +202,8 @@ NTSTATUS WINAPI RtlpNtOpenKey( PHANDLE retkey, ACCESS_MASK access, OBJECT_ATTRIB +@@ -200,7 +207,8 @@ NTSTATUS WINAPI RtlpNtOpenKey( PHANDLE retkey, ACCESS_MASK access, OBJECT_ATTRIB * NtDeleteKey [NTDLL.@] * ZwDeleteKey [NTDLL.@] */ @@ -1029,7 +1029,7 @@ index 0701426..b74c464 100644 { NTSTATUS ret; -@@ -224,7 +232,8 @@ NTSTATUS WINAPI RtlpNtMakeTemporaryKey( HANDLE hkey ) +@@ -229,7 +237,8 @@ NTSTATUS WINAPI RtlpNtMakeTemporaryKey( HANDLE hkey ) * NtDeleteValueKey [NTDLL.@] * ZwDeleteValueKey [NTDLL.@] */ @@ -1039,7 +1039,7 @@ index 0701426..b74c464 100644 { NTSTATUS ret; -@@ -350,7 +359,8 @@ static NTSTATUS enumerate_key( HANDLE handle, int index, KEY_INFORMATION_CLASS i +@@ -373,7 +382,8 @@ static NTSTATUS enumerate_key( HANDLE handle, int index, KEY_INFORMATION_CLASS i * NOTES * the name copied into the buffer is NOT 0-terminated */ @@ -1049,7 +1049,7 @@ index 0701426..b74c464 100644 void *info, DWORD length, DWORD *result_len ) { /* -1 means query key, so avoid it here */ -@@ -409,7 +419,8 @@ NTSTATUS WINAPI RtlpNtEnumerateSubKey( HANDLE handle, UNICODE_STRING *out, ULONG +@@ -432,7 +442,8 @@ NTSTATUS WINAPI RtlpNtEnumerateSubKey( HANDLE handle, UNICODE_STRING *out, ULONG * NtQueryKey [NTDLL.@] * ZwQueryKey [NTDLL.@] */ @@ -1059,7 +1059,7 @@ index 0701426..b74c464 100644 void *info, DWORD length, DWORD *result_len ) { return enumerate_key( handle, -1, info_class, info, length, result_len ); -@@ -464,7 +475,8 @@ static void copy_key_value_info( KEY_VALUE_INFORMATION_CLASS info_class, void *i +@@ -487,7 +498,8 @@ static void copy_key_value_info( KEY_VALUE_INFORMATION_CLASS info_class, void *i * NtEnumerateValueKey [NTDLL.@] * ZwEnumerateValueKey [NTDLL.@] */ @@ -1069,7 +1069,7 @@ index 0701426..b74c464 100644 KEY_VALUE_INFORMATION_CLASS info_class, void *info, DWORD length, DWORD *result_len ) { -@@ -512,7 +524,8 @@ NTSTATUS WINAPI NtEnumerateValueKey( HANDLE handle, ULONG index, +@@ -535,7 +547,8 @@ NTSTATUS WINAPI NtEnumerateValueKey( HANDLE handle, ULONG index, * NOTES * the name in the KeyValueInformation is never set */ @@ -1079,7 +1079,7 @@ index 0701426..b74c464 100644 KEY_VALUE_INFORMATION_CLASS info_class, void *info, DWORD length, DWORD *result_len ) { -@@ -614,7 +627,8 @@ NTSTATUS WINAPI RtlpNtQueryValueKey( HANDLE handle, ULONG *result_type, PBYTE de +@@ -637,7 +650,8 @@ NTSTATUS WINAPI RtlpNtQueryValueKey( HANDLE handle, ULONG *result_type, PBYTE de * NtFlushKey [NTDLL.@] * ZwFlushKey [NTDLL.@] */ @@ -1089,7 +1089,7 @@ index 0701426..b74c464 100644 { NTSTATUS ret; -@@ -634,7 +648,8 @@ NTSTATUS WINAPI NtFlushKey(HANDLE key) +@@ -657,7 +671,8 @@ NTSTATUS WINAPI NtFlushKey(HANDLE key) * NtLoadKey [NTDLL.@] * ZwLoadKey [NTDLL.@] */ @@ -1099,7 +1099,7 @@ index 0701426..b74c464 100644 { NTSTATUS ret; HANDLE hive; -@@ -664,7 +679,8 @@ NTSTATUS WINAPI NtLoadKey( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *fil +@@ -687,7 +702,8 @@ NTSTATUS WINAPI NtLoadKey( const OBJECT_ATTRIBUTES *attr, OBJECT_ATTRIBUTES *fil * NtNotifyChangeMultipleKeys [NTDLL.@] * ZwNotifyChangeMultipleKeys [NTDLL.@] */ @@ -1109,7 +1109,7 @@ index 0701426..b74c464 100644 HANDLE KeyHandle, ULONG Count, OBJECT_ATTRIBUTES *SubordinateObjects, -@@ -720,7 +736,8 @@ NTSTATUS WINAPI NtNotifyChangeMultipleKeys( +@@ -743,7 +759,8 @@ NTSTATUS WINAPI NtNotifyChangeMultipleKeys( * NtNotifyChangeKey [NTDLL.@] * ZwNotifyChangeKey [NTDLL.@] */ @@ -1119,7 +1119,7 @@ index 0701426..b74c464 100644 IN HANDLE KeyHandle, IN HANDLE Event, IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, -@@ -742,7 +759,8 @@ NTSTATUS WINAPI NtNotifyChangeKey( +@@ -765,7 +782,8 @@ NTSTATUS WINAPI NtNotifyChangeKey( * ZwQueryMultipleValueKey */ @@ -1129,7 +1129,7 @@ index 0701426..b74c464 100644 HANDLE KeyHandle, PKEY_MULTIPLE_VALUE_INFORMATION ListOfValuesToQuery, ULONG NumberOfItems, -@@ -760,7 +778,8 @@ NTSTATUS WINAPI NtQueryMultipleValueKey( +@@ -783,7 +801,8 @@ NTSTATUS WINAPI NtQueryMultipleValueKey( * NtReplaceKey [NTDLL.@] * ZwReplaceKey [NTDLL.@] */ @@ -1139,7 +1139,7 @@ index 0701426..b74c464 100644 IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE Key, IN POBJECT_ATTRIBUTES ReplacedObjectAttributes) -@@ -773,7 +792,8 @@ NTSTATUS WINAPI NtReplaceKey( +@@ -796,7 +815,8 @@ NTSTATUS WINAPI NtReplaceKey( * NtRestoreKey [NTDLL.@] * ZwRestoreKey [NTDLL.@] */ @@ -1149,7 +1149,7 @@ index 0701426..b74c464 100644 HANDLE KeyHandle, HANDLE FileHandle, ULONG RestoreFlags) -@@ -786,7 +806,8 @@ NTSTATUS WINAPI NtRestoreKey( +@@ -809,7 +829,8 @@ NTSTATUS WINAPI NtRestoreKey( * NtSaveKey [NTDLL.@] * ZwSaveKey [NTDLL.@] */ @@ -1159,7 +1159,7 @@ index 0701426..b74c464 100644 { NTSTATUS ret; -@@ -806,7 +827,8 @@ NTSTATUS WINAPI NtSaveKey(IN HANDLE KeyHandle, IN HANDLE FileHandle) +@@ -829,7 +850,8 @@ NTSTATUS WINAPI NtSaveKey(IN HANDLE KeyHandle, IN HANDLE FileHandle) * NtSetInformationKey [NTDLL.@] * ZwSetInformationKey [NTDLL.@] */ @@ -1169,7 +1169,7 @@ index 0701426..b74c464 100644 IN HANDLE KeyHandle, IN const int KeyInformationClass, IN PVOID KeyInformation, -@@ -826,7 +848,8 @@ NTSTATUS WINAPI NtSetInformationKey( +@@ -849,7 +871,8 @@ NTSTATUS WINAPI NtSetInformationKey( * win95 does not care about count for REG_SZ and finds out the len by itself (js) * NT does definitely care (aj) */ @@ -1179,7 +1179,7 @@ index 0701426..b74c464 100644 ULONG type, const void *data, ULONG count ) { NTSTATUS ret; -@@ -865,7 +888,8 @@ NTSTATUS WINAPI RtlpNtSetValueKey( HANDLE hkey, ULONG type, const void *data, +@@ -888,7 +911,8 @@ NTSTATUS WINAPI RtlpNtSetValueKey( HANDLE hkey, ULONG type, const void *data, * NtUnloadKey [NTDLL.@] * ZwUnloadKey [NTDLL.@] */ @@ -1189,7 +1189,7 @@ index 0701426..b74c464 100644 { NTSTATUS ret; -@@ -1472,7 +1496,8 @@ NTSTATUS WINAPI RtlWriteRegistryValue( ULONG RelativeTo, PCWSTR path, PCWSTR nam +@@ -1495,7 +1519,8 @@ NTSTATUS WINAPI RtlWriteRegistryValue( ULONG RelativeTo, PCWSTR path, PCWSTR nam * unless there is some app which explicitly depends on that, there is * no good reason to reproduce that. */ @@ -1298,7 +1298,7 @@ index 125c86e..b778c9e 100644 PSECURITY_DESCRIPTOR SecurityDescriptor) { diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c -index 1f6da96..10e06e0 100644 +index 5ee9f45..313eddf 100644 --- a/dlls/ntdll/signal_arm.c +++ b/dlls/ntdll/signal_arm.c @@ -1122,7 +1122,8 @@ void WINAPI RtlUnwind( void *endframe, void *target_ip, EXCEPTION_RECORD *rec, v @@ -1326,10 +1326,10 @@ index 3a41c84..905e7cc 100644 NTSTATUS status = raise_exception( rec, context, first_chance ); if (status == STATUS_SUCCESS) NtSetContextThread( GetCurrentThread(), context ); diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c -index 5c3aa819..fdb48371 100644 +index 5708aae..910ac8d 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c -@@ -2617,7 +2617,8 @@ DEFINE_REGS_ENTRYPOINT( RtlUnwind, 4 ) +@@ -2640,7 +2640,8 @@ DEFINE_REGS_ENTRYPOINT( RtlUnwind, 4 ) /******************************************************************* * NtRaiseException (NTDLL.@) */ @@ -1339,7 +1339,7 @@ index 5c3aa819..fdb48371 100644 { NTSTATUS status = raise_exception( rec, context, first_chance ); if (status == STATUS_SUCCESS) -@@ -2856,4 +2857,12 @@ __ASM_GLOBAL_FUNC(call_exception_handler, +@@ -2879,4 +2880,12 @@ __ASM_GLOBAL_FUNC(call_exception_handler, __ASM_CFI(".cfi_same_value %ebp\n\t") "ret $20" ) /* (*4) */ @@ -1367,10 +1367,10 @@ index 886da86..9ec38f5 100644 NTSTATUS status = raise_exception( rec, context, first_chance ); if (status == STATUS_SUCCESS) NtSetContextThread( GetCurrentThread(), context ); diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c -index 524de68..574b086 100644 +index 84802b2..931413d 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c -@@ -3617,7 +3617,8 @@ EXCEPTION_DISPOSITION WINAPI __C_specific_handler( EXCEPTION_RECORD *rec, +@@ -3689,7 +3689,8 @@ EXCEPTION_DISPOSITION WINAPI __C_specific_handler( EXCEPTION_RECORD *rec, /******************************************************************* * NtRaiseException (NTDLL.@) */ @@ -1815,7 +1815,7 @@ index 6892732..341a71a 100644 { NTSTATUS status; diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c -index aaf7a71..41f93be 100644 +index 1455eb1..8215d5a 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -599,7 +599,8 @@ ULONG WINAPI RtlGetNtGlobalFlags(void) @@ -1908,7 +1908,7 @@ index aaf7a71..41f93be 100644 { NTSTATUS ret; DWORD dummy, i; -@@ -910,7 +919,8 @@ NTSTATUS WINAPI NtGetContextThread( HANDLE handle, CONTEXT *context ) +@@ -912,7 +921,8 @@ NTSTATUS WINAPI NtGetContextThread( HANDLE handle, CONTEXT *context ) * NtQueryInformationThread (NTDLL.@) * ZwQueryInformationThread (NTDLL.@) */ @@ -1918,7 +1918,7 @@ index aaf7a71..41f93be 100644 void *data, ULONG length, ULONG *ret_len ) { NTSTATUS status; -@@ -1154,7 +1164,8 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class, +@@ -1156,7 +1166,8 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class, * NtSetInformationThread (NTDLL.@) * ZwSetInformationThread (NTDLL.@) */ @@ -1928,7 +1928,7 @@ index aaf7a71..41f93be 100644 LPCVOID data, ULONG length ) { NTSTATUS status; -@@ -1313,7 +1324,8 @@ NTSTATUS WINAPI NtSetInformationThread( HANDLE handle, THREADINFOCLASS class, +@@ -1315,7 +1326,8 @@ NTSTATUS WINAPI NtSetInformationThread( HANDLE handle, THREADINFOCLASS class, * Return the processor, on which the thread is running * */ @@ -1983,7 +1983,7 @@ index 96ffcfa..e93e820 100644 struct timeval tv; time_t tm_t; diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c -index 4d4bc3b..f30d94a 100644 +index d6319d82..94f6cd2 100644 --- a/dlls/ntdll/virtual.c +++ b/dlls/ntdll/virtual.c @@ -1857,7 +1857,8 @@ void virtual_set_large_address_space(void) @@ -2147,5 +2147,5 @@ index 4d4bc3b..f30d94a 100644 struct file_view *view1, *view2; struct stat st1, st2; -- -2.6.2 +2.7.1 diff --git a/patches/ntdll-WinSqm/0001-ntdll-Add-stubs-for-WinSqmStartSession-WinSqmEndSess.patch b/patches/ntdll-WinSqm/0001-ntdll-Add-stubs-for-WinSqmStartSession-WinSqmEndSess.patch index e325cb1d..ebda5ca7 100644 --- a/patches/ntdll-WinSqm/0001-ntdll-Add-stubs-for-WinSqmStartSession-WinSqmEndSess.patch +++ b/patches/ntdll-WinSqm/0001-ntdll-Add-stubs-for-WinSqmStartSession-WinSqmEndSess.patch @@ -1,4 +1,4 @@ -From ff1be4d15b2114de6b785c164ddc27fd6993c6f8 Mon Sep 17 00:00:00 2001 +From 6318565d6da5c76eabe006a5c6b25fee7532f445 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Thu, 25 Dec 2014 12:36:28 -0700 Subject: ntdll: Add stubs for WinSqmStartSession / WinSqmEndSession. @@ -11,7 +11,7 @@ Based on a patch by Detlef Riekenberg. 3 files changed, 76 insertions(+) diff --git a/dlls/ntdll/misc.c b/dlls/ntdll/misc.c -index 2cfa900..7832d37 100644 +index 0f6c5df..bd8b358d 100644 --- a/dlls/ntdll/misc.c +++ b/dlls/ntdll/misc.c @@ -27,6 +27,8 @@ @@ -23,7 +23,7 @@ index 2cfa900..7832d37 100644 #include "wine/library.h" #include "wine/debug.h" #include "ntdll_misc.h" -@@ -328,6 +330,15 @@ void * __cdecl _lfind( const void *key, const void *base, unsigned int *nmemb, +@@ -330,6 +332,15 @@ void * __cdecl _lfind( const void *key, const void *base, unsigned int *nmemb, } /********************************************************************* @@ -39,11 +39,10 @@ index 2cfa900..7832d37 100644 * WinSqmIsOptedIn (NTDLL.@) */ BOOL WINAPI WinSqmIsOptedIn(void) -@@ -335,3 +346,12 @@ BOOL WINAPI WinSqmIsOptedIn(void) - FIXME("() stub\n"); +@@ -338,6 +349,15 @@ BOOL WINAPI WinSqmIsOptedIn(void) return FALSE; } -+ + +/********************************************************************* + * WinSqmStartSession (NTDLL.@) + */ @@ -52,18 +51,26 @@ index 2cfa900..7832d37 100644 + FIXME("(%p, 0x%x, 0x%x) stub!\n", unknown1, unknown2, unknown3); + return NULL; +} ++ + /****************************************************************************** + * EtwRegisterTraceGuidsW (NTDLL.@) + * diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec -index 28165ef..9225898 100644 +index 04e9548..f5e9275 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec -@@ -971,3 +971,5 @@ +@@ -1010,7 +1010,9 @@ + @ stdcall TpWaitForWait(ptr long) + @ stdcall TpWaitForWork(ptr long) @ stdcall -ret64 VerSetConditionMask(int64 long long) +@ stdcall WinSqmEndSession(ptr) @ stdcall WinSqmIsOptedIn() +@ stdcall WinSqmStartSession(ptr long long) @ stdcall ZwAcceptConnectPort(ptr long ptr long long ptr) NtAcceptConnectPort + @ stdcall ZwAccessCheck(ptr long long ptr ptr ptr ptr ptr) NtAccessCheck + @ stdcall ZwAccessCheckAndAuditAlarm(ptr long ptr ptr ptr long ptr long ptr ptr ptr) NtAccessCheckAndAuditAlarm diff --git a/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c -index e8eb04a..7b5f07d 100644 +index 94a22ac..d382691 100644 --- a/dlls/ntdll/tests/rtl.c +++ b/dlls/ntdll/tests/rtl.c @@ -62,6 +62,9 @@ static inline USHORT __my_ushort_swap(USHORT s) @@ -76,7 +83,7 @@ index e8eb04a..7b5f07d 100644 static SIZE_T (WINAPI *pRtlCompareMemory)(LPCVOID,LPCVOID,SIZE_T); static SIZE_T (WINAPI *pRtlCompareMemoryUlong)(PULONG, SIZE_T, ULONG); static NTSTATUS (WINAPI *pRtlDeleteTimer)(HANDLE, HANDLE, HANDLE); -@@ -109,6 +112,9 @@ static void InitFunctionPtrs(void) +@@ -115,6 +118,9 @@ static void InitFunctionPtrs(void) hntdll = LoadLibraryA("ntdll.dll"); ok(hntdll != 0, "LoadLibrary failed\n"); if (hntdll) { @@ -86,7 +93,7 @@ index e8eb04a..7b5f07d 100644 pRtlCompareMemory = (void *)GetProcAddress(hntdll, "RtlCompareMemory"); pRtlCompareMemoryUlong = (void *)GetProcAddress(hntdll, "RtlCompareMemoryUlong"); pRtlDeleteTimer = (void *)GetProcAddress(hntdll, "RtlDeleteTimer"); -@@ -149,6 +155,48 @@ static void InitFunctionPtrs(void) +@@ -161,6 +167,48 @@ static void InitFunctionPtrs(void) ok(strlen(src) == 15, "Source must be 16 bytes long!\n"); } @@ -135,7 +142,7 @@ index e8eb04a..7b5f07d 100644 #define COMP(str1,str2,cmplen,len) size = pRtlCompareMemory(str1, str2, cmplen); \ ok(size == len, "Expected %ld, got %ld\n", size, (SIZE_T)len) -@@ -1603,6 +1651,12 @@ START_TEST(rtl) +@@ -2060,6 +2108,12 @@ START_TEST(rtl) { InitFunctionPtrs(); @@ -149,5 +156,5 @@ index e8eb04a..7b5f07d 100644 test_RtlCompareMemoryUlong(); test_RtlMoveMemory(); -- -2.3.5 +2.7.1 diff --git a/patches/ntoskrnl-DriverTest/0002-ntoskrnl.exe-tests-Add-kernel-compliant-test-functio.patch b/patches/ntoskrnl-DriverTest/0002-ntoskrnl.exe-tests-Add-kernel-compliant-test-functio.patch index 2e6f7ba2..41a26227 100644 --- a/patches/ntoskrnl-DriverTest/0002-ntoskrnl.exe-tests-Add-kernel-compliant-test-functio.patch +++ b/patches/ntoskrnl-DriverTest/0002-ntoskrnl.exe-tests-Add-kernel-compliant-test-functio.patch @@ -1,4 +1,4 @@ -From 56879d100853d341a322ab082dbbd91e50ec72cd Mon Sep 17 00:00:00 2001 +From 0f6bbb3432a99f86bc15fa865452f4e18ef989fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Tue, 20 Jan 2015 18:39:36 +0100 Subject: ntoskrnl.exe/tests: Add kernel compliant test functions. @@ -19,7 +19,7 @@ Subject: ntoskrnl.exe/tests: Add kernel compliant test functions. create mode 100644 dlls/ntoskrnl.exe/tests/driver.sys/util.h diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec -index b824250..c104002 100644 +index db15265..5645b20 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -1423,7 +1423,7 @@ @@ -43,7 +43,7 @@ index bc040e4..b3a6839 100644 + driver.c \ + test.c diff --git a/dlls/ntoskrnl.exe/tests/driver.sys/driver.c b/dlls/ntoskrnl.exe/tests/driver.sys/driver.c -index 5756090..3da7ba1 100644 +index 35f78d1..f39aa37 100644 --- a/dlls/ntoskrnl.exe/tests/driver.sys/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.sys/driver.c @@ -30,6 +30,9 @@ @@ -90,7 +90,7 @@ index 5756090..3da7ba1 100644 return STATUS_SUCCESS; } -@@ -70,16 +66,20 @@ static NTSTATUS WINAPI driver_IoControl(DEVICE_OBJECT *device, IRP *irp) +@@ -72,16 +68,20 @@ static NTSTATUS WINAPI driver_IoControl(DEVICE_OBJECT *device, IRP *irp) NTSTATUS status = STATUS_NOT_SUPPORTED; ULONG_PTR information = 0; @@ -672,11 +672,11 @@ index 9b8a6a7..64e9d97 100644 unload_driver(service, filename); } diff --git a/include/wine/test.h b/include/wine/test.h -index f8b608f..b7ef81a 100644 +index 862d553..de21413 100644 --- a/include/wine/test.h +++ b/include/wine/test.h @@ -61,7 +61,13 @@ extern int winetest_loop_todo(void); - extern void winetest_end_todo( const char* platform ); + extern void winetest_end_todo(void); extern int winetest_get_mainargs( char*** pargv ); extern LONG winetest_get_failures(void); +extern int winetest_get_report_success(void); @@ -689,7 +689,7 @@ index f8b608f..b7ef81a 100644 extern void winetest_wait_child_process( HANDLE process ); extern const char *wine_dbgstr_wn( const WCHAR *str, int n ); -@@ -436,10 +442,39 @@ LONG winetest_get_failures(void) +@@ -433,10 +439,39 @@ LONG winetest_get_failures(void) return failures; } @@ -732,5 +732,5 @@ index f8b608f..b7ef81a 100644 void winetest_wait_child_process( HANDLE process ) -- -2.2.1 +2.7.1 diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 8fa7c059..1803dd59 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "84cae8c3ea2614fce65d5d499159de9d530444ef" + echo "24a730187e08699b51c698d4fed58ba2947f0c5d" } # Show version information @@ -151,13 +151,11 @@ patch_enable_all () enable_kernel32_COMSPEC="$1" enable_kernel32_Codepage_Conversion="$1" enable_kernel32_CompareStringEx="$1" - enable_kernel32_CompareString_Length="$1" enable_kernel32_CopyFileEx="$1" enable_kernel32_Cwd_Startup_Info="$1" enable_kernel32_FreeUserPhysicalPages="$1" enable_kernel32_GetFinalPathNameByHandle="$1" enable_kernel32_GetLargestConsoleWindowSize="$1" - enable_kernel32_GetLogicalProcessorInformationEx="$1" enable_kernel32_LocaleNameToLCID="$1" enable_kernel32_Named_Pipe="$1" enable_kernel32_NeedCurrentDirectoryForExePath="$1" @@ -289,7 +287,6 @@ patch_enable_all () enable_user32_Refresh_MDI_Menus="$1" enable_user32_ScrollWindowEx="$1" enable_user32_SetCoalescableTimer="$1" - enable_user32_WM_CAPTURECHANGE="$1" enable_user32_WM_MDICALCCHILDSCROLL="$1" enable_user32_WndProc="$1" enable_uxtheme_GTK_Theming="$1" @@ -309,7 +306,6 @@ patch_enable_all () enable_wined3d_DXTn="$1" enable_wined3d_Geforce_425M="$1" enable_wined3d_MESA_GPU_Info="$1" - enable_wined3d_Multisampling="$1" enable_wined3d_Revert_PixelFormat="$1" enable_wined3d_UnhandledBlendFactor="$1" enable_wined3d_resource_check_usage="$1" @@ -569,9 +565,6 @@ patch_enable () kernel32-CompareStringEx) enable_kernel32_CompareStringEx="$2" ;; - kernel32-CompareString_Length) - enable_kernel32_CompareString_Length="$2" - ;; kernel32-CopyFileEx) enable_kernel32_CopyFileEx="$2" ;; @@ -587,9 +580,6 @@ patch_enable () kernel32-GetLargestConsoleWindowSize) enable_kernel32_GetLargestConsoleWindowSize="$2" ;; - kernel32-GetLogicalProcessorInformationEx) - enable_kernel32_GetLogicalProcessorInformationEx="$2" - ;; kernel32-LocaleNameToLCID) enable_kernel32_LocaleNameToLCID="$2" ;; @@ -983,9 +973,6 @@ patch_enable () user32-SetCoalescableTimer) enable_user32_SetCoalescableTimer="$2" ;; - user32-WM_CAPTURECHANGE) - enable_user32_WM_CAPTURECHANGE="$2" - ;; user32-WM_MDICALCCHILDSCROLL) enable_user32_WM_MDICALCCHILDSCROLL="$2" ;; @@ -1043,9 +1030,6 @@ patch_enable () wined3d-MESA_GPU_Info) enable_wined3d_MESA_GPU_Info="$2" ;; - wined3d-Multisampling) - enable_wined3d_Multisampling="$2" - ;; wined3d-Revert_PixelFormat) enable_wined3d_Revert_PixelFormat="$2" ;; @@ -1657,9 +1641,6 @@ if test "$enable_category_stable" -eq 1; then if test "$enable_winecfg_Libraries" -gt 1; then abort "Patchset winecfg-Libraries disabled, but category-stable depends on that." fi - if test "$enable_wined3d_Multisampling" -gt 1; then - abort "Patchset wined3d-Multisampling disabled, but category-stable depends on that." - fi if test "$enable_wined3d_Revert_PixelFormat" -gt 1; then abort "Patchset wined3d-Revert_PixelFormat disabled, but category-stable depends on that." fi @@ -1753,7 +1734,6 @@ if test "$enable_category_stable" -eq 1; then enable_wine_inf_ProfileList_UserSID=1 enable_wineboot_HKEY_DYN_DATA=1 enable_winecfg_Libraries=1 - enable_wined3d_Multisampling=1 enable_wined3d_Revert_PixelFormat=1 enable_wined3d_UnhandledBlendFactor=1 enable_wined3d_resource_check_usage=1 @@ -3384,25 +3364,6 @@ if test "$enable_kernel32_CompareStringEx" -eq 1; then ) >> "$patchlist" fi -# Patchset kernel32-CompareString_Length -# | -# | This patchset fixes the following Wine bugs: -# | * [#37556] CompareString should abort on first non-matching character -# | -# | Modified files: -# | * dlls/kernel32/tests/locale.c, libs/wine/sortkey.c -# | -if test "$enable_kernel32_CompareString_Length" -eq 1; then - patch_apply kernel32-CompareString_Length/0001-kernel32-CompareStringW-should-abort-on-the-first-no.patch - patch_apply kernel32-CompareString_Length/0002-kernel32-tests-Add-some-more-tests-for-NORM_IGNORESY.patch - patch_apply kernel32-CompareString_Length/0003-kenrel32-tests-Add-further-tests-for-comparing-strin.patch - ( - echo '+ { "Dmitry Timoshkov", "kernel32: CompareStringW should abort on the first nonmatching character to avoid invalid memory access.", 2 },'; - echo '+ { "Sebastian Lackner", "kernel32/tests: Add some more tests for NORM_IGNORESYMBOLS.", 1 },'; - echo '+ { "Sebastian Lackner", "kenrel32/tests: Add further tests for comparing strings ending with multiple \\\\0 characters.", 1 },'; - ) >> "$patchlist" -fi - # Patchset kernel32-SetFileInformationByHandle # | # | Modified files: @@ -3544,18 +3505,6 @@ if test "$enable_kernel32_GetLargestConsoleWindowSize" -eq 1; then ) >> "$patchlist" fi -# Patchset kernel32-GetLogicalProcessorInformationEx -# | -# | Modified files: -# | * dlls/kernel32/process.c -# | -if test "$enable_kernel32_GetLogicalProcessorInformationEx" -eq 1; then - patch_apply kernel32-GetLogicalProcessorInformationEx/0001-kernel32-Make-GetLogicalProcessorInformationEx-a-stu.patch - ( - echo '+ { "Sebastian Lackner", "kernel32: Make GetLogicalProcessorInformationEx a stub which returns TRUE.", 1 },'; - ) >> "$patchlist" -fi - # Patchset kernel32-LocaleNameToLCID # | # | This patchset fixes the following Wine bugs: @@ -5680,21 +5629,6 @@ if test "$enable_user32_SetCoalescableTimer" -eq 1; then ) >> "$patchlist" fi -# Patchset user32-WM_CAPTURECHANGE -# | -# | This patchset fixes the following Wine bugs: -# | * [#13683] Also send WM_CAPTURECHANGE when capture has not changed -# | -# | Modified files: -# | * dlls/comctl32/toolbar.c, dlls/comctl32/trackbar.c, dlls/user32/button.c, dlls/user32/input.c, dlls/user32/tests/msg.c -# | -if test "$enable_user32_WM_CAPTURECHANGE" -eq 1; then - patch_apply user32-WM_CAPTURECHANGE/0001-user32-Also-send-WM_CAPTURECHANGE-when-capture-has-n.patch - ( - echo '+ { "Christopher Thielen", "user32: Also send WM_CAPTURECHANGE when capture has not changed.", 1 },'; - ) >> "$patchlist" -fi - # Patchset user32-WM_MDICALCCHILDSCROLL # | # | Modified files: @@ -5935,21 +5869,6 @@ if test "$enable_wined3d_MESA_GPU_Info" -eq 1; then ) >> "$patchlist" fi -# Patchset wined3d-Multisampling -# | -# | This patchset fixes the following Wine bugs: -# | * [#12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE. -# | -# | Modified files: -# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h -# | -if test "$enable_wined3d_Multisampling" -eq 1; then - patch_apply wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch - ( - echo '+ { "Austin English", "wined3d: Allow to specify multisampling AA quality levels via registry.", 1 },'; - ) >> "$patchlist" -fi - # Patchset wined3d-Revert_PixelFormat # | # | Modified files: diff --git a/patches/server-Parent_Process/0002-kernel32-tests-Add-test-for-process-object-destructi.patch b/patches/server-Parent_Process/0002-kernel32-tests-Add-test-for-process-object-destructi.patch index 41ab55ad..4454bbee 100644 --- a/patches/server-Parent_Process/0002-kernel32-tests-Add-test-for-process-object-destructi.patch +++ b/patches/server-Parent_Process/0002-kernel32-tests-Add-test-for-process-object-destructi.patch @@ -1,14 +1,14 @@ -From 799244b5aa488e397c3744fbf9ce368ec52ab596 Mon Sep 17 00:00:00 2001 +From c1fbb588bfe27085e0751c561c76339938575d56 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 12 Dec 2015 15:08:40 +0100 Subject: kernel32/tests: Add test for process object destruction. --- - dlls/kernel32/tests/process.c | 161 ++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 161 insertions(+) + dlls/kernel32/tests/process.c | 159 ++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 159 insertions(+) diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c -index f186c94..8e0f0c2 100644 +index 5e7fecb..d7518f7 100644 --- a/dlls/kernel32/tests/process.c +++ b/dlls/kernel32/tests/process.c @@ -33,11 +33,14 @@ @@ -26,33 +26,31 @@ index f186c94..8e0f0c2 100644 #define expect_eq_d(expected, actual) \ do { \ -@@ -79,6 +82,12 @@ static BOOL (WINAPI *pGetNumaProcessorNode)(UCHAR, PUCHAR); - static NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG); +@@ -80,6 +83,11 @@ static NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE, PROCESSINFOCLASS, P static BOOL (WINAPI *pProcessIdToSessionId)(DWORD,DWORD*); static DWORD (WINAPI *pWTSGetActiveConsoleSessionId)(void); + static BOOL (WINAPI *pGetLogicalProcessorInformationEx)(LOGICAL_PROCESSOR_RELATIONSHIP,SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX*,DWORD*); +static HANDLE (WINAPI *pCreateToolhelp32Snapshot)(DWORD, DWORD); +static BOOL (WINAPI *pProcess32First)(HANDLE, PROCESSENTRY32*); +static BOOL (WINAPI *pProcess32Next)(HANDLE, PROCESSENTRY32*); +static BOOL (WINAPI *pThread32First)(HANDLE, THREADENTRY32*); +static BOOL (WINAPI *pThread32Next)(HANDLE, THREADENTRY32*); -+ /* ############################### */ static char base[MAX_PATH]; -@@ -237,6 +246,12 @@ static BOOL init(void) - pGetNumaProcessorNode = (void *)GetProcAddress(hkernel32, "GetNumaProcessorNode"); +@@ -239,6 +247,11 @@ static BOOL init(void) pProcessIdToSessionId = (void *)GetProcAddress(hkernel32, "ProcessIdToSessionId"); pWTSGetActiveConsoleSessionId = (void *)GetProcAddress(hkernel32, "WTSGetActiveConsoleSessionId"); + pGetLogicalProcessorInformationEx = (void *)GetProcAddress(hkernel32, "GetLogicalProcessorInformationEx"); + pCreateToolhelp32Snapshot = (void *)GetProcAddress(hkernel32, "CreateToolhelp32Snapshot"); + pProcess32First = (void *)GetProcAddress(hkernel32, "Process32First"); + pProcess32Next = (void *)GetProcAddress(hkernel32, "Process32Next"); + pThread32First = (void *)GetProcAddress(hkernel32, "Thread32First"); + pThread32Next = (void *)GetProcAddress(hkernel32, "Thread32Next"); -+ + return TRUE; } - -@@ -287,6 +302,8 @@ static void doChild(const char* file, const char* option) +@@ -290,6 +303,8 @@ static void doChild(const char* file, const char* option) char bufA[MAX_PATH]; WCHAR bufW[MAX_PATH]; HANDLE hFile = CreateFileA(file, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); @@ -61,7 +59,7 @@ index f186c94..8e0f0c2 100644 BOOL ret; if (hFile == INVALID_HANDLE_VALUE) return; -@@ -341,6 +358,26 @@ static void doChild(const char* file, const char* option) +@@ -344,6 +359,26 @@ static void doChild(const char* file, const char* option) childPrintf(hFile, "CommandLineA=%s\n", encodeA(GetCommandLineA())); childPrintf(hFile, "CommandLineW=%s\n\n", encodeW(GetCommandLineW())); @@ -88,7 +86,7 @@ index f186c94..8e0f0c2 100644 /* output of environment (Ansi) */ ptrA_save = ptrA = GetEnvironmentStringsA(); if (ptrA) -@@ -1065,6 +1102,112 @@ static void test_Directory(void) +@@ -1068,6 +1103,112 @@ static void test_Directory(void) ok(!TerminateProcess(info.hProcess, 0), "Child process should not exist\n"); } @@ -201,7 +199,7 @@ index f186c94..8e0f0c2 100644 static BOOL is_str_env_drive_dir(const char* str) { return str[0] == '=' && str[1] >= 'A' && str[1] <= 'Z' && str[2] == ':' && -@@ -2989,6 +3132,23 @@ START_TEST(process) +@@ -3024,6 +3165,23 @@ START_TEST(process) Sleep(100); return; } @@ -225,7 +223,7 @@ index f186c94..8e0f0c2 100644 ok(0, "Unexpected command %s\n", myARGV[2]); return; -@@ -2998,6 +3158,7 @@ START_TEST(process) +@@ -3034,6 +3192,7 @@ START_TEST(process) test_Startup(); test_CommandLine(); test_Directory(); @@ -234,5 +232,5 @@ index f186c94..8e0f0c2 100644 test_SuspendFlag(); test_DebuggingFlag(); -- -2.6.2 +2.7.1 diff --git a/patches/user32-WM_CAPTURECHANGE/0001-user32-Also-send-WM_CAPTURECHANGE-when-capture-has-n.patch b/patches/user32-WM_CAPTURECHANGE/0001-user32-Also-send-WM_CAPTURECHANGE-when-capture-has-n.patch deleted file mode 100644 index 04bb2578..00000000 --- a/patches/user32-WM_CAPTURECHANGE/0001-user32-Also-send-WM_CAPTURECHANGE-when-capture-has-n.patch +++ /dev/null @@ -1,117 +0,0 @@ -From 5bfd73ad3ec48deae92927e8116fce81ac31cf66 Mon Sep 17 00:00:00 2001 -From: Christopher Thielen -Date: Mon, 23 Nov 2015 21:48:26 -0800 -Subject: user32: Also send WM_CAPTURECHANGE when capture has not changed. - -Fixes https://bugs.winehq.org/show_bug.cgi?id=13683 - -A window may be notified with WM_CAPTURECHANGED about itself -gaining mouse capture if it calls SetCapture() twice. - -Signed-off-by: Christopher Thielen -Signed-off-by: Sebastian Lackner ---- - dlls/comctl32/toolbar.c | 1 + - dlls/comctl32/trackbar.c | 1 + - dlls/user32/button.c | 1 + - dlls/user32/input.c | 2 +- - dlls/user32/tests/msg.c | 27 +++++++++++++++++++++++++++ - 5 files changed, 31 insertions(+), 1 deletion(-) - -diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c -index 890c18e..3251682 100644 ---- a/dlls/comctl32/toolbar.c -+++ b/dlls/comctl32/toolbar.c -@@ -6807,6 +6807,7 @@ ToolbarWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) - return TOOLBAR_MouseLeave (infoPtr); - - case WM_CAPTURECHANGED: -+ if (lParam == (LPARAM)hwnd) return 0; - return TOOLBAR_CaptureChanged(infoPtr); - - case WM_NCACTIVATE: -diff --git a/dlls/comctl32/trackbar.c b/dlls/comctl32/trackbar.c -index 6d092a3..4d19a70 100644 ---- a/dlls/comctl32/trackbar.c -+++ b/dlls/comctl32/trackbar.c -@@ -1976,6 +1976,7 @@ TRACKBAR_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) - - - case WM_CAPTURECHANGED: -+ if (lParam == (LPARAM)hwnd) return 0; - return TRACKBAR_CaptureChanged (infoPtr); - - case WM_CREATE: -diff --git a/dlls/user32/button.c b/dlls/user32/button.c -index 890d154..2fee3c8 100644 ---- a/dlls/user32/button.c -+++ b/dlls/user32/button.c -@@ -364,6 +364,7 @@ LRESULT ButtonWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, - - case WM_CAPTURECHANGED: - TRACE("WM_CAPTURECHANGED %p\n", hWnd); -+ if (lParam == (LPARAM)hWnd) break; - state = get_button_state( hWnd ); - if (state & BUTTON_BTNPRESSED) - { -diff --git a/dlls/user32/input.c b/dlls/user32/input.c -index 40e35a9..63fae67 100644 ---- a/dlls/user32/input.c -+++ b/dlls/user32/input.c -@@ -108,7 +108,7 @@ BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret ) - { - USER_Driver->pSetCapture( hwnd, gui_flags ); - -- if (previous && previous != hwnd) -+ if (previous) - SendMessageW( previous, WM_CAPTURECHANGED, 0, (LPARAM)hwnd ); - - if (prev_ret) *prev_ret = previous; -diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c -index b90f8d0..151b77a 100644 ---- a/dlls/user32/tests/msg.c -+++ b/dlls/user32/tests/msg.c -@@ -14906,6 +14906,32 @@ else - flush_sequence(); - } - -+static const struct message DoubleSetCaptureSeq[] = -+{ -+ { WM_CAPTURECHANGED, sent }, -+ { 0 } -+}; -+ -+static void test_DoubleSetCapture(void) -+{ -+ HWND hwnd; -+ -+ hwnd = CreateWindowExA(0, "TestWindowClass", "Test DoubleSetCapture", -+ WS_OVERLAPPEDWINDOW | WS_VISIBLE, -+ 100, 100, 200, 200, 0, 0, 0, NULL); -+ ok(hwnd != 0, "Failed to create overlapped window\n"); -+ -+ ShowWindow( hwnd, SW_SHOW ); -+ flush_sequence(); -+ -+ SetCapture(hwnd); -+ ok_sequence(WmEmptySeq, "SetCapture(hwnd) empty sequence", FALSE); -+ SetCapture(hwnd); -+ ok_sequence(DoubleSetCaptureSeq, "SetCapture(hwnd) twice", FALSE); -+ -+ DestroyWindow(hwnd); -+} -+ - static void init_funcs(void) - { - HMODULE hKernel32 = GetModuleHandleA("kernel32.dll"); -@@ -15045,6 +15071,7 @@ START_TEST(msg) - test_layered_window(); - test_TrackPopupMenu(); - test_TrackPopupMenuEmpty(); -+ test_DoubleSetCapture(); - /* keep it the last test, under Windows it tends to break the tests - * which rely on active/foreground windows being correct. - */ --- -2.6.2 - diff --git a/patches/user32-WM_CAPTURECHANGE/definition b/patches/user32-WM_CAPTURECHANGE/definition deleted file mode 100644 index c5a0c9e4..00000000 --- a/patches/user32-WM_CAPTURECHANGE/definition +++ /dev/null @@ -1 +0,0 @@ -Fixes: [13683] Also send WM_CAPTURECHANGE when capture has not changed diff --git a/patches/wined3d-Accounting/0001-wined3d-Use-real-values-for-memory-accounting-on-NVI.patch b/patches/wined3d-Accounting/0001-wined3d-Use-real-values-for-memory-accounting-on-NVI.patch index 258fb064..7be1b3c9 100644 --- a/patches/wined3d-Accounting/0001-wined3d-Use-real-values-for-memory-accounting-on-NVI.patch +++ b/patches/wined3d-Accounting/0001-wined3d-Use-real-values-for-memory-accounting-on-NVI.patch @@ -1,4 +1,4 @@ -From 53a49004741dbe3d7cf1b9e79ed0a5b021bef51a Mon Sep 17 00:00:00 2001 +From 8b80b7ecfb4c4b90e72cbdfaac6df17f2a972c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 6 Jun 2015 06:53:34 +0200 Subject: wined3d: Use real values for memory accounting on NVIDIA cards. @@ -10,10 +10,10 @@ Subject: wined3d: Use real values for memory accounting on NVIDIA cards. 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c -index c746d18..f33b313 100644 +index 7753e76..64e9def 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c -@@ -1181,8 +1181,31 @@ void CDECL wined3d_device_set_multithreaded(struct wined3d_device *device) +@@ -1215,8 +1215,31 @@ void CDECL wined3d_device_set_multithreaded(struct wined3d_device *device) UINT CDECL wined3d_device_get_available_texture_mem(const struct wined3d_device *device) { @@ -46,10 +46,10 @@ index c746d18..f33b313 100644 wine_dbgstr_longlong(device->adapter->vram_bytes), wine_dbgstr_longlong(device->adapter->vram_bytes_used), diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c -index ce23c47..af7a63b 100644 +index eb414cc..da0ba0a 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c -@@ -220,6 +220,7 @@ static const struct wined3d_extension_map gl_extension_map[] = +@@ -221,6 +221,7 @@ static const struct wined3d_extension_map gl_extension_map[] = {"GL_NV_vertex_program2", NV_VERTEX_PROGRAM2 }, {"GL_NV_vertex_program2_option", NV_VERTEX_PROGRAM2_OPTION }, {"GL_NV_vertex_program3", NV_VERTEX_PROGRAM3 }, @@ -57,7 +57,7 @@ index ce23c47..af7a63b 100644 /* SGI */ {"GL_SGIS_generate_mipmap", SGIS_GENERATE_MIPMAP }, -@@ -1395,7 +1396,8 @@ static const struct gpu_description *get_gpu_description(enum wined3d_pci_vendor +@@ -1397,7 +1398,8 @@ static const struct gpu_description *get_gpu_description(enum wined3d_pci_vendor return NULL; } @@ -67,8 +67,8 @@ index ce23c47..af7a63b 100644 enum wined3d_pci_vendor vendor, enum wined3d_pci_device device) { OSVERSIONINFOW os_version; -@@ -1504,6 +1506,16 @@ static void init_driver_info(struct wined3d_driver_info *driver_info, - driver = DRIVER_UNKNOWN; +@@ -1517,6 +1519,16 @@ static void init_driver_info(struct wined3d_driver_info *driver_info, + driver_info->vram_bytes = LONG_MAX; } + if (gl_info->supported[NVX_GPU_MEMORY_INFO]) @@ -84,7 +84,7 @@ index ce23c47..af7a63b 100644 if (wined3d_settings.emulated_textureram) { TRACE("Overriding amount of video memory with 0x%s bytes.\n", -@@ -3804,7 +3816,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) +@@ -3838,7 +3850,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) } fixup_extensions(gl_info, gl_renderer_str, gl_vendor, card_vendor, device); @@ -94,10 +94,10 @@ index ce23c47..af7a63b 100644 | adapter->fragment_pipe->get_emul_mask(gl_info); if (gl_ext_emul_mask & GL_EXT_EMUL_ARB_MULTITEXTURE) diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h -index 8c07ed1..3007516 100644 +index 437f62f..bbfddb2 100644 --- a/dlls/wined3d/wined3d_gl.h +++ b/dlls/wined3d/wined3d_gl.h -@@ -153,6 +153,7 @@ enum wined3d_gl_extension +@@ -154,6 +154,7 @@ enum wined3d_gl_extension NV_VERTEX_PROGRAM2, NV_VERTEX_PROGRAM2_OPTION, NV_VERTEX_PROGRAM3, @@ -106,5 +106,5 @@ index 8c07ed1..3007516 100644 SGIS_GENERATE_MIPMAP, /* WGL extensions */ -- -2.4.5 +2.7.1 diff --git a/patches/wined3d-CSMT_Main/9999-IfDefined.patch b/patches/wined3d-CSMT_Main/9999-IfDefined.patch index 571a187e..d6712735 100644 --- a/patches/wined3d-CSMT_Main/9999-IfDefined.patch +++ b/patches/wined3d-CSMT_Main/9999-IfDefined.patch @@ -2637,7 +2637,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c return; wined3d_surface_blt(surface, NULL, depth_stencil, NULL, 0, NULL, WINED3D_TEXF_POINT); -@@ -2237,7 +2441,11 @@ +@@ -2244,7 +2448,11 @@ return device->state.sampler[WINED3D_SHADER_TYPE_VERTEX][idx]; } @@ -2649,7 +2649,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c { UINT i; -@@ -2270,8 +2478,12 @@ +@@ -2277,8 +2485,12 @@ } else { @@ -2662,7 +2662,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } return WINED3D_OK; -@@ -2318,8 +2530,12 @@ +@@ -2325,8 +2537,12 @@ } else { @@ -2675,7 +2675,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } return WINED3D_OK; -@@ -2370,8 +2586,13 @@ +@@ -2377,8 +2593,13 @@ memset(device->recording->changed.vertexShaderConstantsF + start_register, 1, sizeof(*device->recording->changed.vertexShaderConstantsF) * vector4f_count); else @@ -2689,7 +2689,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c return WINED3D_OK; } -@@ -2506,8 +2727,12 @@ +@@ -2513,8 +2734,12 @@ } else { @@ -2702,7 +2702,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } return WINED3D_OK; -@@ -2554,8 +2779,12 @@ +@@ -2561,8 +2786,12 @@ } else { @@ -2715,7 +2715,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } return WINED3D_OK; -@@ -2607,8 +2836,12 @@ +@@ -2614,8 +2843,12 @@ memset(device->recording->changed.pixelShaderConstantsF + start_register, 1, sizeof(*device->recording->changed.pixelShaderConstantsF) * vector4f_count); else @@ -2728,7 +2728,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c return WINED3D_OK; } -@@ -2768,6 +3001,7 @@ +@@ -2775,6 +3008,7 @@ return hr; } @@ -2736,7 +2736,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (wined3d_settings.cs_multithreaded) { FIXME("Waiting for cs.\n"); -@@ -2775,6 +3009,7 @@ +@@ -2782,6 +3016,7 @@ device->cs->ops->finish(device->cs); } @@ -2744,7 +2744,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c wined3d_device_get_transform(device, WINED3D_TS_VIEW, &view_mat); wined3d_device_get_transform(device, WINED3D_TS_PROJECTION, &proj_mat); wined3d_device_get_transform(device, WINED3D_TS_WORLD_MATRIX(0), &world_mat); -@@ -3260,6 +3495,10 @@ +@@ -3267,6 +3502,10 @@ HRESULT CDECL wined3d_device_end_scene(struct wined3d_device *device) { @@ -2755,7 +2755,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("device %p.\n", device); if (!device->inScene) -@@ -3268,6 +3507,15 @@ +@@ -3275,6 +3514,15 @@ return WINED3DERR_INVALIDCALL; } @@ -2771,7 +2771,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c device->inScene = FALSE; return WINED3D_OK; } -@@ -3275,8 +3523,10 @@ +@@ -3282,8 +3530,10 @@ HRESULT CDECL wined3d_device_clear(struct wined3d_device *device, DWORD rect_count, const RECT *rects, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil) { @@ -2782,7 +2782,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("device %p, rect_count %u, rects %p, flags %#x, color {%.8e, %.8e, %.8e, %.8e}, depth %.8e, stencil %u.\n", device, rect_count, rects, flags, color->r, color->g, color->b, color->a, depth, stencil); -@@ -3285,12 +3535,19 @@ +@@ -3292,12 +3542,19 @@ WARN("Rects is %p, but rect_count is 0, ignoring clear\n", rects); return WINED3D_OK; } @@ -2802,7 +2802,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (!ds) { WARN("Clearing depth and/or stencil without a depth stencil buffer attached, returning WINED3DERR_INVALIDCALL\n"); -@@ -3299,8 +3556,13 @@ +@@ -3306,8 +3563,13 @@ } else if (flags & WINED3DCLEAR_TARGET) { @@ -2816,7 +2816,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c { WARN("Silently ignoring depth and target clear with mismatching sizes\n"); return WINED3D_OK; -@@ -3346,6 +3608,9 @@ +@@ -3353,6 +3615,9 @@ enum wined3d_primitive_type primitive_type) { GLenum gl_primitive_type, prev; @@ -2826,7 +2826,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("device %p, primitive_type %s\n", device, debug_d3dprimitivetype(primitive_type)); gl_primitive_type = gl_primitive_type_from_d3d(primitive_type); -@@ -3353,8 +3618,13 @@ +@@ -3360,8 +3625,13 @@ device->update_state->gl_primitive_type = gl_primitive_type; if (device->recording) device->recording->changed.primitive_type = TRUE; @@ -2840,7 +2840,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } void CDECL wined3d_device_get_primitive_type(const struct wined3d_device *device, -@@ -3377,6 +3647,14 @@ +@@ -3384,6 +3654,14 @@ return WINED3DERR_INVALIDCALL; } @@ -2855,7 +2855,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c wined3d_cs_emit_draw(device->cs, start_vertex, vertex_count, 0, 0, FALSE); return WINED3D_OK; -@@ -3393,6 +3671,10 @@ +@@ -3400,6 +3678,10 @@ HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *device, UINT start_idx, UINT index_count) { @@ -2866,7 +2866,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("device %p, start_idx %u, index_count %u.\n", device, start_idx, index_count); if (!device->state.index_buffer) -@@ -3411,6 +3693,15 @@ +@@ -3418,6 +3700,15 @@ return WINED3DERR_INVALIDCALL; } @@ -2882,7 +2882,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c wined3d_cs_emit_draw(device->cs, start_idx, index_count, 0, 0, TRUE); return WINED3D_OK; -@@ -3426,6 +3717,7 @@ +@@ -3433,6 +3724,7 @@ } /* This is a helper function for UpdateTexture, there is no UpdateVolume method in D3D. */ @@ -2890,7 +2890,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c static void device_update_volume(struct wined3d_context *context, struct wined3d_volume *src_volume, struct wined3d_volume *dst_volume) { -@@ -3462,6 +3754,88 @@ +@@ -3469,6 +3761,88 @@ { enum wined3d_resource_type type = src_texture->resource.type; unsigned int level_count, i, j, src_size, dst_size, src_skip_levels = 0; @@ -2979,7 +2979,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c level_count = min(wined3d_texture_get_level_count(src_texture), wined3d_texture_get_level_count(dst_texture)); -@@ -3480,7 +3854,13 @@ +@@ -3487,7 +3861,13 @@ } /* Make sure that the destination texture is loaded. */ @@ -2993,7 +2993,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c /* Update every surface level of the texture. */ switch (type) -@@ -3495,7 +3875,16 @@ +@@ -3502,7 +3882,16 @@ src_surface = surface_from_resource(wined3d_texture_get_sub_resource(src_texture, i + src_skip_levels)); dst_surface = surface_from_resource(wined3d_texture_get_sub_resource(dst_texture, i)); @@ -3010,7 +3010,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } break; } -@@ -3515,7 +3904,16 @@ +@@ -3522,7 +3911,16 @@ i * src_levels + j + src_skip_levels)); dst_surface = surface_from_resource(wined3d_texture_get_sub_resource(dst_texture, i * dst_levels + j)); @@ -3027,7 +3027,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } } break; -@@ -3525,6 +3923,7 @@ +@@ -3532,6 +3930,7 @@ { for (i = 0; i < level_count; ++i) { @@ -3035,7 +3035,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c device_update_volume(context, volume_from_resource(wined3d_texture_get_sub_resource(src_texture, i + src_skip_levels)), -@@ -3578,6 +3977,25 @@ +@@ -3585,6 +3984,25 @@ } wined3d_cs_emit_update_texture(device->cs, src_texture, dst_texture); @@ -3061,7 +3061,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c return WINED3D_OK; } -@@ -3627,8 +4045,13 @@ +@@ -3634,8 +4052,13 @@ if (state->render_states[WINED3D_RS_ZENABLE] || state->render_states[WINED3D_RS_ZWRITEENABLE] || state->render_states[WINED3D_RS_STENCILENABLE]) { @@ -3075,7 +3075,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (ds && rt && (ds->width < rt->width || ds->height < rt->height)) { -@@ -3727,6 +4150,7 @@ +@@ -3734,6 +4157,7 @@ struct wined3d_surface *src_surface, const RECT *src_rect, struct wined3d_surface *dst_surface, const POINT *dst_point) { @@ -3083,7 +3083,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c const struct wined3d_format *src_format = src_surface->resource.format; const struct wined3d_format *dst_format = dst_surface->resource.format; UINT update_w, update_h; -@@ -3734,6 +4158,7 @@ +@@ -3741,6 +4165,7 @@ RECT r, dst_rect; POINT p; @@ -3091,7 +3091,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("device %p, src_surface %p, src_rect %s, dst_surface %p, dst_point %s.\n", device, src_surface, wine_dbgstr_rect(src_rect), dst_surface, wine_dbgstr_point(dst_point)); -@@ -3745,6 +4170,7 @@ +@@ -3752,6 +4177,7 @@ return WINED3DERR_INVALIDCALL; } @@ -3099,7 +3099,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (src_format->id != dst_format->id) { WARN("Source and destination surfaces should have the same format.\n"); -@@ -3809,6 +4235,9 @@ +@@ -3816,6 +4242,9 @@ wined3d_cs_emit_update_surface(device->cs, src_surface, src_rect, dst_surface, dst_point); return WINED3D_OK; @@ -3109,7 +3109,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } void CDECL wined3d_device_copy_resource(struct wined3d_device *device, -@@ -3963,7 +4392,17 @@ +@@ -3970,7 +4399,17 @@ unsigned int depth_pitch) { struct wined3d_resource *sub_resource; @@ -3127,7 +3127,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("device %p, resource %p, sub_resource_idx %u, box %p, data %p, row_pitch %u, depth_pitch %u.\n", device, resource, sub_resource_idx, box, data, row_pitch, depth_pitch); -@@ -3980,7 +4419,14 @@ +@@ -3987,7 +4426,14 @@ WARN("Invalid sub_resource_idx %u.\n", sub_resource_idx); return; } @@ -3142,7 +3142,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (box) { if (box->left >= box->right || box->right > sub_resource->width -@@ -3990,9 +4436,47 @@ +@@ -3997,9 +4443,47 @@ box->left, box->top, box->front, box->right, box->bottom, box->back); return; } @@ -3190,7 +3190,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } HRESULT CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *device, -@@ -4023,8 +4507,14 @@ +@@ -4030,8 +4514,14 @@ rect = &r; } @@ -3205,7 +3205,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } struct wined3d_rendertarget_view * CDECL wined3d_device_get_rendertarget_view(const struct wined3d_device *device, -@@ -4038,6 +4528,7 @@ +@@ -4045,6 +4535,7 @@ return NULL; } @@ -3213,7 +3213,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c return device->state.fb.render_targets[view_idx]; } -@@ -4053,6 +4544,22 @@ +@@ -4060,6 +4551,22 @@ { struct wined3d_rendertarget_view *prev; struct wined3d_fb_state *fb = &device->state.fb; @@ -3236,7 +3236,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("device %p, view_idx %u, view %p, set_viewport %#x.\n", device, view_idx, view, set_viewport); -@@ -4092,6 +4599,7 @@ +@@ -4099,6 +4606,7 @@ } @@ -3244,7 +3244,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c prev = fb->render_targets[view_idx]; if (view == prev) return WINED3D_OK; -@@ -4099,6 +4607,15 @@ +@@ -4106,6 +4614,15 @@ if (view) wined3d_rendertarget_view_incref(view); fb->render_targets[view_idx] = view; @@ -3260,7 +3260,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c wined3d_cs_emit_set_rendertarget_view(device->cs, view_idx, view); /* Release after the assignment, to prevent device_resource_released() * from seeing the surface as still in use. */ -@@ -4110,6 +4627,7 @@ +@@ -4117,6 +4634,7 @@ void CDECL wined3d_device_set_depth_stencil_view(struct wined3d_device *device, struct wined3d_rendertarget_view *view) { @@ -3268,7 +3268,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c struct wined3d_fb_state *fb = &device->state.fb; struct wined3d_rendertarget_view *prev; -@@ -4127,6 +4645,66 @@ +@@ -4134,6 +4652,66 @@ wined3d_cs_emit_set_depth_stencil_view(device->cs, view); if (prev) wined3d_rendertarget_view_decref(prev); @@ -3335,7 +3335,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device, -@@ -4147,6 +4725,14 @@ +@@ -4154,6 +4732,14 @@ cursor_image = surface_from_resource(sub_resource); @@ -3350,7 +3350,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (cursor_image->resource.format->id != WINED3DFMT_B8G8R8A8_UNORM) { WARN("Surface %p has an invalid format %s.\n", -@@ -4174,6 +4760,13 @@ +@@ -4181,6 +4767,13 @@ * release it after setting the cursor image. Windows doesn't * addref the set surface, so we can't do this either without * creating circular refcount dependencies. */ @@ -3364,7 +3364,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (cursor_image->resource.width == 32 && cursor_image->resource.height == 32) { -@@ -4278,6 +4871,12 @@ +@@ -4285,6 +4878,12 @@ else SetCursor(NULL); } @@ -3377,7 +3377,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c return oldVisible; } -@@ -4288,8 +4887,10 @@ +@@ -4295,8 +4894,10 @@ TRACE("device %p.\n", device); @@ -3388,7 +3388,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c LIST_FOR_EACH_ENTRY_SAFE(resource, cursor, &device->resources, struct wined3d_resource, resource_list_entry) { TRACE("Checking resource %p for eviction.\n", resource); -@@ -4297,6 +4898,7 @@ +@@ -4304,6 +4905,7 @@ if (resource->pool == WINED3D_POOL_MANAGED && !resource->map_count) { TRACE("Evicting %p.\n", resource); @@ -3396,7 +3396,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c wined3d_cs_emit_evict_resource(device->cs, resource); } } -@@ -4315,6 +4917,37 @@ +@@ -4322,6 +4924,37 @@ context = context_acquire(device, NULL); gl_info = context->gl_info; @@ -3434,7 +3434,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (device->depth_blt_texture) { -@@ -4335,6 +4968,7 @@ +@@ -4342,6 +4975,7 @@ HeapFree(GetProcessHeap(), 0, swapchain->context); swapchain->context = NULL; @@ -3442,7 +3442,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c swapchain->num_contexts = 0; } -@@ -4354,6 +4988,14 @@ +@@ -4361,6 +4995,14 @@ static HRESULT create_primary_opengl_context(struct wined3d_device *device, struct wined3d_swapchain *swapchain) { @@ -3457,7 +3457,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c HRESULT hr; if (FAILED(hr = device->shader_backend->shader_alloc_private(device, -@@ -4370,6 +5012,7 @@ +@@ -4377,6 +5019,7 @@ return hr; } @@ -3465,7 +3465,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c hr = wined3d_cs_emit_create_swapchain_context(device->cs, swapchain); if (FAILED(hr)) { -@@ -4380,6 +5023,34 @@ +@@ -4387,6 +5030,34 @@ } wined3d_cs_emit_create_dummy_textures(device->cs); @@ -3500,7 +3500,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c return WINED3D_OK; } -@@ -4398,9 +5069,11 @@ +@@ -4405,9 +5076,11 @@ TRACE("device %p, swapchain_desc %p, mode %p, callback %p, reset_state %#x.\n", device, swapchain_desc, mode, callback, reset_state); @@ -3512,7 +3512,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (!(swapchain = wined3d_device_get_swapchain(device, 0))) { ERR("Failed to get the first implicit swapchain.\n"); -@@ -4415,9 +5088,21 @@ +@@ -4422,9 +5095,21 @@ wined3d_texture_decref(device->logo_texture); device->logo_texture = NULL; } @@ -3534,7 +3534,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c { for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i) { -@@ -4426,6 +5111,7 @@ +@@ -4433,6 +5118,7 @@ } wined3d_device_set_depth_stencil_view(device, NULL); @@ -3542,7 +3542,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (reset_state) { state_unbind_resources(&device->state); -@@ -4435,6 +5121,12 @@ +@@ -4442,6 +5128,12 @@ { wined3d_texture_decref(device->cs->onscreen_depth_stencil->container); device->cs->onscreen_depth_stencil = NULL; @@ -3555,7 +3555,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } if (reset_state) -@@ -4447,6 +5139,7 @@ +@@ -4454,6 +5146,7 @@ } } @@ -3563,7 +3563,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c /* Free implicit resources and wait for the command stream before modifying * swapchain parameters. After modifying the swapchain parameters a new GL * context may be acquired by the worker thread. This causes problems in the -@@ -4468,6 +5161,7 @@ +@@ -4475,6 +5168,7 @@ } device->cs->ops->finish(device->cs); @@ -3571,7 +3571,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("New params:\n"); TRACE("backbuffer_width %u\n", swapchain_desc->backbuffer_width); TRACE("backbuffer_height %u\n", swapchain_desc->backbuffer_height); -@@ -4594,6 +5288,13 @@ +@@ -4601,6 +5295,13 @@ swapchain_desc->multisample_type, swapchain_desc->multisample_quality))) return hr; @@ -3585,7 +3585,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (swapchain->desc.enable_auto_depth_stencil) { struct wined3d_resource_desc texture_desc; -@@ -4636,6 +5337,13 @@ +@@ -4643,6 +5344,13 @@ wined3d_device_set_depth_stencil_view(device, device->auto_depth_stencil_view); } @@ -3599,7 +3599,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (swapchain->desc.backbuffer_count && FAILED(hr = wined3d_rendertarget_view_create_from_surface( surface_from_resource(wined3d_texture_get_sub_resource(swapchain->back_buffers[0], 0)), NULL, &wined3d_null_parent_ops, &device->back_buffer_view))) -@@ -4656,12 +5364,20 @@ +@@ -4663,12 +5371,20 @@ } wined3d_cs_emit_reset_state(device->cs); state_cleanup(&device->state); @@ -3620,7 +3620,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c &device->adapter->d3d_info, WINED3D_STATE_INIT_DEFAULT))) ERR("Failed to initialize device state, hr %#x.\n", hr); device->update_state = &device->state; -@@ -4670,6 +5386,7 @@ +@@ -4677,6 +5393,7 @@ } else if (device->back_buffer_view) { @@ -3628,7 +3628,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c struct wined3d_state *state = &device->state; wined3d_device_set_rendertarget_view(device, 0, device->back_buffer_view, FALSE); -@@ -4685,6 +5402,24 @@ +@@ -4692,6 +5409,24 @@ state->scissor_rect.left = 0; state->scissor_rect.right = swapchain->desc.backbuffer_width; state->scissor_rect.bottom = swapchain->desc.backbuffer_height; @@ -3653,7 +3653,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c wined3d_cs_emit_set_scissor_rect(device->cs, &state->scissor_rect); } -@@ -4760,6 +5495,10 @@ +@@ -4767,6 +5502,10 @@ TRACE("device %p, resource %p, type %s.\n", device, resource, debug_d3dresourcetype(type)); @@ -3664,7 +3664,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c switch (type) { case WINED3D_RTYPE_SURFACE: -@@ -4770,6 +5509,7 @@ +@@ -4777,6 +5516,7 @@ for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i) { @@ -3672,7 +3672,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (wined3d_rendertarget_view_get_surface(device->state.fb.render_targets[i]) == surface) { ERR("Surface %p is still in use as render target %u.\n", surface, i); -@@ -4781,6 +5521,19 @@ +@@ -4788,6 +5528,19 @@ { ERR("Surface %p is still in use as depth/stencil buffer.\n", surface); device->state.fb.depth_stencil = NULL; @@ -3692,7 +3692,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } } break; -@@ -4943,7 +5696,11 @@ +@@ -4950,7 +5703,11 @@ device->blitter = adapter->blitter; @@ -3704,7 +3704,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c &adapter->d3d_info, WINED3D_STATE_INIT_DEFAULT))) { ERR("Failed to initialize device state, hr %#x.\n", hr); -@@ -5042,6 +5799,7 @@ +@@ -5049,6 +5806,7 @@ else return CallWindowProcA(proc, window, message, wparam, lparam); } @@ -3712,7 +3712,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c /* Context activation is done by the caller */ struct wined3d_gl_bo *wined3d_device_get_bo(struct wined3d_device *device, UINT size, GLenum gl_usage, -@@ -5095,3 +5853,4 @@ +@@ -5102,3 +5860,4 @@ wined3d_device_destroy_bo(device, context, bo); } @@ -3720,7 +3720,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c -@@ -5555,9 +5555,15 @@ +@@ -5563,9 +5563,15 @@ DebugBreak(); } @@ -4798,7 +4798,7 @@ diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c new_source = FOGSOURCE_COORD; gl_info->gl_ops.gl.p_glFogi(GL_FOG_MODE, GL_LINEAR); checkGLcall("glFogi(GL_FOG_MODE, GL_LINEAR)"); -@@ -1653,7 +1681,11 @@ +@@ -1656,7 +1684,11 @@ if (state->render_states[WINED3D_RS_SLOPESCALEDEPTHBIAS] || state->render_states[WINED3D_RS_DEPTHBIAS]) { @@ -4810,7 +4810,7 @@ diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c float scale; union -@@ -4190,9 +4222,15 @@ +@@ -4193,9 +4225,15 @@ } } } else { @@ -4826,7 +4826,7 @@ diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c WARN("unsupported blending in openGl\n"); } } -@@ -4546,7 +4584,11 @@ +@@ -4549,7 +4587,11 @@ static void viewport_miscpart(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -4838,7 +4838,7 @@ diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c const struct wined3d_gl_info *gl_info = context->gl_info; struct wined3d_viewport vp = state->viewport; -@@ -4724,7 +4766,11 @@ +@@ -4727,7 +4769,11 @@ } else { @@ -4850,7 +4850,7 @@ diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c UINT height; UINT width; -@@ -4788,7 +4834,11 @@ +@@ -4791,7 +4837,11 @@ void state_srgbwrite(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -8413,7 +8413,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c -@@ -3733,7 +3733,11 @@ +@@ -3734,7 +3734,11 @@ float y_offset = context->render_offscreen ? (center_offset - (2.0f * y) - h) / h : (center_offset - (2.0f * y) - h) / -h; @@ -8425,7 +8425,7 @@ diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c state->render_states[WINED3D_RS_ZENABLE] : WINED3D_ZB_FALSE; float z_scale = zenable ? 2.0f : 0.0f; float z_offset = zenable ? -1.0f : 0.0f; -@@ -3856,6 +3860,7 @@ +@@ -3857,6 +3861,7 @@ /* case WINED3D_TTFF_COUNT1: Won't ever get here. */ case WINED3D_TTFF_COUNT2: mat._13 = mat._23 = mat._33 = mat._43 = 0.0f; @@ -8433,7 +8433,7 @@ diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c /* OpenGL divides the first 3 vertex coord by the 4th by default, * which is essentially the same as D3DTTFF_PROJECTED. Make sure that * the 4th coord evaluates to 1.0 to eliminate that. -@@ -3868,6 +3873,20 @@ +@@ -3869,6 +3874,20 @@ * A more serious problem occurs if the app passes 4 coordinates in, and the * 4th is != 1.0(opengl default). This would have to be fixed in draw_strided_slow * or a replacement shader. */ @@ -8454,7 +8454,7 @@ diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c default: mat._14 = mat._24 = mat._34 = 0.0f; mat._44 = 1.0f; } -@@ -4325,7 +4344,11 @@ +@@ -4326,7 +4345,11 @@ unsigned int i; DWORD ttff; DWORD cop, aop, carg0, carg1, carg2, aarg0, aarg1, aarg2; @@ -9200,7 +9200,7 @@ diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c --- a/dlls/wined3d/wined3d_main.c +++ b/dlls/wined3d/wined3d_main.c -@@ -87,8 +87,10 @@ +@@ -86,8 +86,10 @@ ~0U, /* No GS shader model limit by default. */ ~0U, /* No PS shader model limit by default. */ FALSE, /* 3D support enabled by default. */ @@ -9211,7 +9211,7 @@ diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c }; struct wined3d * CDECL wined3d_create(DWORD flags) -@@ -328,6 +330,7 @@ +@@ -316,6 +318,7 @@ TRACE("Disabling 3D support.\n"); wined3d_settings.no_3d = TRUE; } @@ -9219,7 +9219,7 @@ diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c if (!get_config_key(hkey, appkey, "CSMT", buffer, size) && !strcmp(buffer,"disabled")) { -@@ -344,6 +347,9 @@ +@@ -332,6 +335,9 @@ FIXME_(winediag)("Experimental wined3d CSMT feature is currently %s.\n", wined3d_settings.cs_multithreaded ? "enabled" : "disabled"); @@ -9279,7 +9279,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h #include #include #include -@@ -284,8 +312,10 @@ +@@ -283,8 +311,10 @@ unsigned int max_sm_gs; unsigned int max_sm_ps; BOOL no_3d; @@ -9290,7 +9290,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN; -@@ -1026,9 +1056,14 @@ +@@ -1025,9 +1055,14 @@ WORD use_map; /* MAX_ATTRIBS, 16 */ }; @@ -9305,7 +9305,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h DWORD get_flexible_vertex_size(DWORD d3dvtVertexType) DECLSPEC_HIDDEN; #define eps 1e-8f -@@ -1116,8 +1151,10 @@ +@@ -1115,8 +1150,10 @@ struct list entry; GLuint id; struct wined3d_context *context; @@ -9316,7 +9316,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; union wined3d_gl_query_object -@@ -1153,6 +1190,7 @@ +@@ -1152,6 +1189,7 @@ struct list entry; GLuint id; struct wined3d_context *context; @@ -9324,7 +9324,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h UINT64 timestamp; }; -@@ -1188,6 +1226,12 @@ +@@ -1187,6 +1225,12 @@ for (i = 0; i < min(dst->rt_size, src->rt_size); i++) dst->render_targets[i] = src->render_targets[i]; } @@ -9337,7 +9337,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_context { -@@ -1203,7 +1247,9 @@ +@@ -1202,7 +1246,9 @@ DWORD dirtyArray[STATE_HIGHEST + 1]; /* Won't get bigger than that, a state is never marked dirty 2 times */ DWORD numDirtyEntries; DWORD isStateDirty[STATE_HIGHEST / (sizeof(DWORD) * CHAR_BIT) + 1]; /* Bitmap to find out quickly if a state is dirty */ @@ -9347,7 +9347,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_swapchain *swapchain; struct wined3d_surface *current_rt; -@@ -1301,8 +1347,17 @@ +@@ -1300,8 +1346,17 @@ GLfloat fog_coord_value; GLfloat color[4], fogstart, fogend, fogcolor[4]; GLuint dummy_arbfp_prog; @@ -9365,7 +9365,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; typedef void (*APPLYSTATEFUNC)(struct wined3d_context *ctx, const struct wined3d_state *state, DWORD state_id); -@@ -1445,8 +1500,12 @@ +@@ -1444,8 +1499,12 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wined3d_device *device) DECLSPEC_HIDDEN; BOOL context_apply_clear_state(struct wined3d_context *context, const struct wined3d_device *device, UINT rt_count, const struct wined3d_fb_state *fb) DECLSPEC_HIDDEN; @@ -9378,7 +9378,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void context_apply_fbo_state_blit(struct wined3d_context *context, GLenum target, struct wined3d_surface *render_target, struct wined3d_surface *depth_stencil, DWORD location) DECLSPEC_HIDDEN; void context_active_texture(struct wined3d_context *context, const struct wined3d_gl_info *gl_info, -@@ -2029,7 +2088,11 @@ +@@ -2028,7 +2087,11 @@ struct wined3d_state { DWORD flags; @@ -9390,7 +9390,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_vertex_declaration *vertex_declaration; struct wined3d_stream_output stream_output[MAX_STREAM_OUT]; -@@ -2074,6 +2137,7 @@ +@@ -2073,6 +2136,7 @@ DWORD render_states[WINEHIGHEST_RENDER_STATE + 1]; }; @@ -9398,7 +9398,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_gl_bo { GLuint name; -@@ -2082,6 +2146,7 @@ +@@ -2081,6 +2145,7 @@ UINT size; }; @@ -9406,7 +9406,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h #define WINED3D_UNMAPPED_STAGE ~0U /* Multithreaded flag. Removed from the public header to signal that -@@ -2137,11 +2202,23 @@ +@@ -2136,11 +2201,23 @@ struct wined3d_rendertarget_view *back_buffer_view; struct wined3d_swapchain **swapchains; UINT swapchain_count; @@ -9430,7 +9430,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h /* For rendering to a texture using glCopyTexImage */ GLuint depth_blt_texture; -@@ -2152,6 +2229,9 @@ +@@ -2151,6 +2228,9 @@ UINT xScreenSpace; UINT yScreenSpace; UINT cursorWidth, cursorHeight; @@ -9440,7 +9440,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h HCURSOR hardwareCursor; /* The Wine logo texture */ -@@ -2183,6 +2263,7 @@ +@@ -2182,6 +2262,7 @@ UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc) DECLSPEC_HIDDEN; void device_resource_add(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN; void device_resource_released(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN; @@ -9448,7 +9448,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void device_invalidate_state(const struct wined3d_device *device, DWORD state) DECLSPEC_HIDDEN; void device_invalidate_shader_constants(const struct wined3d_device *device, DWORD mask) DECLSPEC_HIDDEN; void device_exec_update_texture(struct wined3d_context *context, struct wined3d_texture *src_texture, -@@ -2194,6 +2275,11 @@ +@@ -2193,6 +2274,11 @@ void device_create_dummy_textures(struct wined3d_device *device, struct wined3d_context *context) DECLSPEC_HIDDEN; void device_delete_opengl_contexts_cs(struct wined3d_device *device, struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; @@ -9460,7 +9460,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h static inline BOOL isStateDirty(const struct wined3d_context *context, DWORD state) { -@@ -2213,9 +2299,11 @@ +@@ -2212,9 +2298,11 @@ HRESULT (*resource_sub_resource_map)(struct wined3d_resource *resource, unsigned int sub_resource_idx, struct wined3d_map_desc *map_desc, const struct wined3d_box *box, DWORD flags); HRESULT (*resource_sub_resource_unmap)(struct wined3d_resource *resource, unsigned int sub_resource_idx); @@ -9472,7 +9472,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; struct wined3d_resource -@@ -2240,6 +2328,7 @@ +@@ -2239,6 +2327,7 @@ UINT depth; UINT size; DWORD priority; @@ -9480,7 +9480,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void *heap_memory, *map_heap_memory, *user_memory, *bitmap_data; UINT custom_row_pitch, custom_slice_pitch; struct wined3d_gl_bo *buffer, *map_buffer; -@@ -2247,6 +2336,10 @@ +@@ -2246,6 +2335,10 @@ DWORD locations; LONG access_fence; BOOL unmap_dirtify; @@ -9491,7 +9491,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void *parent; const struct wined3d_parent_ops *parent_ops; -@@ -2271,6 +2364,7 @@ +@@ -2270,6 +2363,7 @@ void *parent, const struct wined3d_parent_ops *parent_ops, const struct wined3d_resource_ops *resource_ops) DECLSPEC_HIDDEN; void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN; @@ -9499,7 +9499,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h DWORD wined3d_resource_access_from_location(DWORD location) DECLSPEC_HIDDEN; BOOL wined3d_resource_allocate_sysmem(struct wined3d_resource *resource) DECLSPEC_HIDDEN; void wined3d_resource_changed(struct wined3d_resource *resource, -@@ -2319,6 +2413,15 @@ +@@ -2318,6 +2412,15 @@ { while(InterlockedCompareExchange(&resource->access_fence, 0, 0)); } @@ -9515,7 +9515,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h /* Tests show that the start address of resources is 32 byte aligned */ #define RESOURCE_ALIGNMENT 16 -@@ -2403,7 +2506,9 @@ +@@ -2402,7 +2505,9 @@ void wined3d_texture_apply_sampler_desc(struct wined3d_texture *texture, const struct wined3d_sampler_desc *sampler_desc, const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN; @@ -9525,7 +9525,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void wined3d_texture_bind(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN; void wined3d_texture_bind_and_dirtify(struct wined3d_texture *texture, -@@ -2437,9 +2542,16 @@ +@@ -2436,9 +2541,16 @@ struct wined3d_resource resource; struct wined3d_texture *container; @@ -9542,7 +9542,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; static inline struct wined3d_volume *volume_from_resource(struct wined3d_resource *resource) -@@ -2447,6 +2559,7 @@ +@@ -2446,6 +2558,7 @@ return CONTAINING_RECORD(resource, struct wined3d_volume, resource); } @@ -9550,7 +9550,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h HRESULT wined3d_volume_create(struct wined3d_texture *container, const struct wined3d_resource_desc *desc, unsigned int level, struct wined3d_volume **volume) DECLSPEC_HIDDEN; void wined3d_volume_destroy(struct wined3d_volume *volume) DECLSPEC_HIDDEN; -@@ -2462,6 +2575,27 @@ +@@ -2461,6 +2574,27 @@ struct wined3d_surface_dib { HBITMAP DIBsection; @@ -9578,7 +9578,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h UINT bitmap_size; }; -@@ -2487,7 +2621,11 @@ +@@ -2486,7 +2620,11 @@ struct wined3d_surface_ops { HRESULT (*surface_private_setup)(struct wined3d_surface *surface); @@ -9590,7 +9590,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; struct wined3d_surface -@@ -2495,12 +2633,26 @@ +@@ -2494,12 +2632,26 @@ struct wined3d_resource resource; const struct wined3d_surface_ops *surface_ops; struct wined3d_texture *container; @@ -9617,7 +9617,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h GLuint rb_multisample; GLuint rb_resolved; GLenum texture_target; -@@ -2544,11 +2696,22 @@ +@@ -2543,11 +2695,22 @@ GLenum surface_get_gl_buffer(const struct wined3d_surface *surface) DECLSPEC_HIDDEN; void surface_get_drawable_size(const struct wined3d_surface *surface, const struct wined3d_context *context, unsigned int *width, unsigned int *height) DECLSPEC_HIDDEN; @@ -9640,7 +9640,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void surface_modify_ds_location(struct wined3d_surface *surface, DWORD location, UINT w, UINT h) DECLSPEC_HIDDEN; void wined3d_surface_prepare(struct wined3d_surface *surface, struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN; -@@ -2560,6 +2723,7 @@ +@@ -2559,6 +2722,7 @@ const struct wined3d_gl_info *gl_info, void *mem, unsigned int pitch) DECLSPEC_HIDDEN; HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const POINT *dst_point, struct wined3d_surface *src_surface, const RECT *src_rect) DECLSPEC_HIDDEN; @@ -9648,7 +9648,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h HRESULT wined3d_surface_create(struct wined3d_texture *container, const struct wined3d_resource_desc *desc, GLenum target, unsigned int level, unsigned int layer, DWORD flags, struct wined3d_surface **surface) DECLSPEC_HIDDEN; -@@ -2574,6 +2738,17 @@ +@@ -2573,6 +2737,17 @@ void wined3d_surface_cleanup_cs(struct wined3d_surface *surface) DECLSPEC_HIDDEN; void wined3d_surface_getdc_cs(struct wined3d_surface *surface) DECLSPEC_HIDDEN; void wined3d_surface_releasedc_cs(struct wined3d_surface *surface) DECLSPEC_HIDDEN; @@ -9666,7 +9666,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void draw_textured_quad(const struct wined3d_surface *src_surface, struct wined3d_context *context, const RECT *src_rect, const RECT *dst_rect, enum wined3d_texture_filter_type filter) DECLSPEC_HIDDEN; -@@ -2595,8 +2770,10 @@ +@@ -2594,8 +2769,10 @@ GLuint name; }; @@ -9677,7 +9677,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_vertex_declaration_element { const struct wined3d_format *format; -@@ -2625,8 +2802,10 @@ +@@ -2624,8 +2801,10 @@ BOOL half_float_conv_needed; }; @@ -9688,7 +9688,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_saved_states { DWORD transform[(HIGHEST_TRANSFORMSTATE >> 5) + 1]; -@@ -2694,6 +2873,7 @@ +@@ -2693,6 +2872,7 @@ void stateblock_init_contained_states(struct wined3d_stateblock *stateblock) DECLSPEC_HIDDEN; void state_cleanup(struct wined3d_state *state) DECLSPEC_HIDDEN; @@ -9696,7 +9696,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h HRESULT state_init(struct wined3d_state *state, const struct wined3d_gl_info *gl_info, const struct wined3d_d3d_info *d3d_info, DWORD flags) DECLSPEC_HIDDEN; void state_unbind_resources(struct wined3d_state *state) DECLSPEC_HIDDEN; -@@ -2744,6 +2924,32 @@ +@@ -2743,6 +2923,32 @@ void wined3d_cs_destroy(struct wined3d_cs *cs) DECLSPEC_HIDDEN; void wined3d_cs_switch_onscreen_ds(struct wined3d_cs *cs, struct wined3d_context *context, struct wined3d_surface *depth_stencil) DECLSPEC_HIDDEN; @@ -9729,7 +9729,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *rects, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil) DECLSPEC_HIDDEN; -@@ -2793,6 +2999,7 @@ +@@ -2792,6 +2998,7 @@ void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3d_vertex_declaration *declaration) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_viewport(struct wined3d_cs *cs, const struct wined3d_viewport *viewport) DECLSPEC_HIDDEN; @@ -9737,7 +9737,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void wined3d_cs_emit_set_consts_f(struct wined3d_cs *cs, UINT start_register, const float *constants, UINT vector4f_count, enum wined3d_shader_type type) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_consts_b(struct wined3d_cs *cs, UINT start_register, -@@ -2856,6 +3063,7 @@ +@@ -2855,6 +3062,7 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_resource *resource, unsigned int sub_resource_idx, const struct wined3d_box *box, const void *data, unsigned int row_pitch, unsigned int depth_pitch) DECLSPEC_HIDDEN; @@ -9745,7 +9745,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h /* Direct3D terminology with little modifications. We do not have an issued state * because only the driver knows about it, but we have a created state because d3d -@@ -2870,8 +3078,12 @@ +@@ -2869,8 +3077,12 @@ struct wined3d_query_ops { HRESULT (*query_get_data)(struct wined3d_query *query, void *data, DWORD data_size, DWORD flags); @@ -9758,7 +9758,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; struct wined3d_query -@@ -2885,12 +3097,16 @@ +@@ -2884,12 +3096,16 @@ enum wined3d_query_type type; DWORD data_size; void *extendedData; @@ -9775,7 +9775,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h /* TODO: Add tests and support for FLOAT16_4 POSITIONT, D3DCOLOR position, other * fixed function semantics as D3DCOLOR or FLOAT16 */ -@@ -2917,7 +3133,9 @@ +@@ -2916,7 +3132,9 @@ GLenum buffer_object_usage; GLenum buffer_type_hint; DWORD flags; @@ -9785,7 +9785,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void *map_ptr; struct wined3d_map_range *maps; -@@ -2942,11 +3160,15 @@ +@@ -2941,11 +3159,15 @@ BYTE *buffer_get_sysmem(struct wined3d_buffer *This, struct wined3d_context *context) DECLSPEC_HIDDEN; void buffer_internal_preload(struct wined3d_buffer *buffer, struct wined3d_context *context, const struct wined3d_state *state) DECLSPEC_HIDDEN; @@ -9801,7 +9801,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_rendertarget_view { -@@ -2985,8 +3207,10 @@ +@@ -2984,8 +3206,10 @@ return surface_from_resource(resource); } @@ -9812,7 +9812,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_shader_resource_view { LONG refcount; -@@ -2999,8 +3223,12 @@ +@@ -2998,8 +3222,12 @@ struct wined3d_swapchain_ops { void (*swapchain_present)(struct wined3d_swapchain *swapchain, const RECT *src_rect, @@ -9825,7 +9825,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h }; struct wined3d_swapchain -@@ -3039,8 +3267,10 @@ +@@ -3038,8 +3266,10 @@ void swapchain_destroy_contexts(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; HDC swapchain_get_backup_dc(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; void swapchain_update_draw_bindings(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN; @@ -9836,7 +9836,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h /***************************************************************************** * Utility function prototypes -@@ -3243,7 +3473,9 @@ +@@ -3242,7 +3472,9 @@ void shader_generate_main(const struct wined3d_shader *shader, struct wined3d_string_buffer *buffer, const struct wined3d_shader_reg_maps *reg_maps, const DWORD *byte_code, void *backend_ctx) DECLSPEC_HIDDEN; BOOL shader_match_semantic(const char *semantic_name, enum wined3d_decl_usage usage) DECLSPEC_HIDDEN; diff --git a/patches/wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch b/patches/wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch deleted file mode 100644 index 2eeab563..00000000 --- a/patches/wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 20c5727bab6314d9d788f5b782cf8f5d1b6fc281 Mon Sep 17 00:00:00 2001 -From: Austin English -Date: Sat, 28 Feb 2015 00:34:07 +0100 -Subject: wined3d: Allow to specify multisampling AA quality levels via - registry. - ---- - dlls/wined3d/directx.c | 7 ++++++- - dlls/wined3d/wined3d_main.c | 12 ++++++++++++ - dlls/wined3d/wined3d_private.h | 1 + - 3 files changed, 19 insertions(+), 1 deletion(-) - -diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c -index 019b415..b9eb03c 100644 ---- a/dlls/wined3d/directx.c -+++ b/dlls/wined3d/directx.c -@@ -4404,7 +4404,12 @@ HRESULT CDECL wined3d_check_device_multisample_type(const struct wined3d *wined3 - - if (quality_levels) - { -- if (multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE) -+ if (wined3d_settings.msaa_quality_levels) -+ { -+ *quality_levels = wined3d_settings.msaa_quality_levels; -+ TRACE("Overriding MSAA quality levels to %i\n", *quality_levels); -+ } -+ else if (multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE) - *quality_levels = gl_info->limits.samples; - else - *quality_levels = 1; -diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c -index 0543d97..c985c2d 100644 ---- a/dlls/wined3d/wined3d_main.c -+++ b/dlls/wined3d/wined3d_main.c -@@ -77,6 +77,7 @@ struct wined3d_settings wined3d_settings = - ORM_FBO, /* Use FBOs to do offscreen rendering */ - PCI_VENDOR_NONE,/* PCI Vendor ID */ - PCI_DEVICE_NONE,/* PCI Device ID */ -+ 0, /* Multisampling AA Quality Levels */ - 0, /* The default of memory is set in init_driver_info */ - NULL, /* No wine logo by default */ - TRUE, /* Multisampling enabled by default. */ -@@ -261,6 +262,17 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL) - wined3d_settings.pci_vendor_id = pci_vendor_id; - } - } -+ if (!get_config_key( hkey, appkey, "MultisamplingAAQualityLevels", buffer, size )) -+ { -+ int quality_levels = atoi(buffer); -+ if(quality_levels > 0) -+ { -+ wined3d_settings.msaa_quality_levels = quality_levels; -+ TRACE("Setting MultisamplingAAQualityLevels to %i\n", quality_levels); -+ } -+ else -+ ERR("MultisamplingAAQualityLevels is %i but must be >0\n", quality_levels); -+ } - if ( !get_config_key( hkey, appkey, "VideoMemorySize", buffer, size) ) - { - int TmpVideoMemorySize = atoi(buffer); -diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index 7847557..9e39dd7 100644 ---- a/dlls/wined3d/wined3d_private.h -+++ b/dlls/wined3d/wined3d_private.h -@@ -268,6 +268,7 @@ struct wined3d_settings - unsigned short pci_vendor_id; - unsigned short pci_device_id; - /* Memory tracking and object counting. */ -+ unsigned int msaa_quality_levels; - UINT64 emulated_textureram; - char *logo; - int allow_multisampling; --- -2.5.0 - diff --git a/patches/wined3d-Multisampling/definition b/patches/wined3d-Multisampling/definition deleted file mode 100644 index f25e6cc9..00000000 --- a/patches/wined3d-Multisampling/definition +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: [12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE. -Category: stable diff --git a/patches/winepulse-PulseAudio_Support/0002-winepulse.drv-Use-a-separate-mainloop-and-ctx-for-pu.patch b/patches/winepulse-PulseAudio_Support/0002-winepulse.drv-Use-a-separate-mainloop-and-ctx-for-pu.patch index f09b81d3..c1150306 100644 --- a/patches/winepulse-PulseAudio_Support/0002-winepulse.drv-Use-a-separate-mainloop-and-ctx-for-pu.patch +++ b/patches/winepulse-PulseAudio_Support/0002-winepulse.drv-Use-a-separate-mainloop-and-ctx-for-pu.patch @@ -1,18 +1,18 @@ -From 223fb2bc4c744188440690b7a95c5a2cc0f28ef6 Mon Sep 17 00:00:00 2001 +From e40bdd5226dfa79be37decd3dfca8ee0663550be Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Wed, 4 Nov 2015 02:57:56 +0100 Subject: winepulse.drv: Use a separate mainloop and ctx for pulse_test_connect. --- - dlls/winepulse.drv/mmdevdrv.c | 57 ++++++++++++++++++++----------------------- - 1 file changed, 26 insertions(+), 31 deletions(-) + dlls/winepulse.drv/mmdevdrv.c | 59 ++++++++++++++++++++----------------------- + 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c -index 24972ab..e781dbe 100644 +index fcb27d86..7ead734 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c -@@ -365,7 +365,7 @@ static DWORD pulse_channel_map_to_channel_mask(const pa_channel_map *map) { +@@ -366,7 +366,7 @@ static DWORD pulse_channel_map_to_channel_mask(const pa_channel_map *map) { return mask; } @@ -21,7 +21,7 @@ index 24972ab..e781dbe 100644 WAVEFORMATEX *wfx = &fmt->Format; pa_stream *stream; pa_channel_map map; -@@ -384,7 +384,7 @@ static void pulse_probe_settings(int render, WAVEFORMATEXTENSIBLE *fmt) { +@@ -385,7 +385,7 @@ static void pulse_probe_settings(int render, WAVEFORMATEXTENSIBLE *fmt) { attr.minreq = attr.fragsize = pa_frame_size(&ss); attr.prebuf = 0; @@ -30,7 +30,7 @@ index 24972ab..e781dbe 100644 if (stream) pa_stream_set_state_callback(stream, pulse_stream_state, NULL); if (!stream) -@@ -395,7 +395,7 @@ static void pulse_probe_settings(int render, WAVEFORMATEXTENSIBLE *fmt) { +@@ -396,7 +396,7 @@ static void pulse_probe_settings(int render, WAVEFORMATEXTENSIBLE *fmt) { else ret = pa_stream_connect_record(stream, NULL, &attr, PA_STREAM_START_CORKED|PA_STREAM_FIX_RATE|PA_STREAM_FIX_CHANNELS|PA_STREAM_EARLY_REQUESTS); if (ret >= 0) { @@ -39,7 +39,7 @@ index 24972ab..e781dbe 100644 pa_stream_get_state(stream) == PA_STREAM_CREATING) {} if (pa_stream_get_state(stream) == PA_STREAM_READY) { -@@ -406,7 +406,7 @@ static void pulse_probe_settings(int render, WAVEFORMATEXTENSIBLE *fmt) { +@@ -407,7 +407,7 @@ static void pulse_probe_settings(int render, WAVEFORMATEXTENSIBLE *fmt) { else length = pa_stream_get_buffer_attr(stream)->fragsize; pa_stream_disconnect(stream); @@ -48,7 +48,7 @@ index 24972ab..e781dbe 100644 pa_stream_get_state(stream) == PA_STREAM_READY) {} } -@@ -524,10 +524,12 @@ static HRESULT pulse_test_connect(void) +@@ -525,10 +525,12 @@ static HRESULT pulse_test_connect(void) WCHAR path[MAX_PATH], *name; char *str; pa_operation *o; @@ -63,7 +63,7 @@ index 24972ab..e781dbe 100644 GetModuleFileNameW(NULL, path, sizeof(path)/sizeof(*path)); name = strrchrW(path, '\\'); -@@ -539,24 +541,23 @@ static HRESULT pulse_test_connect(void) +@@ -540,24 +542,23 @@ static HRESULT pulse_test_connect(void) str = pa_xmalloc(len); WideCharToMultiByte(CP_UNIXCP, 0, name, -1, str, len, NULL, NULL); TRACE("Name: %s\n", str); @@ -96,9 +96,14 @@ index 24972ab..e781dbe 100644 if (state == PA_CONTEXT_FAILED || state == PA_CONTEXT_TERMINATED) goto fail; -@@ -566,34 +567,28 @@ static HRESULT pulse_test_connect(void) +@@ -566,38 +567,32 @@ static HRESULT pulse_test_connect(void) + break; } +- if (pa_context_get_state(pulse_ctx) != PA_CONTEXT_READY) ++ if (pa_context_get_state(ctx) != PA_CONTEXT_READY) + goto fail; + TRACE("Test-connected to server %s with protocol version: %i.\n", - pa_context_get_server(pulse_ctx), - pa_context_get_server_protocol_version(pulse_ctx)); @@ -142,5 +147,5 @@ index 24972ab..e781dbe 100644 } -- -2.6.2 +2.7.1