Rebase against 64e4a03a92498abea428dc567372f3996fa9dc3a.

This commit is contained in:
Sebastian Lackner
2017-04-04 08:27:19 +02:00
parent 3a8de0f3f4
commit a781d341a5
8 changed files with 258 additions and 535 deletions

View File

@@ -1,4 +1,4 @@
From 706645d08ae7ebd9175f91532077694b988aef7d Mon Sep 17 00:00:00 2001
From bc0a87c3b6553fae719b2181bc878e8b9e59838c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Mon, 29 Apr 2013 18:49:53 +0200
Subject: wined3d: Send blits through the command stream.
@@ -11,10 +11,10 @@ between surface_blt and surface_blt_ugly isn't particularly nice.
2 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index c3a10a2d13a..31453ed0ff8 100644
index 8fced7ece3..9dc893bfeb 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4154,16 +4154,16 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev
@@ -4148,16 +4148,16 @@ HRESULT CDECL wined3d_device_copy_sub_resource_region(struct wined3d_device *dev
return WINED3DERR_INVALIDCALL;
}
@@ -41,12 +41,12 @@ index c3a10a2d13a..31453ed0ff8 100644
if (!src_box)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 60e53f55463..9d0909852cd 100644
index 8a92a77872..2b249c26c0 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -3189,8 +3189,13 @@ HRESULT CDECL wined3d_texture_blt(struct wined3d_texture *dst_texture, unsigned
@@ -3301,8 +3301,13 @@ 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))
|| src_texture->sub_resources[src_sub_resource_idx].map_count)
{
- WARN("Sub-resource is busy, returning WINEDDERR_SURFACEBUSY.\n");
- return WINEDDERR_SURFACEBUSY;
@@ -59,7 +59,7 @@ index 60e53f55463..9d0909852cd 100644
+ }
}
if ((dst_format_flags & WINED3DFMT_FLAG_BLOCKS) && (flags & WINED3D_BLT_COLOR_FILL))
if ((src_format_flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL))
--
2.11.0

View File

@@ -1,17 +1,17 @@
From bf11cf98c90e7f841ac3ccc1860409f918325203 Mon Sep 17 00:00:00 2001
From 8ec257b616f5e216f9c41eb5a08c8e1e10e57495 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Thu, 4 Jul 2013 21:10:16 +0200
Subject: wined3d: Send render target view clears through the command stream
---
dlls/d3d9/tests/visual.c | 2 +-
dlls/d3d9/tests/visual.c | 4 ++--
dlls/wined3d/cs.c | 49 ++++++++++++++++++++++++++++++++++++++++++
dlls/wined3d/device.c | 6 ++----
dlls/wined3d/wined3d_private.h | 3 +++
4 files changed, 55 insertions(+), 5 deletions(-)
4 files changed, 56 insertions(+), 6 deletions(-)
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c
index 7070895aa2..c3034c4909 100644
index 7070895aa2..c14ac9e938 100644
--- a/dlls/d3d9/tests/visual.c
+++ b/dlls/d3d9/tests/visual.c
@@ -1337,7 +1337,7 @@ static void color_fill_test(void)
@@ -23,8 +23,17 @@ index 7070895aa2..c3034c4909 100644
/* Vendor-specific formats like ATI2N are a non-issue here since they're not
* supported as offscreen plain surfaces and do not support D3DUSAGE_RENDERTARGET
* when created as texture. */
@@ -1458,7 +1458,7 @@ static void color_fill_test(void)
{
hr = IDirect3DDevice9_ColorFill(device, surface, &rect2, 0xdeadbeef);
if (formats[i].flags & BLOCKS)
- todo_wine ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x, fmt=%s.\n", hr, formats[i].name);
+ ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x, fmt=%s.\n", hr, formats[i].name);
else
ok(SUCCEEDED(hr), "Failed to color fill, hr %#x, fmt=%s.\n", hr, formats[i].name);
}
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index bf1b63b897..72e177a41e 100644
index 80a9322224..c30dfbc898 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -68,6 +68,7 @@ enum wined3d_cs_op
@@ -54,7 +63,7 @@ index bf1b63b897..72e177a41e 100644
static void wined3d_cs_exec_sync(struct wined3d_cs *cs, const void *data)
{
}
@@ -1940,6 +1953,41 @@ void wined3d_cs_emit_push_constants(struct wined3d_cs *cs, enum wined3d_push_con
@@ -1952,6 +1965,41 @@ void wined3d_cs_emit_push_constants(struct wined3d_cs *cs, enum wined3d_push_con
cs->ops->submit(cs);
}
@@ -96,7 +105,7 @@ index bf1b63b897..72e177a41e 100644
static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void *data) =
{
/* WINED3D_CS_OP_SYNC */ wined3d_cs_exec_sync,
@@ -1984,6 +2032,7 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void
@@ -1996,6 +2044,7 @@ static void (* const wined3d_cs_op_handlers[])(struct wined3d_cs *cs, const void
/* WINED3D_CS_OP_BLT_SUB_RESOURCE */ wined3d_cs_exec_blt_sub_resource,
/* WINED3D_CS_OP_UPDATE_SUB_RESOURCE */ wined3d_cs_exec_update_sub_resource,
/* WINED3D_CS_OP_PUSH_CONSTANTS */ wined3d_cs_exec_push_constants,
@@ -105,10 +114,10 @@ index bf1b63b897..72e177a41e 100644
static void *wined3d_cs_st_require_space(struct wined3d_cs *cs, size_t size)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 500506d789..f1b90f5ee1 100644
index 9dc893bfeb..33c1451a99 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4328,10 +4328,8 @@ HRESULT CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *devi
@@ -4324,10 +4324,8 @@ HRESULT CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *devi
return WINED3DERR_INVALIDCALL;
}
@@ -122,10 +131,10 @@ index 500506d789..f1b90f5ee1 100644
struct wined3d_rendertarget_view * CDECL wined3d_device_get_rendertarget_view(const struct wined3d_device *device,
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index ad72e10d7a..59b446167b 100644
index 26df981c77..43cca136d1 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3232,6 +3232,9 @@ void wined3d_cs_emit_blt_sub_resource(struct wined3d_cs *cs, struct wined3d_reso
@@ -3237,6 +3237,9 @@ 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;

View File

@@ -1,100 +0,0 @@
From 3d5c666305162466d808a7f8c8940264c9af019c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefandoesinger@gmx.at>
Date: Thu, 7 Apr 2016 20:04:17 +0100
Subject: wined3d: Avoid destroying views in color and depth fills.
---
dlls/wined3d/surface.c | 54 ++++++++++++++++++++------------------------------
1 file changed, 22 insertions(+), 32 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 24c8941ed7..5169cd8cea 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -548,8 +548,7 @@ static HRESULT wined3d_surface_depth_fill(struct wined3d_surface *surface, const
struct wined3d_resource *resource = &surface->container->resource;
struct wined3d_device *device = resource->device;
const struct wined3d_blitter_ops *blitter;
- struct wined3d_rendertarget_view *view;
- struct wined3d_view_desc view_desc;
+ struct wined3d_rendertarget_view view;
HRESULT hr;
if (!(blitter = wined3d_select_blitter(&device->adapter->gl_info, &device->adapter->d3d_info,
@@ -559,21 +558,17 @@ static HRESULT wined3d_surface_depth_fill(struct wined3d_surface *surface, const
return WINED3DERR_INVALIDCALL;
}
- view_desc.format_id = resource->format->id;
- view_desc.flags = 0;
- view_desc.u.texture.level_idx = surface->texture_level;
- view_desc.u.texture.level_count = 1;
- view_desc.u.texture.layer_idx = surface->texture_layer;
- view_desc.u.texture.layer_count = 1;
- if (FAILED(hr = wined3d_rendertarget_view_create(&view_desc,
- resource, NULL, &wined3d_null_parent_ops, &view)))
- {
- ERR("Failed to create rendertarget view, hr %#x.\n", hr);
- return hr;
- }
+ view.resource = resource;
+ view.parent = NULL;
+ view.parent_ops = &wined3d_null_parent_ops;
+ view.format = resource->format;
+ view.buffer_offset = 0;
+ view.width = wined3d_texture_get_level_width(surface->container, surface->texture_level);
+ view.height = wined3d_texture_get_level_height(surface->container, surface->texture_level);;
+ view.depth = 1;
+ view.sub_resource_idx = surface->texture_layer * surface->container->level_count + surface->texture_level;
- hr = blitter->depth_fill(device, view, rect, WINED3DCLEAR_ZBUFFER, depth, 0);
- wined3d_rendertarget_view_decref(view);
+ hr = blitter->depth_fill(device, &view, rect, WINED3DCLEAR_ZBUFFER, depth, 0);
return hr;
}
@@ -2259,8 +2254,7 @@ 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;
const struct wined3d_blitter_ops *blitter;
- struct wined3d_rendertarget_view *view;
- struct wined3d_view_desc view_desc;
+ struct wined3d_rendertarget_view view;
HRESULT hr;
if (!(blitter = wined3d_select_blitter(&device->adapter->gl_info, &device->adapter->d3d_info,
@@ -2270,21 +2264,17 @@ HRESULT surface_color_fill(struct wined3d_surface *s, const RECT *rect, const st
return WINED3DERR_INVALIDCALL;
}
- view_desc.format_id = resource->format->id;
- view_desc.flags = 0;
- view_desc.u.texture.level_idx = s->texture_level;
- view_desc.u.texture.level_count = 1;
- view_desc.u.texture.layer_idx = s->texture_layer;
- view_desc.u.texture.layer_count = 1;
- if (FAILED(hr = wined3d_rendertarget_view_create(&view_desc,
- resource, NULL, &wined3d_null_parent_ops, &view)))
- {
- ERR("Failed to create rendertarget view, hr %#x.\n", hr);
- return hr;
- }
+ view.resource = resource;
+ view.parent = NULL;
+ view.parent_ops = &wined3d_null_parent_ops;
+ view.format = resource->format;
+ view.buffer_offset = 0;
+ view.width = wined3d_texture_get_level_width(s->container, s->texture_level);
+ view.height = wined3d_texture_get_level_height(s->container, s->texture_level);;
+ view.depth = 1;
+ view.sub_resource_idx = s->texture_layer * s->container->level_count + s->texture_level;
- hr = blitter->color_fill(device, view, rect, color);
- wined3d_rendertarget_view_decref(view);
+ hr = blitter->color_fill(device, &view, rect, color);
return hr;
}
--
2.11.0

File diff suppressed because it is too large Load Diff