diff --git a/patches/advapi32-Token_Integrity_Level/0009-kernel32-Implement-CreateProcessInternalW.patch b/patches/advapi32-Token_Integrity_Level/0009-kernel32-Implement-CreateProcessInternalW.patch index d36a0095..00cd0d1a 100644 --- a/patches/advapi32-Token_Integrity_Level/0009-kernel32-Implement-CreateProcessInternalW.patch +++ b/patches/advapi32-Token_Integrity_Level/0009-kernel32-Implement-CreateProcessInternalW.patch @@ -1,7 +1,7 @@ -From 1546d28f3e52363ad805a1c1df1a3163d65afbed Mon Sep 17 00:00:00 2001 +From 796879e9a1840f7b893933d37821751cf1d35048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 5 Aug 2017 04:02:16 +0200 -Subject: kernel32: Implement CreateProcessInternalW. +Subject: [PATCH] kernel32: Implement CreateProcessInternalW. --- dlls/kernel32/kernel32.spec | 2 +- @@ -11,7 +11,7 @@ Subject: kernel32: Implement CreateProcessInternalW. 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec -index c60c5d6e532..7b5397a126e 100644 +index 60809f4..59915f9 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -315,7 +315,7 @@ @@ -24,10 +24,10 @@ index c60c5d6e532..7b5397a126e 100644 @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c -index 46449c9bf34..6cae911fdfb 100644 +index e7f9fd9..d37003c 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c -@@ -2441,12 +2441,13 @@ static LPWSTR get_file_name( LPCWSTR appname, LPWSTR cmdline, LPWSTR buffer, +@@ -2432,12 +2432,13 @@ static LPWSTR get_file_name( LPCWSTR appname, LPWSTR cmdline, LPWSTR buffer, return ret; } @@ -47,7 +47,7 @@ index 46449c9bf34..6cae911fdfb 100644 { BOOL retv = FALSE; HANDLE hFile = 0; -@@ -2459,6 +2460,9 @@ static BOOL create_process_impl( LPCWSTR app_name, LPWSTR cmd_line, LPSECURITY_A +@@ -2450,6 +2451,9 @@ static BOOL create_process_impl( LPCWSTR app_name, LPWSTR cmd_line, LPSECURITY_A TRACE("app %s cmdline %s\n", debugstr_w(app_name), debugstr_w(cmd_line) ); @@ -57,7 +57,7 @@ index 46449c9bf34..6cae911fdfb 100644 if (!(tidy_cmdline = get_file_name( app_name, cmd_line, name, sizeof(name)/sizeof(WCHAR), &hFile, &binary_info ))) return FALSE; -@@ -2610,8 +2614,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA( LPCSTR app_name, LPSTR cmd_line, L +@@ -2601,8 +2605,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA( LPCSTR app_name, LPSTR cmd_line, L FIXME("StartupInfo.lpReserved is used, please report (%s)\n", debugstr_a(startup_info->lpReserved)); @@ -68,7 +68,7 @@ index 46449c9bf34..6cae911fdfb 100644 done: HeapFree( GetProcessHeap(), 0, app_nameW ); HeapFree( GetProcessHeap(), 0, cmd_lineW ); -@@ -2630,8 +2634,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW( LPCWSTR app_name, LPWSTR cmd_line, +@@ -2621,8 +2625,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW( LPCWSTR app_name, LPWSTR cmd_line, LPVOID env, LPCWSTR cur_dir, LPSTARTUPINFOW startup_info, LPPROCESS_INFORMATION info ) { @@ -80,7 +80,7 @@ index 46449c9bf34..6cae911fdfb 100644 diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec -index bf254155aab..7b8c8c44161 100644 +index 1a6f1ff..8d2b722 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -209,7 +209,7 @@ @@ -91,12 +91,12 @@ index bf254155aab..7b8c8c44161 100644 +@ stdcall CreateProcessInternalW(long wstr wstr ptr ptr long long ptr wstr ptr ptr ptr) kernel32.CreateProcessInternalW @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread - @ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx + @ stdcall CreateRemoteThreadEx(long ptr long ptr ptr long ptr ptr) kernel32.CreateRemoteThreadEx diff --git a/include/winbase.h b/include/winbase.h -index 24efbd865ab..7982fa4a070 100644 +index 8d65d78..35a2213 100644 --- a/include/winbase.h +++ b/include/winbase.h -@@ -1847,6 +1847,7 @@ WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTE +@@ -1856,6 +1856,7 @@ WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTE WINADVAPI BOOL WINAPI CreateProcessAsUserA(HANDLE,LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION); WINADVAPI BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION); #define CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser) @@ -105,5 +105,5 @@ index 24efbd865ab..7982fa4a070 100644 WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD); WINBASEAPI HANDLE WINAPI CreateRemoteThreadEx(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPPROC_THREAD_ATTRIBUTE_LIST,LPDWORD); -- -2.13.1 +1.9.1 diff --git a/patches/kernel32-TRUST_E_NOSIGNATURE/0001-kernel32-add-message-resource-for-TRUST_E_NOSIGNATUR.patch b/patches/kernel32-TRUST_E_NOSIGNATURE/0001-kernel32-add-message-resource-for-TRUST_E_NOSIGNATUR.patch deleted file mode 100644 index a0dc9f37..00000000 --- a/patches/kernel32-TRUST_E_NOSIGNATURE/0001-kernel32-add-message-resource-for-TRUST_E_NOSIGNATUR.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 9d5dcc2d2b1087294f16173efba8c381c3292316 Mon Sep 17 00:00:00 2001 -From: Louis Lenders -Date: Sat, 23 Sep 2017 01:06:40 +0200 -Subject: kernel32: add message resource for TRUST_E_NOSIGNATURE -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Based on a patch by Austin English. - -Signed-off-by: Louis Lenders -Signed-off-by: Michael Müller ---- - dlls/kernel32/tests/format_msg.c | 4 ++++ - dlls/kernel32/winerror.mc | 11 +++++++++++ - 2 files changed, 15 insertions(+) - -diff --git a/dlls/kernel32/tests/format_msg.c b/dlls/kernel32/tests/format_msg.c -index 1f88e2465b8..08a35c53cd2 100644 ---- a/dlls/kernel32/tests/format_msg.c -+++ b/dlls/kernel32/tests/format_msg.c -@@ -1559,6 +1559,10 @@ static void test_message_from_hmodule(void) - MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), out, sizeof(out)/sizeof(CHAR), NULL); - ok(ret != 0, "FormatMessageA returned 0\n"); - -+ ret = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, h, TRUST_E_NOSIGNATURE, -+ MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), out, sizeof(out)/sizeof(CHAR), NULL); -+ ok(ret != 0, "FormatMessageA returned 0\n"); -+ - /* Test a message string with an insertion without passing any variadic arguments. */ - ret = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, h, 193 /* ERROR_BAD_EXE_FORMAT */, - MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), out, sizeof(out)/sizeof(CHAR), NULL); -diff --git a/dlls/kernel32/winerror.mc b/dlls/kernel32/winerror.mc -index dc17f499b55..141af216ec7 100644 ---- a/dlls/kernel32/winerror.mc -+++ b/dlls/kernel32/winerror.mc -@@ -18,6 +18,10 @@ - - LanguageNames=(ENU=0x409:winerr) - -+SeverityNames=(CoError=0x2:STATUS_SEVERITY_COERROR) -+ -+FacilityNames=(Trust=0xb:FACILITY_CERT) -+ - MessageId=0 - SymbolicName=ERROR_SUCCESS - Language=ENU -@@ -3748,3 +3752,10 @@ SymbolicName=WSAECONNREFUSED - Language=ENU - Connection refused. - . -+MessageId=0x100 -+Severity=CoError -+Facility=Trust -+SymbolicName=TRUST_E_NOSIGNATURE -+Language=ENU -+No Signature found in file. -+. --- -2.14.1 - diff --git a/patches/kernel32-TRUST_E_NOSIGNATURE/definition b/patches/kernel32-TRUST_E_NOSIGNATURE/definition deleted file mode 100644 index f46e4bae..00000000 --- a/patches/kernel32-TRUST_E_NOSIGNATURE/definition +++ /dev/null @@ -1 +0,0 @@ -Fixes: [43041] Add missing message string for TRUST_E_NOSIGNATURE diff --git a/patches/kernel32-UmsStubs/0001-kernel32-Add-a-bunch-of-kernel32-stubs.patch b/patches/kernel32-UmsStubs/0001-kernel32-Add-a-bunch-of-kernel32-stubs.patch index 6e9b6567..fd7f4835 100644 --- a/patches/kernel32-UmsStubs/0001-kernel32-Add-a-bunch-of-kernel32-stubs.patch +++ b/patches/kernel32-UmsStubs/0001-kernel32-Add-a-bunch-of-kernel32-stubs.patch @@ -1,74 +1,21 @@ -From 46e49340da6151f517a23d77ab9eed45b9e6982c Mon Sep 17 00:00:00 2001 +From 382ce2af9afc78d09793854af6105bde6d7a8151 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Thu, 16 Jun 2016 18:56:21 +0800 -Subject: kernel32: Add a bunch of kernel32 stubs. +Subject: [PATCH] kernel32: Add a bunch of kernel32 stubs. 64-bit ACDSee Pro 9.0 on start up queries them with GetProcAddress() and fails to start if any of these APIs is missing. --- - .../api-ms-win-core-processthreads-l1-1-0.spec | 2 +- - .../api-ms-win-core-processthreads-l1-1-1.spec | 2 +- - .../api-ms-win-core-processthreads-l1-1-2.spec | 2 +- - dlls/kernel32/kernel32.spec | 28 ++-- - dlls/kernel32/sync.c | 145 +++++++++++++++++++++ - dlls/kernel32/thread.c | 12 ++ - dlls/kernelbase/kernelbase.spec | 2 +- - include/winbase.h | 18 +++ - include/winnt.h | 22 +++- - 9 files changed, 214 insertions(+), 19 deletions(-) + dlls/kernel32/kernel32.spec | 26 ++++---- + dlls/kernel32/sync.c | 145 ++++++++++++++++++++++++++++++++++++++++++++ + include/winbase.h | 17 ++++++ + include/winnt.h | 22 ++++++- + 4 files changed, 196 insertions(+), 14 deletions(-) -diff --git a/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec b/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec -index 77414bc367c..6a41d51fd39 100644 ---- a/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec -+++ b/dlls/api-ms-win-core-processthreads-l1-1-0/api-ms-win-core-processthreads-l1-1-0.spec -@@ -2,7 +2,7 @@ - @ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW - @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW - @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread --@ stub CreateRemoteThreadEx -+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx - @ stdcall CreateThread(ptr long ptr long long ptr) kernel32.CreateThread - @ stdcall DeleteProcThreadAttributeList(ptr) kernel32.DeleteProcThreadAttributeList - @ stdcall ExitProcess(long) kernel32.ExitProcess -diff --git a/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec b/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec -index 149678995cc..04329650096 100644 ---- a/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec -+++ b/dlls/api-ms-win-core-processthreads-l1-1-1/api-ms-win-core-processthreads-l1-1-1.spec -@@ -2,7 +2,7 @@ - @ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW - @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW - @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread --@ stub CreateRemoteThreadEx -+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx - @ stdcall CreateThread(ptr long ptr long long ptr) kernel32.CreateThread - @ stdcall DeleteProcThreadAttributeList(ptr) kernel32.DeleteProcThreadAttributeList - @ stdcall ExitProcess(long) kernel32.ExitProcess -diff --git a/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec b/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec -index 7bfbe72106e..4607da257ba 100644 ---- a/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec -+++ b/dlls/api-ms-win-core-processthreads-l1-1-2/api-ms-win-core-processthreads-l1-1-2.spec -@@ -2,7 +2,7 @@ - @ stdcall CreateProcessAsUserW(long wstr wstr ptr ptr long long ptr wstr ptr ptr) advapi32.CreateProcessAsUserW - @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW - @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread --@ stub CreateRemoteThreadEx -+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx - @ stdcall CreateThread(ptr long ptr long long ptr) kernel32.CreateThread - @ stdcall DeleteProcThreadAttributeList(ptr) kernel32.DeleteProcThreadAttributeList - @ stdcall ExitProcess(long) kernel32.ExitProcess diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec -index 1a11af579f4..87583cd8f78 100644 +index ee11c42..60809f4 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec -@@ -319,7 +319,7 @@ - # @ stub CreateProcessInternalWSecure - @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) - @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) --# @ stub CreateRemoteThreadEx -+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) - @ stdcall CreateSemaphoreA(ptr long long str) - @ stdcall CreateSemaphoreExA(ptr long long str long long) - @ stdcall CreateSemaphoreExW(ptr long long wstr long long) @@ -340,8 +340,8 @@ @ stdcall CreateTimerQueue () @ stdcall CreateTimerQueueTimer(ptr long ptr ptr long long long) @@ -163,7 +110,7 @@ index 1a11af579f4..87583cd8f78 100644 @ stdcall -i386 -private UTRegister(long str str str ptr ptr ptr) krnl386.exe16.UTRegister @ stdcall -i386 -private UTUnRegister(long) krnl386.exe16.UTUnRegister diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c -index d3d46b7dc89..b0ed3c5fca3 100644 +index d3d46b7..b0ed3c5 100644 --- a/dlls/kernel32/sync.c +++ b/dlls/kernel32/sync.c @@ -2454,3 +2454,148 @@ BOOL WINAPI SleepConditionVariableSRW( RTL_CONDITION_VARIABLE *variable, RTL_SRW @@ -315,47 +262,11 @@ index d3d46b7dc89..b0ed3c5fca3 100644 + SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); + return FALSE; +} -diff --git a/dlls/kernel32/thread.c b/dlls/kernel32/thread.c -index a30428fb277..2e26a9438c0 100644 ---- a/dlls/kernel32/thread.c -+++ b/dlls/kernel32/thread.c -@@ -113,6 +113,18 @@ HANDLE WINAPI CreateRemoteThread( HANDLE hProcess, SECURITY_ATTRIBUTES *sa, SIZE - } - - -+/*************************************************************************** -+ * CreateRemoteThreadEx (KERNEL32.@) -+ */ -+HANDLE WINAPI CreateRemoteThreadEx( HANDLE hProcess, SECURITY_ATTRIBUTES *sa, SIZE_T stack, -+ LPTHREAD_START_ROUTINE start, LPVOID param, DWORD flags, -+ LPPROC_THREAD_ATTRIBUTE_LIST attrs, LPDWORD id ) -+{ -+ FIXME( "attribute list ignored\n" ); -+ return CreateRemoteThread( hProcess, sa, stack, start, param, flags, id ); -+} -+ -+ - /*********************************************************************** - * OpenThread [KERNEL32.@] Retrieves a handle to a thread from its thread id - */ -diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec -index bb80f212936..36eee6f9925 100644 ---- a/dlls/kernelbase/kernelbase.spec -+++ b/dlls/kernelbase/kernelbase.spec -@@ -212,7 +212,7 @@ - # @ stub CreateProcessInternalW - @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) kernel32.CreateProcessW - @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) kernel32.CreateRemoteThread --@ stub CreateRemoteThreadEx -+@ stdcall CreateRemoteThreadEx(long ptr long ptr long long ptr ptr) kernel32.CreateRemoteThreadEx - @ stdcall CreateRestrictedToken(long long long ptr long ptr long ptr ptr) advapi32.CreateRestrictedToken - @ stdcall CreateSemaphoreExW(ptr long long wstr long long) kernel32.CreateSemaphoreExW - @ stdcall CreateSemaphoreW(ptr long long wstr) kernel32.CreateSemaphoreW diff --git a/include/winbase.h b/include/winbase.h -index 1347f8cd1c3..8f9c5a1f649 100644 +index e47c87a..8d65d78 100644 --- a/include/winbase.h +++ b/include/winbase.h -@@ -1685,6 +1685,20 @@ typedef enum _PROC_THREAD_ATTRIBUTE_NUM +@@ -1694,6 +1694,20 @@ typedef enum _PROC_THREAD_ATTRIBUTE_NUM #define SYMBOLIC_LINK_FLAG_DIRECTORY (0x1) #define VALID_SYMBOLIC_LINK_FLAGS SYMBOLIC_LINK_FLAG_DIRECTORY @@ -376,15 +287,7 @@ index 1347f8cd1c3..8f9c5a1f649 100644 WINBASEAPI BOOL WINAPI ActivateActCtx(HANDLE,ULONG_PTR *); WINADVAPI BOOL WINAPI AddAccessAllowedAce(PACL,DWORD,DWORD,PSID); WINADVAPI BOOL WINAPI AddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID); -@@ -1834,6 +1848,7 @@ WINADVAPI BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECUR - #define CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser) - WINADVAPI BOOL WINAPI CreateProcessWithLogonW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPWSTR,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION); - WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD); -+WINBASEAPI HANDLE WINAPI CreateRemoteThreadEx(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPPROC_THREAD_ATTRIBUTE_LIST,LPDWORD); - WINADVAPI BOOL WINAPI CreateRestrictedToken(HANDLE,DWORD,DWORD,PSID_AND_ATTRIBUTES,DWORD,PLUID_AND_ATTRIBUTES,DWORD,PSID_AND_ATTRIBUTES,PHANDLE); - WINBASEAPI HANDLE WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR); - WINBASEAPI HANDLE WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR); -@@ -1851,6 +1866,8 @@ WINBASEAPI DWORD WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD); +@@ -1862,6 +1876,8 @@ WINBASEAPI DWORD WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD); WINBASEAPI HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD); WINBASEAPI HANDLE WINAPI CreateTimerQueue(void); WINBASEAPI BOOL WINAPI CreateTimerQueueTimer(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,ULONG); @@ -393,7 +296,7 @@ index 1347f8cd1c3..8f9c5a1f649 100644 WINBASEAPI HANDLE WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR); WINBASEAPI HANDLE WINAPI CreateWaitableTimerW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR); #define CreateWaitableTimer WINELIB_NAME_AW(CreateWaitableTimer) -@@ -1909,6 +1926,7 @@ WINBASEAPI BOOL WINAPI EndUpdateResourceA(HANDLE,BOOL); +@@ -1920,6 +1936,7 @@ WINBASEAPI BOOL WINAPI EndUpdateResourceA(HANDLE,BOOL); WINBASEAPI BOOL WINAPI EndUpdateResourceW(HANDLE,BOOL); #define EndUpdateResource WINELIB_NAME_AW(EndUpdateResource) WINBASEAPI void WINAPI EnterCriticalSection(CRITICAL_SECTION *lpCrit); @@ -402,10 +305,10 @@ index 1347f8cd1c3..8f9c5a1f649 100644 WINBASEAPI BOOL WINAPI EnumResourceLanguagesW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROCW,LONG_PTR); #define EnumResourceLanguages WINELIB_NAME_AW(EnumResourceLanguages) diff --git a/include/winnt.h b/include/winnt.h -index 450499c1299..5bd1b1b4a83 100644 +index 56b533c..6b598f3 100644 --- a/include/winnt.h +++ b/include/winnt.h -@@ -6016,9 +6016,29 @@ typedef VOID (CALLBACK *PTP_TIMER_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_TIME +@@ -6120,9 +6120,29 @@ typedef VOID (CALLBACK *PTP_TIMER_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_TIME typedef VOID (CALLBACK *PTP_WAIT_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PTP_WAIT,TP_WAIT_RESULT); typedef VOID (CALLBACK *PTP_WIN32_IO_CALLBACK)(PTP_CALLBACK_INSTANCE,PVOID,PVOID,ULONG,ULONG_PTR,PTP_IO); @@ -437,5 +340,5 @@ index 450499c1299..5bd1b1b4a83 100644 } #endif -- -2.13.0 +1.9.1 diff --git a/patches/kernel32-VerifyVersionInfo/0001-kernel32-tests-Add-additional-tests-for-condition-ma.patch b/patches/kernel32-VerifyVersionInfo/0001-kernel32-tests-Add-additional-tests-for-condition-ma.patch index 3cf40e78..4bd295b0 100644 --- a/patches/kernel32-VerifyVersionInfo/0001-kernel32-tests-Add-additional-tests-for-condition-ma.patch +++ b/patches/kernel32-VerifyVersionInfo/0001-kernel32-tests-Add-additional-tests-for-condition-ma.patch @@ -1,28 +1,147 @@ -From 8ad1946fb6af9ee34ea4a85adde57c9b6f9cc523 Mon Sep 17 00:00:00 2001 +From be07aec481bc78b79e1ab0f31385312cda34b4d8 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 1 Dec 2014 11:28:26 +0100 -Subject: kernel32/tests: Add additional tests for condition mask of +Subject: [PATCH] kernel32/tests: Add additional tests for condition mask of VerifyVersionInfoA. --- - dlls/kernel32/tests/version.c | 338 ++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 338 insertions(+) + dlls/kernel32/tests/version.c | 450 ++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 450 insertions(+) diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c -index a47e52c..248f01c 100644 +index 49a9357..1a6a0d4 100644 --- a/dlls/kernel32/tests/version.c +++ b/dlls/kernel32/tests/version.c -@@ -353,6 +353,344 @@ static void test_VerifyVersionInfo(void) - pVerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); - ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError()); +@@ -596,6 +596,7 @@ static void test_VerifyVersionInfo(void) + DWORD servicepack; + unsigned int i; + BOOL ret; ++ DWORD error; + /* Before we start doing some tests we should check what the version of + * the ServicePack is. Tests on a box with no ServicePack will fail otherwise. +@@ -702,6 +703,455 @@ static void test_VerifyVersionInfo(void) + VER_MAJORVERSION, VER_GREATER_EQUAL)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.wServicePackMinor++; ++ SetLastError(0xdeadbeef); ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); ++ error = GetLastError(); ++ ok(!ret, "VerifyVersionInfoA succeeded\n"); ++ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some wink2 */, ++ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error); ++ ++ if (servicepack == 0) ++ { ++ skip("There is no ServicePack on this system\n"); ++ } ++ else ++ { ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.wServicePackMajor--; ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER)); ++ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError()); ++ ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.wServicePackMajor--; ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); ++ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError()); ++ } ++ ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.wServicePackMajor++; ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_LESS)); ++ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError()); ++ ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.wServicePackMajor++; ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_LESS_EQUAL)); ++ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError()); ++ ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.wServicePackMajor--; ++ SetLastError(0xdeadbeef); ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL)); ++ error = GetLastError(); ++ ok(!ret, "VerifyVersionInfoA succeeded\n"); ++ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, ++ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error); ++ ++ /* test the failure hierarchy for the four version fields */ ++ ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.wServicePackMajor++; ++ SetLastError(0xdeadbeef); ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); ++ error = GetLastError(); ++ ok(!ret, "VerifyVersionInfoA succeeded\n"); ++ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, ++ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error); ++ ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.dwMinorVersion++; ++ SetLastError(0xdeadbeef); ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); ++ error = GetLastError(); ++ ok(!ret, "VerifyVersionInfoA succeeded\n"); ++ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, ++ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error); ++ ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.dwMajorVersion++; ++ SetLastError(0xdeadbeef); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); ++ error = GetLastError(); ++ ok(!ret, "VerifyVersionInfoA succeeded\n"); ++ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, ++ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error); ++ ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); ++ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError()); ++ ++ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); ++ GetVersionExA((OSVERSIONINFOA *)&info); ++ info.dwBuildNumber++; ++ SetLastError(0xdeadbeef); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); ++ error = GetLastError(); ++ ok(!ret, "VerifyVersionInfoA succeeded\n"); ++ ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, ++ "VerifyVersionInfoA should have failed with ERROR_OLD_WIN_VERSION instead of %d\n", error); ++ ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(0, VER_MINORVERSION, VER_GREATER_EQUAL)); ++ ok(ret || broken(!ret) /* some win2k */, "VerifyVersionInfoA failed with error %d\n", GetLastError()); ++ + /* systematically test behaviour of condition mask (tests sorted by condition mask value) */ + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.dwMinorVersion++; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_MINORVERSION, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_MINORVERSION, VER_LESS)); + todo_wine + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + @@ -30,8 +149,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.dwMinorVersion++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -39,29 +158,29 @@ index a47e52c..248f01c 100644 + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_LESS)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_AND)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_MINORVERSION, VER_AND)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.dwMinorVersion++; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_LESS_EQUAL), VER_MINORVERSION, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_LESS_EQUAL), VER_MINORVERSION, VER_LESS)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.dwMinorVersion++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_AND), VER_MINORVERSION, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_AND), VER_MINORVERSION, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -71,8 +190,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.dwMinorVersion++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_OR), VER_MINORVERSION, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_OR), VER_MINORVERSION, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -82,8 +201,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMinor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -93,8 +212,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMinor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -104,8 +223,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -117,16 +236,16 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.dwMajorVersion++; + info.wServicePackMajor--; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_LESS), VER_SERVICEPACKMAJOR, VER_EQUAL)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_LESS), VER_SERVICEPACKMAJOR, VER_EQUAL)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + } + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMinor++; -+ ret = pVerifyVersionInfoA(&info, VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); + todo_wine + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + @@ -134,8 +253,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMinor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -144,8 +263,8 @@ index a47e52c..248f01c 100644 + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMinor++; -+ ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), + VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); + todo_wine + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); @@ -154,8 +273,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMinor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), + VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); @@ -165,8 +284,8 @@ index a47e52c..248f01c 100644 + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMinor++; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), + VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); + todo_wine + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); @@ -175,8 +294,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMinor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), + VER_MINORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); @@ -189,8 +308,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor--; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -199,24 +318,24 @@ index a47e52c..248f01c 100644 + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor--; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), + VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor--; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), + VER_MINORVERSION, VER_LESS_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor--; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), + VER_MINORVERSION, VER_AND), VER_SERVICEPACKMAJOR, VER_GREATER)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + } @@ -224,8 +343,8 @@ index a47e52c..248f01c 100644 + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_LESS_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_LESS_EQUAL), VER_SERVICEPACKMAJOR, VER_GREATER)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + + if (servicepack) @@ -234,8 +353,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor--; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_GREATER), VER_SERVICEPACKMINOR, VER_EQUAL)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_GREATER), VER_SERVICEPACKMINOR, VER_EQUAL)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -245,8 +364,8 @@ index a47e52c..248f01c 100644 + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; -+ ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + todo_wine + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + @@ -254,8 +373,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -264,8 +383,8 @@ index a47e52c..248f01c 100644 + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + todo_wine + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + @@ -273,8 +392,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -283,8 +402,8 @@ index a47e52c..248f01c 100644 + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), + VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + todo_wine + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); @@ -293,8 +412,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -303,22 +422,22 @@ index a47e52c..248f01c 100644 + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.dwMajorVersion--; -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); + ok(error == ERROR_OLD_WIN_VERSION || broken(error == ERROR_BAD_ARGUMENTS) /* some win2k */, @@ -328,8 +447,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), + VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); @@ -340,8 +459,8 @@ index a47e52c..248f01c 100644 + GetVersionExA((OSVERSIONINFOA *)&info); + info.wServicePackMajor++; + SetLastError(0xdeadbeef); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), + VER_MINORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS_EQUAL)); + error = GetLastError(); + ok(!ret, "VerifyVersionInfoA succeeded\n"); @@ -350,13 +469,13 @@ index a47e52c..248f01c 100644 + + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionExA((OSVERSIONINFOA *)&info); -+ ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, -+ pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_AND)); ++ ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, ++ VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL), VER_SERVICEPACKMAJOR, VER_AND)); + ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); + /* test bad dwOSVersionInfoSize */ info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); GetVersionExA((OSVERSIONINFOA *)&info); -- -2.1.3 +1.9.1 diff --git a/patches/kernel32-VerifyVersionInfo/0002-ntdll-Fix-condition-mask-handling-in-RtlVerifyVersio.patch b/patches/kernel32-VerifyVersionInfo/0002-ntdll-Fix-condition-mask-handling-in-RtlVerifyVersio.patch index 09d534da..a849de52 100644 --- a/patches/kernel32-VerifyVersionInfo/0002-ntdll-Fix-condition-mask-handling-in-RtlVerifyVersio.patch +++ b/patches/kernel32-VerifyVersionInfo/0002-ntdll-Fix-condition-mask-handling-in-RtlVerifyVersio.patch @@ -1,78 +1,46 @@ -From ca7be85de4f395713f3b388d6eb1ce7399b5e2d8 Mon Sep 17 00:00:00 2001 +From ac09483f10409c0f5de9bee8f160c8be45ee351f Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 1 Dec 2014 11:30:58 +0100 -Subject: ntdll: Fix condition mask handling in RtlVerifyVersionInfo. +Subject: [PATCH] ntdll: Fix condition mask handling in RtlVerifyVersionInfo. --- - dlls/kernel32/tests/version.c | 7 ------ + dlls/kernel32/tests/version.c | 3 --- dlls/ntdll/version.c | 50 ++++++++++++++++++++++++++++++++----------- - 2 files changed, 37 insertions(+), 20 deletions(-) + 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/dlls/kernel32/tests/version.c b/dlls/kernel32/tests/version.c -index 248f01c..4d07176 100644 +index 1a6a0d4..db182a3 100644 --- a/dlls/kernel32/tests/version.c +++ b/dlls/kernel32/tests/version.c -@@ -360,7 +360,6 @@ static void test_VerifyVersionInfo(void) - info.dwMinorVersion++; - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_MINORVERSION, VER_LESS)); -- todo_wine - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); -@@ -464,7 +463,6 @@ static void test_VerifyVersionInfo(void) - info.wServicePackMinor++; - ret = pVerifyVersionInfoA(&info, VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(0, VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); -- todo_wine - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); -@@ -484,7 +482,6 @@ static void test_VerifyVersionInfo(void) - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), +@@ -945,7 +945,6 @@ static void test_VerifyVersionInfo(void) + ret = VerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, + VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); - todo_wine ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); -@@ -505,7 +502,6 @@ static void test_VerifyVersionInfo(void) - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), +@@ -966,7 +965,6 @@ static void test_VerifyVersionInfo(void) + ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, + VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_EQUAL), VER_SERVICEPACKMINOR, VER_LESS)); - todo_wine ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); -@@ -584,7 +580,6 @@ static void test_VerifyVersionInfo(void) - info.wServicePackMajor++; - ret = pVerifyVersionInfoA(&info, VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); -- todo_wine - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); -@@ -603,7 +598,6 @@ static void test_VerifyVersionInfo(void) - info.wServicePackMajor++; - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); -- todo_wine - ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); - - info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); -@@ -623,7 +617,6 @@ static void test_VerifyVersionInfo(void) - ret = pVerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, - pVerSetConditionMask(pVerSetConditionMask(pVerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), +@@ -1084,7 +1082,6 @@ static void test_VerifyVersionInfo(void) + ret = VerifyVersionInfoA(&info, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR, + VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL), VER_MINORVERSION, VER_EQUAL), VER_SERVICEPACKMAJOR, VER_LESS)); - todo_wine ok(ret, "VerifyVersionInfoA failed with error %d\n", GetLastError()); info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); diff --git a/dlls/ntdll/version.c b/dlls/ntdll/version.c -index a6340eb..5d1b445 100644 +index 58ccb95..8beef6d 100644 --- a/dlls/ntdll/version.c +++ b/dlls/ntdll/version.c -@@ -657,6 +657,35 @@ BOOLEAN WINAPI RtlGetNtProductType( LPDWORD type ) +@@ -658,6 +658,35 @@ BOOLEAN WINAPI RtlGetNtProductType( LPDWORD type ) } @@ -108,7 +76,7 @@ index a6340eb..5d1b445 100644 static inline NTSTATUS version_compare_values(ULONG left, ULONG right, UCHAR condition) { switch (condition) { -@@ -732,38 +761,33 @@ NTSTATUS WINAPI RtlVerifyVersionInfo( const RTL_OSVERSIONINFOEXW *info, +@@ -733,38 +762,33 @@ NTSTATUS WINAPI RtlVerifyVersionInfo( const RTL_OSVERSIONINFOEXW *info, if(dwTypeMask & (VER_MAJORVERSION|VER_MINORVERSION|VER_SERVICEPACKMAJOR|VER_SERVICEPACKMINOR)) { @@ -156,5 +124,5 @@ index a6340eb..5d1b445 100644 } -- -2.1.3 +1.9.1 diff --git a/patches/ntdll-DllRedirects/0005-ntdll-Implement-loader-redirection-scheme.patch b/patches/ntdll-DllRedirects/0005-ntdll-Implement-loader-redirection-scheme.patch index 08261314..ed5bbd45 100644 --- a/patches/ntdll-DllRedirects/0005-ntdll-Implement-loader-redirection-scheme.patch +++ b/patches/ntdll-DllRedirects/0005-ntdll-Implement-loader-redirection-scheme.patch @@ -1,17 +1,17 @@ -From 5fb64d317c91b9fbbfc083b1b935df2300d791c4 Mon Sep 17 00:00:00 2001 +From acbb7a912a0e0ee171f72683934dabf828f75a53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 13 Dec 2014 05:34:48 +0100 -Subject: [PATCH 5/5] ntdll: Implement loader redirection scheme. +Subject: [PATCH] ntdll: Implement loader redirection scheme. --- dlls/ntdll/loader.c | 67 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c -index f2b4c3f..8ce4260 100644 +index c637f0e..3f755fc 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c -@@ -97,6 +97,7 @@ struct builtin_load_info +@@ -100,6 +100,7 @@ struct builtin_load_info { const WCHAR *load_path; const WCHAR *filename; @@ -19,7 +19,7 @@ index f2b4c3f..8ce4260 100644 NTSTATUS status; WINE_MODREF *wm; }; -@@ -122,7 +123,8 @@ static WINE_MODREF *cached_modref; +@@ -125,7 +126,8 @@ static WINE_MODREF *cached_modref; static WINE_MODREF *current_modref; static WINE_MODREF *last_failed_modref; @@ -29,7 +29,7 @@ index f2b4c3f..8ce4260 100644 static NTSTATUS process_attach( WINE_MODREF *wm, LPVOID lpReserved ); static FARPROC find_ordinal_export( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports, DWORD exp_size, DWORD ordinal, LPCWSTR load_path ); -@@ -446,7 +448,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS +@@ -449,7 +451,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS if (!(wm = find_basename_module( mod_name ))) { TRACE( "delay loading %s for '%s'\n", debugstr_w(mod_name), forward ); @@ -38,7 +38,7 @@ index f2b4c3f..8ce4260 100644 !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) { if (!imports_fixup_done && current_modref) -@@ -616,7 +618,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP +@@ -619,7 +621,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP { ascii_to_unicode( buffer, name, len ); buffer[len] = 0; @@ -47,7 +47,7 @@ index f2b4c3f..8ce4260 100644 } else /* need to allocate a larger buffer */ { -@@ -624,7 +626,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP +@@ -627,7 +629,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP if (!ptr) return FALSE; ascii_to_unicode( ptr, name, len ); ptr[len] = 0; @@ -56,16 +56,16 @@ index f2b4c3f..8ce4260 100644 RtlFreeHeap( GetProcessHeap(), 0, ptr ); } -@@ -909,7 +911,7 @@ static NTSTATUS fixup_imports_ilonly( WINE_MODREF *wm, LPCWSTR load_path, void * +@@ -912,7 +914,7 @@ static NTSTATUS fixup_imports_ilonly( WINE_MODREF *wm, LPCWSTR load_path, void * prev = current_modref; current_modref = wm; - if (!(status = load_dll( load_path, mscoreeW, 0, &imp ))) wm->deps[0] = imp; + if (!(status = load_dll( load_path, mscoreeW, NULL, 0, &imp ))) wm->deps[0] = imp; current_modref = prev; - if (status) return status; - -@@ -987,7 +989,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path ) + if (status) + { +@@ -995,7 +997,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path ) * Allocate a WINE_MODREF structure and add it to the process list * The loader_section must be locked while calling this function. */ @@ -74,7 +74,7 @@ index f2b4c3f..8ce4260 100644 { WINE_MODREF *wm; const WCHAR *p; -@@ -1009,7 +1011,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) +@@ -1017,7 +1019,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) wm->ldr.TimeDateStamp = 0; wm->ldr.ActivationContext = 0; @@ -83,7 +83,7 @@ index f2b4c3f..8ce4260 100644 if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++; else p = wm->ldr.FullDllName.Buffer; RtlInitUnicodeString( &wm->ldr.BaseDllName, p ); -@@ -1624,7 +1626,7 @@ static void load_builtin_callback( void *module, const char *filename ) +@@ -1722,7 +1724,7 @@ static void load_builtin_callback( void *module, const char *filename ) return; } @@ -92,7 +92,7 @@ index f2b4c3f..8ce4260 100644 RtlFreeHeap( GetProcessHeap(), 0, fullname ); if (!wm) { -@@ -1825,8 +1827,8 @@ static BOOL is_valid_binary( const pe_image_info_t *info ) +@@ -1923,8 +1925,8 @@ static BOOL is_valid_binary( const pe_image_info_t *info ) /****************************************************************************** * load_native_dll (internal) */ @@ -103,7 +103,7 @@ index f2b4c3f..8ce4260 100644 { void *module; HANDLE mapping; -@@ -1869,7 +1871,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, +@@ -1967,7 +1969,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, /* create the MODREF */ @@ -112,7 +112,7 @@ index f2b4c3f..8ce4260 100644 { if (module) NtUnmapViewOfSection( NtCurrentProcess(), module ); return STATUS_NO_MEMORY; -@@ -1931,8 +1933,8 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, +@@ -2029,8 +2031,8 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, /*********************************************************************** * load_builtin_dll */ @@ -123,7 +123,7 @@ index f2b4c3f..8ce4260 100644 { char error[256], dllname[MAX_PATH]; const WCHAR *name, *p; -@@ -1952,6 +1954,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, +@@ -2050,6 +2052,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, */ info.load_path = load_path; info.filename = NULL; @@ -131,7 +131,7 @@ index f2b4c3f..8ce4260 100644 info.status = STATUS_SUCCESS; info.wm = NULL; -@@ -2399,7 +2402,8 @@ overflow: +@@ -2497,7 +2500,8 @@ overflow: * Load a PE style module according to the load order. * The loader_section must be locked while calling this function. */ @@ -141,7 +141,7 @@ index f2b4c3f..8ce4260 100644 { BOOL data = flags & (LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE); enum loadorder loadorder; -@@ -2437,6 +2441,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ +@@ -2535,6 +2539,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ } main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); @@ -167,7 +167,7 @@ index f2b4c3f..8ce4260 100644 loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename ); if (handle && is_fake_dll( handle )) -@@ -2459,22 +2482,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ +@@ -2557,22 +2580,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ if (!handle) nts = STATUS_DLL_NOT_FOUND; else { @@ -195,7 +195,7 @@ index f2b4c3f..8ce4260 100644 if (nts == STATUS_SUCCESS && loadorder == LO_DEFAULT && (MODULE_InitDLL( *pwm, DLL_WINE_PREATTACH, NULL ) != STATUS_SUCCESS)) { -@@ -2484,7 +2507,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ +@@ -2582,7 +2605,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ nts = STATUS_DLL_NOT_FOUND; } if (nts == STATUS_DLL_NOT_FOUND && loadorder != LO_BUILTIN) @@ -204,7 +204,7 @@ index f2b4c3f..8ce4260 100644 break; } -@@ -2517,7 +2540,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags, +@@ -2615,7 +2638,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags, RtlEnterCriticalSection( &loader_section ); if (!path_name) path_name = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer; @@ -213,7 +213,7 @@ index f2b4c3f..8ce4260 100644 if (nts == STATUS_SUCCESS && !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) { -@@ -3478,7 +3501,7 @@ void __wine_process_init(void) +@@ -3645,7 +3668,7 @@ void __wine_process_init(void) /* setup the load callback and create ntdll modref */ wine_dll_set_callback( load_builtin_callback ); @@ -223,5 +223,5 @@ index f2b4c3f..8ce4260 100644 MESSAGE( "wine: could not load kernel32.dll, status %x\n", status ); exit(1); -- -2.7.4 +1.9.1 diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 3b7d3cb1..9e4923ad 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -52,7 +52,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "7be8beab68c5074e78c899acac7ccb6eb2f7e22e" + echo "9ae8b8c00f2cca205fdf4ce76e221778b7dfbea7" } # Show version information @@ -196,7 +196,6 @@ patch_enable_all () enable_kernel32_Profile="$1" enable_kernel32_SCSI_Sysfs="$1" enable_kernel32_SetFileCompletionNotificationModes="$1" - enable_kernel32_TRUST_E_NOSIGNATURE="$1" enable_kernel32_TimezoneInformation_Registry="$1" enable_kernel32_UmsStubs="$1" enable_kernel32_VerifyVersionInfo="$1" @@ -481,7 +480,6 @@ patch_enable_all () enable_ws2_32_WSACleanup="$1" enable_ws2_32_getaddrinfo="$1" enable_ws2_32_getsockopt="$1" - enable_ws2_32_setsockopt="$1" enable_wtsapi32_EnumerateProcesses="$1" enable_wtsapi32_WTSQueryUserToken="$1" enable_wuauserv_Dummy_Service="$1" @@ -832,9 +830,6 @@ patch_enable () kernel32-SetFileCompletionNotificationModes) enable_kernel32_SetFileCompletionNotificationModes="$2" ;; - kernel32-TRUST_E_NOSIGNATURE) - enable_kernel32_TRUST_E_NOSIGNATURE="$2" - ;; kernel32-TimezoneInformation_Registry) enable_kernel32_TimezoneInformation_Registry="$2" ;; @@ -1687,9 +1682,6 @@ patch_enable () ws2_32-getsockopt) enable_ws2_32_getsockopt="$2" ;; - ws2_32-setsockopt) - enable_ws2_32_setsockopt="$2" - ;; wtsapi32-EnumerateProcesses) enable_wtsapi32_EnumerateProcesses="$2" ;; @@ -5082,21 +5074,6 @@ if test "$enable_kernel32_SetFileCompletionNotificationModes" -eq 1; then ) >> "$patchlist" fi -# Patchset kernel32-TRUST_E_NOSIGNATURE -# | -# | This patchset fixes the following Wine bugs: -# | * [#43041] Add missing message string for TRUST_E_NOSIGNATURE -# | -# | Modified files: -# | * dlls/kernel32/tests/format_msg.c, dlls/kernel32/winerror.mc -# | -if test "$enable_kernel32_TRUST_E_NOSIGNATURE" -eq 1; then - patch_apply kernel32-TRUST_E_NOSIGNATURE/0001-kernel32-add-message-resource-for-TRUST_E_NOSIGNATUR.patch - ( - printf '%s\n' '+ { "Louis Lenders", "kernel32: Add message resource for TRUST_E_NOSIGNATURE.", 1 },'; - ) >> "$patchlist" -fi - # Patchset kernel32-TimezoneInformation_Registry # | # | Modified files: @@ -9862,18 +9839,6 @@ if test "$enable_ws2_32_getsockopt" -eq 1; then ) >> "$patchlist" fi -# Patchset ws2_32-setsockopt -# | -# | Modified files: -# | * dlls/ws2_32/socket.c, include/winsock.h -# | -if test "$enable_ws2_32_setsockopt" -eq 1; then - patch_apply ws2_32-setsockopt/0001-w2_32-Ignore-setting-several-port-assignment-related.patch - ( - printf '%s\n' '+ { "Michael Müller", "w2_32: Ignore setting several port assignment related socket options.", 1 },'; - ) >> "$patchlist" -fi - # Patchset wtsapi32-EnumerateProcesses # | # | This patchset fixes the following Wine bugs: diff --git a/patches/uxtheme-CloseThemeClass/0001-uxtheme-Protect-CloseThemeData-from-invalid-input.patch b/patches/uxtheme-CloseThemeClass/0001-uxtheme-Protect-CloseThemeData-from-invalid-input.patch index 52d1d5ec..bbc9afe3 100644 --- a/patches/uxtheme-CloseThemeClass/0001-uxtheme-Protect-CloseThemeData-from-invalid-input.patch +++ b/patches/uxtheme-CloseThemeClass/0001-uxtheme-Protect-CloseThemeData-from-invalid-input.patch @@ -1,20 +1,20 @@ -From 56e15c62829a85dead5cd681ada5a69e9374d5e6 Mon Sep 17 00:00:00 2001 +From 8a2c1ff72e3802e8e67e21ccb915de17a3c155da Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 18 Nov 2016 22:31:29 +0800 -Subject: uxtheme: Protect CloseThemeData() from invalid input. +Subject: [PATCH] uxtheme: Protect CloseThemeData() from invalid input. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Testcase by Michael Müller . --- - dlls/uxtheme/msstyles.c | 22 ++++++++++++++++++++++ + dlls/uxtheme/msstyles.c | 21 +++++++++++++++++++++ dlls/uxtheme/msstyles.h | 3 ++- dlls/uxtheme/tests/system.c | 4 ++++ - 3 files changed, 28 insertions(+), 1 deletion(-) + 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/dlls/uxtheme/msstyles.c b/dlls/uxtheme/msstyles.c -index e62b95d..1cca4fc 100644 +index fe91494..3a25f6d 100644 --- a/dlls/uxtheme/msstyles.c +++ b/dlls/uxtheme/msstyles.c @@ -35,6 +35,7 @@ @@ -23,9 +23,9 @@ index e62b95d..1cca4fc 100644 #include "wine/unicode.h" +#include "wine/exception.h" #include "wine/debug.h" + #include "wine/heap.h" - WINE_DEFAULT_DEBUG_CHANNEL(uxtheme); -@@ -56,6 +57,8 @@ static const WCHAR szThemesIniResource[] = { +@@ -57,6 +58,8 @@ static const WCHAR szThemesIniResource[] = { 't','h','e','m','e','s','_','i','n','i','\0' }; @@ -34,23 +34,15 @@ index e62b95d..1cca4fc 100644 static PTHEME_FILE tfActiveTheme; /***********************************************************************/ -@@ -219,6 +222,7 @@ void MSSTYLES_CloseThemeFile(PTHEME_FILE tf) - pcls->partstate = ps->next; - HeapFree(GetProcessHeap(), 0, ps); - } -+ pcls->signature = 0; - HeapFree(GetProcessHeap(), 0, pcls); - } - } -@@ -450,6 +454,7 @@ static PTHEME_CLASS MSSTYLES_AddClass(PTHEME_FILE tf, LPCWSTR pszAppName, LPCWST +@@ -452,6 +455,7 @@ static PTHEME_CLASS MSSTYLES_AddClass(PTHEME_FILE tf, LPCWSTR pszAppName, LPCWST if(cur) return cur; - cur = HeapAlloc(GetProcessHeap(), 0, sizeof(THEME_CLASS)); + cur = heap_alloc(sizeof(*cur)); + cur->signature = THEME_CLASS_SIGNATURE; cur->hTheme = tf->hTheme; lstrcpyW(cur->szAppName, pszAppName); lstrcpyW(cur->szClassName, pszClassName); -@@ -1043,6 +1048,23 @@ PTHEME_CLASS MSSTYLES_OpenThemeClass(LPCWSTR pszAppName, LPCWSTR pszClassList) +@@ -1045,6 +1049,23 @@ PTHEME_CLASS MSSTYLES_OpenThemeClass(LPCWSTR pszAppName, LPCWSTR pszClassList) */ HRESULT MSSTYLES_CloseThemeClass(PTHEME_CLASS tc) { @@ -96,10 +88,10 @@ index 0b7e1ab..ba10ac8 100644 } THEME_IMAGE, *PTHEME_IMAGE; diff --git a/dlls/uxtheme/tests/system.c b/dlls/uxtheme/tests/system.c -index d40679d..dba6cc8 100644 +index 6989f44..d529279 100644 --- a/dlls/uxtheme/tests/system.c +++ b/dlls/uxtheme/tests/system.c -@@ -181,6 +181,10 @@ static void test_OpenThemeData(void) +@@ -198,6 +198,10 @@ static void test_OpenThemeData(void) "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n", GetLastError()); @@ -111,5 +103,5 @@ index d40679d..dba6cc8 100644 { SetLastError(0xdeadbeef); -- -2.9.0 +1.9.1 diff --git a/patches/windowscodecs-JPEG_Decoder/0002-windowscodecs-Fix-stride-calculation-in-JPEG-decoder.patch b/patches/windowscodecs-JPEG_Decoder/0002-windowscodecs-Fix-stride-calculation-in-JPEG-decoder.patch index 34cc3027..65a4fe3d 100644 --- a/patches/windowscodecs-JPEG_Decoder/0002-windowscodecs-Fix-stride-calculation-in-JPEG-decoder.patch +++ b/patches/windowscodecs-JPEG_Decoder/0002-windowscodecs-Fix-stride-calculation-in-JPEG-decoder.patch @@ -1,17 +1,17 @@ -From 271b0a51b2f1d70fcd7091e4829c77aacfdc0ba1 Mon Sep 17 00:00:00 2001 +From 77ec3e3c1f2346c5b70647ed2e99102a41bad353 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 18 Aug 2017 12:03:50 +0800 -Subject: windowscodecs: Fix stride calculation in JPEG decoder. +Subject: [PATCH] windowscodecs: Fix stride calculation in JPEG decoder. --- dlls/windowscodecs/jpegformat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c -index abab36ab40a..f31239b8d79 100644 +index 08f1ee7..27cd880 100644 --- a/dlls/windowscodecs/jpegformat.c +++ b/dlls/windowscodecs/jpegformat.c -@@ -628,7 +628,7 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, +@@ -624,7 +624,7 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, else if (This->cinfo.out_color_space == JCS_CMYK) bpp = 32; else bpp = 24; @@ -21,5 +21,5 @@ index abab36ab40a..f31239b8d79 100644 max_row_needed = prc->Y + prc->Height; -- -2.14.1 +1.9.1 diff --git a/patches/windowscodecs-JPEG_Decoder/0003-windowscodecs-Move-additional-processing-out-of-the-.patch b/patches/windowscodecs-JPEG_Decoder/0003-windowscodecs-Move-additional-processing-out-of-the-.patch index aafb4f23..c09d7ca6 100644 --- a/patches/windowscodecs-JPEG_Decoder/0003-windowscodecs-Move-additional-processing-out-of-the-.patch +++ b/patches/windowscodecs-JPEG_Decoder/0003-windowscodecs-Move-additional-processing-out-of-the-.patch @@ -1,19 +1,19 @@ -From 799ae0c6a39c58423281ea5d8c46b1085a07bf48 Mon Sep 17 00:00:00 2001 +From 549a63c40b7b9a73055ece62c2d6c4631de79471 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 18 Aug 2017 12:12:16 +0800 -Subject: windowscodecs: Move additional processing out of the JPEG decoding - loop. +Subject: [PATCH] windowscodecs: Move additional processing out of the JPEG + decoding loop. This avoids image corruption when libjpeg reuses existing pixel data. --- - dlls/windowscodecs/jpegformat.c | 27 ++++++++++++++------------- - 1 file changed, 14 insertions(+), 13 deletions(-) + dlls/windowscodecs/jpegformat.c | 38 ++++++++++++++++++++------------------ + 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c -index f31239b8d79..0023fd2bf32 100644 +index 27cd880..97899a7 100644 --- a/dlls/windowscodecs/jpegformat.c +++ b/dlls/windowscodecs/jpegformat.c -@@ -603,7 +603,7 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, +@@ -599,10 +599,12 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, JpegDecoder *This = impl_from_IWICBitmapFrameDecode(iface); UINT bpp; UINT stride; @@ -22,15 +22,27 @@ index f31239b8d79..0023fd2bf32 100644 UINT max_row_needed; jmp_buf jmpbuf; WICRect rect; -@@ -659,7 +659,6 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, - UINT first_scanline = This->cinfo.output_scanline; ++ UINT first_scanline = 0; ++ + TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer); + + if (!prc) +@@ -652,12 +654,12 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, + + while (max_row_needed > This->cinfo.output_scanline) + { +- UINT first_scanline = This->cinfo.output_scanline; UINT max_rows; JSAMPROW out_rows[4]; - UINT i; JDIMENSION ret; ++ first_scanline = This->cinfo.output_scanline; ++ max_rows = min(This->cinfo.output_height-first_scanline, 4); -@@ -674,19 +673,21 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, + for (i=0; iimage_data + stride * (first_scanline+i); +@@ -670,25 +672,25 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, LeaveCriticalSection(&This->lock); return E_FAIL; } @@ -52,17 +64,25 @@ index f31239b8d79..0023fd2bf32 100644 + } - if (This->cinfo.out_color_space == JCS_CMYK && This->cinfo.saw_Adobe_marker) +- { +- DWORD *pDwordData = (DWORD*) (This->image_data + stride * first_scanline); +- DWORD *pDwordDataEnd = (DWORD*) (This->image_data + This->cinfo.output_scanline * stride); + - /* Adobe JPEG's have inverted CMYK data. */ -- for (i=0; iimage_data[i] ^= 0xff; +- while(pDwordData < pDwordDataEnd) +- *pDwordData++ ^= 0xffffffff; +- } + if (This->cinfo.out_color_space == JCS_CMYK && This->cinfo.saw_Adobe_marker) + { ++ DWORD *pDwordData = (DWORD*) (This->image_data + stride * first_scanline); ++ DWORD *pDwordDataEnd = (DWORD*) (This->image_data + This->cinfo.output_scanline * stride); + + /* Adobe JPEG's have inverted CMYK data. */ -+ for (i=0; iimage_data[i] ^= 0xff; ++ while(pDwordData < pDwordDataEnd) ++ *pDwordData++ ^= 0xffffffff; } LeaveCriticalSection(&This->lock); -- -2.14.1 +1.9.1 diff --git a/patches/windowscodecs-JPEG_Decoder/0004-windowscodecs-Move-JPEG-frame-image-data-initializat.patch b/patches/windowscodecs-JPEG_Decoder/0004-windowscodecs-Move-JPEG-frame-image-data-initializat.patch index 18a26a00..93882f52 100644 --- a/patches/windowscodecs-JPEG_Decoder/0004-windowscodecs-Move-JPEG-frame-image-data-initializat.patch +++ b/patches/windowscodecs-JPEG_Decoder/0004-windowscodecs-Move-JPEG-frame-image-data-initializat.patch @@ -1,17 +1,17 @@ -From 71de59213235b4e41531d0ecff43790cf172bf90 Mon Sep 17 00:00:00 2001 +From 846b328efd83b161405ed8f663b6cb3465c29ee4 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 18 Aug 2017 12:17:52 +0800 -Subject: windowscodecs: Move JPEG frame image data initialization from +Subject: [PATCH] windowscodecs: Move JPEG frame image data initialization from Frame::CopyPixels to Decoder::Initialize. (v2) This is how PNG decoder does things, and it avoids image data corruption in some cases (presumably when libjpeg reuses existing scanline data). --- - dlls/windowscodecs/jpegformat.c | 146 +++++++++++++++------------------------- - 1 file changed, 55 insertions(+), 91 deletions(-) + dlls/windowscodecs/jpegformat.c | 151 ++++++++++++++-------------------------- + 1 file changed, 54 insertions(+), 97 deletions(-) diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c -index 0023fd2bf32..296529cee73 100644 +index 97899a7..0f02b36 100644 --- a/dlls/windowscodecs/jpegformat.c +++ b/dlls/windowscodecs/jpegformat.c @@ -155,6 +155,7 @@ typedef struct { @@ -87,7 +87,7 @@ index 0023fd2bf32..296529cee73 100644 This->initialized = TRUE; LeaveCriticalSection(&This->lock); -@@ -601,99 +653,11 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, +@@ -597,106 +649,11 @@ static HRESULT WINAPI JpegDecoder_Frame_CopyPixels(IWICBitmapFrameDecode *iface, const WICRect *prc, UINT cbStride, UINT cbBufferSize, BYTE *pbBuffer) { JpegDecoder *This = impl_from_IWICBitmapFrameDecode(iface); @@ -97,8 +97,10 @@ index 0023fd2bf32..296529cee73 100644 - UINT max_row_needed; - jmp_buf jmpbuf; - WICRect rect; -- TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer); -- +- UINT first_scanline = 0; + + TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer); + - if (!prc) - { - rect.X = 0; @@ -123,7 +125,7 @@ index 0023fd2bf32..296529cee73 100644 - - max_row_needed = prc->Y + prc->Height; - if (max_row_needed > This->cinfo.output_height) return E_INVALIDARG; - +- - EnterCriticalSection(&This->lock); - - if (!This->image_data) @@ -146,11 +148,12 @@ index 0023fd2bf32..296529cee73 100644 - - while (max_row_needed > This->cinfo.output_scanline) - { -- UINT first_scanline = This->cinfo.output_scanline; - UINT max_rows; - JSAMPROW out_rows[4]; - JDIMENSION ret; - +- first_scanline = This->cinfo.output_scanline; +- - max_rows = min(This->cinfo.output_height-first_scanline, 4); - for (i=0; iimage_data + stride * (first_scanline+i); @@ -173,16 +176,19 @@ index 0023fd2bf32..296529cee73 100644 - stride); - } - +- - if (This->cinfo.out_color_space == JCS_CMYK && This->cinfo.saw_Adobe_marker) - { +- DWORD *pDwordData = (DWORD*) (This->image_data + stride * first_scanline); +- DWORD *pDwordDataEnd = (DWORD*) (This->image_data + This->cinfo.output_scanline * stride); +- - /* Adobe JPEG's have inverted CMYK data. */ -- for (i=0; iimage_data[i] ^= 0xff; +- while(pDwordData < pDwordDataEnd) +- *pDwordData++ ^= 0xffffffff; - } - - LeaveCriticalSection(&This->lock); -+ TRACE("(%p,%p,%u,%u,%p)\n", iface, prc, cbStride, cbBufferSize, pbBuffer); - +- - return copy_pixels(bpp, This->image_data, - This->cinfo.output_width, This->cinfo.output_height, stride, + return copy_pixels(This->bpp, This->image_data, @@ -191,5 +197,5 @@ index 0023fd2bf32..296529cee73 100644 } -- -2.14.1 +1.9.1 diff --git a/patches/windowscodecs-JPEG_Decoder/0005-windowscodecs-Add-support-for-CMYK-to-BGR-conversion.patch b/patches/windowscodecs-JPEG_Decoder/0005-windowscodecs-Add-support-for-CMYK-to-BGR-conversion.patch index 64d06ca1..406750bb 100644 --- a/patches/windowscodecs-JPEG_Decoder/0005-windowscodecs-Add-support-for-CMYK-to-BGR-conversion.patch +++ b/patches/windowscodecs-JPEG_Decoder/0005-windowscodecs-Add-support-for-CMYK-to-BGR-conversion.patch @@ -1,17 +1,17 @@ -From 3a05eb9c499b348f3577cc7e7cb8ad23a261e5f0 Mon Sep 17 00:00:00 2001 +From f26102e49cdff5e0afbb3132b02b9f4fe2d93dd5 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Thu, 17 Aug 2017 14:57:18 +0800 -Subject: windowscodecs: Add support for CMYK to BGR conversion. +Subject: [PATCH] windowscodecs: Add support for CMYK to BGR conversion. --- dlls/windowscodecs/converter.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/dlls/windowscodecs/converter.c b/dlls/windowscodecs/converter.c -index 5dccb70b1fb..525e1838b84 100644 +index 42ba260..54731ab 100644 --- a/dlls/windowscodecs/converter.c +++ b/dlls/windowscodecs/converter.c -@@ -1085,6 +1085,48 @@ static HRESULT copypixels_to_24bppBGR(struct FormatConverter *This, const WICRec +@@ -1012,6 +1012,48 @@ static HRESULT copypixels_to_24bppBGR(struct FormatConverter *This, const WICRec } return S_OK; @@ -61,5 +61,5 @@ index 5dccb70b1fb..525e1838b84 100644 FIXME("Unimplemented conversion path!\n"); return WINCODEC_ERR_UNSUPPORTEDOPERATION; -- -2.14.1 +1.9.1 diff --git a/patches/wined3d-CSMT_Helper/0001-wined3d-Add-second-dll-with-STAGING_CSMT-definition-.patch b/patches/wined3d-CSMT_Helper/0001-wined3d-Add-second-dll-with-STAGING_CSMT-definition-.patch index 89987c55..114e8566 100644 --- a/patches/wined3d-CSMT_Helper/0001-wined3d-Add-second-dll-with-STAGING_CSMT-definition-.patch +++ b/patches/wined3d-CSMT_Helper/0001-wined3d-Add-second-dll-with-STAGING_CSMT-definition-.patch @@ -1,22 +1,21 @@ -From 48d707f925a861df887aa11c13e062aa700bf3d8 Mon Sep 17 00:00:00 2001 +From 359733a8080403adeca1f87472cdad1884c4affb Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 14 Dec 2014 20:49:28 +0100 -Subject: [PATCH] wined3d: Add second dll with STAGING_CSMT - definition set. +Subject: [PATCH] wined3d: Add second dll with STAGING_CSMT definition set. --- configure.ac | 3 ++- - dlls/wined3d-csmt/Makefile.in | 37 +++++++++++++++++++++++++++++++++++++ + dlls/wined3d-csmt/Makefile.in | 36 ++++++++++++++++++++++++++++++++++++ dlls/wined3d-csmt/version.rc | 27 +++++++++++++++++++++++++++ - 3 files changed, 66 insertions(+), 1 deletion(-) + 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 dlls/wined3d-csmt/Makefile.in create mode 100644 dlls/wined3d-csmt/version.rc diff --git a/configure.ac b/configure.ac -index 234d288..9161305 100644 +index 7b796ef..fbaca8e 100644 --- a/configure.ac +++ b/configure.ac -@@ -3805,7 +3805,8 @@ WINE_CONFIG_DLL(wineandroid.drv) +@@ -3679,7 +3679,8 @@ WINE_CONFIG_DLL(wineandroid.drv) WINE_CONFIG_DLL(winebus.sys) WINE_CONFIG_DLL(winecoreaudio.drv) WINE_CONFIG_LIB(winecrt0) @@ -28,10 +27,10 @@ index 234d288..9161305 100644 WINE_CONFIG_DLL(winejoystick.drv) diff --git a/dlls/wined3d-csmt/Makefile.in b/dlls/wined3d-csmt/Makefile.in new file mode 100644 -index 0000000..bf064ed +index 0000000..1d0458e --- /dev/null +++ b/dlls/wined3d-csmt/Makefile.in -@@ -0,0 +1,37 @@ +@@ -0,0 +1,36 @@ +EXTRADEFS = -DSTAGING_CSMT +MODULE = wined3d-csmt.dll +IMPORTS = uuid opengl32 user32 gdi32 advapi32 @@ -46,7 +45,6 @@ index 0000000..bf064ed + cs.c \ + device.c \ + directx.c \ -+ drawprim.c \ + dxtn.c \ + gl_compat.c \ + glsl_shader.c \ diff --git a/patches/wined3d-CSMT_Main/9999-IfDefined.patch b/patches/wined3d-CSMT_Main/9999-IfDefined.patch index f1bc90a7..0a22a404 100644 --- a/patches/wined3d-CSMT_Main/9999-IfDefined.patch +++ b/patches/wined3d-CSMT_Main/9999-IfDefined.patch @@ -19,7 +19,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c }; struct wined3d_cs_add_dirty_texture_region -@@ -2265,6 +2268,53 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r +@@ -2259,6 +2262,53 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r unsigned int slice_pitch) { struct wined3d_cs_update_sub_resource *op; @@ -73,7 +73,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c op = cs->ops->require_space(cs, sizeof(*op), WINED3D_CS_QUEUE_MAP); op->opcode = WINED3D_CS_OP_UPDATE_SUB_RESOURCE; -@@ -2278,8 +2328,10 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r +@@ -2272,8 +2322,10 @@ void wined3d_cs_emit_update_sub_resource(struct wined3d_cs *cs, struct wined3d_r wined3d_resource_acquire(resource); cs->ops->submit(cs, WINED3D_CS_QUEUE_MAP); @@ -84,7 +84,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c cs->ops->finish(cs, WINED3D_CS_QUEUE_MAP); } -@@ -2462,6 +2514,13 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void +@@ -2456,6 +2508,13 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void /* WINED3D_CS_OP_GENERATE_MIPMAPS */ wined3d_cs_exec_generate_mipmaps, }; @@ -98,7 +98,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c static void *wined3d_cs_st_require_space(struct wined3d_cs *cs, size_t size, enum wined3d_cs_queue_id queue_id) { if (size > (cs->data_size - cs->end)) -@@ -2515,6 +2574,9 @@ static void wined3d_cs_st_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id +@@ -2509,6 +2568,9 @@ static void wined3d_cs_st_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id static const struct wined3d_cs_ops wined3d_cs_st_ops = { @@ -108,7 +108,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c wined3d_cs_st_require_space, wined3d_cs_st_submit, wined3d_cs_st_finish, -@@ -2548,6 +2610,21 @@ static void wined3d_cs_mt_submit(struct wined3d_cs *cs, enum wined3d_cs_queue_id +@@ -2542,6 +2604,21 @@ static void wined3d_cs_mt_submit(struct wined3d_cs *cs, enum wined3d_cs_queue_id wined3d_cs_queue_submit(&cs->queue[queue_id], cs); } @@ -130,7 +130,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size_t size, struct wined3d_cs *cs) { size_t queue_size = ARRAY_SIZE(queue->data); -@@ -2609,6 +2686,16 @@ static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size +@@ -2603,6 +2680,16 @@ static void *wined3d_cs_queue_require_space(struct wined3d_cs_queue *queue, size return packet->data; } @@ -147,7 +147,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c static void *wined3d_cs_mt_require_space(struct wined3d_cs *cs, size_t size, enum wined3d_cs_queue_id queue_id) { if (cs->thread_id == GetCurrentThreadId()) -@@ -2628,6 +2715,9 @@ static void wined3d_cs_mt_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id +@@ -2622,6 +2709,9 @@ static void wined3d_cs_mt_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id static const struct wined3d_cs_ops wined3d_cs_mt_ops = { @@ -160,7 +160,7 @@ diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c -@@ -1214,6 +1214,9 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device) +@@ -1215,6 +1215,9 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device) wine_rb_clear(&device->samplers, device_free_sampler, NULL); @@ -170,7 +170,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c wined3d_device_delete_opengl_contexts(device); if (device->fb.depth_stencil) -@@ -4213,6 +4216,7 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev +@@ -4211,6 +4214,7 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev return WINED3DERR_INVALIDCALL; } @@ -178,7 +178,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (dst_texture->sub_resources[dst_sub_resource_idx].map_count) { WARN("Destination sub-resource %u is mapped.\n", dst_sub_resource_idx); -@@ -4223,6 +4227,19 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev +@@ -4221,6 +4225,19 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev { WARN("Source sub-resource %u is mapped.\n", src_sub_resource_idx); return WINED3DERR_INVALIDCALL; @@ -198,7 +198,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } if (!src_box) -@@ -4324,8 +4341,10 @@ void CDECL wined3d_device_update_sub_resource(struct wined3d_device *device, str +@@ -4322,8 +4339,10 @@ void CDECL wined3d_device_update_sub_resource(struct wined3d_device *device, str return; } @@ -209,7 +209,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c wined3d_cs_emit_update_sub_resource(device->cs, resource, sub_resource_idx, box, data, row_pitch, depth_pitch); } -@@ -5328,3 +5347,58 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL +@@ -5323,3 +5342,58 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL else return CallWindowProcA(proc, window, message, wparam, lparam); } @@ -576,7 +576,7 @@ diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -2900,6 +2900,16 @@ struct wined3d_dummy_textures +@@ -2897,6 +2897,16 @@ struct wined3d_dummy_textures GLuint tex_2d_ms_array; }; @@ -593,7 +593,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 -@@ -3000,6 +3010,12 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL +@@ -2997,6 +3007,12 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL 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; void device_invalidate_state(const struct wined3d_device *device, DWORD state) DECLSPEC_HIDDEN; @@ -606,7 +606,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) { -@@ -3199,7 +3215,11 @@ struct wined3d_texture +@@ -3196,7 +3212,11 @@ struct wined3d_texture unsigned int map_count; DWORD locations; @@ -618,7 +618,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h } sub_resources[1]; }; -@@ -3524,6 +3544,9 @@ struct wined3d_cs_queue +@@ -3521,6 +3541,9 @@ struct wined3d_cs_queue struct wined3d_cs_ops { diff --git a/patches/wined3d-DXTn/0001-wined3d-Add-support-for-DXTn-software-decoding-throu.patch b/patches/wined3d-DXTn/0001-wined3d-Add-support-for-DXTn-software-decoding-throu.patch index a9604da4..9d175f05 100644 --- a/patches/wined3d-DXTn/0001-wined3d-Add-support-for-DXTn-software-decoding-throu.patch +++ b/patches/wined3d-DXTn/0001-wined3d-Add-support-for-DXTn-software-decoding-throu.patch @@ -1,8 +1,8 @@ -From 6fb6fb2e293e57e2645d988e82c12782db1c30b9 Mon Sep 17 00:00:00 2001 +From 8f283b558ea348bd21cee56beb8219758d55a379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 20 Sep 2014 02:48:07 +0200 -Subject: wined3d: Add support for DXTn software decoding through libtxc_dxtn. - (rev 3) +Subject: [PATCH] wined3d: Add support for DXTn software decoding through + libtxc_dxtn. (rev 3) Changes in rev 2: * Do not use dxtn library when some imports are missing. @@ -13,19 +13,19 @@ Changes in rev 3: * Do not require txc_dxtn at compile time by trying some fallback paths. --- configure.ac | 3 + - dlls/wined3d/Makefile.in | 1 + + dlls/wined3d/Makefile.in | 2 + dlls/wined3d/dxtn.c | 299 +++++++++++++++++++++++++++++++++++++++++ dlls/wined3d/surface.c | 80 +++++++++++ dlls/wined3d/wined3d_main.c | 5 + dlls/wined3d/wined3d_private.h | 13 ++ - 6 files changed, 401 insertions(+) + 6 files changed, 402 insertions(+) create mode 100644 dlls/wined3d/dxtn.c diff --git a/configure.ac b/configure.ac -index 1a5b0de0e3..adf7cd0f4d 100644 +index 643c713..a867d25 100644 --- a/configure.ac +++ b/configure.ac -@@ -1633,6 +1633,9 @@ fi +@@ -1737,6 +1737,9 @@ fi WINE_NOTICE_WITH(tiff,[test "x$ac_cv_lib_soname_tiff" = "x"], [libtiff ${notice_platform}development files not found, TIFF won't be supported.]) @@ -36,20 +36,21 @@ index 1a5b0de0e3..adf7cd0f4d 100644 if test "x$with_mpg123" != "xno" then diff --git a/dlls/wined3d/Makefile.in b/dlls/wined3d/Makefile.in -index edee58845a..70f47c6a5f 100644 +index 58fc2d5..70f47c6 100644 --- a/dlls/wined3d/Makefile.in +++ b/dlls/wined3d/Makefile.in -@@ -11,6 +11,7 @@ C_SRCS = \ +@@ -10,6 +10,8 @@ C_SRCS = \ + cs.c \ device.c \ directx.c \ - drawprim.c \ ++ drawprim.c \ + dxtn.c \ gl_compat.c \ glsl_shader.c \ nvidia_texture_shader.c \ diff --git a/dlls/wined3d/dxtn.c b/dlls/wined3d/dxtn.c new file mode 100644 -index 0000000000..ce989490ef +index 0000000..ce98949 --- /dev/null +++ b/dlls/wined3d/dxtn.c @@ -0,0 +1,299 @@ @@ -353,10 +354,10 @@ index 0000000000..ce989490ef + wine_dlclose(txc_dxtn_handle, NULL, 0); +} diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c -index 2ba80605a5..3a91e98e98 100644 +index 9ef917f..7201a7c 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c -@@ -1215,6 +1215,66 @@ static void convert_yuy2_r5g6b5(const BYTE *src, BYTE *dst, +@@ -1279,6 +1279,66 @@ static void convert_yuy2_r5g6b5(const BYTE *src, BYTE *dst, } } @@ -423,7 +424,7 @@ index 2ba80605a5..3a91e98e98 100644 struct d3dfmt_converter_desc { enum wined3d_format_id from, to; -@@ -1231,6 +1291,20 @@ static const struct d3dfmt_converter_desc converters[] = +@@ -1295,6 +1355,20 @@ static const struct d3dfmt_converter_desc converters[] = {WINED3DFMT_YUY2, WINED3DFMT_B5G6R5_UNORM, convert_yuy2_r5g6b5}, }; @@ -444,7 +445,7 @@ index 2ba80605a5..3a91e98e98 100644 static inline const struct d3dfmt_converter_desc *find_converter(enum wined3d_format_id from, enum wined3d_format_id to) { -@@ -1242,6 +1316,12 @@ static inline const struct d3dfmt_converter_desc *find_converter(enum wined3d_fo +@@ -1306,6 +1380,12 @@ static inline const struct d3dfmt_converter_desc *find_converter(enum wined3d_fo return &converters[i]; } @@ -458,10 +459,10 @@ index 2ba80605a5..3a91e98e98 100644 } diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c -index f662c3a48d..dca6a2a64d 100644 +index 6cd6f18..28e6fe6 100644 --- a/dlls/wined3d/wined3d_main.c +++ b/dlls/wined3d/wined3d_main.c -@@ -336,6 +336,8 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL) +@@ -326,6 +326,8 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL) if (appkey) RegCloseKey( appkey ); if (hkey) RegCloseKey( hkey ); @@ -470,7 +471,7 @@ index f662c3a48d..dca6a2a64d 100644 return TRUE; } -@@ -367,6 +369,9 @@ static BOOL wined3d_dll_destroy(HINSTANCE hInstDLL) +@@ -357,6 +359,9 @@ static BOOL wined3d_dll_destroy(HINSTANCE hInstDLL) DeleteCriticalSection(&wined3d_wndproc_cs); DeleteCriticalSection(&wined3d_cs); @@ -481,10 +482,10 @@ index f662c3a48d..dca6a2a64d 100644 } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index 1ed0846939..e6f9ebc79a 100644 +index 816eebb..3f6500d 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -4062,6 +4062,19 @@ static inline void wined3d_not_from_cs(struct wined3d_cs *cs) +@@ -4451,6 +4451,19 @@ static inline void wined3d_not_from_cs(struct wined3d_cs *cs) assert(cs->thread_id != GetCurrentThreadId()); } @@ -505,5 +506,5 @@ index 1ed0846939..e6f9ebc79a 100644 #define WINED3D_OPENGL_WINDOW_CLASS_NAME "WineD3D_OpenGL" -- -2.11.0 +1.9.1 diff --git a/patches/wined3d-Dual_Source_Blending/0003-wined3d-Implement-dual-source-blending.patch b/patches/wined3d-Dual_Source_Blending/0003-wined3d-Implement-dual-source-blending.patch index 4566faf7..ca7b91f3 100644 --- a/patches/wined3d-Dual_Source_Blending/0003-wined3d-Implement-dual-source-blending.patch +++ b/patches/wined3d-Dual_Source_Blending/0003-wined3d-Implement-dual-source-blending.patch @@ -1,7 +1,7 @@ -From 7f5c55d18e90dad797a1628c12a7a40b39408767 Mon Sep 17 00:00:00 2001 +From ba10f87693d73b3ae374e94f4b9e4e6b29220fe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Fri, 18 Aug 2017 23:51:59 +0200 -Subject: wined3d: Implement dual source blending. +Subject: [PATCH] wined3d: Implement dual source blending. --- dlls/d3d11/tests/d3d11.c | 2 +- @@ -14,10 +14,10 @@ Subject: wined3d: Implement dual source blending. 7 files changed, 91 insertions(+), 16 deletions(-) diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c -index ca7e0f9f020..99f6fb9f072 100644 +index 954324f..c148bf2 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c -@@ -21885,7 +21885,7 @@ static void test_dual_blending(void) +@@ -26116,7 +26116,7 @@ static void test_dual_blending(void) ID3D11DeviceContext_ClearRenderTargetView(context, rtv[1], white); ID3D11DeviceContext_Draw(context, 3, 0); @@ -27,10 +27,10 @@ index ca7e0f9f020..99f6fb9f072 100644 ID3D11BlendState_Release(blend_state); diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c -index a2c0ba4080c..2ef75cf458b 100644 +index 6e85336..e5dd5bb 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c -@@ -3077,8 +3077,16 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const +@@ -3176,8 +3176,16 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const else if (!context->render_offscreen) return context_generate_rt_mask_from_resource(rts[0]->resource); @@ -49,11 +49,11 @@ index a2c0ba4080c..2ef75cf458b 100644 i = 0; while (rt_mask_bits) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c -index 9cf0ddd95e0..9f9421720ae 100644 +index cc86118..e4110de 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c -@@ -3505,6 +3505,12 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info) - gl_info->limits.buffers = gl_max; +@@ -3538,6 +3538,12 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info) + gl_info->limits.buffers = min(MAX_RENDER_TARGET_VIEWS, gl_max); TRACE("Max draw buffers: %u.\n", gl_max); } + if (gl_info->supported[ARB_BLEND_FUNC_EXTENDED]) @@ -65,7 +65,7 @@ index 9cf0ddd95e0..9f9421720ae 100644 if (gl_info->supported[ARB_MULTITEXTURE]) { if (gl_info->supported[WINED3D_GL_LEGACY_CONTEXT]) -@@ -4268,6 +4274,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter, +@@ -4319,6 +4325,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter, for (i = 0; i < gl_info->limits.buffers; ++i) adapter->d3d_info.valid_rt_mask |= (1u << i); @@ -77,10 +77,10 @@ index 9cf0ddd95e0..9f9421720ae 100644 { /* We do not want to deal with re-creating immutable texture storage for color keying emulation. */ diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c -index c8b35fb8af5..94423ffbdcb 100644 +index a571405..670a50e 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c -@@ -2960,6 +2960,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * +@@ -3008,6 +3008,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * break; case WINED3DSPR_COLOROUT: @@ -88,7 +88,7 @@ index c8b35fb8af5..94423ffbdcb 100644 if (reg->idx[0].offset >= gl_info->limits.buffers) WARN("Write to render target %u, only %d supported.\n", reg->idx[0].offset, gl_info->limits.buffers); -@@ -7473,11 +7474,23 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context +@@ -7694,11 +7695,23 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context if (!needs_legacy_glsl_syntax(gl_info)) { @@ -116,7 +116,7 @@ index c8b35fb8af5..94423ffbdcb 100644 } } -@@ -10008,13 +10021,25 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const +@@ -10250,13 +10263,25 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const if (!needs_legacy_glsl_syntax(gl_info)) { @@ -149,10 +149,10 @@ index c8b35fb8af5..94423ffbdcb 100644 } } diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c -index f80467b46d0..1583bcfde24 100644 +index 66e1bbf..0513c9e 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c -@@ -3987,6 +3987,8 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3 +@@ -4011,6 +4011,8 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3 args->render_offscreen = shader->reg_maps.vpos && gl_info->supported[ARB_FRAGMENT_COORD_CONVENTIONS] ? context->render_offscreen : 0; @@ -162,10 +162,10 @@ index f80467b46d0..1583bcfde24 100644 static HRESULT pixel_shader_init(struct wined3d_shader *shader, struct wined3d_device *device, diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c -index cb652c24579..3f5673bfccf 100644 +index ace6f3e..2ce8c6f 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c -@@ -472,12 +472,14 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st +@@ -534,12 +534,14 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st const struct wined3d_format *rt_format; GLenum src_blend, dst_blend; unsigned int rt_fmt_flags; @@ -182,7 +182,7 @@ index cb652c24579..3f5673bfccf 100644 rt_fmt_flags = state->fb->render_targets[0]->format_flags; /* Disable blending in all cases even without pixelshaders. -@@ -487,6 +489,13 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st +@@ -549,6 +551,13 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st enable_blend = FALSE; } @@ -196,7 +196,7 @@ index cb652c24579..3f5673bfccf 100644 if (!enable_blend) { gl_info->gl_ops.gl.p_glDisable(GL_BLEND); -@@ -497,6 +506,7 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st +@@ -559,6 +568,7 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st gl_info->gl_ops.gl.p_glEnable(GL_BLEND); checkGLcall("glEnable(GL_BLEND)"); @@ -205,7 +205,7 @@ index cb652c24579..3f5673bfccf 100644 state->render_states[WINED3D_RS_SRCBLEND], state->render_states[WINED3D_RS_DESTBLEND], rt_format); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index fad3fadeeaa..aca97788f0e 100644 +index 96ce567..17955d6 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -194,6 +194,7 @@ struct wined3d_d3d_info @@ -216,7 +216,7 @@ index fad3fadeeaa..aca97788f0e 100644 DWORD wined3d_creation_flags; BOOL shader_double_precision; }; -@@ -1353,7 +1354,8 @@ struct ps_compile_args +@@ -1354,7 +1355,8 @@ struct ps_compile_args DWORD flatshading : 1; DWORD alpha_test_func : 3; DWORD render_offscreen : 1; @@ -226,7 +226,7 @@ index fad3fadeeaa..aca97788f0e 100644 }; enum fog_src_type -@@ -1910,7 +1912,8 @@ struct wined3d_context +@@ -1911,7 +1913,8 @@ struct wined3d_context DWORD transform_feedback_paused : 1; DWORD shader_update_mask : 6; /* WINED3D_SHADER_TYPE_COUNT, 6 */ DWORD clip_distance_mask : 8; /* MAX_CLIP_DISTANCES, 8 */ @@ -236,7 +236,7 @@ index fad3fadeeaa..aca97788f0e 100644 DWORD constant_update_mask; DWORD numbered_array_mask; GLenum tracking_parm; /* Which source is tracking current colour */ -@@ -2517,6 +2520,7 @@ struct wined3d_fbo_ops +@@ -2514,6 +2517,7 @@ struct wined3d_fbo_ops struct wined3d_gl_limits { UINT buffers; @@ -244,7 +244,7 @@ index fad3fadeeaa..aca97788f0e 100644 UINT lights; UINT textures; UINT texture_coords; -@@ -2860,6 +2864,22 @@ struct wined3d_state +@@ -2857,6 +2861,22 @@ struct wined3d_state struct wined3d_rasterizer_state *rasterizer_state; }; @@ -268,4 +268,5 @@ index fad3fadeeaa..aca97788f0e 100644 { GLuint tex_2d; -- -2.14.2 +1.9.1 + diff --git a/patches/wined3d-Indexed_Vertex_Blending/0006-wined3d-Implement-software-processing-for-indexed-ve.patch b/patches/wined3d-Indexed_Vertex_Blending/0006-wined3d-Implement-software-processing-for-indexed-ve.patch index 512d16f6..30dd1d06 100644 --- a/patches/wined3d-Indexed_Vertex_Blending/0006-wined3d-Implement-software-processing-for-indexed-ve.patch +++ b/patches/wined3d-Indexed_Vertex_Blending/0006-wined3d-Implement-software-processing-for-indexed-ve.patch @@ -1,57 +1,22 @@ -From 407c269c649604efd9a1f28d7dcb2494e1f3a090 Mon Sep 17 00:00:00 2001 +From 95d106f273fb8db213048c8aa54550248943f547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Thu, 31 Aug 2017 01:26:38 +0200 -Subject: wined3d: Implement software processing for indexed vertex blending. +Subject: [PATCH] wined3d: Implement software processing for indexed vertex + blending. --- + dlls/wined3d/context.c | 107 +++++++++++++++++++++++++++++++++++++++-- dlls/wined3d/device.c | 16 ------ - dlls/wined3d/drawprim.c | 107 +++++++++++++++++++++++++++++++++++++++-- dlls/wined3d/glsl_shader.c | 32 ++++++++---- dlls/wined3d/utils.c | 7 ++- dlls/wined3d/wined3d_private.h | 16 +++++- 5 files changed, 148 insertions(+), 30 deletions(-) -diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c -index 572d99c20c1..b2e367dde4f 100644 ---- a/dlls/wined3d/device.c -+++ b/dlls/wined3d/device.c -@@ -3909,31 +3909,15 @@ HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device - - void CDECL wined3d_device_set_software_vertex_processing(struct wined3d_device *device, BOOL software) - { -- static BOOL warned; -- - TRACE("device %p, software %#x.\n", device, software); - -- if (!warned) -- { -- FIXME("device %p, software %#x stub!\n", device, software); -- warned = TRUE; -- } -- - device->softwareVertexProcessing = software; - } - - BOOL CDECL wined3d_device_get_software_vertex_processing(const struct wined3d_device *device) - { -- static BOOL warned; -- - TRACE("device %p.\n", device); - -- if (!warned) -- { -- TRACE("device %p stub!\n", device); -- warned = TRUE; -- } -- - return device->softwareVertexProcessing; - } - -diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c -index 1164878985d..acc9afec2be 100644 ---- a/dlls/wined3d/drawprim.c -+++ b/dlls/wined3d/drawprim.c -@@ -165,6 +165,101 @@ static void draw_primitive_arrays(struct wined3d_context *context, const struct +diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c +index 67a49db..b513705 100644 +--- a/dlls/wined3d/context.c ++++ b/dlls/wined3d/context.c +@@ -4496,6 +4496,100 @@ static void draw_primitive_arrays(struct wined3d_context *context, const struct } } @@ -106,7 +71,6 @@ index 1164878985d..acc9afec2be 100644 + case WINED3D_FFP_EMIT_FLOAT4: vector[3] = data[3]; + case WINED3D_FFP_EMIT_FLOAT3: vector[2] = data[2]; + case WINED3D_FFP_EMIT_FLOAT2: vector[1] = data[1]; -+ case WINED3D_FFP_EMIT_FLOAT1: vector[0] = data[0]; break; + default: + FIXME("unsupported value format: %u\n", SI_FORMAT(element_idx)); + return (BYTE *)data; @@ -153,7 +117,7 @@ index 1164878985d..acc9afec2be 100644 static unsigned int get_stride_idx(const void *idx_data, unsigned int idx_size, unsigned int base_vertex_idx, unsigned int start_idx, unsigned int vertex_idx) { -@@ -193,6 +288,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const +@@ -4524,6 +4618,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const BOOL specular_fog = FALSE; BOOL ps = use_ps(state); const void *ptr; @@ -161,7 +125,7 @@ index 1164878985d..acc9afec2be 100644 static unsigned int once; -@@ -229,7 +325,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const +@@ -4560,7 +4655,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const if (!(use_map & 1u << element_idx)) continue; @@ -170,7 +134,7 @@ index 1164878985d..acc9afec2be 100644 ops->generic[si->elements[element_idx].format->emit_idx](element_idx, ptr); } } -@@ -341,7 +437,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const +@@ -4672,7 +4767,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const if (normal) { @@ -179,7 +143,7 @@ index 1164878985d..acc9afec2be 100644 ops->normal[si->elements[WINED3D_FFP_NORMAL].format->emit_idx](ptr); } -@@ -386,7 +482,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const +@@ -4717,7 +4812,7 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const if (position) { @@ -188,23 +152,60 @@ index 1164878985d..acc9afec2be 100644 ops->position[si->elements[WINED3D_FFP_POSITION].format->emit_idx](ptr); } } -@@ -601,6 +697,11 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s +@@ -4939,6 +5034,12 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s WARN_(d3d_perf)("Using software emulation because manual fog coordinates are provided.\n"); emulation = TRUE; } -+ else if (use_indexed_vertex_blending(state, stream_info) && use_software_vertex_processing(context->device)) ++ else if (use_indexed_vertex_blending(state, stream_info) && use_software_vertex_processing(context->device)) + { + WARN_(d3d_perf)("Using software emulation because application requested SVP.\n"); + emulation = TRUE; + } ++ if (emulation) { +diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c +index dfd0047..d47cd52 100644 +--- a/dlls/wined3d/device.c ++++ b/dlls/wined3d/device.c +@@ -3959,31 +3959,15 @@ HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device + + void CDECL wined3d_device_set_software_vertex_processing(struct wined3d_device *device, BOOL software) + { +- static BOOL warned; +- + TRACE("device %p, software %#x.\n", device, software); + +- if (!warned) +- { +- FIXME("device %p, software %#x stub!\n", device, software); +- warned = TRUE; +- } +- + device->softwareVertexProcessing = software; + } + + BOOL CDECL wined3d_device_get_software_vertex_processing(const struct wined3d_device *device) + { +- static BOOL warned; +- + TRACE("device %p.\n", device); + +- if (!warned) +- { +- TRACE("device %p stub!\n", device); +- warned = TRUE; +- } +- + return device->softwareVertexProcessing; + } + diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c -index f34ff090414..dfc332adb1a 100644 +index c857509..66a2921 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c -@@ -8371,14 +8371,21 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr +@@ -8605,14 +8605,21 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr } else { @@ -232,7 +233,7 @@ index f34ff090414..dfc332adb1a 100644 } shader_addline(buffer, "gl_Position = ffp_projection_matrix * ec_pos;\n"); -@@ -8396,10 +8403,17 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr +@@ -8630,10 +8637,17 @@ static GLuint shader_glsl_generate_ffp_vertex_shader(struct shader_glsl_priv *pr shader_addline(buffer, "vec3 normal = vec3(0.0);\n"); if (settings->normal) { @@ -254,10 +255,10 @@ index f34ff090414..dfc332adb1a 100644 if (settings->normalize) diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c -index a9df5f2be49..c83cd6205b2 100644 +index 4a071cc..26b0fd2 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c -@@ -6079,7 +6079,12 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context, +@@ -6274,7 +6274,12 @@ void wined3d_ffp_get_vs_settings(const struct wined3d_context *context, } if (use_indexed_vertex_blending(state, si)) @@ -272,10 +273,10 @@ index a9df5f2be49..c83cd6205b2 100644 settings->clipping = state->render_states[WINED3D_RS_CLIPPING] && state->render_states[WINED3D_RS_CLIPPLANEENABLE]; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index e26f991c222..de189571363 100644 +index 7a79199..2f709d9 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -2731,7 +2731,7 @@ struct wined3d_ffp_vs_settings +@@ -2746,7 +2746,7 @@ struct wined3d_ffp_vs_settings DWORD flatshading : 1; DWORD swizzle_map : 16; /* MAX_ATTRIBS, 16 */ DWORD vb_indices : 1; @@ -284,7 +285,7 @@ index e26f991c222..de189571363 100644 DWORD texgen[MAX_TEXTURES]; }; -@@ -4280,6 +4280,20 @@ static inline BOOL use_indexed_vertex_blending(const struct wined3d_state *state +@@ -4359,6 +4359,20 @@ static inline BOOL use_indexed_vertex_blending(const struct wined3d_state *state return TRUE; } @@ -306,5 +307,5 @@ index e26f991c222..de189571363 100644 { /* Check state->vertex_declaration to allow this to be used before the -- -2.14.2 +1.9.1 diff --git a/patches/wined3d-WINED3D_RS_COLORWRITEENABLE/0001-wined3d-Implement-all-8-d3d11-color-write-masks.patch b/patches/wined3d-WINED3D_RS_COLORWRITEENABLE/0001-wined3d-Implement-all-8-d3d11-color-write-masks.patch index 7701215e..bfd7b966 100644 --- a/patches/wined3d-WINED3D_RS_COLORWRITEENABLE/0001-wined3d-Implement-all-8-d3d11-color-write-masks.patch +++ b/patches/wined3d-WINED3D_RS_COLORWRITEENABLE/0001-wined3d-Implement-all-8-d3d11-color-write-masks.patch @@ -1,4 +1,4 @@ -From 109b6e5af50662ad34c61943cccace4686ae8ecf Mon Sep 17 00:00:00 2001 +From 268acba8eb58661b41f1732b0fb2b084ac5d792c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Thu, 20 Jul 2017 13:50:07 +0200 Subject: [PATCH] wined3d: Implement all 8 d3d11 color write masks. @@ -6,22 +6,22 @@ Subject: [PATCH] wined3d: Implement all 8 d3d11 color write masks. --- dlls/d3d11/device.c | 29 ++++++++++----------- dlls/d3d11/state.c | 4 --- - dlls/wined3d/context.c | 6 ++--- + dlls/wined3d/Makefile.in | 1 - + dlls/wined3d/context.c | 8 +++--- dlls/wined3d/device.c | 6 ++--- - dlls/wined3d/drawprim.c | 2 +- dlls/wined3d/state.c | 57 +++++++++++++++++++----------------------- dlls/wined3d/stateblock.c | 10 +++++--- dlls/wined3d/surface.c | 7 +++--- dlls/wined3d/utils.c | 6 ++++- dlls/wined3d/wined3d_private.h | 1 + include/wine/wined3d.h | 14 ++++++++++- - 11 files changed, 72 insertions(+), 70 deletions(-) + 11 files changed, 72 insertions(+), 71 deletions(-) diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c -index 835ea8b..2ef9b46 100644 +index 9c9b730..bfcd139 100644 --- a/dlls/d3d11/device.c +++ b/dlls/d3d11/device.c -@@ -688,6 +688,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi +@@ -2067,6 +2067,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi static const float default_blend_factor[] = {1.0f, 1.0f, 1.0f, 1.0f}; struct d3d_blend_state *blend_state_impl; const D3D11_BLEND_DESC *desc; @@ -29,7 +29,7 @@ index 835ea8b..2ef9b46 100644 TRACE("iface %p, blend_state %p, blend_factor %s, sample_mask 0x%08x.\n", iface, blend_state, debug_float4(blend_factor), sample_mask); -@@ -702,14 +703,11 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi +@@ -2081,14 +2082,11 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi { wined3d_device_set_blend_state(device->wined3d_device, NULL); wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_ALPHABLENDENABLE, FALSE); @@ -49,7 +49,7 @@ index 835ea8b..2ef9b46 100644 wined3d_mutex_unlock(); return; } -@@ -737,14 +735,13 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi +@@ -2116,14 +2114,13 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi || d->DestBlendAlpha == D3D11_BLEND_BLEND_FACTOR || d->DestBlendAlpha == D3D11_BLEND_INV_BLEND_FACTOR)) FIXME("Ignoring blend factor %s.\n", debug_float4(blend_factor)); } @@ -86,11 +86,23 @@ index a14c9d3..2bec92e 100644 } /* glEnableIndexedEXT(GL_BLEND, ...) */ +diff --git a/dlls/wined3d/Makefile.in b/dlls/wined3d/Makefile.in +index 70f47c6..b850ba6 100644 +--- a/dlls/wined3d/Makefile.in ++++ b/dlls/wined3d/Makefile.in +@@ -10,7 +10,6 @@ C_SRCS = \ + cs.c \ + device.c \ + directx.c \ +- drawprim.c \ + dxtn.c \ + gl_compat.c \ + glsl_shader.c \ diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c -index 4929b84..1daf7c0 100644 +index e5dd5bb..67a49db 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c -@@ -2578,10 +2578,8 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con +@@ -2613,10 +2613,8 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con } gl_info->gl_ops.gl.p_glColorMask(GL_TRUE, GL_TRUE,GL_TRUE,GL_TRUE); checkGLcall("glColorMask"); @@ -103,11 +115,20 @@ index 4929b84..1daf7c0 100644 if (gl_info->supported[EXT_SECONDARY_COLOR]) { gl_info->gl_ops.gl.p_glDisable(GL_COLOR_SUM_EXT); +@@ -4849,7 +4847,7 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s + if (!(rtv = fb->render_targets[i]) || rtv->format->id == WINED3DFMT_NULL) + continue; + +- if (state->render_states[WINED3D_RS_COLORWRITEENABLE]) ++ if (state->render_states[WINED3D_RS_COLORWRITE(i)]) + { + wined3d_rendertarget_view_load_location(rtv, context, rtv->resource->draw_binding); + wined3d_rendertarget_view_invalidate_location(rtv, ~rtv->resource->draw_binding); diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c -index 6e275e1..cef05cc 100644 +index ee42002..dfd0047 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c -@@ -378,10 +378,8 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c +@@ -383,10 +383,8 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c } gl_info->gl_ops.gl.p_glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); @@ -120,24 +141,11 @@ index 6e275e1..cef05cc 100644 gl_info->gl_ops.gl.p_glClearColor(color->r, color->g, color->b, color->a); checkGLcall("glClearColor"); clear_mask = clear_mask | GL_COLOR_BUFFER_BIT; -diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c -index 7eccc8f..8f9e929 100644 ---- a/dlls/wined3d/drawprim.c -+++ b/dlls/wined3d/drawprim.c -@@ -545,7 +545,7 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s - if (!(rtv = fb->render_targets[i]) || rtv->format->id == WINED3DFMT_NULL) - continue; - -- if (state->render_states[WINED3D_RS_COLORWRITEENABLE]) -+ if (state->render_states[WINED3D_RS_COLORWRITE(i)]) - { - wined3d_rendertarget_view_load_location(rtv, context, rtv->resource->draw_binding); - wined3d_rendertarget_view_invalidate_location(rtv, ~rtv->resource->draw_binding); diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c -index 3460d69..26c5815 100644 +index 2ce8c6f..7b93582 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c -@@ -1556,9 +1556,6 @@ static void state_debug_monitor(struct wined3d_context *context, const struct wi +@@ -1566,9 +1566,6 @@ static void state_debug_monitor(struct wined3d_context *context, const struct wi static void state_colorwrite(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { DWORD mask0 = state->render_states[WINED3D_RS_COLORWRITEENABLE]; @@ -147,7 +155,7 @@ index 3460d69..26c5815 100644 const struct wined3d_gl_info *gl_info = context->gl_info; TRACE("Color mask: r(%d) g(%d) b(%d) a(%d)\n", -@@ -1572,13 +1569,7 @@ static void state_colorwrite(struct wined3d_context *context, const struct wined +@@ -1582,13 +1579,7 @@ static void state_colorwrite(struct wined3d_context *context, const struct wined mask0 & WINED3DCOLORWRITEENABLE_ALPHA ? GL_TRUE : GL_FALSE); checkGLcall("glColorMask(...)"); @@ -162,7 +170,7 @@ index 3460d69..26c5815 100644 } static void set_color_mask(const struct wined3d_gl_info *gl_info, UINT index, DWORD mask) -@@ -1591,24 +1582,20 @@ static void set_color_mask(const struct wined3d_gl_info *gl_info, UINT index, DW +@@ -1601,24 +1592,20 @@ static void set_color_mask(const struct wined3d_gl_info *gl_info, UINT index, DW checkGLcall("glColorMaski"); } @@ -197,7 +205,7 @@ index 3460d69..26c5815 100644 } static void state_localviewer(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) -@@ -5281,18 +5268,26 @@ const struct StateEntryTemplate misc_state_template[] = +@@ -5296,18 +5283,26 @@ const struct StateEntryTemplate misc_state_template[] = { STATE_RENDER(WINED3D_RS_MULTISAMPLEANTIALIAS), { STATE_RENDER(WINED3D_RS_MULTISAMPLEANTIALIAS), state_msaa_w }, WINED3D_GL_EXT_NONE }, { STATE_RENDER(WINED3D_RS_MULTISAMPLEMASK), { STATE_RENDER(WINED3D_RS_MULTISAMPLEMASK), state_multisampmask }, WINED3D_GL_EXT_NONE }, { STATE_RENDER(WINED3D_RS_DEBUGMONITORTOKEN), { STATE_RENDER(WINED3D_RS_DEBUGMONITORTOKEN), state_debug_monitor }, WINED3D_GL_EXT_NONE }, @@ -274,10 +282,10 @@ index b9efcec..c9b3527 100644 /* Texture Stage States - Put directly into state block, we will call function below */ for (i = 0; i < MAX_TEXTURES; ++i) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c -index 6e80f85..c8cceb9 100644 +index 5ce06bb..5bd7d50 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c -@@ -376,6 +376,7 @@ static void surface_blt_fbo(const struct wined3d_device *device, +@@ -383,6 +383,7 @@ static void surface_blt_fbo(const struct wined3d_device *device, RECT src_rect, dst_rect; GLenum gl_filter; GLenum buffer; @@ -285,7 +293,7 @@ index 6e80f85..c8cceb9 100644 TRACE("device %p, filter %s,\n", device, debug_d3dtexturefiltertype(filter)); TRACE("src_surface %p, src_location %s, src_rect %s,\n", -@@ -473,10 +474,8 @@ static void surface_blt_fbo(const struct wined3d_device *device, +@@ -480,10 +481,8 @@ static void surface_blt_fbo(const struct wined3d_device *device, context_invalidate_state(context, STATE_FRAMEBUFFER); gl_info->gl_ops.gl.p_glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); @@ -299,10 +307,10 @@ index 6e80f85..c8cceb9 100644 gl_info->gl_ops.gl.p_glDisable(GL_SCISSOR_TEST); context_invalidate_state(context, STATE_RENDER(WINED3D_RS_SCISSORTESTENABLE)); diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c -index 5de53d0..d6f3e91 100644 +index 9adf2da..5bf6889 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c -@@ -4408,7 +4408,6 @@ const char *debug_d3drenderstate(enum wined3d_render_state state) +@@ -4443,7 +4443,6 @@ const char *debug_d3drenderstate(enum wined3d_render_state state) D3DSTATE_TO_STR(WINED3D_RS_DEBUGMONITORTOKEN); D3DSTATE_TO_STR(WINED3D_RS_POINTSIZE_MAX); D3DSTATE_TO_STR(WINED3D_RS_INDEXEDVERTEXBLENDENABLE); @@ -310,7 +318,7 @@ index 5de53d0..d6f3e91 100644 D3DSTATE_TO_STR(WINED3D_RS_TWEENFACTOR); D3DSTATE_TO_STR(WINED3D_RS_BLENDOP); D3DSTATE_TO_STR(WINED3D_RS_POSITIONDEGREE); -@@ -4428,9 +4427,14 @@ const char *debug_d3drenderstate(enum wined3d_render_state state) +@@ -4463,9 +4462,14 @@ const char *debug_d3drenderstate(enum wined3d_render_state state) D3DSTATE_TO_STR(WINED3D_RS_BACK_STENCILZFAIL); D3DSTATE_TO_STR(WINED3D_RS_BACK_STENCILPASS); D3DSTATE_TO_STR(WINED3D_RS_BACK_STENCILFUNC); @@ -326,10 +334,10 @@ index 5de53d0..d6f3e91 100644 D3DSTATE_TO_STR(WINED3D_RS_SRGBWRITEENABLE); D3DSTATE_TO_STR(WINED3D_RS_DEPTHBIAS); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index 021c274..3183a0f 100644 +index 176faea..09e227c 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -275,6 +275,7 @@ static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup +@@ -277,6 +277,7 @@ static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup #define MAX_TGSM_REGISTERS 8192 #define MAX_VERTEX_BLENDS 4 #define MAX_MULTISAMPLE_TYPES 8 @@ -338,10 +346,10 @@ index 021c274..3183a0f 100644 struct min_lookup { diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h -index 8864965..58da08c 100644 +index bd4969a..ac39a50 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h -@@ -388,8 +388,20 @@ enum wined3d_render_state +@@ -390,8 +390,20 @@ enum wined3d_render_state WINED3D_RS_BLENDOPALPHA = 209, WINED3D_RS_DEPTHCLIP = 210, WINED3D_RS_DEPTHBIASCLAMP = 211, @@ -364,5 +372,5 @@ index 8864965..58da08c 100644 enum wined3d_blend { -- -2.7.4 +1.9.1 diff --git a/patches/ws2_32-setsockopt/0001-w2_32-Ignore-setting-several-port-assignment-related.patch b/patches/ws2_32-setsockopt/0001-w2_32-Ignore-setting-several-port-assignment-related.patch deleted file mode 100644 index 8366e06e..00000000 --- a/patches/ws2_32-setsockopt/0001-w2_32-Ignore-setting-several-port-assignment-related.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 9d196cf502e963e7ce807a1a338f963078a2b6d9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michael=20M=C3=BCller?= -Date: Sat, 22 Jul 2017 04:37:50 +0200 -Subject: w2_32: Ignore setting several port assignment related socket options. - ---- - dlls/ws2_32/socket.c | 16 ++++++++++++++++ - include/winsock.h | 9 +++++++++ - 2 files changed, 25 insertions(+) - -diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c -index fac47d78527..a34e3b97574 100644 ---- a/dlls/ws2_32/socket.c -+++ b/dlls/ws2_32/socket.c -@@ -5957,6 +5957,22 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname, - break; - #endif - -+ case WS_SO_RANDOMIZE_PORT: -+ FIXME("Ignoring WS_SO_RANDOMIZE_PORT\n"); -+ return 0; -+ -+ case WS_SO_PORT_SCALABILITY: -+ FIXME("Ignoring WS_SO_PORT_SCALABILITY\n"); -+ return 0; -+ -+ case WS_SO_REUSE_UNICASTPORT: -+ FIXME("Ignoring WS_SO_REUSE_UNICASTPORT\n"); -+ return 0; -+ -+ case WS_SO_REUSE_MULTICASTPORT: -+ FIXME("Ignoring WS_SO_REUSE_MULTICASTPORT\n"); -+ return 0; -+ - default: - TRACE("Unknown SOL_SOCKET optname: 0x%08x\n", optname); - SetLastError(WSAENOPROTOOPT); -diff --git a/include/winsock.h b/include/winsock.h -index 2feb22466e4..fc1bc0c8d5b 100644 ---- a/include/winsock.h -+++ b/include/winsock.h -@@ -664,6 +664,10 @@ typedef struct WS(WSAData) - #define SO_TYPE 0x1008 - #define SO_BSP_STATE 0x1009 - -+#define SO_RANDOMIZE_PORT 0x3005 -+#define SO_PORT_SCALABILITY 0x3006 -+#define SO_REUSE_UNICASTPORT 0x3007 -+#define SO_REUSE_MULTICASTPORT 0x3008 - - #define IOCPARM_MASK 0x7f - #define IOC_VOID 0x20000000 -@@ -699,6 +703,11 @@ typedef struct WS(WSAData) - #define WS_SO_TYPE 0x1008 - #define WS_SO_BSP_STATE 0x1009 - -+#define WS_SO_RANDOMIZE_PORT 0x3005 -+#define WS_SO_PORT_SCALABILITY 0x3006 -+#define WS_SO_REUSE_UNICASTPORT 0x3007 -+#define WS_SO_REUSE_MULTICASTPORT 0x3008 -+ - #define WS_IOCPARM_MASK 0x7f - #define WS_IOC_VOID 0x20000000 - #define WS_IOC_OUT 0x40000000 --- -2.13.1 - diff --git a/patches/xaudio2_7-OnVoiceProcessingPassStart/0001-xaudio2_7-Use-assembly-wrapper-to-call-OnVoiceProces.patch b/patches/xaudio2_7-OnVoiceProcessingPassStart/0001-xaudio2_7-Use-assembly-wrapper-to-call-OnVoiceProces.patch index 21891b4f..86d50672 100644 --- a/patches/xaudio2_7-OnVoiceProcessingPassStart/0001-xaudio2_7-Use-assembly-wrapper-to-call-OnVoiceProces.patch +++ b/patches/xaudio2_7-OnVoiceProcessingPassStart/0001-xaudio2_7-Use-assembly-wrapper-to-call-OnVoiceProces.patch @@ -1,15 +1,15 @@ -From af47a9365411f0b25cd54ad38d152fe4878da10f Mon Sep 17 00:00:00 2001 +From 091225489a181bcc68d0dd70cb94c4711fc7792e Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 15 Jul 2017 22:20:28 +0200 -Subject: xaudio2_7: Use assembly wrapper to call OnVoiceProcessingPassStart - callback. +Subject: [PATCH] xaudio2_7: Use assembly wrapper to call + OnVoiceProcessingPassStart callback. --- dlls/xaudio2_7/xaudio_dll.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c -index 13f591630fd..5770a99b44c 100644 +index 0682a5f..19dd9b0 100644 --- a/dlls/xaudio2_7/xaudio_dll.c +++ b/dlls/xaudio2_7/xaudio_dll.c @@ -17,6 +17,7 @@ @@ -59,5 +59,5 @@ index 13f591630fd..5770a99b44c 100644 { TRACE("wFormatTag: 0x%x (", fmt->wFormatTag); -- -2.13.1 +1.9.1 diff --git a/staging/VERSION b/staging/VERSION index b082b16c..5ae51e5a 100644 --- a/staging/VERSION +++ b/staging/VERSION @@ -1 +1 @@ -Wine Staging 3.2 (Unreleased) +Wine Staging 3.3 (Unreleased)