From 55ab42ece05c52538315e026c9bf7dbd944c3107 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 2 Apr 2017 05:09:40 +0200 Subject: [PATCH] Rebase against 5b4f8a385b46a8a8a8b09b8ca6578aa7b7995a1e. --- ...-dll-and-add-stub-for-QuirkIsEnabled.patch | 14 +- ...dummy-skininfo-interface-in-D3DXLoad.patch | 16 +-- ...nt-ID3DXEffect_FindNextValidTechniqu.patch | 14 +- ...SEQPACKET-socket-in-combination-with.patch | 63 ++++----- ...rrect-error-codes-for-NtWriteFile-wh.patch | 40 +++--- ...low-to-queue-async-operation-for-bro.patch | 89 +++---------- ...for-Concurrency-details-_CurrentSche.patch | 18 +-- ...ss-virtual-memory-counters-in-NtQuer.patch | 36 ++---- patches/patchinstall.sh | 8 +- ...eference-to-the-parent-object-for-pi.patch | 44 +++---- .../wined3d-CSMT_Main/9999-IfDefined.patch | 120 +++++++++--------- staging/VERSION | 2 +- 12 files changed, 194 insertions(+), 270 deletions(-) diff --git a/patches/api-ms-win-Stub_DLLs/0001-kernelbase-Add-dll-and-add-stub-for-QuirkIsEnabled.patch b/patches/api-ms-win-Stub_DLLs/0001-kernelbase-Add-dll-and-add-stub-for-QuirkIsEnabled.patch index a0370a3d..d01e6a7d 100644 --- a/patches/api-ms-win-Stub_DLLs/0001-kernelbase-Add-dll-and-add-stub-for-QuirkIsEnabled.patch +++ b/patches/api-ms-win-Stub_DLLs/0001-kernelbase-Add-dll-and-add-stub-for-QuirkIsEnabled.patch @@ -1,4 +1,4 @@ -From 77c8c1ec52dac0b2ad058a3c52de93422bf91ee6 Mon Sep 17 00:00:00 2001 +From 16ca16e67d52e1713bc8d5a661a9213fe0ac4913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Fri, 15 Jan 2016 13:01:15 +0100 Subject: kernelbase: Add dll and add stub for QuirkIsEnabled. @@ -13,7 +13,7 @@ Subject: kernelbase: Add dll and add stub for QuirkIsEnabled. create mode 100644 dlls/kernelbase/misc.c diff --git a/dlls/kernelbase/Makefile.in b/dlls/kernelbase/Makefile.in -index b9caed090b2..2beb34bafdb 100644 +index b9caed090b..2beb34bafd 100644 --- a/dlls/kernelbase/Makefile.in +++ b/dlls/kernelbase/Makefile.in @@ -1 +1,4 @@ @@ -22,7 +22,7 @@ index b9caed090b2..2beb34bafdb 100644 +C_SRCS = \ + misc.c diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec -index f104030ab25..14d2578262f 100644 +index 23abff8395..5969927269 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -1,3 +1,6 @@ @@ -740,7 +740,7 @@ index f104030ab25..14d2578262f 100644 @ stdcall GetVersionExA(ptr) kernel32.GetVersionExA @ stdcall GetVersionExW(ptr) kernel32.GetVersionExW +@ stdcall GetVolumeInformationA(str ptr long ptr ptr ptr ptr long) kernel32.GetVolumeInformationA - @ stub GetVolumeInformationByHandleW + @ stdcall GetVolumeInformationByHandleW(ptr ptr long ptr ptr ptr ptr long) kernel32.GetVolumeInformationByHandleW @ stdcall GetVolumeInformationW(wstr ptr long ptr ptr ptr ptr long) kernel32.GetVolumeInformationW +@ stdcall GetVolumeNameForVolumeMountPointW(wstr ptr long) kernel32.GetVolumeNameForVolumeMountPointW @ stdcall GetVolumePathNameW(wstr ptr long) kernel32.GetVolumePathNameW @@ -1715,7 +1715,7 @@ index f104030ab25..14d2578262f 100644 +@ stub wprintf diff --git a/dlls/kernelbase/misc.c b/dlls/kernelbase/misc.c new file mode 100644 -index 00000000000..be1591aee7e +index 0000000000..be1591aee7 --- /dev/null +++ b/dlls/kernelbase/misc.c @@ -0,0 +1,37 @@ @@ -1757,7 +1757,7 @@ index 00000000000..be1591aee7e + return FALSE; +} diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec -index 6b6ead26968..7c2a9d117e0 100644 +index 6b6ead2696..7c2a9d117e 100644 --- a/dlls/shlwapi/shlwapi.spec +++ b/dlls/shlwapi/shlwapi.spec @@ -417,7 +417,7 @@ @@ -1770,7 +1770,7 @@ index 6b6ead26968..7c2a9d117e0 100644 422 stdcall -noname SHGlobalCounterCreateNamedA(str long) 423 stdcall -noname SHGlobalCounterCreateNamedW(wstr long) diff --git a/tools/make_specfiles b/tools/make_specfiles -index 1e2400e4c7f..a245aefe406 100755 +index 404af769d2..5de2d5cec9 100755 --- a/tools/make_specfiles +++ b/tools/make_specfiles @@ -249,6 +249,7 @@ my @dll_groups = diff --git a/patches/d3dx9_36-Dummy_Skininfo/0001-d3dx9_36-Return-dummy-skininfo-interface-in-D3DXLoad.patch b/patches/d3dx9_36-Dummy_Skininfo/0001-d3dx9_36-Return-dummy-skininfo-interface-in-D3DXLoad.patch index 6b5ccfde..e8f230b0 100644 --- a/patches/d3dx9_36-Dummy_Skininfo/0001-d3dx9_36-Return-dummy-skininfo-interface-in-D3DXLoad.patch +++ b/patches/d3dx9_36-Dummy_Skininfo/0001-d3dx9_36-Return-dummy-skininfo-interface-in-D3DXLoad.patch @@ -1,4 +1,4 @@ -From b02ee3d1c5dc1fd3040f81d87d3b17f5148fe2c5 Mon Sep 17 00:00:00 2001 +From 4ce7612fe0c6fd65f89403c8703e5395fbb4a85d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Tue, 28 Jul 2015 17:26:09 +0200 Subject: d3dx9_36: Return dummy skininfo interface in D3DXLoadSkinMeshFromXof @@ -11,18 +11,18 @@ Subject: d3dx9_36: Return dummy skininfo interface in D3DXLoadSkinMeshFromXof 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h -index a0e62f1..e9f7187 100644 +index abb3114e89..4c6d642b7e 100644 --- a/dlls/d3dx9_36/d3dx9_private.h +++ b/dlls/d3dx9_36/d3dx9_private.h -@@ -198,4 +198,6 @@ HRESULT d3dx_evaluate_parameter(struct d3dx_param_eval *peval, - HRESULT d3dx_param_eval_set_shader_constants(struct IDirect3DDevice9 *device, - struct d3dx_param_eval *peval) DECLSPEC_HIDDEN; +@@ -241,4 +241,6 @@ HRESULT d3dx_param_eval_set_shader_constants(struct IDirect3DDevice9 *device, + struct d3dx_param_eval *peval, BOOL update_all) DECLSPEC_HIDDEN; + BOOL is_param_eval_input_dirty(struct d3dx_param_eval *peval) DECLSPEC_HIDDEN; +HRESULT create_dummy_skin(ID3DXSkinInfo **iface) DECLSPEC_HIDDEN; + #endif /* __WINE_D3DX9_PRIVATE_H */ diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c -index 3204ea7..61dd203 100644 +index c26aa7271f..b70f4dcaa4 100644 --- a/dlls/d3dx9_36/mesh.c +++ b/dlls/d3dx9_36/mesh.c @@ -3332,6 +3332,13 @@ static HRESULT parse_mesh(ID3DXFileData *filedata, struct mesh_data *mesh_data, @@ -40,7 +40,7 @@ index 3204ea7..61dd203 100644 end: diff --git a/dlls/d3dx9_36/skin.c b/dlls/d3dx9_36/skin.c -index f197d33..bed4b9f 100644 +index f197d33582..bed4b9f49d 100644 --- a/dlls/d3dx9_36/skin.c +++ b/dlls/d3dx9_36/skin.c @@ -94,7 +94,7 @@ static ULONG WINAPI d3dx9_skin_info_Release(ID3DXSkinInfo *iface) @@ -77,5 +77,5 @@ index f197d33..bed4b9f 100644 + return D3D_OK; +} -- -2.7.1 +2.11.0 diff --git a/patches/d3dx9_36-FindNextValidTechnique/0001-d3dx9_36-Implement-ID3DXEffect_FindNextValidTechniqu.patch b/patches/d3dx9_36-FindNextValidTechnique/0001-d3dx9_36-Implement-ID3DXEffect_FindNextValidTechniqu.patch index 8a57ca15..05daedad 100644 --- a/patches/d3dx9_36-FindNextValidTechnique/0001-d3dx9_36-Implement-ID3DXEffect_FindNextValidTechniqu.patch +++ b/patches/d3dx9_36-FindNextValidTechnique/0001-d3dx9_36-Implement-ID3DXEffect_FindNextValidTechniqu.patch @@ -1,4 +1,4 @@ -From caafb5926a24065e96350fc255ea92c0863c2730 Mon Sep 17 00:00:00 2001 +From 9b4d4c9b2097f3134cc276dedfe8804475dcdfa6 Mon Sep 17 00:00:00 2001 From: Christian Costa Date: Fri, 19 Dec 2014 22:31:46 +0100 Subject: d3dx9_36: Implement ID3DXEffect_FindNextValidTechnique + add tests. @@ -9,10 +9,10 @@ Subject: d3dx9_36: Implement ID3DXEffect_FindNextValidTechnique + add tests. 2 files changed, 91 insertions(+), 3 deletions(-) diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c -index 42f5aea966b..7c1d1787bf1 100644 +index 76580417e9..fd9c4bd1aa 100644 --- a/dlls/d3dx9_36/effect.c +++ b/dlls/d3dx9_36/effect.c -@@ -3538,13 +3538,41 @@ static HRESULT WINAPI ID3DXEffectImpl_ValidateTechnique(ID3DXEffect* iface, D3DX +@@ -3631,13 +3631,41 @@ static HRESULT WINAPI ID3DXEffectImpl_ValidateTechnique(ID3DXEffect* iface, D3DX return D3D_OK; } @@ -58,10 +58,10 @@ index 42f5aea966b..7c1d1787bf1 100644 static BOOL walk_parameter_dep(struct d3dx_parameter *param, walk_parameter_dep_func param_func, diff --git a/dlls/d3dx9_36/tests/effect.c b/dlls/d3dx9_36/tests/effect.c -index 56d9fe627be..1b9bea6a55c 100644 +index 54f5377106..bcf4f68a57 100644 --- a/dlls/d3dx9_36/tests/effect.c +++ b/dlls/d3dx9_36/tests/effect.c -@@ -4413,6 +4413,65 @@ static void test_effect_out_of_bounds_selector(IDirect3DDevice9 *device) +@@ -4957,6 +4957,65 @@ static void test_effect_commitchanges(IDirect3DDevice9 *device) effect->lpVtbl->Release(effect); } @@ -127,10 +127,10 @@ index 56d9fe627be..1b9bea6a55c 100644 START_TEST(effect) { HWND wnd; -@@ -4457,6 +4516,7 @@ START_TEST(effect) - test_effect_preshader_ops(device); +@@ -5002,6 +5061,7 @@ START_TEST(effect) test_effect_isparameterused(device); test_effect_out_of_bounds_selector(device); + test_effect_commitchanges(device); + test_effect_technique_validation(device); count = IDirect3DDevice9_Release(device); diff --git a/patches/kernel32-Named_Pipe/0008-server-Use-SOCK_SEQPACKET-socket-in-combination-with.patch b/patches/kernel32-Named_Pipe/0008-server-Use-SOCK_SEQPACKET-socket-in-combination-with.patch index 447f0b27..4a4f4bcd 100644 --- a/patches/kernel32-Named_Pipe/0008-server-Use-SOCK_SEQPACKET-socket-in-combination-with.patch +++ b/patches/kernel32-Named_Pipe/0008-server-Use-SOCK_SEQPACKET-socket-in-combination-with.patch @@ -1,4 +1,4 @@ -From a6015c0c962802b44e1bf918e454745f1cc377b8 Mon Sep 17 00:00:00 2001 +From 104443cbb9a1087ec753af2462ccf41ba26eb444 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 4 Aug 2014 05:01:11 +0200 Subject: server: Use SOCK_SEQPACKET socket in combination with SO_PEEK_OFF to @@ -27,16 +27,16 @@ Changes in v6: * When running on an older kernel make sure that ntdll doesn't try to use message mode features. --- dlls/kernel32/sync.c | 2 +- - dlls/kernel32/tests/pipe.c | 17 ++----- - dlls/ntdll/file.c | 106 ++++++++++++++++++++++++++++++++++------ - server/named_pipe.c | 117 ++++++++++++++++++++++++++++++++++++--------- + dlls/kernel32/tests/pipe.c | 17 ++------ + dlls/ntdll/file.c | 106 ++++++++++++++++++++++++++++++++++++++------- + server/named_pipe.c | 103 ++++++++++++++++++++++++++++++++++++------- server/sock.c | 4 +- - server/sock.h | 26 ++++++++++ - 6 files changed, 219 insertions(+), 53 deletions(-) + server/sock.h | 26 +++++++++++ + 6 files changed, 212 insertions(+), 46 deletions(-) create mode 100644 server/sock.h diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c -index 494db9c1a31..38aaccfa55c 100644 +index 494db9c1a3..38aaccfa55 100644 --- a/dlls/kernel32/sync.c +++ b/dlls/kernel32/sync.c @@ -1475,7 +1475,7 @@ BOOL WINAPI PeekNamedPipe( HANDLE hPipe, LPVOID lpvBuffer, DWORD cbBuffer, @@ -49,7 +49,7 @@ index 494db9c1a31..38aaccfa55c 100644 } else SetLastError( RtlNtStatusToDosError(status) ); diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c -index e7cfce4c00e..71d75be90e8 100644 +index e7cfce4c00..71d75be90e 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -294,7 +294,6 @@ static void test_CreateNamedPipe(int pipemode) @@ -149,7 +149,7 @@ index e7cfce4c00e..71d75be90e8 100644 ret = RpcReadFile(hnp, ibuf + 8, sizeof(ibuf), &readden, NULL); ok(ret, "RpcReadFile 10\n"); diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index af582ecfdb0..42b81fb3fbb 100644 +index 41d44c9af4..1b0eff02f2 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -96,6 +96,10 @@ @@ -329,7 +329,7 @@ index af582ecfdb0..42b81fb3fbb 100644 if (needs_close) close( fd ); } diff --git a/server/named_pipe.c b/server/named_pipe.c -index c75a7379283..6c6a8b40bd1 100644 +index b215816650..74a9a44dcf 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c @@ -42,6 +42,10 @@ @@ -351,7 +351,7 @@ index c75a7379283..6c6a8b40bd1 100644 #include "handle.h" #include "thread.h" #include "request.h" -@@ -761,14 +766,43 @@ static int named_pipe_link_name( struct object *obj, struct object_name *name, s +@@ -804,14 +809,43 @@ static int named_pipe_link_name( struct object *obj, struct object_name *name, s return 1; } @@ -396,19 +396,26 @@ index c75a7379283..6c6a8b40bd1 100644 if (!(server = find_available_server( pipe ))) { -@@ -787,7 +821,10 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc +@@ -830,6 +864,9 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc - if ((client = create_pipe_client( options, pipe->flags ))) + if ((client = create_pipe_client( options, pipe->flags, pipe->outsize ))) { -- if (!socketpair( PF_UNIX, SOCK_STREAM, 0, fds )) + type = ((pipe->flags & NAMED_PIPE_MESSAGE_STREAM_WRITE) && is_messagemode_supported()) ? + SOCK_SEQPACKET : SOCK_STREAM; + -+ if (!socketpair( PF_UNIX, type, 0, fds )) + if (use_server_io( &server->pipe_end )) + { + client->pipe_end.fd = alloc_pseudo_fd( &pipe_client_fd_ops, &client->pipe_end.obj, options ); +@@ -845,7 +882,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc + client = NULL; + } + } +- else if (!socketpair( PF_UNIX, SOCK_STREAM, 0, fds )) ++ else if (!socketpair( PF_UNIX, type, 0, fds )) { assert( !server->pipe_end.fd ); -@@ -797,32 +834,55 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc +@@ -855,25 +892,48 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc if (is_overlapped( options )) fcntl( fds[1], F_SETFL, O_NONBLOCK ); if (is_overlapped( server->options )) fcntl( fds[0], F_SETFL, O_NONBLOCK ); @@ -445,14 +452,7 @@ index c75a7379283..6c6a8b40bd1 100644 + if (type != SOCK_SEQPACKET || (setsockopt( fds[0], SOL_SOCKET, SO_PEEK_OFF, &zero, sizeof(zero) ) != -1 && + setsockopt( fds[1], SOL_SOCKET, SO_PEEK_OFF, &zero, sizeof(zero) ) != -1)) { -- allow_fd_caching( client->pipe_end.fd ); -- allow_fd_caching( server->pipe_end.fd ); - fd_copy_completion( server->ioctl_fd, server->pipe_end.fd ); -- if (server->state == ps_wait_open) -- fd_async_wake_up( server->ioctl_fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS ); -- set_server_state( server, ps_connected_server ); -- server->client = client; -- client->server = server; + #ifdef __linux__ + fcntl( fds[0], F_SETSIG, messagemode_flags( server->pipe_end.flags ) ); + fcntl( fds[1], F_SETSIG, messagemode_flags( client->pipe_end.flags ) ); @@ -462,14 +462,7 @@ index c75a7379283..6c6a8b40bd1 100644 + server->pipe_end.fd = create_anonymous_fd( &pipe_server_fd_ops, fds[0], &server->pipe_end.obj, server->options ); + if (client->pipe_end.fd && server->pipe_end.fd) + { -+ allow_fd_caching( client->pipe_end.fd ); -+ allow_fd_caching( server->pipe_end.fd ); + fd_copy_completion( server->ioctl_fd, server->pipe_end.fd ); -+ if (server->state == ps_wait_open) -+ fd_async_wake_up( server->ioctl_fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS ); -+ set_server_state( server, ps_connected_server ); -+ server->client = client; -+ client->server = server; + } + else + { @@ -483,7 +476,7 @@ index c75a7379283..6c6a8b40bd1 100644 release_object( client ); client = NULL; } -@@ -907,7 +967,7 @@ DECL_HANDLER(create_named_pipe) +@@ -970,7 +1030,7 @@ DECL_HANDLER(create_named_pipe) return; } @@ -492,7 +485,7 @@ index c75a7379283..6c6a8b40bd1 100644 if (!name.len) /* pipes need a root directory even without a name */ { -@@ -1010,6 +1070,9 @@ DECL_HANDLER(set_named_pipe_info) +@@ -1073,6 +1133,9 @@ DECL_HANDLER(set_named_pipe_info) { struct pipe_server *server; struct pipe_client *client = NULL; @@ -502,7 +495,7 @@ index c75a7379283..6c6a8b40bd1 100644 server = get_pipe_server_obj( current->process, req->handle, FILE_WRITE_ATTRIBUTES ); if (!server) -@@ -1036,10 +1099,20 @@ DECL_HANDLER(set_named_pipe_info) +@@ -1099,10 +1162,20 @@ DECL_HANDLER(set_named_pipe_info) else if (client) { client->pipe_end.flags = server->pipe->flags | req->flags; @@ -524,7 +517,7 @@ index c75a7379283..6c6a8b40bd1 100644 if (client) diff --git a/server/sock.c b/server/sock.c -index d6b4fb2fa5c..49b6d3d5758 100644 +index d6b4fb2fa5..49b6d3d575 100644 --- a/server/sock.c +++ b/server/sock.c @@ -61,6 +61,7 @@ @@ -554,7 +547,7 @@ index d6b4fb2fa5c..49b6d3d5758 100644 } diff --git a/server/sock.h b/server/sock.h new file mode 100644 -index 00000000000..21551b42b1c +index 0000000000..21551b42b1 --- /dev/null +++ b/server/sock.h @@ -0,0 +1,26 @@ diff --git a/patches/kernel32-Named_Pipe/0019-server-Return-correct-error-codes-for-NtWriteFile-wh.patch b/patches/kernel32-Named_Pipe/0019-server-Return-correct-error-codes-for-NtWriteFile-wh.patch index 8b359632..ab91a5da 100644 --- a/patches/kernel32-Named_Pipe/0019-server-Return-correct-error-codes-for-NtWriteFile-wh.patch +++ b/patches/kernel32-Named_Pipe/0019-server-Return-correct-error-codes-for-NtWriteFile-wh.patch @@ -1,4 +1,4 @@ -From 260d35bbb99549c5ebf8447f6f1bf0680f6e3943 Mon Sep 17 00:00:00 2001 +From 3f96971d0d54e5d32a57970c36cb55e3ad6ff7c8 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 6 Jun 2015 01:21:05 +0200 Subject: server: Return correct error codes for NtWriteFile when pipes are @@ -12,7 +12,7 @@ Subject: server: Return correct error codes for NtWriteFile when pipes are 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c -index ba365ed666e..23f1a5f5f55 100644 +index ba365ed666..23f1a5f5f5 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -1917,7 +1917,7 @@ static void test_CloseHandle(void) @@ -25,7 +25,7 @@ index ba365ed666e..23f1a5f5f55 100644 CloseHandle(hfile); diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c -index ab34d99d5b6..d0662d9ae59 100644 +index 899ebddabb..91316bd2c4 100644 --- a/dlls/ntdll/file.c +++ b/dlls/ntdll/file.c @@ -1235,6 +1235,9 @@ static NTSTATUS write_unix_fd(int fd, const char *buf, ULONG *total, ULONG lengt @@ -39,10 +39,19 @@ index ab34d99d5b6..d0662d9ae59 100644 } } diff --git a/server/named_pipe.c b/server/named_pipe.c -index 6c6a8b40bd1..47a88790fa3 100644 +index 74a9a44dcf..9a8d8b37ca 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c -@@ -150,6 +150,7 @@ static const struct object_ops named_pipe_ops = +@@ -119,6 +119,8 @@ struct named_pipe_device + struct namespace *pipes; /* named pipe namespace */ + }; + ++static inline int messagemode_flags( int flags ); ++ + static void named_pipe_dump( struct object *obj, int verbose ); + static unsigned int named_pipe_map_access( struct object *obj, unsigned int access ); + static int named_pipe_link_name( struct object *obj, struct object_name *name, struct object *parent ); +@@ -155,6 +157,7 @@ static void pipe_end_queue_async( struct fd *fd, struct async *async, int type, /* server end functions */ static void pipe_server_dump( struct object *obj, int verbose ); static struct fd *pipe_server_get_fd( struct object *obj ); @@ -50,7 +59,7 @@ index 6c6a8b40bd1..47a88790fa3 100644 static void pipe_server_destroy( struct object *obj); static obj_handle_t pipe_server_flush( struct fd *fd, struct async *async, int blocking ); static enum server_fd_type pipe_server_get_fd_type( struct fd *fd ); -@@ -175,7 +176,7 @@ static const struct object_ops pipe_server_ops = +@@ -180,7 +183,7 @@ static const struct object_ops pipe_server_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_alloc_handle, /* alloc_handle */ @@ -59,7 +68,7 @@ index 6c6a8b40bd1..47a88790fa3 100644 pipe_server_destroy /* destroy */ }; -@@ -196,6 +197,7 @@ static const struct fd_ops pipe_server_fd_ops = +@@ -201,6 +204,7 @@ static const struct fd_ops pipe_server_fd_ops = static void pipe_client_dump( struct object *obj, int verbose ); static int pipe_client_signaled( struct object *obj, struct wait_queue_entry *entry ); static struct fd *pipe_client_get_fd( struct object *obj ); @@ -67,7 +76,7 @@ index 6c6a8b40bd1..47a88790fa3 100644 static void pipe_client_destroy( struct object *obj ); static obj_handle_t pipe_client_flush( struct fd *fd, struct async *async, int blocking ); static enum server_fd_type pipe_client_get_fd_type( struct fd *fd ); -@@ -219,7 +221,7 @@ static const struct object_ops pipe_client_ops = +@@ -224,7 +228,7 @@ static const struct object_ops pipe_client_ops = NULL, /* unlink_name */ no_open_file, /* open_file */ no_alloc_handle, /* alloc_handle */ @@ -76,16 +85,7 @@ index 6c6a8b40bd1..47a88790fa3 100644 pipe_client_destroy /* destroy */ }; -@@ -284,6 +286,8 @@ static const struct fd_ops named_pipe_device_fd_ops = - default_fd_reselect_async /* reselect_async */ - }; - -+static inline int messagemode_flags( int flags ); -+ - static void named_pipe_dump( struct object *obj, int verbose ) - { - fputs( "Named pipe\n", stderr ); -@@ -393,6 +397,23 @@ static void do_disconnect( struct pipe_server *server ) +@@ -418,6 +422,23 @@ static void do_disconnect( struct pipe_server *server ) server->pipe_end.fd = NULL; } @@ -109,7 +109,7 @@ index 6c6a8b40bd1..47a88790fa3 100644 static void pipe_server_destroy( struct object *obj) { struct pipe_server *server = (struct pipe_server *)obj; -@@ -419,6 +440,24 @@ static void pipe_server_destroy( struct object *obj) +@@ -446,6 +467,24 @@ static void pipe_server_destroy( struct object *obj) release_object( server->pipe ); } @@ -135,7 +135,7 @@ index 6c6a8b40bd1..47a88790fa3 100644 { struct pipe_client *client = (struct pipe_client *)obj; diff --git a/server/protocol.def b/server/protocol.def -index e7a55d7a2d8..f1e7af1d568 100644 +index e7a55d7a2d..f1e7af1d56 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -2427,6 +2427,7 @@ enum message_type diff --git a/patches/kernel32-Named_Pipe/0021-server-Do-not-allow-to-queue-async-operation-for-bro.patch b/patches/kernel32-Named_Pipe/0021-server-Do-not-allow-to-queue-async-operation-for-bro.patch index b6efbcee..76a32c72 100644 --- a/patches/kernel32-Named_Pipe/0021-server-Do-not-allow-to-queue-async-operation-for-bro.patch +++ b/patches/kernel32-Named_Pipe/0021-server-Do-not-allow-to-queue-async-operation-for-bro.patch @@ -1,92 +1,39 @@ -From 7fce25b8259f816e1cc8c2c40b6a73379f2fb4ef Mon Sep 17 00:00:00 2001 +From a5a9edf432ca2aecef11db6bde388730cc9eadf8 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Wed, 24 Feb 2016 15:45:09 +0100 Subject: server: Do not allow to queue async operation for broken pipes. --- - server/named_pipe.c | 34 ++++++++++++++++++++++++++++++++-- - 1 file changed, 32 insertions(+), 2 deletions(-) + server/named_pipe.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/server/named_pipe.c b/server/named_pipe.c -index 47a88790fa3..e5c5c4968c4 100644 +index 9a8d8b37ca..df9f5c4926 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c -@@ -156,6 +156,7 @@ static obj_handle_t pipe_server_flush( struct fd *fd, struct async *async, int b - static enum server_fd_type pipe_server_get_fd_type( struct fd *fd ); - static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, struct async *async, - int blocking ); -+static void pipe_server_queue_async( struct fd *fd, struct async *async, int type, int count ); - - static const struct object_ops pipe_server_ops = +@@ -665,8 +665,20 @@ static obj_handle_t pipe_client_flush( struct fd *fd, struct async *async, int b + static void pipe_end_queue_async( struct fd *fd, struct async *async, int type, int count ) { -@@ -189,7 +190,7 @@ static const struct fd_ops pipe_server_fd_ops = - no_fd_write, /* write */ - pipe_server_flush, /* flush */ - pipe_server_ioctl, /* ioctl */ -- default_fd_queue_async, /* queue_async */ -+ pipe_server_queue_async, /* queue_async */ - default_fd_reselect_async /* reselect_async */ - }; - -@@ -201,6 +202,7 @@ static int pipe_client_close_handle( struct object *obj, struct process *process - static void pipe_client_destroy( struct object *obj ); - static obj_handle_t pipe_client_flush( struct fd *fd, struct async *async, int blocking ); - static enum server_fd_type pipe_client_get_fd_type( struct fd *fd ); -+static void pipe_client_queue_async( struct fd *fd, struct async *async, int type, int count ); - - static const struct object_ops pipe_client_ops = - { -@@ -234,7 +236,7 @@ static const struct fd_ops pipe_client_fd_ops = - no_fd_write, /* write */ - pipe_client_flush, /* flush */ - default_fd_ioctl, /* ioctl */ -- default_fd_queue_async, /* queue_async */ -+ pipe_client_queue_async, /* queue_async */ - default_fd_reselect_async /* reselect_async */ - }; - -@@ -630,6 +632,20 @@ static obj_handle_t pipe_client_flush( struct fd *fd, struct async *async, int b - return 0; - } - -+static void pipe_client_queue_async( struct fd *fd, struct async *async, int type, int count ) -+{ -+ struct pipe_client *client = get_fd_user( fd ); -+ struct pipe_server *server = client->server; + struct pipe_end *pipe_end = get_fd_user( fd ); +- if (use_server_io( pipe_end )) no_fd_queue_async( fd, async, type, count ); +- else default_fd_queue_async( fd, async, type, count ); + -+ if (!server || !server->pipe_end.fd) ++ if (use_server_io( pipe_end )) ++ { ++ no_fd_queue_async( fd, async, type, count ); ++ return; ++ } ++ ++ if (!pipe_end->connection) + { + set_error( STATUS_PIPE_BROKEN ); + return; + } + + default_fd_queue_async( fd, async, type, count ); -+} -+ + } + static inline int is_overlapped( unsigned int options ) - { - return !(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT)); -@@ -714,6 +730,20 @@ static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, struct - } - } - -+static void pipe_server_queue_async( struct fd *fd, struct async *async, int type, int count ) -+{ -+ struct pipe_server *server = get_fd_user( fd ); -+ struct pipe_client *client = server->client; -+ -+ if (!client || !client->pipe_end.fd) -+ { -+ set_error( STATUS_PIPE_BROKEN ); -+ return; -+ } -+ -+ default_fd_queue_async( fd, async, type, count ); -+} -+ - static struct pipe_server *get_pipe_server_obj( struct process *process, - obj_handle_t handle, unsigned int access ) - { -- 2.11.0 diff --git a/patches/msvcrt-CurrentScheduler_Id/0001-msvcrt-Add-stub-for-Concurrency-details-_CurrentSche.patch b/patches/msvcrt-CurrentScheduler_Id/0001-msvcrt-Add-stub-for-Concurrency-details-_CurrentSche.patch index 34aacca9..1523c820 100644 --- a/patches/msvcrt-CurrentScheduler_Id/0001-msvcrt-Add-stub-for-Concurrency-details-_CurrentSche.patch +++ b/patches/msvcrt-CurrentScheduler_Id/0001-msvcrt-Add-stub-for-Concurrency-details-_CurrentSche.patch @@ -1,4 +1,4 @@ -From f2c001fb8a99d54ce8a18b3d2d734101b44d50c3 Mon Sep 17 00:00:00 2001 +From aa89e0ce07424652eb0176dacf32870e9c3193c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sun, 26 Feb 2017 22:11:09 +0100 Subject: msvcrt: Add stub for Concurrency::details::_CurrentScheduler::_Id. @@ -12,20 +12,20 @@ Subject: msvcrt: Add stub for Concurrency::details::_CurrentScheduler::_Id. 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/dlls/concrt140/concrt140.spec b/dlls/concrt140/concrt140.spec -index 4786768009f..af55e4df0ea 100644 +index 51ac8fee97..2971769d8c 100644 --- a/dlls/concrt140/concrt140.spec +++ b/dlls/concrt140/concrt140.spec @@ -346,7 +346,7 @@ - @ stub -arch=win64 ?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ + @ stub ?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ @ stub -arch=i386 ?_GetScheduler@_Scheduler@details@Concurrency@@QAEPAVScheduler@3@XZ @ stub -arch=win64 ?_GetScheduler@_Scheduler@details@Concurrency@@QEAAPEAVScheduler@3@XZ --@ stub -arch=win64 ?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ +-@ stub ?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ +@ cdecl ?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ() msvcr120.?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ @ stub -arch=i386 ?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z @ stub -arch=win64 ?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z @ stub -arch=i386 ?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IBEIXZ diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec -index da9b85e476a..3f92d0f7182 100644 +index 8aa390ee20..451bd265ac 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -540,7 +540,7 @@ @@ -38,7 +38,7 @@ index da9b85e476a..3f92d0f7182 100644 @ stub -arch=i386 ?_Invoke@_CancellationTokenRegistration@details@Concurrency@@AAEXXZ @ stub -arch=win64 ?_Invoke@_CancellationTokenRegistration@details@Concurrency@@AEAAXXZ diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec -index 8b02a63c25a..ecc687a2d97 100644 +index 7a3a83141c..510f0f0cfa 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -533,7 +533,7 @@ @@ -51,7 +51,7 @@ index 8b02a63c25a..ecc687a2d97 100644 @ stub -arch=i386 ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QAE_NXZ @ stub -arch=win64 ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QEAA_NXZ diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec -index d30ff5ea719..61282a50674 100644 +index 62926d469e..7b0f467667 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -529,7 +529,7 @@ @@ -64,10 +64,10 @@ index d30ff5ea719..61282a50674 100644 @ stub -arch=i386 ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QAE_NXZ @ stub -arch=win64 ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QEAA_NXZ diff --git a/dlls/msvcrt/lock.c b/dlls/msvcrt/lock.c -index f4c44170ddf..382d4938fcb 100644 +index edfefdbd98..8117713524 100644 --- a/dlls/msvcrt/lock.c +++ b/dlls/msvcrt/lock.c -@@ -714,6 +714,13 @@ void __thiscall _Condition_variable_notify_all(_Condition_variable *this) +@@ -933,6 +933,13 @@ void __thiscall _Condition_variable_notify_all(_Condition_variable *this) ptr = next; } } diff --git a/patches/ntdll-ThreadTime/0006-ntdll-Fill-process-virtual-memory-counters-in-NtQuer.patch b/patches/ntdll-ThreadTime/0006-ntdll-Fill-process-virtual-memory-counters-in-NtQuer.patch index 9ccaf833..757f6599 100644 --- a/patches/ntdll-ThreadTime/0006-ntdll-Fill-process-virtual-memory-counters-in-NtQuer.patch +++ b/patches/ntdll-ThreadTime/0006-ntdll-Fill-process-virtual-memory-counters-in-NtQuer.patch @@ -1,22 +1,22 @@ -From 16d6f502dc86d2356b476ef0449b38353e3abc73 Mon Sep 17 00:00:00 2001 +From 92de09926e79c3d91819e946519c19c2138eeeb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Thu, 9 Mar 2017 22:56:45 +0100 Subject: ntdll: Fill process virtual memory counters in NtQuerySystemInformation. +FIXME: fill_VM_COUNTERS now uses a different method ... which one is better? --- dlls/ntdll/nt.c | 3 +++ dlls/ntdll/ntdll_misc.h | 1 + dlls/ntdll/process.c | 2 +- - dlls/ntdll/tests/info.c | 5 +---- dlls/ntdll/thread.c | 36 ++++++++++++++++++++++++++++++++++++ - 5 files changed, 42 insertions(+), 5 deletions(-) + 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c -index 1dd890c4bd..a793b57221 100644 +index 8b84cd865b..86d13b88f1 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c -@@ -2077,8 +2077,11 @@ NTSTATUS WINAPI NtQuerySystemInformation( +@@ -1981,8 +1981,11 @@ NTSTATUS WINAPI NtQuerySystemInformation( /* spi->ti will be set later on */ if (reply->unix_pid != -1) @@ -29,20 +29,20 @@ index 1dd890c4bd..a793b57221 100644 } len += procstructlen; diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h -index 0ecc099133..d556a21ee6 100644 +index 443c86000d..6549a71fc0 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h -@@ -289,4 +289,5 @@ extern void CDECL NTDLL_wine_get_host_version( const char **sysname, const char +@@ -269,4 +269,5 @@ NTSTATUS WINAPI RtlHashUnicodeString(PCUNICODE_STRING,BOOLEAN,ULONG,ULONG*); /* process / thread time */ extern BOOL read_process_time(int unix_pid, int unix_tid, unsigned long clk_tck, LARGE_INTEGER *kernel, LARGE_INTEGER *user) DECLSPEC_HIDDEN; +extern BOOL read_process_memory_stats(int unix_pid, VM_COUNTERS *pvmi) DECLSPEC_HIDDEN; #endif diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c -index 39cd8be601..993d90290d 100644 +index 952225688c..691848fcd9 100644 --- a/dlls/ntdll/process.c +++ b/dlls/ntdll/process.c -@@ -135,7 +135,7 @@ static void fill_VM_COUNTERS(VM_COUNTERS* pvmi) +@@ -163,7 +163,7 @@ static void fill_VM_COUNTERS(VM_COUNTERS* pvmi) static void fill_VM_COUNTERS(VM_COUNTERS* pvmi) { @@ -51,24 +51,8 @@ index 39cd8be601..993d90290d 100644 } #endif -diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c -index c65a74bf5e..b9c44267a9 100644 ---- a/dlls/ntdll/tests/info.c -+++ b/dlls/ntdll/tests/info.c -@@ -1134,10 +1134,7 @@ static void test_query_process_vm(void) - - /* Check if we have some return values */ - trace("WorkingSetSize : %ld\n", pvi.WorkingSetSize); -- todo_wine -- { -- ok( pvi.WorkingSetSize > 0, "Expected a WorkingSetSize > 0\n"); -- } -+ ok( pvi.WorkingSetSize > 0, "Expected a WorkingSetSize > 0\n"); - } - - static void test_query_process_io(void) diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c -index 28ce2a1362..ccbc41d6ac 100644 +index 29b6513f38..6a56ebafd9 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -117,6 +117,42 @@ BOOL read_process_time(int unix_pid, int unix_tid, unsigned long clk_tck, diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index cf901c4c..91a62655 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -52,13 +52,13 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "6a05069a43f1a8f0e69c4cedd134f8d7400b8a95" + echo "5b4f8a385b46a8a8a8b09b8ca6578aa7b7995a1e" } # Show version information version() { - echo "Wine Staging 2.4" + echo "Wine Staging 2.5 (unreleased)" echo "Copyright (C) 2014-2017 the Wine Staging project authors." echo "" echo "Patchset to be applied on upstream Wine:" @@ -5460,8 +5460,8 @@ fi # | * [#20230] Return correct values for GetThreadTimes function # | # | Modified files: -# | * dlls/ntdll/nt.c, dlls/ntdll/ntdll_misc.h, dlls/ntdll/process.c, dlls/ntdll/tests/info.c, dlls/ntdll/thread.c, -# | server/protocol.def, server/snapshot.c, server/thread.c, server/thread.h +# | * dlls/ntdll/nt.c, dlls/ntdll/ntdll_misc.h, dlls/ntdll/process.c, dlls/ntdll/thread.c, server/protocol.def, +# | server/snapshot.c, server/thread.c, server/thread.h # | if test "$enable_ntdll_ThreadTime" -eq 1; then patch_apply ntdll-ThreadTime/0001-ntdll-Return-correct-values-in-GetThreadTimes-for-al.patch diff --git a/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch b/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch index 9d559bbd..75c3dcd0 100644 --- a/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch +++ b/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch @@ -1,4 +1,4 @@ -From 0cd60112c33592a78b573201b55bdcc0eb20e52e Mon Sep 17 00:00:00 2001 +From 1e74c7027e966201f44742df6736e9cdc1ad4ee8 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Mon, 17 Aug 2015 01:11:47 +0200 Subject: server: Store a reference to the parent object for pipe servers. (v2) @@ -11,7 +11,7 @@ Subject: server: Store a reference to the parent object for pipe servers. (v2) 4 files changed, 53 insertions(+), 19 deletions(-) diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c -index 43c5ee46d71..9a1ba670ab7 100644 +index 43c5ee46d7..9a1ba670ab 100644 --- a/dlls/ntdll/tests/om.c +++ b/dlls/ntdll/tests/om.c @@ -1487,14 +1487,11 @@ static void test_query_object(void) @@ -30,10 +30,10 @@ index 43c5ee46d71..9a1ba670ab7 100644 "name too short %s\n", wine_dbgstr_w(str->Buffer) ); trace( "got %s len %u\n", wine_dbgstr_w(str->Buffer), len ); diff --git a/server/named_pipe.c b/server/named_pipe.c -index e5c5c4968c4..bc4b6f08fde 100644 +index df9f5c4926..5adbb2058b 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c -@@ -150,6 +150,8 @@ static const struct object_ops named_pipe_ops = +@@ -157,6 +157,8 @@ static void pipe_end_queue_async( struct fd *fd, struct async *async, int type, /* server end functions */ static void pipe_server_dump( struct object *obj, int verbose ); static struct fd *pipe_server_get_fd( struct object *obj ); @@ -42,7 +42,7 @@ index e5c5c4968c4..bc4b6f08fde 100644 static int pipe_server_close_handle( struct object *obj, struct process *process, obj_handle_t handle ); static void pipe_server_destroy( struct object *obj); static obj_handle_t pipe_server_flush( struct fd *fd, struct async *async, int blocking ); -@@ -173,8 +175,8 @@ static const struct object_ops pipe_server_ops = +@@ -179,8 +181,8 @@ static const struct object_ops pipe_server_ops = default_get_sd, /* get_sd */ default_set_sd, /* set_sd */ no_lookup_name, /* lookup_name */ @@ -53,7 +53,7 @@ index e5c5c4968c4..bc4b6f08fde 100644 no_open_file, /* open_file */ no_alloc_handle, /* alloc_handle */ pipe_server_close_handle, /* close_handle */ -@@ -198,6 +200,8 @@ static const struct fd_ops pipe_server_fd_ops = +@@ -204,6 +206,8 @@ static const struct fd_ops pipe_server_fd_ops = static void pipe_client_dump( struct object *obj, int verbose ); static int pipe_client_signaled( struct object *obj, struct wait_queue_entry *entry ); static struct fd *pipe_client_get_fd( struct object *obj ); @@ -62,7 +62,7 @@ index e5c5c4968c4..bc4b6f08fde 100644 static int pipe_client_close_handle( struct object *obj, struct process *process, obj_handle_t handle ); static void pipe_client_destroy( struct object *obj ); static obj_handle_t pipe_client_flush( struct fd *fd, struct async *async, int blocking ); -@@ -219,8 +223,8 @@ static const struct object_ops pipe_client_ops = +@@ -224,8 +228,8 @@ static const struct object_ops pipe_client_ops = default_get_sd, /* get_sd */ default_set_sd, /* set_sd */ no_lookup_name, /* lookup_name */ @@ -73,7 +73,7 @@ index e5c5c4968c4..bc4b6f08fde 100644 no_open_file, /* open_file */ no_alloc_handle, /* alloc_handle */ pipe_client_close_handle, /* close_handle */ -@@ -399,6 +403,17 @@ static void do_disconnect( struct pipe_server *server ) +@@ -422,6 +426,17 @@ static void do_disconnect( struct pipe_server *server ) server->pipe_end.fd = NULL; } @@ -91,7 +91,7 @@ index e5c5c4968c4..bc4b6f08fde 100644 static int pipe_server_close_handle( struct object *obj, struct process *process, obj_handle_t handle ) { #ifdef __linux__ -@@ -442,6 +457,17 @@ static void pipe_server_destroy( struct object *obj) +@@ -467,6 +482,17 @@ static void pipe_server_destroy( struct object *obj) release_object( server->pipe ); } @@ -109,7 +109,7 @@ index e5c5c4968c4..bc4b6f08fde 100644 static int pipe_client_close_handle( struct object *obj, struct process *process, obj_handle_t handle ) { #ifdef __linux__ -@@ -761,9 +787,10 @@ static void init_pipe_end( struct pipe_end *pipe_end, unsigned int pipe_flags ) +@@ -786,9 +812,10 @@ static void init_pipe_end( struct pipe_end *pipe_end, unsigned int pipe_flags, d static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned int options, unsigned int pipe_flags ) { @@ -121,13 +121,13 @@ index e5c5c4968c4..bc4b6f08fde 100644 if (!server) return NULL; -@@ -785,11 +812,13 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned +@@ -810,11 +837,13 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned return server; } --static struct pipe_client *create_pipe_client( unsigned int flags, unsigned int pipe_flags ) +-static struct pipe_client *create_pipe_client( unsigned int flags, unsigned int pipe_flags, data_size_t buffer_size ) +static struct pipe_client *create_pipe_client( struct named_pipe *pipe, unsigned int flags, -+ unsigned int pipe_flags ) ++ unsigned int pipe_flags, data_size_t buffer_size ) { + static const struct unicode_str str = { NULL, 0 }; struct pipe_client *client; @@ -137,20 +137,20 @@ index e5c5c4968c4..bc4b6f08fde 100644 if (!client) return NULL; -@@ -888,7 +917,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc +@@ -913,7 +942,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc return NULL; } -- if ((client = create_pipe_client( options, pipe->flags ))) -+ if ((client = create_pipe_client( pipe, options, pipe->flags ))) +- if ((client = create_pipe_client( options, pipe->flags, pipe->outsize ))) ++ if ((client = create_pipe_client( pipe, options, pipe->flags, pipe->outsize ))) { type = ((pipe->flags & NAMED_PIPE_MESSAGE_STREAM_WRITE) && is_messagemode_supported()) ? SOCK_SEQPACKET : SOCK_STREAM; diff --git a/server/object.c b/server/object.c -index f5d7d9f02fd..0d067458a56 100644 +index 46f020e522..653687d5bf 100644 --- a/server/object.c +++ b/server/object.c -@@ -162,7 +162,7 @@ WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len ) +@@ -176,7 +176,7 @@ WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len ) while (ptr && ptr->name) { struct object_name *name = ptr->name; @@ -159,7 +159,7 @@ index f5d7d9f02fd..0d067458a56 100644 ptr = name->parent; } if (!len) return NULL; -@@ -172,9 +172,12 @@ WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len ) +@@ -186,9 +186,12 @@ WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len ) while (obj && obj->name) { struct object_name *name = obj->name; @@ -175,7 +175,7 @@ index f5d7d9f02fd..0d067458a56 100644 obj = name->parent; } return (WCHAR *)ret; -@@ -262,8 +265,8 @@ struct object *lookup_named_object( struct object *root, const struct unicode_st +@@ -276,8 +279,8 @@ struct object *lookup_named_object( struct object *root, const struct unicode_st return parent; } @@ -186,7 +186,7 @@ index f5d7d9f02fd..0d067458a56 100644 { struct object *obj; struct object_name *name_ptr; -@@ -358,8 +361,11 @@ static void dump_name( struct object *obj ) +@@ -372,8 +375,11 @@ static void dump_name( struct object *obj ) if (!name) return; if (name->parent) dump_name( name->parent ); @@ -201,7 +201,7 @@ index f5d7d9f02fd..0d067458a56 100644 /* dump the name of an object to stderr */ diff --git a/server/object.h b/server/object.h -index 72ad8528c5a..ddb4410525b 100644 +index 72ad8528c5..ddb4410525 100644 --- a/server/object.h +++ b/server/object.h @@ -135,6 +135,8 @@ extern WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len ); diff --git a/patches/wined3d-CSMT_Main/9999-IfDefined.patch b/patches/wined3d-CSMT_Main/9999-IfDefined.patch index 86ba4f5e..88ad0fa3 100644 --- a/patches/wined3d-CSMT_Main/9999-IfDefined.patch +++ b/patches/wined3d-CSMT_Main/9999-IfDefined.patch @@ -54,7 +54,7 @@ diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c -@@ -3766,6 +3766,11 @@ struct wined3d_context *context_acquire(const struct wined3d_device *device, +@@ -3758,6 +3758,11 @@ struct wined3d_context *context_acquire(const struct wined3d_device *device, TRACE("device %p, texture %p, sub_resource_idx %u.\n", device, texture, sub_resource_idx); @@ -2380,7 +2380,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 -@@ -1029,6 +1029,9 @@ static void wined3d_device_delete_opengl_contexts_cs(void *object) +@@ -1037,6 +1037,9 @@ static void wined3d_device_delete_opengl_contexts_cs(void *object) static void wined3d_device_delete_opengl_contexts(struct wined3d_device *device) { wined3d_cs_destroy_object(device->cs, wined3d_device_delete_opengl_contexts_cs, device); @@ -2390,7 +2390,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } static void wined3d_device_create_primary_opengl_context_cs(void *object) -@@ -1064,6 +1067,9 @@ static void wined3d_device_create_primary_opengl_context_cs(void *object) +@@ -1072,6 +1075,9 @@ static void wined3d_device_create_primary_opengl_context_cs(void *object) static HRESULT wined3d_device_create_primary_opengl_context(struct wined3d_device *device) { wined3d_cs_init_object(device->cs, wined3d_device_create_primary_opengl_context_cs, device); @@ -2400,7 +2400,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (!device->swapchains[0]->num_contexts) return E_FAIL; -@@ -1208,6 +1214,10 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device) +@@ -1216,6 +1222,10 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device) if (!device->d3d_initialized) return WINED3DERR_INVALIDCALL; @@ -2411,7 +2411,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (device->logo_texture) wined3d_texture_decref(device->logo_texture); if (device->cursor_texture) -@@ -1217,6 +1227,9 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device) +@@ -1225,6 +1235,9 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device) wine_rb_clear(&device->samplers, device_free_sampler, NULL); @@ -2421,7 +2421,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c wined3d_device_delete_opengl_contexts(device); if (device->fb.depth_stencil) -@@ -1306,7 +1319,11 @@ UINT CDECL wined3d_device_get_available_texture_mem(const struct wined3d_device +@@ -1314,7 +1327,11 @@ UINT CDECL wined3d_device_get_available_texture_mem(const struct wined3d_device /* We can not acquire the context unless there is a swapchain. */ if (device->swapchains && gl_info->supported[NVX_GPU_MEMORY_INFO] && @@ -2433,7 +2433,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c { GLint vram_free_kb; UINT64 vram_free; -@@ -2374,7 +2391,11 @@ HRESULT CDECL wined3d_device_set_vs_consts_b(struct wined3d_device *device, +@@ -2382,7 +2399,11 @@ HRESULT CDECL wined3d_device_set_vs_consts_b(struct wined3d_device *device, } else { @@ -2445,7 +2445,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } return WINED3D_OK; -@@ -2423,7 +2444,11 @@ HRESULT CDECL wined3d_device_set_vs_consts_i(struct wined3d_device *device, +@@ -2431,7 +2452,11 @@ HRESULT CDECL wined3d_device_set_vs_consts_i(struct wined3d_device *device, } else { @@ -2457,7 +2457,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } return WINED3D_OK; -@@ -2468,7 +2493,11 @@ HRESULT CDECL wined3d_device_set_vs_consts_f(struct wined3d_device *device, +@@ -2476,7 +2501,11 @@ HRESULT CDECL wined3d_device_set_vs_consts_f(struct wined3d_device *device, memset(&device->recording->changed.vs_consts_f[start_idx], 1, count * sizeof(*device->recording->changed.vs_consts_f)); else @@ -2469,7 +2469,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c return WINED3D_OK; } -@@ -2589,7 +2618,11 @@ HRESULT CDECL wined3d_device_set_ps_consts_b(struct wined3d_device *device, +@@ -2597,7 +2626,11 @@ HRESULT CDECL wined3d_device_set_ps_consts_b(struct wined3d_device *device, } else { @@ -2481,7 +2481,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } return WINED3D_OK; -@@ -2638,7 +2671,11 @@ HRESULT CDECL wined3d_device_set_ps_consts_i(struct wined3d_device *device, +@@ -2646,7 +2679,11 @@ HRESULT CDECL wined3d_device_set_ps_consts_i(struct wined3d_device *device, } else { @@ -2493,7 +2493,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } return WINED3D_OK; -@@ -2684,7 +2721,11 @@ HRESULT CDECL wined3d_device_set_ps_consts_f(struct wined3d_device *device, +@@ -2692,7 +2729,11 @@ HRESULT CDECL wined3d_device_set_ps_consts_f(struct wined3d_device *device, memset(&device->recording->changed.ps_consts_f[start_idx], 1, count * sizeof(*device->recording->changed.ps_consts_f)); else @@ -2505,7 +2505,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c return WINED3D_OK; } -@@ -3502,8 +3543,10 @@ HRESULT CDECL wined3d_device_begin_scene(struct wined3d_device *device) +@@ -3510,8 +3551,10 @@ HRESULT CDECL wined3d_device_begin_scene(struct wined3d_device *device) HRESULT CDECL wined3d_device_end_scene(struct wined3d_device *device) { @@ -2516,7 +2516,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("device %p.\n", device); if (!device->inScene) -@@ -3512,6 +3555,7 @@ HRESULT CDECL wined3d_device_end_scene(struct wined3d_device *device) +@@ -3520,6 +3563,7 @@ HRESULT CDECL wined3d_device_end_scene(struct wined3d_device *device) return WINED3DERR_INVALIDCALL; } @@ -2524,7 +2524,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c context = context_acquire(device, NULL, 0); /* We only have to do this if we need to read the, swapbuffers performs a flush for us */ context->gl_info->gl_ops.gl.p_glFlush(); -@@ -3519,6 +3563,7 @@ HRESULT CDECL wined3d_device_end_scene(struct wined3d_device *device) +@@ -3527,6 +3571,7 @@ HRESULT CDECL wined3d_device_end_scene(struct wined3d_device *device) * fails. */ context_release(context); @@ -2532,7 +2532,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c device->inScene = FALSE; return WINED3D_OK; } -@@ -3666,11 +3711,17 @@ void CDECL wined3d_device_draw_indexed_primitive_instanced(struct wined3d_device +@@ -3674,11 +3719,17 @@ void CDECL wined3d_device_draw_indexed_primitive_instanced(struct wined3d_device start_idx, index_count, start_instance, instance_count, TRUE); } @@ -2550,7 +2550,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c struct wined3d_context *context; struct wined3d_map_desc src; HRESULT hr = WINED3D_OK; -@@ -3694,6 +3745,13 @@ static HRESULT wined3d_device_update_texture_3d(struct wined3d_device *device, +@@ -3702,6 +3753,13 @@ static HRESULT wined3d_device_update_texture_3d(struct wined3d_device *device, } context = context_acquire(device, NULL, 0); @@ -2564,7 +2564,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c /* Only a prepare, since we're uploading entire volumes. */ wined3d_texture_prepare_texture(dst_texture, context, FALSE); -@@ -3701,15 +3759,22 @@ static HRESULT wined3d_device_update_texture_3d(struct wined3d_device *device, +@@ -3709,15 +3767,22 @@ static HRESULT wined3d_device_update_texture_3d(struct wined3d_device *device, for (i = 0; i < level_count; ++i) { @@ -2587,7 +2587,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c if (FAILED(hr = wined3d_resource_unmap(&src_texture->resource, src_level + i))) goto done; } -@@ -3717,16 +3782,89 @@ static HRESULT wined3d_device_update_texture_3d(struct wined3d_device *device, +@@ -3725,16 +3790,89 @@ static HRESULT wined3d_device_update_texture_3d(struct wined3d_device *device, done: context_release(context); return hr; @@ -2677,7 +2677,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c TRACE("device %p, src_texture %p, dst_texture %p.\n", device, src_texture, dst_texture); -@@ -3763,6 +3901,7 @@ HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device, +@@ -3771,6 +3909,7 @@ HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device, return WINED3DERR_INVALIDCALL; } @@ -2685,7 +2685,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c level_count = min(wined3d_texture_get_level_count(src_texture), wined3d_texture_get_level_count(dst_texture)); -@@ -3785,9 +3924,21 @@ HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device, +@@ -3793,9 +3932,21 @@ HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device, context_release(context); /* Update every surface level of the texture. */ @@ -2707,7 +2707,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c { unsigned int src_levels = src_texture->level_count; unsigned int dst_levels = dst_texture->level_count; -@@ -3820,6 +3971,38 @@ HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device, +@@ -3828,6 +3979,38 @@ HRESULT CDECL wined3d_device_update_texture(struct wined3d_device *device, FIXME("Unsupported texture type %#x.\n", type); return WINED3DERR_INVALIDCALL; } @@ -2746,7 +2746,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device, DWORD *num_passes) -@@ -4152,6 +4335,7 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev +@@ -4160,6 +4343,7 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev return WINED3DERR_INVALIDCALL; } @@ -2754,7 +2754,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); -@@ -4162,6 +4346,18 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev +@@ -4170,6 +4354,18 @@ 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; @@ -2773,7 +2773,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } if (!src_box) -@@ -4318,10 +4514,15 @@ HRESULT CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *devi +@@ -4326,10 +4522,15 @@ HRESULT CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *devi return WINED3DERR_INVALIDCALL; } @@ -2789,7 +2789,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } struct wined3d_rendertarget_view * CDECL wined3d_device_get_rendertarget_view(const struct wined3d_device *device, -@@ -4891,7 +5092,11 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, +@@ -4899,7 +5100,11 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, { if (reset_state) hr = wined3d_device_create_primary_opengl_context(device); @@ -2801,7 +2801,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c } /* All done. There is no need to reload resources or shaders, this will happen automatically on the -@@ -5206,3 +5411,58 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL +@@ -5214,3 +5419,58 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL else return CallWindowProcA(proc, window, message, wparam, lparam); } @@ -3005,7 +3005,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c return hr; } -@@ -2334,8 +2352,12 @@ HRESULT surface_color_fill(struct wined3d_surface *s, const RECT *rect, const st +@@ -2255,8 +2273,12 @@ HRESULT surface_color_fill(struct wined3d_surface *s, const RECT *rect, const st { struct wined3d_resource *resource = &s->container->resource; struct wined3d_device *device = resource->device; @@ -3018,7 +3018,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c const struct blit_shader *blitter; HRESULT hr; -@@ -2346,6 +2368,7 @@ HRESULT surface_color_fill(struct wined3d_surface *s, const RECT *rect, const st +@@ -2267,6 +2289,7 @@ HRESULT surface_color_fill(struct wined3d_surface *s, const RECT *rect, const st return WINED3DERR_INVALIDCALL; } @@ -3026,7 +3026,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c view_desc.format_id = resource->format->id; view_desc.flags = 0; view_desc.u.texture.level_idx = s->texture_level; -@@ -2361,6 +2384,19 @@ HRESULT surface_color_fill(struct wined3d_surface *s, const RECT *rect, const st +@@ -2282,6 +2305,19 @@ HRESULT surface_color_fill(struct wined3d_surface *s, const RECT *rect, const st hr = blitter->color_fill(device, view, rect, color); wined3d_rendertarget_view_decref(view); @@ -3046,7 +3046,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c return hr; } -@@ -2675,7 +2711,11 @@ static BOOL surface_load_texture(struct wined3d_surface *surface, +@@ -2608,7 +2644,11 @@ static BOOL surface_load_texture(struct wined3d_surface *surface, /* Don't use PBOs for converted surfaces. During PBO conversion we look at * WINED3D_TEXTURE_CONVERTED but it isn't set (yet) in all cases it is * getting called. */ @@ -3141,7 +3141,7 @@ diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c -@@ -337,7 +337,11 @@ void wined3d_texture_get_memory(struct wined3d_texture *texture, unsigned int su +@@ -338,7 +338,11 @@ void wined3d_texture_get_memory(struct wined3d_texture *texture, unsigned int su if (locations & WINED3D_LOCATION_BUFFER) { data->addr = NULL; @@ -3153,7 +3153,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c return; } if (locations & WINED3D_LOCATION_USER_MEMORY) -@@ -438,6 +442,7 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc +@@ -439,6 +443,7 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc /* Context activation is done by the caller. */ static void wined3d_texture_remove_buffer_object(struct wined3d_texture *texture, @@ -3161,7 +3161,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c unsigned int sub_resource_idx, const struct wined3d_gl_info *gl_info) { GLuint *buffer_object = &texture->sub_resources[sub_resource_idx].buffer_object; -@@ -450,6 +455,19 @@ static void wined3d_texture_remove_buffer_object(struct wined3d_texture *texture +@@ -451,6 +456,19 @@ static void wined3d_texture_remove_buffer_object(struct wined3d_texture *texture wined3d_texture_invalidate_location(texture, sub_resource_idx, WINED3D_LOCATION_BUFFER); *buffer_object = 0; @@ -3181,7 +3181,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c } static void wined3d_texture_update_map_binding(struct wined3d_texture *texture) -@@ -469,7 +487,11 @@ static void wined3d_texture_update_map_binding(struct wined3d_texture *texture) +@@ -470,7 +488,11 @@ static void wined3d_texture_update_map_binding(struct wined3d_texture *texture) && !wined3d_texture_load_location(texture, i, context, map_binding)) ERR("Failed to load location %s.\n", wined3d_debug_location(map_binding)); if (texture->resource.map_binding == WINED3D_LOCATION_BUFFER) @@ -3193,7 +3193,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c } if (context) -@@ -626,28 +648,46 @@ static void wined3d_texture_cleanup(struct wined3d_texture *texture) +@@ -627,28 +649,46 @@ static void wined3d_texture_cleanup(struct wined3d_texture *texture) unsigned int sub_count = texture->level_count * texture->layer_count; struct wined3d_device *device = texture->resource.device; struct wined3d_context *context = NULL; @@ -3240,7 +3240,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c } if (context) context_release(context); -@@ -1391,6 +1431,9 @@ HRESULT CDECL wined3d_texture_update_desc(struct wined3d_texture *texture, UINT +@@ -1392,6 +1432,9 @@ HRESULT CDECL wined3d_texture_update_desc(struct wined3d_texture *texture, UINT if (surface->dc) { wined3d_cs_destroy_object(device->cs, texture2d_destroy_dc, surface); @@ -3250,7 +3250,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c create_dib = TRUE; } -@@ -1451,18 +1494,30 @@ HRESULT CDECL wined3d_texture_update_desc(struct wined3d_texture *texture, UINT +@@ -1452,18 +1495,30 @@ HRESULT CDECL wined3d_texture_update_desc(struct wined3d_texture *texture, UINT wined3d_texture_invalidate_location(texture, 0, ~valid_location); if (create_dib) @@ -3281,7 +3281,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c if (sub_resource->buffer_object) return; -@@ -1474,6 +1529,16 @@ static void wined3d_texture_prepare_buffer_object(struct wined3d_texture *textur +@@ -1475,6 +1530,16 @@ static void wined3d_texture_prepare_buffer_object(struct wined3d_texture *textur TRACE("Created buffer object %u for texture %p, sub-resource %u.\n", sub_resource->buffer_object, texture, sub_resource_idx); @@ -3298,7 +3298,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c } static void wined3d_texture_force_reload(struct wined3d_texture *texture) -@@ -1599,7 +1664,11 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned +@@ -1600,7 +1665,11 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned return TRUE; case WINED3D_LOCATION_BUFFER: @@ -3310,7 +3310,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c return TRUE; case WINED3D_LOCATION_TEXTURE_RGB: -@@ -1654,7 +1723,9 @@ static struct wined3d_texture_sub_resource *wined3d_texture_get_sub_resource(str +@@ -1655,7 +1724,9 @@ static struct wined3d_texture_sub_resource *wined3d_texture_get_sub_resource(str HRESULT CDECL wined3d_texture_add_dirty_region(struct wined3d_texture *texture, UINT layer, const struct wined3d_box *dirty_region) { @@ -3320,7 +3320,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c unsigned int sub_resource_idx; TRACE("texture %p, layer %u, dirty_region %s.\n", texture, layer, debug_box(dirty_region)); -@@ -1666,6 +1737,7 @@ HRESULT CDECL wined3d_texture_add_dirty_region(struct wined3d_texture *texture, +@@ -1667,6 +1738,7 @@ HRESULT CDECL wined3d_texture_add_dirty_region(struct wined3d_texture *texture, } sub_resource_idx = layer * texture->level_count; @@ -3328,7 +3328,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c if (dirty_region) WARN("Ignoring dirty_region %s.\n", debug_box(dirty_region)); -@@ -1679,6 +1751,9 @@ HRESULT CDECL wined3d_texture_add_dirty_region(struct wined3d_texture *texture, +@@ -1680,6 +1752,9 @@ HRESULT CDECL wined3d_texture_add_dirty_region(struct wined3d_texture *texture, wined3d_texture_invalidate_location(texture, sub_resource_idx, ~texture->resource.map_binding); context_release(context); @@ -3338,7 +3338,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c return WINED3D_OK; } -@@ -1912,7 +1987,11 @@ static BOOL texture1d_load_location(struct wined3d_texture *texture, unsigned in +@@ -1913,7 +1988,11 @@ static BOOL texture1d_load_location(struct wined3d_texture *texture, unsigned in } else if (sub_resource->locations & WINED3D_LOCATION_BUFFER) { @@ -3350,7 +3350,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c wined3d_texture_bind_and_dirtify(texture, context, location == WINED3D_LOCATION_TEXTURE_SRGB); wined3d_texture_get_pitch(texture, sub_resource_idx, &row_pitch, &slice_pitch); texture1d_upload_data(texture, sub_resource_idx, context, NULL, &data, row_pitch, slice_pitch); -@@ -1957,7 +2036,11 @@ static BOOL texture1d_load_location(struct wined3d_texture *texture, unsigned in +@@ -1958,7 +2037,11 @@ static BOOL texture1d_load_location(struct wined3d_texture *texture, unsigned in case WINED3D_LOCATION_BUFFER: if (sub_resource->locations & (WINED3D_LOCATION_TEXTURE_RGB | WINED3D_LOCATION_TEXTURE_SRGB)) { @@ -3362,7 +3362,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c if (sub_resource->locations & WINED3D_LOCATION_TEXTURE_RGB) wined3d_texture_bind_and_dirtify(texture, context, FALSE); -@@ -2251,8 +2334,13 @@ static void wined3d_texture_unload(struct wined3d_resource *resource) +@@ -2252,8 +2335,13 @@ static void wined3d_texture_unload(struct wined3d_resource *resource) wined3d_texture_invalidate_location(texture, i, ~WINED3D_LOCATION_DISCARDED); } @@ -3376,7 +3376,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c if (resource->type == WINED3D_RTYPE_TEXTURE_2D) { -@@ -2856,6 +2944,9 @@ static HRESULT texture_init(struct wined3d_texture *texture, const struct wined3 +@@ -2857,6 +2945,9 @@ static HRESULT texture_init(struct wined3d_texture *texture, const struct wined3 if ((desc->usage & WINED3DUSAGE_OWNDC) || (device->wined3d->flags & WINED3D_NO3D)) { wined3d_cs_init_object(device->cs, texture2d_create_dc, surface); @@ -3386,7 +3386,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c if (!surface->dc) { wined3d_texture_cleanup_sync(texture); -@@ -3036,7 +3127,11 @@ static BOOL texture3d_load_location(struct wined3d_texture *texture, unsigned in +@@ -3037,7 +3128,11 @@ static BOOL texture3d_load_location(struct wined3d_texture *texture, unsigned in } else if (sub_resource->locations & WINED3D_LOCATION_BUFFER) { @@ -3398,7 +3398,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c wined3d_texture_bind_and_dirtify(texture, context, location == WINED3D_LOCATION_TEXTURE_SRGB); wined3d_texture_get_pitch(texture, sub_resource_idx, &row_pitch, &slice_pitch); -@@ -3082,7 +3177,11 @@ static BOOL texture3d_load_location(struct wined3d_texture *texture, unsigned in +@@ -3083,7 +3178,11 @@ static BOOL texture3d_load_location(struct wined3d_texture *texture, unsigned in case WINED3D_LOCATION_BUFFER: if (sub_resource->locations & (WINED3D_LOCATION_TEXTURE_RGB | WINED3D_LOCATION_TEXTURE_SRGB)) { @@ -3410,7 +3410,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c if (sub_resource->locations & WINED3D_LOCATION_TEXTURE_RGB) wined3d_texture_bind_and_dirtify(texture, context, FALSE); -@@ -3303,8 +3402,18 @@ HRESULT CDECL wined3d_texture_blt(struct wined3d_texture *dst_texture, unsigned +@@ -3304,8 +3403,18 @@ HRESULT CDECL wined3d_texture_blt(struct wined3d_texture *dst_texture, unsigned if (dst_texture->sub_resources[dst_sub_resource_idx].map_count || (src_texture && src_texture->sub_resources[src_sub_resource_idx].map_count)) { @@ -3429,7 +3429,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c } if ((dst_format_flags & WINED3DFMT_FLAG_BLOCKS) && (flags & WINED3D_BLT_COLOR_FILL)) -@@ -3653,7 +3762,14 @@ HRESULT CDECL wined3d_texture_get_dc(struct wined3d_texture *texture, unsigned i +@@ -3654,7 +3763,14 @@ HRESULT CDECL wined3d_texture_get_dc(struct wined3d_texture *texture, unsigned i return WINED3DERR_INVALIDCALL; if (!surface->dc) @@ -3444,7 +3444,7 @@ diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c if (!surface->dc) return WINED3DERR_INVALIDCALL; -@@ -3697,7 +3813,14 @@ HRESULT CDECL wined3d_texture_release_dc(struct wined3d_texture *texture, unsign +@@ -3698,7 +3814,14 @@ HRESULT CDECL wined3d_texture_release_dc(struct wined3d_texture *texture, unsign } if (!(texture->resource.usage & WINED3DUSAGE_OWNDC) && !(device->wined3d->flags & WINED3D_NO3D)) @@ -3483,7 +3483,7 @@ diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c wined3d_cs_init_object(resource->device->cs, wined3d_shader_resource_view_cs_init, view); return WINED3D_OK; -@@ -786,6 +793,10 @@ static void wined3d_unordered_access_view_cs_init(void *object) +@@ -791,6 +798,10 @@ static void wined3d_unordered_access_view_cs_init(void *object) desc, texture, view->format); } } @@ -3494,7 +3494,7 @@ diff --git a/dlls/wined3d/view.c b/dlls/wined3d/view.c } static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_access_view *view, -@@ -805,6 +816,9 @@ static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_acces +@@ -810,6 +821,9 @@ static HRESULT wined3d_unordered_access_view_init(struct wined3d_unordered_acces wined3d_resource_incref(view->resource = resource); @@ -3630,7 +3630,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h } sub_resources[1]; }; -@@ -3205,6 +3239,7 @@ enum wined3d_push_constants +@@ -3208,6 +3242,7 @@ enum wined3d_push_constants WINED3D_PUSH_CONSTANTS_PS_B, }; @@ -3638,7 +3638,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_cs_ops { void *(*require_space)(struct wined3d_cs *cs, size_t size); -@@ -3212,6 +3247,33 @@ struct wined3d_cs_ops +@@ -3215,6 +3250,33 @@ struct wined3d_cs_ops void (*push_constants)(struct wined3d_cs *cs, enum wined3d_push_constants p, unsigned int start_idx, unsigned int count, const void *constants); }; @@ -3672,7 +3672,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_cs { -@@ -3222,8 +3284,31 @@ struct wined3d_cs +@@ -3225,8 +3287,31 @@ struct wined3d_cs size_t data_size, start, end; void *data; @@ -3704,7 +3704,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device) DECLSPEC_HIDDEN; void wined3d_cs_destroy(struct wined3d_cs *cs) DECLSPEC_HIDDEN; void wined3d_cs_destroy_object(struct wined3d_cs *cs, -@@ -3234,15 +3319,30 @@ void wined3d_cs_emit_blt_sub_resource(struct wined3d_cs *cs, struct wined3d_reso +@@ -3237,15 +3322,30 @@ void wined3d_cs_emit_blt_sub_resource(struct wined3d_cs *cs, struct wined3d_reso const struct wined3d_blt_fx *fx, enum wined3d_texture_filter_type filter) DECLSPEC_HIDDEN; void wined3d_cs_emit_clear(struct wined3d_cs *cs, DWORD rect_count, const RECT *rects, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil) DECLSPEC_HIDDEN; @@ -3735,7 +3735,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void wined3d_cs_emit_reset_state(struct wined3d_cs *cs) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_clip_plane(struct wined3d_cs *cs, UINT plane_idx, const struct wined3d_vec4 *plane) DECLSPEC_HIDDEN; -@@ -3290,10 +3390,20 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined +@@ -3293,10 +3393,20 @@ void wined3d_cs_emit_set_unordered_access_view(struct wined3d_cs *cs, enum wined void wined3d_cs_emit_set_vertex_declaration(struct wined3d_cs *cs, struct wined3d_vertex_declaration *declaration) DECLSPEC_HIDDEN; void wined3d_cs_emit_set_viewport(struct wined3d_cs *cs, const struct wined3d_viewport *viewport) DECLSPEC_HIDDEN; @@ -3756,7 +3756,7 @@ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h void wined3d_cs_init_object(struct wined3d_cs *cs, void (*callback)(void *object), void *object) DECLSPEC_HIDDEN; HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, unsigned int sub_resource_idx, -@@ -3301,12 +3411,14 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, +@@ -3304,12 +3414,14 @@ HRESULT wined3d_cs_map(struct wined3d_cs *cs, struct wined3d_resource *resource, HRESULT wined3d_cs_unmap(struct wined3d_cs *cs, struct wined3d_resource *resource, unsigned int sub_resource_idx) DECLSPEC_HIDDEN; diff --git a/staging/VERSION b/staging/VERSION index 13d606b5..1ddac6b7 100644 --- a/staging/VERSION +++ b/staging/VERSION @@ -1 +1 @@ -Wine Staging 2.4 +Wine Staging 2.5 (unreleased)