Rebase against 370254cbe93beae6a9ff693d98c638db5bfb1134.

This commit is contained in:
Sebastian Lackner 2015-11-12 18:17:43 +01:00
parent 3faa0f1212
commit 75dc81b7d3
8 changed files with 94 additions and 166 deletions

View File

@ -143,7 +143,7 @@ for more details.*
* Fix condition mask handling in RtlVerifyVersionInfo ([Wine Bug #36143](https://bugs.winehq.org/show_bug.cgi?id=36143))
* Fix crash in Space Rangers2 caused by missing DXTn support ([Wine Bug #24983](https://bugs.winehq.org/show_bug.cgi?id=24983))
* Fix crash of winedevice when relocation entry crosses page boundary ([Wine Bug #28254](https://bugs.winehq.org/show_bug.cgi?id=28254))
* Fix cursor clip regression / broken raw input in multiple games ([Wine Bug #33479](https://bugs.winehq.org/show_bug.cgi?id=33479))
* ~~Fix cursor clip regression / broken raw input in multiple games~~ ([Wine Bug #33479](https://bugs.winehq.org/show_bug.cgi?id=33479))
* Fix detection of case-insensitive systems in MSYS2
* Fix device paths in HKLM\SYSTEM\MountedDevices ([Wine Bug #38235](https://bugs.winehq.org/show_bug.cgi?id=38235))
* Fix endless loop in regedit when importing files with very long lines

2
debian/changelog vendored
View File

@ -22,6 +22,8 @@ wine-staging (1.7.55) UNRELEASED; urgency=low
upstream).
* Removed patch to fix handling of opening read-only files for
FILE_DELETE_ON_CLOSE (accepted upstream).
* Removed patch to fix cursor clip regression / broken raw input in multiple
games (accepted upstream).
-- Sebastian Lackner <sebastian@fds-team.de> Sun, 01 Nov 2015 01:06:20 +0100
wine-staging (1.7.54) unstable; urgency=low

View File

@ -1,4 +1,4 @@
From ff63d064b47c582a0b31a0120d9555af5f041b7d Mon Sep 17 00:00:00 2001
From 5733c4ddb3e5a2ff310fed2a585da13538345b97 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 18 Jan 2015 05:42:10 +0100
Subject: ntoskrnl.exe/tests: Add initial driver testing framework and
@ -73,10 +73,10 @@ index 774377d..bf91b70 100644
dnl
dnl Usage: WINE_CONFIG_LIB(name,flags)
diff --git a/configure.ac b/configure.ac
index 84420a9..fe4b94e 100644
index 48268b0..782d1d7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3203,6 +3203,8 @@ WINE_CONFIG_TEST(dlls/ntdll/tests)
@@ -3142,6 +3142,8 @@ WINE_CONFIG_TEST(dlls/ntdll/tests)
WINE_CONFIG_DLL(ntdsapi,,[implib])
WINE_CONFIG_TEST(dlls/ntdsapi/tests)
WINE_CONFIG_DLL(ntoskrnl.exe,,[implib])
@ -557,16 +557,16 @@ index b7f8b63..8143c4f 100755
{
die "MODULE should not be defined as static lib in $file" unless $file =~ /^dlls\//;
diff --git a/tools/makedep.c b/tools/makedep.c
index d8cf2f5..6094148 100644
index 023c0ec..a4884cf 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -170,4 +170,5 @@ struct makefile
@@ -171,4 +171,5 @@ struct makefile
const char *module;
const char *testdll;
+ const char *resource;
const char *sharedlib;
const char *staticlib;
const char *importlib;
@@ -472,6 +473,30 @@ static char *get_extension( char *filename )
@@ -474,6 +475,30 @@ static char *get_extension( char *filename )
/*******************************************************************
@ -597,7 +597,7 @@ index d8cf2f5..6094148 100644
* replace_extension
*/
static char *replace_extension( const char *name, const char *old_ext, const char *new_ext )
@@ -1958,6 +1983,7 @@ static struct strarray output_sources( const struct makefile *make, struct strar
@@ -2025,6 +2050,7 @@ static struct strarray output_sources( const struct makefile *make, struct strar
struct strarray subdirs = empty_strarray;
struct strarray phony_targets = empty_strarray;
struct strarray all_targets = empty_strarray;
@ -605,7 +605,7 @@ index d8cf2f5..6094148 100644
struct strarray install_rules[NB_INSTALL_RULES];
char *ldrpath_local = get_expanded_make_variable( make, "LDRPATH_LOCAL" );
char *ldrpath_install = get_expanded_make_variable( make, "LDRPATH_INSTALL" );
@@ -2229,7 +2255,7 @@ static struct strarray output_sources( const struct makefile *make, struct strar
@@ -2297,7 +2323,7 @@ static struct strarray output_sources( const struct makefile *make, struct strar
}
else
{
@ -614,7 +614,7 @@ index d8cf2f5..6094148 100644
(source->file->flags & FLAG_C_IMPLIB) ||
(make->module && make->staticlib);
@@ -2243,7 +2269,7 @@ static struct strarray output_sources( const struct makefile *make, struct strar
@@ -2311,7 +2337,7 @@ static struct strarray output_sources( const struct makefile *make, struct strar
output_filenames( includes );
output_filenames( make->define_args );
output_filenames( extradefs );
@ -623,7 +623,7 @@ index d8cf2f5..6094148 100644
{
output_filenames( dll_flags );
if (make->use_msvcrt) output_filenames( msvcrt_flags );
@@ -2322,6 +2348,72 @@ static struct strarray output_sources( const struct makefile *make, struct strar
@@ -2390,6 +2416,72 @@ static struct strarray output_sources( const struct makefile *make, struct strar
output( "\n" );
}
@ -696,7 +696,7 @@ index d8cf2f5..6094148 100644
if (make->module && !make->staticlib)
{
struct strarray all_libs = empty_strarray;
@@ -2666,6 +2758,83 @@ static struct strarray output_sources( const struct makefile *make, struct strar
@@ -2780,6 +2872,83 @@ static struct strarray output_sources( const struct makefile *make, struct strar
add_install_rule( make, install_rules, make->scripts.str[i], make->scripts.str[i],
strmake( "S$(bindir)/%s", make->scripts.str[i] ));
@ -780,12 +780,12 @@ index d8cf2f5..6094148 100644
if (all_targets.count)
{
output( "all:" );
@@ -2951,4 +3120,5 @@ static void update_makefile( const char *path )
@@ -3075,4 +3244,5 @@ static void update_makefile( const char *path )
make->module = get_expanded_make_variable( make, "MODULE" );
make->testdll = get_expanded_make_variable( make, "TESTDLL" );
+ make->resource = get_expanded_make_variable( make, "RESOURCE" );
make->sharedlib = get_expanded_make_variable( make, "SHAREDLIB" );
make->staticlib = get_expanded_make_variable( make, "STATICLIB" );
make->importlib = get_expanded_make_variable( make, "IMPORTLIB" );
--
2.6.2

View File

@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "5cf95396503d49f0249c473c1ed51e51213124c0"
echo "370254cbe93beae6a9ff693d98c638db5bfb1134"
}
# Show version information
@ -4691,17 +4691,14 @@ fi
# Patchset server-ClipCursor
# |
# | This patchset fixes the following Wine bugs:
# | * [#33479] Fix cursor clip regression / broken raw input in multiple games
# | * [#38087] Fix multithreading issues with fullscreen clipping
# |
# | Modified files:
# | * dlls/user32/message.c, dlls/winex11.drv/mouse.c, server/queue.c
# | * dlls/winex11.drv/mouse.c
# |
if test "$enable_server_ClipCursor" -eq 1; then
patch_apply server-ClipCursor/0001-server-Only-send-WM_WINE_CLIPCURSOR-for-forced-clip-.patch
patch_apply server-ClipCursor/0002-winex11-Forward-all-clipping-requests-to-the-right-t.patch
patch_apply server-ClipCursor/0001-winex11-Forward-all-clipping-requests-to-the-right-t.patch
(
echo '+ { "Sebastian Lackner", "server: Only send WM_WINE_CLIPCURSOR for forced clip resets.", 1 },';
echo '+ { "Sebastian Lackner", "winex11: Forward all clipping requests to the right thread (including fullscreen clipping).", 1 },';
) >> "$patchlist"
fi

View File

@ -1,70 +0,0 @@
From d4e11dc9293e9faea3edb4c0d7c3defbb621ca97 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Thu, 22 Jan 2015 16:34:58 +0100
Subject: server: Only send WM_WINE_CLIPCURSOR for forced clip resets.
---
dlls/user32/message.c | 6 ++++++
server/queue.c | 8 ++++----
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/dlls/user32/message.c b/dlls/user32/message.c
index eac4e4d..67e1cf4 100644
--- a/dlls/user32/message.c
+++ b/dlls/user32/message.c
@@ -1881,6 +1881,12 @@ static LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPAR
return call_current_hook( h_extra->handle, HC_ACTION, wparam, h_extra->lparam );
}
case WM_WINE_CLIPCURSOR:
+ if (!lparam)
+ {
+ /* This is just a notification, nothing to do. Clipping will be
+ * done by the process that issues the set_cursor wineserver call. */
+ return 0;
+ }
if (wparam)
{
RECT rect;
diff --git a/server/queue.c b/server/queue.c
index 3a321cd..19acbd3 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -362,7 +362,7 @@ static void set_cursor_pos( struct desktop *desktop, int x, int y )
}
/* set the cursor clip rectangle */
-static void set_clip_rectangle( struct desktop *desktop, const rectangle_t *rect )
+static void set_clip_rectangle( struct desktop *desktop, const rectangle_t *rect, int do_clip )
{
rectangle_t top_rect;
int x, y;
@@ -381,7 +381,7 @@ static void set_clip_rectangle( struct desktop *desktop, const rectangle_t *rect
else desktop->cursor.clip = top_rect;
if (desktop->cursor.clip_msg)
- post_desktop_message( desktop, desktop->cursor.clip_msg, rect != NULL, 0 );
+ post_desktop_message( desktop, desktop->cursor.clip_msg, rect != NULL, do_clip );
/* warp the mouse to be inside the clip rect */
x = min( max( desktop->cursor.x, desktop->cursor.clip.left ), desktop->cursor.clip.right-1 );
@@ -393,7 +393,7 @@ static void set_clip_rectangle( struct desktop *desktop, const rectangle_t *rect
static void set_foreground_input( struct desktop *desktop, struct thread_input *input )
{
if (desktop->foreground_input == input) return;
- set_clip_rectangle( desktop, NULL );
+ set_clip_rectangle( desktop, NULL, 1 );
desktop->foreground_input = input;
}
@@ -3023,7 +3023,7 @@ DECL_HANDLER(set_cursor)
if (req->clip_msg && get_top_window_owner(desktop) == current->process)
desktop->cursor.clip_msg = req->clip_msg;
- set_clip_rectangle( desktop, (req->flags & SET_CURSOR_NOCLIP) ? NULL : &req->clip );
+ set_clip_rectangle( desktop, (req->flags & SET_CURSOR_NOCLIP) ? NULL : &req->clip, 0 );
}
reply->new_x = input->desktop->cursor.x;
--
2.3.1

View File

@ -1,3 +1,2 @@
Fixes: [33479] Fix cursor clip regression / broken raw input in multiple games
Fixes: [38087] Fix multithreading issues with fullscreen clipping
Category: stable

View File

@ -3416,7 +3416,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
device->d3d_initialized = FALSE;
return WINED3D_OK;
@@ -1461,6 +1627,16 @@
@@ -1462,6 +1628,16 @@
TRACE("... Range(%f), Falloff(%f), Theta(%f), Phi(%f)\n",
light->range, light->falloff, light->theta, light->phi);
@ -3433,7 +3433,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
/* Save away the information. */
object->OriginalParms = *light;
@@ -1540,9 +1716,11 @@
@@ -1541,9 +1717,11 @@
FIXME("Unrecognized light type %#x.\n", light->type);
}
@ -3445,7 +3445,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
return WINED3D_OK;
}
@@ -1615,6 +1793,14 @@
@@ -1616,6 +1794,14 @@
{
if (light_info->glIndex != -1)
{
@ -3460,7 +3460,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
device->update_state->lights[light_info->glIndex] = NULL;
light_info->glIndex = -1;
}
@@ -1656,11 +1842,23 @@
@@ -1657,11 +1843,23 @@
WARN("Too many concurrently active lights\n");
return WINED3D_OK;
}
@ -3484,7 +3484,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
return WINED3D_OK;
}
@@ -1835,9 +2033,11 @@
@@ -1836,9 +2034,11 @@
TRACE("device %p, base_index %d.\n", device, base_index);
device->update_state->base_vertex_index = base_index;
@ -3496,7 +3496,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
INT CDECL wined3d_device_get_base_vertex_index(const struct wined3d_device *device)
@@ -1882,7 +2082,11 @@
@@ -1883,7 +2083,11 @@
|| !(texture->resource.format_flags & WINED3DFMT_FLAG_DEPTH))
return;
surface = surface_from_resource(texture->sub_resources[0]);
@ -3508,7 +3508,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
return;
wined3d_surface_blt(surface, NULL, depth_stencil, NULL, 0, NULL, WINED3D_TEXF_POINT);
@@ -2202,7 +2406,11 @@
@@ -2203,7 +2407,11 @@
return device->state.sampler[WINED3D_SHADER_TYPE_VERTEX][idx];
}
@ -3520,7 +3520,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
{
UINT i;
@@ -2235,8 +2443,12 @@
@@ -2236,8 +2444,12 @@
}
else
{
@ -3533,7 +3533,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
return WINED3D_OK;
@@ -2283,8 +2495,12 @@
@@ -2284,8 +2496,12 @@
}
else
{
@ -3546,7 +3546,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
return WINED3D_OK;
@@ -2335,8 +2551,13 @@
@@ -2336,8 +2552,13 @@
memset(device->recording->changed.vertexShaderConstantsF + start_register, 1,
sizeof(*device->recording->changed.vertexShaderConstantsF) * vector4f_count);
else
@ -3560,7 +3560,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
return WINED3D_OK;
}
@@ -2471,8 +2692,12 @@
@@ -2472,8 +2693,12 @@
}
else
{
@ -3573,7 +3573,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
return WINED3D_OK;
@@ -2519,8 +2744,12 @@
@@ -2520,8 +2745,12 @@
}
else
{
@ -3586,7 +3586,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
return WINED3D_OK;
@@ -2572,8 +2801,12 @@
@@ -2573,8 +2802,12 @@
memset(device->recording->changed.pixelShaderConstantsF + start_register, 1,
sizeof(*device->recording->changed.pixelShaderConstantsF) * vector4f_count);
else
@ -3599,7 +3599,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
return WINED3D_OK;
}
@@ -2733,6 +2966,7 @@
@@ -2734,6 +2967,7 @@
return hr;
}
@ -3607,7 +3607,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (wined3d_settings.cs_multithreaded)
{
FIXME("Waiting for cs.\n");
@@ -2740,6 +2974,7 @@
@@ -2741,6 +2975,7 @@
device->cs->ops->finish(device->cs);
}
@ -3615,7 +3615,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
wined3d_device_get_transform(device, WINED3D_TS_VIEW, &view_mat);
wined3d_device_get_transform(device, WINED3D_TS_PROJECTION, &proj_mat);
wined3d_device_get_transform(device, WINED3D_TS_WORLD_MATRIX(0), &world_mat);
@@ -3225,6 +3460,10 @@
@@ -3226,6 +3461,10 @@
HRESULT CDECL wined3d_device_end_scene(struct wined3d_device *device)
{
@ -3626,7 +3626,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
TRACE("device %p.\n", device);
if (!device->inScene)
@@ -3233,6 +3472,15 @@
@@ -3234,6 +3473,15 @@
return WINED3DERR_INVALIDCALL;
}
@ -3642,7 +3642,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
device->inScene = FALSE;
return WINED3D_OK;
}
@@ -3240,8 +3488,10 @@
@@ -3241,8 +3489,10 @@
HRESULT CDECL wined3d_device_clear(struct wined3d_device *device, DWORD rect_count,
const RECT *rects, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil)
{
@ -3653,7 +3653,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
TRACE("device %p, rect_count %u, rects %p, flags %#x, color {%.8e, %.8e, %.8e, %.8e}, depth %.8e, stencil %u.\n",
device, rect_count, rects, flags, color->r, color->g, color->b, color->a, depth, stencil);
@@ -3250,12 +3500,19 @@
@@ -3251,12 +3501,19 @@
WARN("Rects is %p, but rect_count is 0, ignoring clear\n", rects);
return WINED3D_OK;
}
@ -3673,7 +3673,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (!ds)
{
WARN("Clearing depth and/or stencil without a depth stencil buffer attached, returning WINED3DERR_INVALIDCALL\n");
@@ -3264,8 +3521,13 @@
@@ -3265,8 +3522,13 @@
}
else if (flags & WINED3DCLEAR_TARGET)
{
@ -3687,7 +3687,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
{
WARN("Silently ignoring depth and target clear with mismatching sizes\n");
return WINED3D_OK;
@@ -3311,6 +3573,9 @@
@@ -3312,6 +3574,9 @@
enum wined3d_primitive_type primitive_type)
{
GLenum gl_primitive_type, prev;
@ -3697,7 +3697,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
TRACE("device %p, primitive_type %s\n", device, debug_d3dprimitivetype(primitive_type));
gl_primitive_type = gl_primitive_type_from_d3d(primitive_type);
@@ -3318,8 +3583,13 @@
@@ -3319,8 +3584,13 @@
device->update_state->gl_primitive_type = gl_primitive_type;
if (device->recording)
device->recording->changed.primitive_type = TRUE;
@ -3711,7 +3711,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
void CDECL wined3d_device_get_primitive_type(const struct wined3d_device *device,
@@ -3342,6 +3612,14 @@
@@ -3343,6 +3613,14 @@
return WINED3DERR_INVALIDCALL;
}
@ -3726,7 +3726,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
wined3d_cs_emit_draw(device->cs, start_vertex, vertex_count, 0, 0, FALSE);
return WINED3D_OK;
@@ -3358,6 +3636,10 @@
@@ -3359,6 +3637,10 @@
HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *device, UINT start_idx, UINT index_count)
{
@ -3737,7 +3737,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
TRACE("device %p, start_idx %u, index_count %u.\n", device, start_idx, index_count);
if (!device->state.index_buffer)
@@ -3376,6 +3658,15 @@
@@ -3377,6 +3659,15 @@
return WINED3DERR_INVALIDCALL;
}
@ -3753,7 +3753,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
wined3d_cs_emit_draw(device->cs, start_idx, index_count, 0, 0, TRUE);
return WINED3D_OK;
@@ -3391,6 +3682,7 @@
@@ -3392,6 +3683,7 @@
}
/* This is a helper function for UpdateTexture, there is no UpdateVolume method in D3D. */
@ -3761,7 +3761,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
static void device_update_volume(struct wined3d_context *context,
struct wined3d_volume *src_volume, struct wined3d_volume *dst_volume)
{
@@ -3427,6 +3719,88 @@
@@ -3428,6 +3720,88 @@
{
enum wined3d_resource_type type = src_texture->resource.type;
unsigned int level_count, i, j, src_size, dst_size, src_skip_levels = 0;
@ -3850,7 +3850,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));
@@ -3445,7 +3819,13 @@
@@ -3446,7 +3820,13 @@
}
/* Make sure that the destination texture is loaded. */
@ -3864,7 +3864,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
/* Update every surface level of the texture. */
switch (type)
@@ -3460,7 +3840,16 @@
@@ -3461,7 +3841,16 @@
src_surface = surface_from_resource(wined3d_texture_get_sub_resource(src_texture,
i + src_skip_levels));
dst_surface = surface_from_resource(wined3d_texture_get_sub_resource(dst_texture, i));
@ -3881,7 +3881,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
break;
}
@@ -3480,7 +3869,16 @@
@@ -3481,7 +3870,16 @@
i * src_levels + j + src_skip_levels));
dst_surface = surface_from_resource(wined3d_texture_get_sub_resource(dst_texture,
i * dst_levels + j));
@ -3898,7 +3898,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
}
break;
@@ -3490,6 +3888,7 @@
@@ -3491,6 +3889,7 @@
{
for (i = 0; i < level_count; ++i)
{
@ -3906,7 +3906,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
device_update_volume(context,
volume_from_resource(wined3d_texture_get_sub_resource(src_texture,
i + src_skip_levels)),
@@ -3543,6 +3942,25 @@
@@ -3544,6 +3943,25 @@
}
wined3d_cs_emit_update_texture(device->cs, src_texture, dst_texture);
@ -3932,7 +3932,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
return WINED3D_OK;
}
@@ -3592,8 +4010,13 @@
@@ -3593,8 +4011,13 @@
if (state->render_states[WINED3D_RS_ZENABLE] || state->render_states[WINED3D_RS_ZWRITEENABLE]
|| state->render_states[WINED3D_RS_STENCILENABLE])
{
@ -3946,7 +3946,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (ds && rt && (ds->width < rt->width || ds->height < rt->height))
{
@@ -3692,6 +4115,7 @@
@@ -3693,6 +4116,7 @@
struct wined3d_surface *src_surface, const RECT *src_rect,
struct wined3d_surface *dst_surface, const POINT *dst_point)
{
@ -3954,7 +3954,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
const struct wined3d_format *src_format = src_surface->resource.format;
const struct wined3d_format *dst_format = dst_surface->resource.format;
UINT update_w, update_h;
@@ -3699,6 +4123,7 @@
@@ -3700,6 +4124,7 @@
RECT r, dst_rect;
POINT p;
@ -3962,7 +3962,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
TRACE("device %p, src_surface %p, src_rect %s, dst_surface %p, dst_point %s.\n",
device, src_surface, wine_dbgstr_rect(src_rect),
dst_surface, wine_dbgstr_point(dst_point));
@@ -3710,6 +4135,7 @@
@@ -3711,6 +4136,7 @@
return WINED3DERR_INVALIDCALL;
}
@ -3970,7 +3970,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (src_format->id != dst_format->id)
{
WARN("Source and destination surfaces should have the same format.\n");
@@ -3774,6 +4200,9 @@
@@ -3775,6 +4201,9 @@
wined3d_cs_emit_update_surface(device->cs, src_surface, src_rect, dst_surface, dst_point);
return WINED3D_OK;
@ -3980,7 +3980,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
void CDECL wined3d_device_copy_resource(struct wined3d_device *device,
@@ -3928,7 +4357,17 @@
@@ -3929,7 +4358,17 @@
unsigned int depth_pitch)
{
struct wined3d_resource *sub_resource;
@ -3998,7 +3998,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
TRACE("device %p, resource %p, sub_resource_idx %u, box %p, data %p, row_pitch %u, depth_pitch %u.\n",
device, resource, sub_resource_idx, box, data, row_pitch, depth_pitch);
@@ -3945,7 +4384,14 @@
@@ -3946,7 +4385,14 @@
WARN("Invalid sub_resource_idx %u.\n", sub_resource_idx);
return;
}
@ -4013,7 +4013,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (box)
{
if (box->left >= box->right || box->right > sub_resource->width
@@ -3955,9 +4401,47 @@
@@ -3956,9 +4402,47 @@
box->left, box->top, box->front, box->right, box->bottom, box->back);
return;
}
@ -4061,7 +4061,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
HRESULT CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *device,
@@ -3988,8 +4472,14 @@
@@ -3989,8 +4473,14 @@
rect = &r;
}
@ -4076,7 +4076,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,
@@ -4003,6 +4493,7 @@
@@ -4004,6 +4494,7 @@
return NULL;
}
@ -4084,7 +4084,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
return device->state.fb.render_targets[view_idx];
}
@@ -4018,6 +4509,22 @@
@@ -4019,6 +4510,22 @@
{
struct wined3d_rendertarget_view *prev;
struct wined3d_fb_state *fb = &device->state.fb;
@ -4107,7 +4107,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
TRACE("device %p, view_idx %u, view %p, set_viewport %#x.\n",
device, view_idx, view, set_viewport);
@@ -4057,6 +4564,7 @@
@@ -4058,6 +4565,7 @@
}
@ -4115,7 +4115,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
prev = fb->render_targets[view_idx];
if (view == prev)
return WINED3D_OK;
@@ -4064,6 +4572,15 @@
@@ -4065,6 +4573,15 @@
if (view)
wined3d_rendertarget_view_incref(view);
fb->render_targets[view_idx] = view;
@ -4131,7 +4131,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
wined3d_cs_emit_set_rendertarget_view(device->cs, view_idx, view);
/* Release after the assignment, to prevent device_resource_released()
* from seeing the surface as still in use. */
@@ -4075,6 +4592,7 @@
@@ -4076,6 +4593,7 @@
void CDECL wined3d_device_set_depth_stencil_view(struct wined3d_device *device, struct wined3d_rendertarget_view *view)
{
@ -4139,7 +4139,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
struct wined3d_fb_state *fb = &device->state.fb;
struct wined3d_rendertarget_view *prev;
@@ -4092,6 +4610,66 @@
@@ -4093,6 +4611,66 @@
wined3d_cs_emit_set_depth_stencil_view(device->cs, view);
if (prev)
wined3d_rendertarget_view_decref(prev);
@ -4206,7 +4206,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device,
@@ -4112,6 +4690,14 @@
@@ -4113,6 +4691,14 @@
cursor_image = surface_from_resource(sub_resource);
@ -4221,7 +4221,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (cursor_image->resource.format->id != WINED3DFMT_B8G8R8A8_UNORM)
{
WARN("Surface %p has an invalid format %s.\n",
@@ -4139,6 +4725,13 @@
@@ -4140,6 +4726,13 @@
* release it after setting the cursor image. Windows doesn't
* addref the set surface, so we can't do this either without
* creating circular refcount dependencies. */
@ -4235,7 +4235,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (cursor_image->resource.width == 32 && cursor_image->resource.height == 32)
{
@@ -4243,6 +4836,12 @@
@@ -4244,6 +4837,12 @@
else
SetCursor(NULL);
}
@ -4248,7 +4248,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
return oldVisible;
}
@@ -4253,8 +4852,10 @@
@@ -4254,8 +4853,10 @@
TRACE("device %p.\n", device);
@ -4259,7 +4259,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
LIST_FOR_EACH_ENTRY_SAFE(resource, cursor, &device->resources, struct wined3d_resource, resource_list_entry)
{
TRACE("Checking resource %p for eviction.\n", resource);
@@ -4262,6 +4863,7 @@
@@ -4263,6 +4864,7 @@
if (resource->pool == WINED3D_POOL_MANAGED && !resource->map_count)
{
TRACE("Evicting %p.\n", resource);
@ -4267,7 +4267,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
wined3d_cs_emit_evict_resource(device->cs, resource);
}
}
@@ -4280,6 +4882,37 @@
@@ -4281,6 +4883,37 @@
context = context_acquire(device, NULL);
gl_info = context->gl_info;
@ -4305,7 +4305,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (device->depth_blt_texture)
{
@@ -4300,6 +4933,7 @@
@@ -4301,6 +4934,7 @@
HeapFree(GetProcessHeap(), 0, swapchain->context);
swapchain->context = NULL;
@ -4313,7 +4313,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
swapchain->num_contexts = 0;
}
@@ -4319,6 +4953,14 @@
@@ -4320,6 +4954,14 @@
static HRESULT create_primary_opengl_context(struct wined3d_device *device, struct wined3d_swapchain *swapchain)
{
@ -4328,7 +4328,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
HRESULT hr;
if (FAILED(hr = device->shader_backend->shader_alloc_private(device,
@@ -4335,6 +4977,7 @@
@@ -4336,6 +4978,7 @@
return hr;
}
@ -4336,7 +4336,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
hr = wined3d_cs_emit_create_swapchain_context(device->cs, swapchain);
if (FAILED(hr))
{
@@ -4345,6 +4988,34 @@
@@ -4346,6 +4989,34 @@
}
wined3d_cs_emit_create_dummy_textures(device->cs);
@ -4371,7 +4371,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
return WINED3D_OK;
}
@@ -4363,9 +5034,11 @@
@@ -4364,9 +5035,11 @@
TRACE("device %p, swapchain_desc %p, mode %p, callback %p, reset_state %#x.\n",
device, swapchain_desc, mode, callback, reset_state);
@ -4383,7 +4383,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (!(swapchain = wined3d_device_get_swapchain(device, 0)))
{
ERR("Failed to get the first implicit swapchain.\n");
@@ -4380,9 +5053,21 @@
@@ -4381,9 +5054,21 @@
wined3d_texture_decref(device->logo_texture);
device->logo_texture = NULL;
}
@ -4405,7 +4405,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
{
for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i)
{
@@ -4391,6 +5076,7 @@
@@ -4392,6 +5077,7 @@
}
wined3d_device_set_depth_stencil_view(device, NULL);
@ -4413,7 +4413,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (reset_state)
{
state_unbind_resources(&device->state);
@@ -4400,6 +5086,12 @@
@@ -4401,6 +5087,12 @@
{
wined3d_texture_decref(device->cs->onscreen_depth_stencil->container);
device->cs->onscreen_depth_stencil = NULL;
@ -4426,7 +4426,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
if (reset_state)
@@ -4412,6 +5104,7 @@
@@ -4413,6 +5105,7 @@
}
}
@ -4434,7 +4434,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
/* Free implicit resources and wait for the command stream before modifying
* swapchain parameters. After modifying the swapchain parameters a new GL
* context may be acquired by the worker thread. This causes problems in the
@@ -4433,6 +5126,7 @@
@@ -4434,6 +5127,7 @@
}
device->cs->ops->finish(device->cs);
@ -4442,7 +4442,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
TRACE("New params:\n");
TRACE("backbuffer_width %u\n", swapchain_desc->backbuffer_width);
TRACE("backbuffer_height %u\n", swapchain_desc->backbuffer_height);
@@ -4559,6 +5253,13 @@
@@ -4560,6 +5254,13 @@
swapchain_desc->multisample_type, swapchain_desc->multisample_quality)))
return hr;
@ -4456,7 +4456,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (swapchain->desc.enable_auto_depth_stencil)
{
struct wined3d_resource_desc texture_desc;
@@ -4601,6 +5302,13 @@
@@ -4602,6 +5303,13 @@
wined3d_device_set_depth_stencil_view(device, device->auto_depth_stencil_view);
}
@ -4470,7 +4470,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (swapchain->desc.backbuffer_count && FAILED(hr = wined3d_rendertarget_view_create_from_surface(
surface_from_resource(wined3d_texture_get_sub_resource(swapchain->back_buffers[0], 0)),
NULL, &wined3d_null_parent_ops, &device->back_buffer_view)))
@@ -4621,12 +5329,20 @@
@@ -4622,12 +5330,20 @@
}
wined3d_cs_emit_reset_state(device->cs);
state_cleanup(&device->state);
@ -4491,7 +4491,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
&device->adapter->d3d_info, WINED3D_STATE_INIT_DEFAULT)))
ERR("Failed to initialize device state, hr %#x.\n", hr);
device->update_state = &device->state;
@@ -4635,6 +5351,7 @@
@@ -4636,6 +5352,7 @@
}
else if (device->back_buffer_view)
{
@ -4499,7 +4499,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
struct wined3d_state *state = &device->state;
wined3d_device_set_rendertarget_view(device, 0, device->back_buffer_view, FALSE);
@@ -4650,6 +5367,24 @@
@@ -4651,6 +5368,24 @@
state->scissor_rect.left = 0;
state->scissor_rect.right = swapchain->desc.backbuffer_width;
state->scissor_rect.bottom = swapchain->desc.backbuffer_height;
@ -4524,7 +4524,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
wined3d_cs_emit_set_scissor_rect(device->cs, &state->scissor_rect);
}
@@ -4725,6 +5460,10 @@
@@ -4726,6 +5461,10 @@
TRACE("device %p, resource %p, type %s.\n", device, resource, debug_d3dresourcetype(type));
@ -4535,7 +4535,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
switch (type)
{
case WINED3D_RTYPE_SURFACE:
@@ -4735,6 +5474,7 @@
@@ -4736,6 +5475,7 @@
for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i)
{
@ -4543,7 +4543,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
if (wined3d_rendertarget_view_get_surface(device->state.fb.render_targets[i]) == surface)
{
ERR("Surface %p is still in use as render target %u.\n", surface, i);
@@ -4746,6 +5486,19 @@
@@ -4747,6 +5487,19 @@
{
ERR("Surface %p is still in use as depth/stencil buffer.\n", surface);
device->state.fb.depth_stencil = NULL;
@ -4563,7 +4563,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
}
}
break;
@@ -4908,7 +5661,11 @@
@@ -4909,7 +5662,11 @@
device->blitter = adapter->blitter;
@ -4575,7 +4575,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
&adapter->d3d_info, WINED3D_STATE_INIT_DEFAULT)))
{
ERR("Failed to initialize device state, hr %#x.\n", hr);
@@ -5007,6 +5764,7 @@
@@ -5008,6 +5765,7 @@
else
return CallWindowProcA(proc, window, message, wparam, lparam);
}
@ -4583,7 +4583,7 @@ diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
/* Context activation is done by the caller */
struct wined3d_gl_bo *wined3d_device_get_bo(struct wined3d_device *device, UINT size, GLenum gl_usage,
@@ -5060,3 +5818,4 @@
@@ -5061,3 +5819,4 @@
wined3d_device_destroy_bo(device, context, bo);
}