From d8651610cc5e839ca97c9a3640371fc4be4e9131 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 23 Mar 2015 18:20:54 +0100 Subject: [PATCH] Rebase against upstream changes, remove some patches (accepted upstream). --- README.md | 2 +- debian/changelog | 4 + ...-palette-before-presents-to-the-NULL.patch | 26 --- patches/ddraw-Palette/definition | 1 - ...ing-returns-in-initialize_decoder_wi.patch | 33 ---- patches/patchinstall.sh | 174 ++++++------------ ...ecessary-wineserver-calls-in-PeekMes.patch | 33 ++-- ..._state-cache-into-separate-structure.patch | 39 ++-- ...he-the-result-of-GetForegroundWindow.patch | 23 +-- ...ling-LL-hooks-the-key-state-cache-ha.patch | 25 +-- patches/user32-Key_State/definition | 1 - ...adding-in-user_thread_info-structure.patch | 35 ---- ...e-the-framebuffer-into-wined3d_state.patch | 110 +++++------ ...ned3d-Destroy-shaders-through-the-CS.patch | 24 +-- .../wined3d-CSMT_Main/9999-IfDefined.patch | 64 +++---- 15 files changed, 216 insertions(+), 378 deletions(-) delete mode 100644 patches/ddraw-Palette/0001-ddraw-Update-the-palette-before-presents-to-the-NULL.patch delete mode 100644 patches/ddraw-Palette/definition delete mode 100644 patches/gdiplus-Coverity/0001-gdiplus-Add-missing-returns-in-initialize_decoder_wi.patch delete mode 100644 patches/user32-user_thread_info/0001-user32-Fix-padding-in-user_thread_info-structure.patch diff --git a/README.md b/README.md index 1472d1ae..d906b877 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ Included bug fixes and improvements * Fix multithreading issues with fullscreen clipping ([Wine Bug #38087](https://bugs.winehq.org/show_bug.cgi?id=38087)) * Fix possible segfault in pulse_rd_loop of PulseAudio backend * Fix race-condition when threads are killed during shutdown -* Fix regression causing black screen on startup ([Wine Bug #38248](https://bugs.winehq.org/show_bug.cgi?id=38248)) +* ~~Fix regression causing black screen on startup~~ ([Wine Bug #38248](https://bugs.winehq.org/show_bug.cgi?id=38248)) * Fix regression causing too dark/missing textures in several games ([Wine Bug #38256](https://bugs.winehq.org/show_bug.cgi?id=38256)) * Fix return value of ScrollWindowEx for invisible windows ([Wine Bug #37706](https://bugs.winehq.org/show_bug.cgi?id=37706)) * Fix texture corruption in CSI: Fatal Conspiracy ([Wine Bug #33768](https://bugs.winehq.org/show_bug.cgi?id=33768)) diff --git a/debian/changelog b/debian/changelog index dd9a221b..17870d86 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,7 @@ +wine-staging (1.7.40) UNRELEASED; urgency=low + * Removed patch to fix regression causing black screen on startup (accepted upstream). + -- Sebastian Lackner Mon, 23 Mar 2015 16:12:20 +0100 + wine-staging (1.7.39) unstable; urgency=low * Fix a build failure on MacOS caused by using of strndup in the server-Inherited_ACLs patchset. * Update patchset for ntdll-RtlUnwindEx to fix an issue with dwarf handling (fixes Wine Staging Bug #170). diff --git a/patches/ddraw-Palette/0001-ddraw-Update-the-palette-before-presents-to-the-NULL.patch b/patches/ddraw-Palette/0001-ddraw-Update-the-palette-before-presents-to-the-NULL.patch deleted file mode 100644 index 9b343d0a..00000000 --- a/patches/ddraw-Palette/0001-ddraw-Update-the-palette-before-presents-to-the-NULL.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 8b42b214de22c117d61f2e59f2f3708046e9c9d6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Stefan=20D=C3=B6singer?= -Date: Fri, 20 Mar 2015 12:47:10 +0100 -Subject: ddraw: Update the palette before presents to the NULL window. - -This fixes bug 38248. ---- - dlls/ddraw/surface.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c -index b8c9872..0d2d731 100644 ---- a/dlls/ddraw/surface.c -+++ b/dlls/ddraw/surface.c -@@ -81,6 +81,8 @@ HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface, const RE - ERR("Failed to get surface DC, hr %#x.\n", hr); - return hr; - } -+ if (surface->palette) -+ wined3d_palette_apply_to_dc(surface->palette->wineD3DPalette, surface_dc); - - if (!(screen_dc = GetDC(NULL))) - { --- -2.3.2 - diff --git a/patches/ddraw-Palette/definition b/patches/ddraw-Palette/definition deleted file mode 100644 index 06edb808..00000000 --- a/patches/ddraw-Palette/definition +++ /dev/null @@ -1 +0,0 @@ -Fixes: [38248] Fix regression causing black screen on startup diff --git a/patches/gdiplus-Coverity/0001-gdiplus-Add-missing-returns-in-initialize_decoder_wi.patch b/patches/gdiplus-Coverity/0001-gdiplus-Add-missing-returns-in-initialize_decoder_wi.patch deleted file mode 100644 index bf72d92e..00000000 --- a/patches/gdiplus-Coverity/0001-gdiplus-Add-missing-returns-in-initialize_decoder_wi.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 79843a592a6b6d7b68e933d19bc59490f276f510 Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Fri, 20 Mar 2015 22:34:49 +0100 -Subject: gdiplus: Add missing returns in initialize_decoder_wic (Coverity). - ---- - dlls/gdiplus/image.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c -index 8eb1419..77b9305 100644 ---- a/dlls/gdiplus/image.c -+++ b/dlls/gdiplus/image.c -@@ -3425,13 +3425,13 @@ static GpStatus initialize_decoder_wic(IStream *stream, REFGUID container, IWICB - TRACE("%p,%s\n", stream, wine_dbgstr_guid(container)); - - hr = WICCreateImagingFactory_Proxy(WINCODEC_SDK_VERSION, &factory); -- if (FAILED(hr)) hresult_to_status(hr); -+ if (FAILED(hr)) return hresult_to_status(hr); - hr = IWICImagingFactory_CreateDecoder(factory, container, NULL, decoder); - IWICImagingFactory_Release(factory); -- if (FAILED(hr)) hresult_to_status(hr); -+ if (FAILED(hr)) return hresult_to_status(hr); - - hr = IWICBitmapDecoder_Initialize(*decoder, stream, WICDecodeMetadataCacheOnLoad); -- if (FAILED(hr)) hresult_to_status(hr); -+ if (FAILED(hr)) return hresult_to_status(hr); - return Ok; - } - --- -2.3.2 - diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index a1264db1..56e61cba 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -92,7 +92,6 @@ patch_enable_all () enable_d3dx9_36_UpdateSkinnedMesh="$1" enable_dbghelp_Debug_Symbols="$1" enable_ddraw_Hotpatch="$1" - enable_ddraw_Palette="$1" enable_ddraw_d3d_execute_buffer="$1" enable_dinput_Events="$1" enable_dsound_Fast_Mixer="$1" @@ -101,7 +100,6 @@ patch_enable_all () enable_fonts_Missing_Fonts="$1" enable_gdi32_MaxPixelFormats="$1" enable_gdi32_MultiMonitor="$1" - enable_gdiplus_Coverity="$1" enable_gdiplus_GdipCreateEffect="$1" enable_gdiplus_GdipCreateRegionRgnData="$1" enable_imagehlp_BindImageEx="$1" @@ -204,7 +202,6 @@ patch_enable_all () enable_user32_Painting="$1" enable_user32_ScrollWindowEx="$1" enable_user32_WndProc="$1" - enable_user32_user_thread_info="$1" enable_vcomp_Stub_Functions="$1" enable_version_VerQueryValue="$1" enable_version_VersionInfoEx="$1" @@ -337,9 +334,6 @@ patch_enable () ddraw-Hotpatch) enable_ddraw_Hotpatch="$2" ;; - ddraw-Palette) - enable_ddraw_Palette="$2" - ;; ddraw-d3d_execute_buffer) enable_ddraw_d3d_execute_buffer="$2" ;; @@ -364,9 +358,6 @@ patch_enable () gdi32-MultiMonitor) enable_gdi32_MultiMonitor="$2" ;; - gdiplus-Coverity) - enable_gdiplus_Coverity="$2" - ;; gdiplus-GdipCreateEffect) enable_gdiplus_GdipCreateEffect="$2" ;; @@ -673,9 +664,6 @@ patch_enable () user32-WndProc) enable_user32_WndProc="$2" ;; - user32-user_thread_info) - enable_user32_user_thread_info="$2" - ;; vcomp-Stub_Functions) enable_vcomp_Stub_Functions="$2" ;; @@ -1042,13 +1030,6 @@ if test "$enable_server_Shared_Memory" -eq 1; then enable_user32_Key_State=1 fi -if test "$enable_user32_Key_State" -eq 1; then - if test "$enable_user32_user_thread_info" -gt 1; then - abort "Patchset user32-user_thread_info disabled, but user32-Key_State depends on that." - fi - enable_user32_user_thread_info=1 -fi - if test "$enable_server_JobObjects" -eq 1; then if test "$enable_kernel32_Console_Handles" -gt 1; then abort "Patchset kernel32-Console_Handles disabled, but server-JobObjects depends on that." @@ -1758,21 +1739,6 @@ if test "$enable_ddraw_Hotpatch" -eq 1; then ) >> "$patchlist" fi -# Patchset ddraw-Palette -# | -# | This patchset fixes the following Wine bugs: -# | * [#38248] Fix regression causing black screen on startup -# | -# | Modified files: -# | * dlls/ddraw/surface.c -# | -if test "$enable_ddraw_Palette" -eq 1; then - patch_apply ddraw-Palette/0001-ddraw-Update-the-palette-before-presents-to-the-NULL.patch - ( - echo '+ { "Stefan Dösinger", "ddraw: Update the palette before presents to the NULL window.", 1 },'; - ) >> "$patchlist" -fi - # Patchset ddraw-d3d_execute_buffer # | # | Modified files: @@ -1834,6 +1800,18 @@ if test "$enable_dxgi_GetDesc" -eq 1; then ) >> "$patchlist" fi +# Patchset makedep-PARENTSPEC +# | +# | Modified files: +# | * tools/makedep.c +# | +if test "$enable_makedep_PARENTSPEC" -eq 1; then + patch_apply makedep-PARENTSPEC/0001-makedep-Add-support-for-PARENTSPEC-Makefile-variable.patch + ( + echo '+ { "Sebastian Lackner", "makedep: Add support for PARENTSPEC Makefile variable.", 1 },'; + ) >> "$patchlist" +fi + # Patchset ntdll-DllRedirects # | # | Modified files: @@ -1854,18 +1832,6 @@ if test "$enable_ntdll_DllRedirects" -eq 1; then ) >> "$patchlist" fi -# Patchset makedep-PARENTSPEC -# | -# | Modified files: -# | * tools/makedep.c -# | -if test "$enable_makedep_PARENTSPEC" -eq 1; then - patch_apply makedep-PARENTSPEC/0001-makedep-Add-support-for-PARENTSPEC-Makefile-variable.patch - ( - echo '+ { "Sebastian Lackner", "makedep: Add support for PARENTSPEC Makefile variable.", 1 },'; - ) >> "$patchlist" -fi - # Patchset wined3d-CSMT_Helper # | # | Modified files: @@ -1882,6 +1848,36 @@ if test "$enable_wined3d_CSMT_Helper" -eq 1; then ) >> "$patchlist" fi +# Patchset wined3d-Multisampling +# | +# | This patchset fixes the following Wine bugs: +# | * [#12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE. +# | +# | Modified files: +# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h +# | +if test "$enable_wined3d_Multisampling" -eq 1; then + patch_apply wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch + ( + echo '+ { "Austin English", "wined3d: Allow to specify multisampling AA quality levels via registry.", 1 },'; + ) >> "$patchlist" +fi + +# Patchset wined3d-NormalMatrix +# | +# | This patchset fixes the following Wine bugs: +# | * [#38256] Fix regression causing too dark/missing textures in several games +# | +# | Modified files: +# | * dlls/wined3d/glsl_shader.c +# | +if test "$enable_wined3d_NormalMatrix" -eq 1; then + patch_apply wined3d-NormalMatrix/0001-wined3d-Don-t-use-the-builtin-FFP-uniform-for-the-no.patch + ( + echo '+ { "Matteo Bruni", "wined3d: Don'\''t use the builtin FFP uniform for the normal matrix.", 1 },'; + ) >> "$patchlist" +fi + # Patchset wined3d-Revert_PixelFormat # | # | This patchset fixes the following Wine bugs: @@ -1928,36 +1924,6 @@ if test "$enable_wined3d_UnhandledBlendFactor" -eq 1; then ) >> "$patchlist" fi -# Patchset wined3d-Multisampling -# | -# | This patchset fixes the following Wine bugs: -# | * [#12652] Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE. -# | -# | Modified files: -# | * dlls/wined3d/directx.c, dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h -# | -if test "$enable_wined3d_Multisampling" -eq 1; then - patch_apply wined3d-Multisampling/0001-wined3d-Allow-to-specify-multisampling-AA-quality-le.patch - ( - echo '+ { "Austin English", "wined3d: Allow to specify multisampling AA quality levels via registry.", 1 },'; - ) >> "$patchlist" -fi - -# Patchset wined3d-NormalMatrix -# | -# | This patchset fixes the following Wine bugs: -# | * [#38256] Fix regression causing too dark/missing textures in several games -# | -# | Modified files: -# | * dlls/wined3d/glsl_shader.c -# | -if test "$enable_wined3d_NormalMatrix" -eq 1; then - patch_apply wined3d-NormalMatrix/0001-wined3d-Don-t-use-the-builtin-FFP-uniform-for-the-no.patch - ( - echo '+ { "Matteo Bruni", "wined3d: Don'\''t use the builtin FFP uniform for the normal matrix.", 1 },'; - ) >> "$patchlist" -fi - # Patchset wined3d-CSMT_Main # | # | This patchset fixes the following Wine bugs: @@ -2434,18 +2400,6 @@ if test "$enable_gdi32_MultiMonitor" -eq 1; then ) >> "$patchlist" fi -# Patchset gdiplus-Coverity -# | -# | Modified files: -# | * dlls/gdiplus/image.c -# | -if test "$enable_gdiplus_Coverity" -eq 1; then - patch_apply gdiplus-Coverity/0001-gdiplus-Add-missing-returns-in-initialize_decoder_wi.patch - ( - echo '+ { "Sebastian Lackner", "gdiplus: Add missing returns in initialize_decoder_wic (Coverity).", 1 },'; - ) >> "$patchlist" -fi - # Patchset gdiplus-GdipCreateEffect # | # | This patchset fixes the following Wine bugs: @@ -2535,22 +2489,6 @@ if test "$enable_kernel32_Console_Handles" -eq 1; then ) >> "$patchlist" fi -# Patchset kernel32-SetFileInformationByHandle -# | -# | Modified files: -# | * dlls/kernel32/file.c, dlls/ntdll/file.c, include/winbase.h, include/winternl.h -# | -if test "$enable_kernel32_SetFileInformationByHandle" -eq 1; then - patch_apply kernel32-SetFileInformationByHandle/0001-ntdll-Define-a-couple-more-information-classes.patch - patch_apply kernel32-SetFileInformationByHandle/0002-include-Declare-a-couple-more-file-information-class.patch - patch_apply kernel32-SetFileInformationByHandle/0003-kernel32-Implement-SetFileInformationByHandle.patch - ( - echo '+ { "Michael Müller", "ntdll: Define a couple more information classes.", 1 },'; - echo '+ { "Michael Müller", "include: Declare a couple more file information class structures.", 1 },'; - echo '+ { "Michael Müller", "kernel32: Implement SetFileInformationByHandle.", 1 },'; - ) >> "$patchlist" -fi - # Patchset ntdll-FileDispositionInformation # | # | This patchset fixes the following Wine bugs: @@ -2570,6 +2508,22 @@ if test "$enable_ntdll_FileDispositionInformation" -eq 1; then ) >> "$patchlist" fi +# Patchset kernel32-SetFileInformationByHandle +# | +# | Modified files: +# | * dlls/kernel32/file.c, dlls/ntdll/file.c, include/winbase.h, include/winternl.h +# | +if test "$enable_kernel32_SetFileInformationByHandle" -eq 1; then + patch_apply kernel32-SetFileInformationByHandle/0001-ntdll-Define-a-couple-more-information-classes.patch + patch_apply kernel32-SetFileInformationByHandle/0002-include-Declare-a-couple-more-file-information-class.patch + patch_apply kernel32-SetFileInformationByHandle/0003-kernel32-Implement-SetFileInformationByHandle.patch + ( + echo '+ { "Michael Müller", "ntdll: Define a couple more information classes.", 1 },'; + echo '+ { "Michael Müller", "include: Declare a couple more file information class structures.", 1 },'; + echo '+ { "Michael Müller", "kernel32: Implement SetFileInformationByHandle.", 1 },'; + ) >> "$patchlist" +fi + # Patchset kernel32-CopyFileEx # | # | This patchset fixes the following Wine bugs: @@ -3835,18 +3789,6 @@ if test "$enable_server_PeekMessage" -eq 1; then ) >> "$patchlist" fi -# Patchset user32-user_thread_info -# | -# | Modified files: -# | * dlls/user32/user_private.h -# | -if test "$enable_user32_user_thread_info" -eq 1; then - patch_apply user32-user_thread_info/0001-user32-Fix-padding-in-user_thread_info-structure.patch - ( - echo '+ { "Sebastian Lackner", "user32: Fix padding in user_thread_info structure.", 1 },'; - ) >> "$patchlist" -fi - # Patchset user32-Key_State # | # | This patchset fixes the following Wine bugs: diff --git a/patches/server-Shared_Memory/0004-user32-Avoid-unnecessary-wineserver-calls-in-PeekMes.patch b/patches/server-Shared_Memory/0004-user32-Avoid-unnecessary-wineserver-calls-in-PeekMes.patch index b675b124..395c715b 100644 --- a/patches/server-Shared_Memory/0004-user32-Avoid-unnecessary-wineserver-calls-in-PeekMes.patch +++ b/patches/server-Shared_Memory/0004-user32-Avoid-unnecessary-wineserver-calls-in-PeekMes.patch @@ -1,18 +1,18 @@ -From 4b29ed2fba176d974a44a242edf0a5038c8da862 Mon Sep 17 00:00:00 2001 +From 31c45fb6cbf00ef56b370569e2079f681bb91cd1 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Thu, 19 Mar 2015 02:07:24 +0100 Subject: user32: Avoid unnecessary wineserver calls in PeekMessage/GetMessage. --- dlls/user32/message.c | 13 +++++++++++++ - dlls/user32/user_private.h | 3 ++- - 2 files changed, 15 insertions(+), 1 deletion(-) + dlls/user32/user_private.h | 1 + + 2 files changed, 14 insertions(+) diff --git a/dlls/user32/message.c b/dlls/user32/message.c -index d59e342..4bc17e9 100644 +index c28a2fe..1afef9f 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c -@@ -2734,6 +2734,18 @@ static BOOL peek_message( MSG *msg, HWND hwnd, UINT first, UINT last, UINT flags +@@ -2740,6 +2740,18 @@ static BOOL peek_message( MSG *msg, HWND hwnd, UINT first, UINT last, UINT flags unsigned int hw_id = 0; /* id of previous hardware message */ void *buffer; size_t buffer_size = 256; @@ -31,7 +31,7 @@ index d59e342..4bc17e9 100644 if (!(buffer = HeapAlloc( GetProcessHeap(), 0, buffer_size ))) return FALSE; -@@ -2746,6 +2758,7 @@ static BOOL peek_message( MSG *msg, HWND hwnd, UINT first, UINT last, UINT flags +@@ -2752,6 +2764,7 @@ static BOOL peek_message( MSG *msg, HWND hwnd, UINT first, UINT last, UINT flags size_t size = 0; const message_data_t *msg_data = buffer; @@ -40,20 +40,17 @@ index d59e342..4bc17e9 100644 { req->flags = flags; diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h -index 01a19bf..adf73ff 100644 +index 4380a00..47d0194 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h -@@ -191,8 +191,9 @@ struct user_thread_info - HWND msg_window; /* HWND_MESSAGE parent window */ - RAWINPUT *rawinput; +@@ -184,6 +184,7 @@ struct user_thread_info + DWORD GetMessagePosVal; /* Value for GetMessagePos */ + ULONG_PTR GetMessageExtraInfoVal; /* Value for GetMessageExtraInfo */ + UINT active_hooks; /* Bitmap of active hooks */ ++ DWORD last_get_msg; /* Last time of Get/PeekMessage call */ + UINT key_state_time; /* Time of last key state refresh */ INT key_state_epoch; /* Counter to invalidate the key state */ -+ DWORD last_get_msg; /* Last message time */ - -- ULONG pad[4]; /* Available for more data */ -+ ULONG pad[3]; /* Available for more data */ - }; - #include - + BYTE *key_state; /* Cache of global key state */ -- -2.3.2 +2.3.3 diff --git a/patches/server-Shared_Memory/0007-user32-Move-key_state-cache-into-separate-structure.patch b/patches/server-Shared_Memory/0007-user32-Move-key_state-cache-into-separate-structure.patch index a116622f..9f60487a 100644 --- a/patches/server-Shared_Memory/0007-user32-Move-key_state-cache-into-separate-structure.patch +++ b/patches/server-Shared_Memory/0007-user32-Move-key_state-cache-into-separate-structure.patch @@ -1,4 +1,4 @@ -From 66fe18ed16b77c3f69511ea9b41e6ed729624fcd Mon Sep 17 00:00:00 2001 +From 90da927ddf6f978c437aaa66b9e276dd41746415 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 21 Mar 2015 08:09:03 +0100 Subject: user32: Move key_state cache into separate structure. @@ -8,9 +8,9 @@ into the allocated memory block. --- dlls/user32/input.c | 26 +++++++++++++++++--------- dlls/user32/message.c | 9 +++++---- - dlls/user32/user_private.h | 17 ++++++++++++----- + dlls/user32/user_private.h | 11 ++++++++--- dlls/user32/winstation.c | 3 ++- - 4 files changed, 36 insertions(+), 19 deletions(-) + 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/dlls/user32/input.c b/dlls/user32/input.c index 2512887..8608f75 100644 @@ -68,10 +68,10 @@ index 2512887..8608f75 100644 } SERVER_END_REQ; diff --git a/dlls/user32/message.c b/dlls/user32/message.c -index 4bc17e9..33e826e 100644 +index 1afef9f..da83d16 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c -@@ -3304,6 +3304,7 @@ static BOOL send_message( struct send_message_info *info, DWORD_PTR *res_ptr, BO +@@ -3310,6 +3310,7 @@ static BOOL send_message( struct send_message_info *info, DWORD_PTR *res_ptr, BO NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) { struct user_thread_info *thread_info = get_user_thread_info(); @@ -79,7 +79,7 @@ index 4bc17e9..33e826e 100644 struct send_message_info info; int prev_x, prev_y, new_x, new_y; NTSTATUS ret; -@@ -3343,7 +3344,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) +@@ -3349,7 +3350,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) req->input.hw.lparam = MAKELONG( input->u.hi.wParamL, input->u.hi.wParamH ); break; } @@ -88,7 +88,7 @@ index 4bc17e9..33e826e 100644 ret = wine_server_call( req ); wait = reply->wait; prev_x = reply->prev_x; -@@ -3355,10 +3356,10 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) +@@ -3361,10 +3362,10 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, UINT flags ) if (!ret) { @@ -103,31 +103,24 @@ index 4bc17e9..33e826e 100644 if ((flags & SEND_HWMSG_INJECTED) && (prev_x != new_x || prev_y != new_y)) USER_Driver->pSetCursorPos( new_x, new_y ); diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h -index adf73ff..a35ebf3 100644 +index 47d0194..53ebca8 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h -@@ -184,19 +184,26 @@ struct user_thread_info - DWORD GetMessageTimeVal; /* Value for GetMessageTime */ - DWORD GetMessagePosVal; /* Value for GetMessagePos */ +@@ -185,9 +185,7 @@ struct user_thread_info ULONG_PTR GetMessageExtraInfoVal; /* Value for GetMessageExtraInfo */ -- UINT active_hooks; /* Bitmap of active hooks */ + UINT active_hooks; /* Bitmap of active hooks */ + DWORD last_get_msg; /* Last time of Get/PeekMessage call */ - UINT key_state_time; /* Time of last key state refresh */ +- INT key_state_epoch; /* Counter to invalidate the key state */ - BYTE *key_state; /* Cache of global key state */ ++ struct user_key_state_info *key_state; /* Cache of global key state */ HWND top_window; /* Desktop window */ HWND msg_window; /* HWND_MESSAGE parent window */ RAWINPUT *rawinput; -- INT key_state_epoch; /* Counter to invalidate the key state */ -+ struct user_key_state_info *key_state; /* Cache of global key state */ -+ UINT active_hooks; /* Bitmap of active hooks */ - DWORD last_get_msg; /* Last message time */ +@@ -195,6 +193,13 @@ struct user_thread_info -- ULONG pad[3]; /* Available for more data */ -+ ULONG pad[5]; /* Available for more data */ - }; - #include + C_ASSERT( sizeof(struct user_thread_info) <= sizeof(((TEB *)0)->Win32ClientInfo) ); -+C_ASSERT( sizeof(struct user_thread_info) <= sizeof(((TEB *)0)->Win32ClientInfo) ); -+ +struct user_key_state_info +{ + UINT key_state_time; /* Time of last key state refresh */ @@ -155,5 +148,5 @@ index 12b9edc..0e8260a 100644 return ret; } -- -2.3.2 +2.3.3 diff --git a/patches/server-Shared_Memory/0010-user32-Cache-the-result-of-GetForegroundWindow.patch b/patches/server-Shared_Memory/0010-user32-Cache-the-result-of-GetForegroundWindow.patch index ef17460d..bd399c1b 100644 --- a/patches/server-Shared_Memory/0010-user32-Cache-the-result-of-GetForegroundWindow.patch +++ b/patches/server-Shared_Memory/0010-user32-Cache-the-result-of-GetForegroundWindow.patch @@ -1,14 +1,14 @@ -From 8d67b53668f39c8684ddc8be8937f70eb50774df Mon Sep 17 00:00:00 2001 +From c7950e405445d69a0dd27dd515fda834e31d82c5 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 21 Mar 2015 22:35:24 +0100 Subject: user32: Cache the result of GetForegroundWindow. --- dlls/user32/focus.c | 21 ++++++++++++++++++++- - dlls/user32/user_private.h | 4 +++- + dlls/user32/user_private.h | 2 ++ server/protocol.def | 5 ++++- server/queue.c | 10 +++++++++- - 4 files changed, 36 insertions(+), 4 deletions(-) + 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/dlls/user32/focus.c b/dlls/user32/focus.c index 35fe89b..8b17d1f 100644 @@ -48,21 +48,18 @@ index 35fe89b..8b17d1f 100644 SERVER_END_REQ; return ret; diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h -index a35ebf3..7752416 100644 +index 53ebca8..0398b10 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h -@@ -190,8 +190,10 @@ struct user_thread_info - struct user_key_state_info *key_state; /* Cache of global key state */ - UINT active_hooks; /* Bitmap of active hooks */ - DWORD last_get_msg; /* Last message time */ +@@ -189,6 +189,8 @@ struct user_thread_info + HWND top_window; /* Desktop window */ + HWND msg_window; /* HWND_MESSAGE parent window */ + RAWINPUT *rawinput; + HWND foreground_wnd; /* Cache of the foreground window */ + DWORD foreground_wnd_epoch; /* Counter to invalidate foreground window */ - -- ULONG pad[5]; /* Available for more data */ -+ ULONG pad[2]; /* Available for more data */ }; - #include + C_ASSERT( sizeof(struct user_thread_info) <= sizeof(((TEB *)0)->Win32ClientInfo) ); diff --git a/server/protocol.def b/server/protocol.def index 7eaa6cd..c770644 100644 --- a/server/protocol.def @@ -119,5 +116,5 @@ index 6fa076d..764ba11 100644 else set_error( STATUS_INVALID_HANDLE ); } -- -2.3.2 +2.3.3 diff --git a/patches/user32-Key_State/0001-user32-After-calling-LL-hooks-the-key-state-cache-ha.patch b/patches/user32-Key_State/0001-user32-After-calling-LL-hooks-the-key-state-cache-ha.patch index 1e67b1f3..67452dd5 100644 --- a/patches/user32-Key_State/0001-user32-After-calling-LL-hooks-the-key-state-cache-ha.patch +++ b/patches/user32-Key_State/0001-user32-After-calling-LL-hooks-the-key-state-cache-ha.patch @@ -1,4 +1,4 @@ -From d24be9691751b300e10783f66f911a55709f9331 Mon Sep 17 00:00:00 2001 +From 3f119545bac640a7a65b609ddaa0b82f4725a3f0 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 14 Jul 2014 05:06:40 +0200 Subject: user32: After calling LL hooks the key state cache has to be @@ -8,8 +8,8 @@ Subject: user32: After calling LL hooks the key state cache has to be dlls/user32/hook.c | 2 +- dlls/user32/input.c | 8 ++++++-- dlls/user32/message.c | 7 ++++++- - dlls/user32/user_private.h | 5 ++++- - 4 files changed, 17 insertions(+), 5 deletions(-) + dlls/user32/user_private.h | 3 +++ + 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/dlls/user32/hook.c b/dlls/user32/hook.c index 2f6b42c..0c6a059 100644 @@ -90,19 +90,20 @@ index eac4e4d..d59e342 100644 USER_Driver->pSetCursorPos( new_x, new_y ); } diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h -index c389414..01a19bf 100644 +index 919540d..4380a00 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h -@@ -190,11 +190,14 @@ struct user_thread_info +@@ -185,6 +185,7 @@ struct user_thread_info + ULONG_PTR GetMessageExtraInfoVal; /* Value for GetMessageExtraInfo */ + UINT active_hooks; /* Bitmap of active hooks */ + UINT key_state_time; /* Time of last key state refresh */ ++ INT key_state_epoch; /* Counter to invalidate the key state */ + BYTE *key_state; /* Cache of global key state */ HWND top_window; /* Desktop window */ HWND msg_window; /* HWND_MESSAGE parent window */ - RAWINPUT *rawinput; -+ INT key_state_epoch; /* Counter to invalidate the key state */ +@@ -193,6 +194,8 @@ struct user_thread_info -- ULONG pad[5]; /* Available for more data */ -+ ULONG pad[4]; /* Available for more data */ - }; - #include + C_ASSERT( sizeof(struct user_thread_info) <= sizeof(((TEB *)0)->Win32ClientInfo) ); +extern INT global_key_state_epoch DECLSPEC_HIDDEN; + @@ -110,5 +111,5 @@ index c389414..01a19bf 100644 { HHOOK handle; -- -2.3.2 +2.3.3 diff --git a/patches/user32-Key_State/definition b/patches/user32-Key_State/definition index d7d0edcb..84dbc4b2 100644 --- a/patches/user32-Key_State/definition +++ b/patches/user32-Key_State/definition @@ -1,2 +1 @@ Fixes: [29871] Invalidate key state cache globally after calling LL hooks -Depends: user32-user_thread_info diff --git a/patches/user32-user_thread_info/0001-user32-Fix-padding-in-user_thread_info-structure.patch b/patches/user32-user_thread_info/0001-user32-Fix-padding-in-user_thread_info-structure.patch deleted file mode 100644 index 4f5f16db..00000000 --- a/patches/user32-user_thread_info/0001-user32-Fix-padding-in-user_thread_info-structure.patch +++ /dev/null @@ -1,35 +0,0 @@ -From d9c7dc0ec91492b7e57682ea3ddb10feaffcc18b Mon Sep 17 00:00:00 2001 -From: Sebastian Lackner -Date: Sat, 21 Mar 2015 04:22:10 +0100 -Subject: user32: Fix padding in user_thread_info structure. - ---- - dlls/user32/user_private.h | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h -index adf3f7d..c389414 100644 ---- a/dlls/user32/user_private.h -+++ b/dlls/user32/user_private.h -@@ -169,6 +169,7 @@ struct wm_char_mapping_data - - /* this is the structure stored in TEB->Win32ClientInfo */ - /* no attempt is made to keep the layout compatible with the Windows one */ -+#include - struct user_thread_info - { - HANDLE server_queue; /* Handle to server-side queue */ -@@ -190,8 +191,9 @@ struct user_thread_info - HWND msg_window; /* HWND_MESSAGE parent window */ - RAWINPUT *rawinput; - -- ULONG pad[6]; /* Available for more data */ -+ ULONG pad[5]; /* Available for more data */ - }; -+#include - - struct hook_extra_info - { --- -2.3.2 - diff --git a/patches/wined3d-CSMT_Main/0043-wined3d-Move-the-framebuffer-into-wined3d_state.patch b/patches/wined3d-CSMT_Main/0043-wined3d-Move-the-framebuffer-into-wined3d_state.patch index 8dd9c81f..9270e682 100644 --- a/patches/wined3d-CSMT_Main/0043-wined3d-Move-the-framebuffer-into-wined3d_state.patch +++ b/patches/wined3d-CSMT_Main/0043-wined3d-Move-the-framebuffer-into-wined3d_state.patch @@ -1,4 +1,4 @@ -From eb0dad546308d183c995eb43200e6eacd10e0980 Mon Sep 17 00:00:00 2001 +From 74b9c4c429f5c388786366e5ed35f5c14df15c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Thu, 20 Dec 2012 13:09:17 +0100 Subject: wined3d: Move the framebuffer into wined3d_state @@ -11,16 +11,16 @@ Subject: wined3d: Move the framebuffer into wined3d_state dlls/wined3d/drawprim.c | 14 ++--- dlls/wined3d/glsl_shader.c | 2 +- dlls/wined3d/shader.c | 2 +- - dlls/wined3d/state.c | 20 +++---- + dlls/wined3d/state.c | 18 +++--- dlls/wined3d/stateblock.c | 45 +++++++++++++-- dlls/wined3d/surface.c | 2 +- dlls/wined3d/swapchain.c | 2 +- - dlls/wined3d/utils.c | 2 +- + dlls/wined3d/utils.c | 4 +- dlls/wined3d/wined3d_private.h | 46 +++++++++++---- 13 files changed, 171 insertions(+), 126 deletions(-) diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c -index 4bc4d3b..0f95f28 100644 +index 4a10e00..fb09fd7 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -706,7 +706,7 @@ static void shader_arb_load_constants_internal(struct shader_arb_priv *priv, @@ -32,7 +32,7 @@ index 4bc4d3b..0f95f28 100644 /* Load DirectX 9 float constants for pixel shader */ priv->highest_dirty_ps_const = shader_arb_load_constantsF(pshader, gl_info, GL_FRAGMENT_PROGRAM_ARB, -@@ -4674,7 +4674,7 @@ static void shader_arb_select(void *shader_priv, struct wined3d_context *context +@@ -4711,7 +4711,7 @@ static void shader_arb_select(void *shader_priv, struct wined3d_context *context } else { @@ -42,7 +42,7 @@ index 4bc4d3b..0f95f28 100644 } diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c -index c08e0ce..ba546f5 100644 +index 93c8a6a..0445a41 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -1448,6 +1448,12 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, @@ -119,7 +119,7 @@ index c08e0ce..ba546f5 100644 } static void context_map_stage(struct wined3d_context *context, DWORD stage, DWORD unit) -@@ -3030,7 +3042,7 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de +@@ -3034,7 +3046,7 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de { const struct wined3d_state *state = &device->state; const struct StateEntry *state_table = context->state_table; @@ -205,7 +205,7 @@ index 4a04b00..408e9b5 100644 HeapFree(GetProcessHeap(), 0, cs); } diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c -index 22cf4b5..c3eedbd 100644 +index 95e5cc7..f8c32eb 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -860,7 +860,7 @@ static void device_init_swapchain_state(struct wined3d_device *device, struct wi @@ -355,7 +355,7 @@ index 22cf4b5..c3eedbd 100644 { WARN("Silently ignoring depth and target clear with mismatching sizes\n"); return WINED3D_OK; -@@ -3686,8 +3666,8 @@ HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device +@@ -3688,8 +3668,8 @@ HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device if (state->render_states[WINED3D_RS_ZENABLE] || state->render_states[WINED3D_RS_ZWRITEENABLE] || state->render_states[WINED3D_RS_STENCILENABLE]) { @@ -366,7 +366,7 @@ index 22cf4b5..c3eedbd 100644 if (ds && rt && (ds->width < rt->width || ds->height < rt->height)) { -@@ -3913,20 +3893,21 @@ struct wined3d_rendertarget_view * CDECL wined3d_device_get_rendertarget_view(co +@@ -3915,20 +3895,21 @@ struct wined3d_rendertarget_view * CDECL wined3d_device_get_rendertarget_view(co return NULL; } @@ -390,7 +390,7 @@ index 22cf4b5..c3eedbd 100644 TRACE("device %p, view_idx %u, view %p, set_viewport %#x.\n", device, view_idx, view, set_viewport); -@@ -3966,13 +3947,13 @@ HRESULT CDECL wined3d_device_set_rendertarget_view(struct wined3d_device *device +@@ -3968,13 +3949,13 @@ HRESULT CDECL wined3d_device_set_rendertarget_view(struct wined3d_device *device } @@ -406,7 +406,7 @@ index 22cf4b5..c3eedbd 100644 wined3d_cs_emit_set_rendertarget_view(device->cs, view_idx, view); /* Release after the assignment, to prevent device_resource_released() * from seeing the surface as still in use. */ -@@ -3984,18 +3965,19 @@ HRESULT CDECL wined3d_device_set_rendertarget_view(struct wined3d_device *device +@@ -3986,18 +3967,19 @@ HRESULT CDECL wined3d_device_set_rendertarget_view(struct wined3d_device *device void CDECL wined3d_device_set_depth_stencil_view(struct wined3d_device *device, struct wined3d_rendertarget_view *view) { @@ -428,7 +428,7 @@ index 22cf4b5..c3eedbd 100644 wined3d_rendertarget_view_incref(view); wined3d_cs_emit_set_depth_stencil_view(device->cs, view); if (prev) -@@ -4351,10 +4333,9 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, +@@ -4353,10 +4335,9 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, wined3d_texture_decref(device->cursor_texture); device->cursor_texture = NULL; } @@ -440,7 +440,7 @@ index 22cf4b5..c3eedbd 100644 { for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i) { -@@ -4363,6 +4344,11 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, +@@ -4365,6 +4346,11 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, } wined3d_device_set_depth_stencil_view(device, NULL); @@ -452,7 +452,7 @@ index 22cf4b5..c3eedbd 100644 if (device->onscreen_depth_stencil) { wined3d_surface_decref(device->onscreen_depth_stencil); -@@ -4647,7 +4633,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, +@@ -4649,7 +4635,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, if (device->d3d_initialized) delete_opengl_contexts(device, swapchain); @@ -461,7 +461,7 @@ index 22cf4b5..c3eedbd 100644 &device->adapter->d3d_info, WINED3D_STATE_INIT_DEFAULT))) ERR("Failed to initialize device state, hr %#x.\n", hr); device->update_state = &device->state; -@@ -4656,22 +4642,21 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, +@@ -4658,22 +4644,21 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, } else if (device->back_buffer_view) { @@ -489,7 +489,7 @@ index 22cf4b5..c3eedbd 100644 wined3d_cs_emit_set_scissor_rect(device->cs, &state->scissor_rect); } -@@ -4762,17 +4747,17 @@ void device_resource_released(struct wined3d_device *device, struct wined3d_reso +@@ -4764,17 +4749,17 @@ void device_resource_released(struct wined3d_device *device, struct wined3d_reso for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i) { @@ -511,7 +511,7 @@ index 22cf4b5..c3eedbd 100644 } } break; -@@ -4935,7 +4920,7 @@ HRESULT device_init(struct wined3d_device *device, struct wined3d *wined3d, +@@ -4937,7 +4922,7 @@ HRESULT device_init(struct wined3d_device *device, struct wined3d *wined3d, device->blitter = adapter->blitter; @@ -521,10 +521,10 @@ index 22cf4b5..c3eedbd 100644 { ERR("Failed to initialize device state, hr %#x.\n", hr); diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c -index 31f346d..f0f3ef2 100644 +index 6ff6cf1..e69a69e 100644 --- a/dlls/wined3d/drawprim.c +++ b/dlls/wined3d/drawprim.c -@@ -608,7 +608,7 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co +@@ -601,7 +601,7 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co if (!index_count) return; @@ -533,7 +533,7 @@ index 31f346d..f0f3ef2 100644 if (!context->valid) { context_release(context); -@@ -622,7 +622,7 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co +@@ -615,7 +615,7 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co /* Invalidate the back buffer memory so LockRect will read it the next time */ for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i) { @@ -542,7 +542,7 @@ index 31f346d..f0f3ef2 100644 if (target) { wined3d_resource_load_location(&target->resource, context, target->container->resource.draw_binding); -@@ -631,18 +631,18 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co +@@ -624,18 +624,18 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co } } @@ -564,7 +564,7 @@ index 31f346d..f0f3ef2 100644 RECT current_rect, draw_rect, r; if (!context->render_offscreen && ds != device->onscreen_depth_stencil) -@@ -668,9 +668,9 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co +@@ -661,9 +661,9 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co return; } @@ -577,10 +577,10 @@ index 31f346d..f0f3ef2 100644 surface_modify_ds_location(ds, location, ds->ds_current_size.cx, ds->ds_current_size.cy); diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c -index 0017e45..5ec156a 100644 +index 0b307d3..ffefab0 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c -@@ -953,7 +953,7 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont +@@ -964,7 +964,7 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont const struct wined3d_state *state = &shader->device->state; const struct ps_compile_args *ps_args = ctx_priv->cur_ps_args; const struct wined3d_gl_info *gl_info = context->gl_info; @@ -590,10 +590,10 @@ index 0017e45..5ec156a 100644 const struct wined3d_shader_lconst *lconst; const char *prefix; diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c -index 28f3b17..ca38d53 100644 +index f162fb5..e9ac242 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c -@@ -2245,7 +2245,7 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3 +@@ -2344,7 +2344,7 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3 memset(args, 0, sizeof(*args)); /* FIXME: Make sure all bits are set. */ if (!gl_info->supported[ARB_FRAMEBUFFER_SRGB] && state->render_states[WINED3D_RS_SRGBWRITEENABLE]) { @@ -603,7 +603,7 @@ index 28f3b17..ca38d53 100644 { static unsigned int warned = 0; diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c -index 961f651..01c77ae 100644 +index bfef4b0..aed4a39 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -105,7 +105,7 @@ static void state_zenable(struct wined3d_context *context, const struct wined3d_ @@ -660,16 +660,7 @@ index 961f651..01c77ae 100644 float scale; union -@@ -4091,7 +4091,7 @@ void transform_projection(struct wined3d_context *context, const struct wined3d_ - double y_offset = context->render_offscreen - ? ((63.0 / 64.0) - (2.0 * y) - h) / h - : ((63.0 / 64.0) - (2.0 * y) - h) / -h; -- enum wined3d_depth_buffer_type zenable = state->fb->depth_stencil ? -+ enum wined3d_depth_buffer_type zenable = state->fb.depth_stencil ? - state->render_states[WINED3D_RS_ZENABLE] : WINED3D_ZB_FALSE; - double z_scale = zenable ? 2.0f : 0.0f; - double z_offset = zenable ? -1.0f : 0.0f; -@@ -4769,7 +4769,7 @@ void vertexdeclaration(struct wined3d_context *context, const struct wined3d_sta +@@ -4682,7 +4682,7 @@ static void vertexdeclaration(struct wined3d_context *context, const struct wine static void viewport_miscpart(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -678,7 +669,7 @@ index 961f651..01c77ae 100644 const struct wined3d_gl_info *gl_info = context->gl_info; struct wined3d_viewport vp = state->viewport; -@@ -4949,7 +4949,7 @@ static void scissorrect(struct wined3d_context *context, const struct wined3d_st +@@ -4860,7 +4860,7 @@ static void scissorrect(struct wined3d_context *context, const struct wined3d_st } else { @@ -687,7 +678,7 @@ index 961f651..01c77ae 100644 UINT height; UINT width; -@@ -5013,7 +5013,7 @@ static void psorigin(struct wined3d_context *context, const struct wined3d_state +@@ -4924,7 +4924,7 @@ static void psorigin(struct wined3d_context *context, const struct wined3d_state void state_srgbwrite(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -697,7 +688,7 @@ index 961f651..01c77ae 100644 TRACE("context %p, state %p, state_id %#x.\n", context, state, state_id); diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c -index dc146fc..141e539 100644 +index 62b1841..76a80e2 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -464,6 +464,7 @@ void state_unbind_resources(struct wined3d_state *state) @@ -748,7 +739,7 @@ index dc146fc..141e539 100644 } ULONG CDECL wined3d_stateblock_decref(struct wined3d_stateblock *stateblock) -@@ -1315,14 +1342,12 @@ static void state_init_default(struct wined3d_state *state, const struct wined3d +@@ -1310,14 +1337,12 @@ static void state_init_default(struct wined3d_state *state, const struct wined3d } } @@ -765,7 +756,7 @@ index dc146fc..141e539 100644 for (i = 0; i < LIGHTMAP_SIZE; i++) { -@@ -1340,6 +1365,15 @@ HRESULT state_init(struct wined3d_state *state, struct wined3d_fb_state *fb, +@@ -1335,6 +1360,15 @@ HRESULT state_init(struct wined3d_state *state, struct wined3d_fb_state *fb, return E_OUTOFMEMORY; } @@ -781,7 +772,7 @@ index dc146fc..141e539 100644 if (flags & WINED3D_STATE_INIT_DEFAULT) state_init_default(state, gl_info); -@@ -1350,12 +1384,13 @@ static HRESULT stateblock_init(struct wined3d_stateblock *stateblock, +@@ -1345,12 +1379,13 @@ static HRESULT stateblock_init(struct wined3d_stateblock *stateblock, struct wined3d_device *device, enum wined3d_stateblock_type type) { HRESULT hr; @@ -797,10 +788,10 @@ index dc146fc..141e539 100644 if (FAILED(hr = stateblock_allocate_shader_constants(stateblock))) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c -index 9b9f489..994f6e3 100644 +index 9647c2a..4990848 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c -@@ -3486,9 +3486,9 @@ static HRESULT surface_blt_special(struct wined3d_surface *dst_surface, const RE +@@ -3469,9 +3469,9 @@ static HRESULT surface_blt_special(struct wined3d_surface *dst_surface, const RE enum wined3d_texture_filter_type filter) { struct wined3d_device *device = dst_surface->resource.device; @@ -825,10 +816,19 @@ index dd7d2c7..ed2964e 100644 struct wined3d_context *context; struct wined3d_surface *front; diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c -index 9e9fc49..87f3858 100644 +index b28142c..4b84711 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c -@@ -3430,7 +3430,7 @@ void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d +@@ -3169,7 +3169,7 @@ void get_projection_matrix(const struct wined3d_context *context, const struct w + float y_offset = (float)(context->render_offscreen + ? (63.0 / 64.0 - (2.0 * y) - h) / h + : (63.0 / 64.0 - (2.0 * y) - h) / -h); +- enum wined3d_depth_buffer_type zenable = state->fb->depth_stencil ? ++ enum wined3d_depth_buffer_type zenable = state->fb.depth_stencil ? + state->render_states[WINED3D_RS_ZENABLE] : WINED3D_ZB_FALSE; + float z_scale = zenable ? 2.0f : 0.0f; + float z_offset = zenable ? -1.0f : 0.0f; +@@ -3599,7 +3599,7 @@ void gen_ffp_frag_op(const struct wined3d_context *context, const struct wined3d unsigned int i; DWORD ttff; DWORD cop, aop, carg0, carg1, carg2, aarg0, aarg1, aarg2; @@ -838,10 +838,10 @@ index 9e9fc49..87f3858 100644 const struct wined3d_d3d_info *d3d_info = context->d3d_info; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index c68f28e..32e27f6 100644 +index b0040a5..9a4e5cb 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -1118,6 +1118,36 @@ struct wined3d_timestamp_query +@@ -1119,6 +1119,36 @@ struct wined3d_timestamp_query void context_alloc_timestamp_query(struct wined3d_context *context, struct wined3d_timestamp_query *query) DECLSPEC_HIDDEN; void context_free_timestamp_query(struct wined3d_timestamp_query *query) DECLSPEC_HIDDEN; @@ -878,7 +878,7 @@ index c68f28e..32e27f6 100644 struct wined3d_context { const struct wined3d_gl_info *gl_info; -@@ -1132,6 +1162,7 @@ struct wined3d_context +@@ -1133,6 +1163,7 @@ struct wined3d_context DWORD dirtyArray[STATE_HIGHEST + 1]; /* Won't get bigger than that, a state is never marked dirty 2 times */ DWORD numDirtyEntries; DWORD isStateDirty[STATE_HIGHEST / (sizeof(DWORD) * CHAR_BIT) + 1]; /* Bitmap to find out quickly if a state is dirty */ @@ -886,7 +886,7 @@ index c68f28e..32e27f6 100644 struct wined3d_swapchain *swapchain; struct wined3d_surface *current_rt; -@@ -1232,12 +1263,6 @@ struct wined3d_context +@@ -1233,12 +1264,6 @@ struct wined3d_context GLuint dummy_arbfp_prog; }; @@ -899,7 +899,7 @@ index c68f28e..32e27f6 100644 typedef void (*APPLYSTATEFUNC)(struct wined3d_context *ctx, const struct wined3d_state *state, DWORD state_id); struct StateEntry -@@ -1912,7 +1937,7 @@ struct wined3d_stream_state +@@ -1913,7 +1938,7 @@ struct wined3d_stream_state struct wined3d_state { DWORD flags; @@ -908,7 +908,7 @@ index c68f28e..32e27f6 100644 struct wined3d_vertex_declaration *vertex_declaration; struct wined3d_stream_output stream_output[MAX_STREAM_OUT]; -@@ -2018,7 +2043,6 @@ struct wined3d_device +@@ -2019,7 +2044,6 @@ struct wined3d_device struct wine_rb_tree samplers; /* Render Target Support */ @@ -937,5 +937,5 @@ index c68f28e..32e27f6 100644 size_t data_size; -- -2.2.2 +2.3.3 diff --git a/patches/wined3d-CSMT_Main/0134-wined3d-Destroy-shaders-through-the-CS.patch b/patches/wined3d-CSMT_Main/0134-wined3d-Destroy-shaders-through-the-CS.patch index 0aa9aeaa..1029edb3 100644 --- a/patches/wined3d-CSMT_Main/0134-wined3d-Destroy-shaders-through-the-CS.patch +++ b/patches/wined3d-CSMT_Main/0134-wined3d-Destroy-shaders-through-the-CS.patch @@ -1,4 +1,4 @@ -From 30ad009ccd9e681bab8813c09847c62bd9367916 Mon Sep 17 00:00:00 2001 +From f0534e2583764b2f51690adb1e0b4c4264b4bfcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Wed, 31 Jul 2013 23:18:28 +0200 Subject: wined3d: Destroy shaders through the CS @@ -10,7 +10,7 @@ Subject: wined3d: Destroy shaders through the CS 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c -index 38063d7..21d5b74 100644 +index d6581cf..24fdc17 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -80,6 +80,7 @@ enum wined3d_cs_op @@ -34,7 +34,7 @@ index 38063d7..21d5b74 100644 static void wined3d_cs_mt_submit(struct wined3d_cs *cs, size_t size) { LONG new_val = (cs->queue.head + size) & (WINED3D_CS_QUEUE_SIZE - 1); -@@ -2279,6 +2286,27 @@ void wined3d_cs_emit_vertex_declaration_destroy(struct wined3d_cs *cs, +@@ -2282,6 +2289,27 @@ void wined3d_cs_emit_vertex_declaration_destroy(struct wined3d_cs *cs, cs->ops->submit(cs, sizeof(*op)); } @@ -62,7 +62,7 @@ index 38063d7..21d5b74 100644 static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void *data) = { /* WINED3D_CS_OP_NOP */ wined3d_cs_exec_nop, -@@ -2337,6 +2365,7 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void +@@ -2340,6 +2368,7 @@ static UINT (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void /* WINED3D_CS_OP_EVICT_RESOURCE */ wined3d_cs_exec_evict_resource, /* WINED3D_CS_OP_VIEW_DESTROY */ wined3d_cs_exec_view_destroy, /* WINED3D_CS_OP_VDECL_DESTROY */ wined3d_cs_exec_vertex_declaration_destroy, @@ -71,19 +71,19 @@ index 38063d7..21d5b74 100644 static inline void *_wined3d_cs_mt_require_space(struct wined3d_cs *cs, size_t size, BOOL prio) diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c -index 0faabaa..8c9be69 100644 +index 3323d12..1e9ff05 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c -@@ -1702,7 +1702,7 @@ static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe +@@ -1812,7 +1812,7 @@ static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe } } -static void shader_cleanup(struct wined3d_shader *shader) +void shader_cleanup(struct wined3d_shader *shader) { + HeapFree(GetProcessHeap(), 0, shader->output_signature.elements); HeapFree(GetProcessHeap(), 0, shader->signature_strings); - shader->device->shader_backend->shader_destroy(shader); -@@ -1957,14 +1957,10 @@ ULONG CDECL wined3d_shader_decref(struct wined3d_shader *shader) +@@ -2067,14 +2067,10 @@ ULONG CDECL wined3d_shader_decref(struct wined3d_shader *shader) if (!refcount) { @@ -102,10 +102,10 @@ index 0faabaa..8c9be69 100644 return refcount; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h -index 5d3393c..86ee114 100644 +index 2df44a9..340ed08 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h -@@ -2704,6 +2704,7 @@ void wined3d_cs_emit_buffer_preload(struct wined3d_cs *cs, struct wined3d_buffer +@@ -2728,6 +2728,7 @@ void wined3d_cs_emit_buffer_preload(struct wined3d_cs *cs, struct wined3d_buffer void wined3d_cs_emit_view_destroy(struct wined3d_cs *cs, struct wined3d_rendertarget_view *view) DECLSPEC_HIDDEN; void wined3d_cs_emit_vertex_declaration_destroy(struct wined3d_cs *cs, struct wined3d_vertex_declaration *declaration) DECLSPEC_HIDDEN; @@ -113,7 +113,7 @@ index 5d3393c..86ee114 100644 /* Direct3D terminology with little modifications. We do not have an issued state * because only the driver knows about it, but we have a created state because d3d -@@ -3103,6 +3104,7 @@ unsigned int shader_find_free_input_register(const struct wined3d_shader_reg_map +@@ -3120,6 +3121,7 @@ unsigned int shader_find_free_input_register(const struct wined3d_shader_reg_map void shader_generate_main(const struct wined3d_shader *shader, struct wined3d_shader_buffer *buffer, const struct wined3d_shader_reg_maps *reg_maps, const DWORD *byte_code, void *backend_ctx) DECLSPEC_HIDDEN; BOOL shader_match_semantic(const char *semantic_name, enum wined3d_decl_usage usage) DECLSPEC_HIDDEN; @@ -122,5 +122,5 @@ index 5d3393c..86ee114 100644 static inline BOOL shader_is_scalar(const struct wined3d_shader_register *reg) { -- -2.1.3 +2.3.3 diff --git a/patches/wined3d-CSMT_Main/9999-IfDefined.patch b/patches/wined3d-CSMT_Main/9999-IfDefined.patch index b266d76a..bd23a19f 100644 --- a/patches/wined3d-CSMT_Main/9999-IfDefined.patch +++ b/patches/wined3d-CSMT_Main/9999-IfDefined.patch @@ -406,19 +406,7 @@ diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c float scale; union -@@ -4084,7 +4115,11 @@ - double y_offset = context->render_offscreen - ? ((63.0 / 64.0) - (2.0 * y) - h) / h - : ((63.0 / 64.0) - (2.0 * y) - h) / -h; -+#if defined(STAGING_CSMT) - enum wined3d_depth_buffer_type zenable = state->fb.depth_stencil ? -+#else /* STAGING_CSMT */ -+ enum wined3d_depth_buffer_type zenable = state->fb->depth_stencil ? -+#endif /* STAGING_CSMT */ - state->render_states[WINED3D_RS_ZENABLE] : WINED3D_ZB_FALSE; - double z_scale = zenable ? 2.0f : 0.0f; - double z_offset = zenable ? -1.0f : 0.0f; -@@ -4408,9 +4443,15 @@ +@@ -4328,9 +4359,15 @@ } } } else { @@ -434,7 +422,7 @@ diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c WARN("unsupported blending in openGl\n"); } } -@@ -4762,7 +4803,11 @@ +@@ -4682,7 +4719,11 @@ static void viewport_miscpart(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -446,7 +434,7 @@ diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c const struct wined3d_gl_info *gl_info = context->gl_info; struct wined3d_viewport vp = state->viewport; -@@ -4940,7 +4985,11 @@ +@@ -4860,7 +4901,11 @@ } else { @@ -458,7 +446,7 @@ diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c UINT height; UINT width; -@@ -5004,7 +5053,11 @@ +@@ -4924,7 +4969,11 @@ void state_srgbwrite(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -1104,7 +1092,19 @@ diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c -@@ -3232,6 +3232,7 @@ +@@ -3169,7 +3169,11 @@ + float y_offset = (float)(context->render_offscreen + ? (63.0 / 64.0 - (2.0 * y) - h) / h + : (63.0 / 64.0 - (2.0 * y) - h) / -h); ++#if defined(STAGING_CSMT) + enum wined3d_depth_buffer_type zenable = state->fb.depth_stencil ? ++#else /* STAGING_CSMT */ ++ enum wined3d_depth_buffer_type zenable = state->fb->depth_stencil ? ++#endif /* STAGING_CSMT */ + state->render_states[WINED3D_RS_ZENABLE] : WINED3D_ZB_FALSE; + float z_scale = zenable ? 2.0f : 0.0f; + float z_offset = zenable ? -1.0f : 0.0f; +@@ -3292,6 +3296,7 @@ /* case WINED3D_TTFF_COUNT1: Won't ever get here. */ case WINED3D_TTFF_COUNT2: mat._13 = mat._23 = mat._33 = mat._43 = 0.0f; @@ -1112,7 +1112,7 @@ diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c /* OpenGL divides the first 3 vertex coord by the 4th by default, * which is essentially the same as D3DTTFF_PROJECTED. Make sure that * the 4th coord evaluates to 1.0 to eliminate that. -@@ -3244,6 +3245,20 @@ +@@ -3304,6 +3309,20 @@ * A more serious problem occurs if the app passes 4 coordinates in, and the * 4th is != 1.0(opengl default). This would have to be fixed in draw_strided_slow * or a replacement shader. */ @@ -1133,7 +1133,7 @@ diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c default: mat._14 = mat._24 = mat._34 = 0.0f; mat._44 = 1.0f; } -@@ -3508,7 +3523,11 @@ +@@ -3599,7 +3618,11 @@ unsigned int i; DWORD ttff; DWORD cop, aop, carg0, carg1, carg2, aarg0, aarg1, aarg2; @@ -1192,7 +1192,7 @@ diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader /* Load DirectX 9 float constants for pixel shader */ priv->highest_dirty_ps_const = shader_arb_load_constantsF(pshader, gl_info, GL_FRAGMENT_PROGRAM_ARB, -@@ -4674,7 +4678,11 @@ +@@ -4711,7 +4715,11 @@ } else { @@ -1204,7 +1204,7 @@ diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader shader_arb_ps_local_constants(compiled, context, state, rt_height); } -@@ -7654,7 +7662,11 @@ +@@ -7692,7 +7700,11 @@ /* Now load the surface */ if (wined3d_settings.offscreen_rendering_mode != ORM_FBO @@ -1216,7 +1216,7 @@ diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader == WINED3D_LOCATION_DRAWABLE && !wined3d_resource_is_offscreen(&src_surface->container->resource)) { -@@ -7684,6 +7696,7 @@ +@@ -7722,6 +7734,7 @@ /* Leave the opengl state valid for blitting */ arbfp_blit_unset(context->gl_info); @@ -1224,7 +1224,7 @@ diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader if (wined3d_settings.cs_multithreaded) context->gl_info->gl_ops.gl.p_glFinish(); else if (wined3d_settings.strict_draw_ordering -@@ -7695,6 +7708,17 @@ +@@ -7733,6 +7746,17 @@ wined3d_resource_validate_location(&dst_surface->resource, dst_surface->container->resource.draw_binding); wined3d_resource_invalidate_location(&dst_surface->resource, ~dst_surface->container->resource.draw_binding); @@ -1493,7 +1493,7 @@ diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c if (rt_mask != *cur_mask) { context_apply_draw_buffers(context, rt_mask); -@@ -2897,7 +2973,11 @@ +@@ -2901,7 +2977,11 @@ { if (state->vertex_declaration->half_float_conv_needed && !stream_info->all_vbo) { @@ -1505,7 +1505,7 @@ diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c context->use_immediate_mode_draw = TRUE; } else -@@ -3037,11 +3117,19 @@ +@@ -3041,11 +3121,19 @@ } /* Context activation is done by the caller. */ @@ -1525,7 +1525,7 @@ diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c unsigned int i, j; WORD map; -@@ -3073,12 +3161,17 @@ +@@ -3077,12 +3165,17 @@ for (i = 0, map = context->stream_info.use_map; map; map >>= 1, ++i) { if (map & 1) @@ -1543,7 +1543,7 @@ diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c } if (state->index_buffer) { -@@ -3181,7 +3274,11 @@ +@@ -3185,7 +3278,11 @@ if (texture->texture_srgb.name) wined3d_texture_load(texture, context, TRUE); wined3d_texture_load(texture, context, FALSE); @@ -2283,7 +2283,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h /***************************************************************************** * Utility function prototypes -@@ -3157,7 +3383,9 @@ +@@ -3152,7 +3378,9 @@ void shader_generate_main(const struct wined3d_shader *shader, struct wined3d_shader_buffer *buffer, const struct wined3d_shader_reg_maps *reg_maps, const DWORD *byte_code, void *backend_ctx) DECLSPEC_HIDDEN; BOOL shader_match_semantic(const char *semantic_name, enum wined3d_decl_usage usage) DECLSPEC_HIDDEN; @@ -8986,7 +8986,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c -@@ -1763,7 +1763,11 @@ +@@ -1812,7 +1812,11 @@ } } @@ -8996,9 +8996,9 @@ diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c +static void shader_cleanup(struct wined3d_shader *shader) +#endif /* STAGING_CSMT */ { + HeapFree(GetProcessHeap(), 0, shader->output_signature.elements); HeapFree(GetProcessHeap(), 0, shader->signature_strings); - shader->device->shader_backend->shader_destroy(shader); -@@ -2018,10 +2022,16 @@ +@@ -2067,10 +2071,16 @@ if (!refcount) { @@ -9015,7 +9015,7 @@ diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c } return refcount; -@@ -2246,7 +2256,11 @@ +@@ -2345,7 +2355,11 @@ memset(args, 0, sizeof(*args)); /* FIXME: Make sure all bits are set. */ if (!gl_info->supported[ARB_FRAMEBUFFER_SRGB] && state->render_states[WINED3D_RS_SRGBWRITEENABLE]) {