Rebase against 5b4f8a385b46a8a8a8b09b8ca6578aa7b7995a1e.

This commit is contained in:
Sebastian Lackner 2017-04-02 05:09:40 +02:00
parent 4232441093
commit 55ab42ece0
12 changed files with 194 additions and 270 deletions

View File

@ -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?= <michael@fds-team.de>
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 =

View File

@ -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?= <michael@fds-team.de>
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

View File

@ -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 <titan.costa@gmail.com>
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);

View File

@ -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 <sebastian@fds-team.de>
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 @@

View File

@ -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 <sebastian@fds-team.de>
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

View File

@ -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 <sebastian@fds-team.de>
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

View File

@ -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?= <michael@fds-team.de>
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;
}
}

View File

@ -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?= <michael@fds-team.de>
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,

View File

@ -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

View File

@ -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 <sebastian@fds-team.de>
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 );

View File

@ -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;

View File

@ -1 +1 @@
Wine Staging 2.4
Wine Staging 2.5 (unreleased)