Rebase against 9ef65cf3d6af2e488d7efcb94fe61aa7e8540351.

This commit is contained in:
Sebastian Lackner 2016-08-03 01:45:47 +02:00
parent b5a323aaa3
commit 3aa3a625e3
5 changed files with 254 additions and 512 deletions

View File

@ -51,7 +51,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "7aadb08212a5269ebefcb100cf567f7cf7aa0a7c"
echo "9ef65cf3d6af2e488d7efcb94fe61aa7e8540351"
}
# Show version information

View File

@ -1,4 +1,4 @@
From f35c5d6bcd2b0d61a70da8a55b7c6bda4510fd25 Mon Sep 17 00:00:00 2001
From 39a2802a5a07da378f07e6e56b9ba89e297390fb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Thu, 29 Oct 2015 17:33:23 +0100
Subject: wined3d: Start to move surface/volume_load_location into the texture.
@ -9,101 +9,12 @@ FIXME 2: This breaks some rtv->resource != buffer checks.
wined3d_surface_prepare will be moved into the texture a lot later, after
moving allocation of all locations (including sysmem) there.
---
dlls/wined3d/context.c | 5 ++---
dlls/wined3d/device.c | 11 ++++++-----
dlls/wined3d/drawprim.c | 10 +++++-----
dlls/wined3d/swapchain.c | 7 ++++---
dlls/wined3d/texture.c | 3 ++-
dlls/wined3d/wined3d_private.h | 2 ++
6 files changed, 21 insertions(+), 17 deletions(-)
dlls/wined3d/swapchain.c | 7 ++++---
dlls/wined3d/texture.c | 1 +
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 085ed03..20d7868 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -2455,7 +2455,6 @@ static void context_validate_onscreen_formats(struct wined3d_context *context,
{
/* Onscreen surfaces are always in a swapchain */
struct wined3d_swapchain *swapchain = context->current_rt.texture->swapchain;
- struct wined3d_surface *surface;
if (context->render_offscreen || !depth_stencil) return;
if (match_depth_stencil_format(swapchain->ds_format, depth_stencil->format)) return;
@@ -2466,8 +2465,8 @@ static void context_validate_onscreen_formats(struct wined3d_context *context,
WARN("Depth stencil format is not supported by WGL, rendering the backbuffer in an FBO\n");
/* The currently active context is the necessary context to access the swapchain's onscreen buffers */
- surface = context->current_rt.texture->sub_resources[context->current_rt.sub_resource_idx].u.surface;
- surface_load_location(surface, context, WINED3D_LOCATION_TEXTURE_RGB);
+ wined3d_texture_load_location(context->current_rt.texture, context->current_rt.sub_resource_idx,
+ context, WINED3D_LOCATION_TEXTURE_RGB);
swapchain->render_to_fbo = TRUE;
swapchain_update_draw_bindings(swapchain);
context_set_render_offscreen(context, TRUE);
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 0031f79..a9cbadb 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -324,14 +324,15 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
for (i = 0; i < rt_count; ++i)
{
struct wined3d_rendertarget_view *rtv = fb->render_targets[i];
- struct wined3d_surface *rt = wined3d_rendertarget_view_get_surface(rtv);
- if (rt && rtv->format->id != WINED3DFMT_NULL)
+ if (rtv && rtv->format->id != WINED3DFMT_NULL)
{
+ struct wined3d_texture *rt = wined3d_texture_from_resource(fb->render_targets[i]->resource);
+
if (flags & WINED3DCLEAR_TARGET && !is_full_clear(target, draw_rect, rect_count ? clear_rect : NULL))
- surface_load_location(rt, context, rtv->resource->draw_binding);
+ wined3d_texture_load_location(rt, rtv->sub_resource_idx, context, rtv->resource->draw_binding);
else
- wined3d_texture_prepare_location(rt->container, rtv->sub_resource_idx,
+ wined3d_texture_prepare_location(rt, rtv->sub_resource_idx,
context, rtv->resource->draw_binding);
}
}
@@ -4184,7 +4185,7 @@ void CDECL wined3d_device_update_sub_resource(struct wined3d_device *device, str
if (!dst_point.x && !dst_point.y && src_rect.right == width && src_rect.bottom == height)
wined3d_texture_prepare_texture(texture, context, FALSE);
else
- surface_load_location(surface, context, WINED3D_LOCATION_TEXTURE_RGB);
+ wined3d_texture_load_location(texture, sub_resource_idx, context, WINED3D_LOCATION_TEXTURE_RGB);
wined3d_texture_bind_and_dirtify(texture, context, FALSE);
wined3d_surface_upload_data(surface, gl_info, resource->format,
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 9f92851..1821db4 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -438,19 +438,19 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s
for (i = 0; i < gl_info->limits.buffers; ++i)
{
struct wined3d_rendertarget_view *rtv = fb->render_targets[i];
- struct wined3d_surface *target = wined3d_rendertarget_view_get_surface(rtv);
- if (target && rtv->format->id != WINED3DFMT_NULL)
+ if (rtv && rtv->format->id != WINED3DFMT_NULL)
{
+ struct wined3d_texture *target = wined3d_texture_from_resource(rtv->resource);
if (state->render_states[WINED3D_RS_COLORWRITEENABLE])
{
- surface_load_location(target, context, rtv->resource->draw_binding);
- wined3d_texture_invalidate_location(target->container,
+ wined3d_texture_load_location(target, rtv->sub_resource_idx, context, rtv->resource->draw_binding);
+ wined3d_texture_invalidate_location(target,
rtv->sub_resource_idx, ~rtv->resource->draw_binding);
}
else
{
- wined3d_texture_prepare_location(target->container, rtv->sub_resource_idx,
+ wined3d_texture_prepare_location(target, rtv->sub_resource_idx,
context, rtv->resource->draw_binding);
}
}
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 9596735..ea52af6 100644
index 8f93095..306c499 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -327,7 +327,7 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
@ -134,18 +45,9 @@ index 9596735..ea52af6 100644
if (swapchain->render_to_fbo)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 8cb8274..8939660 100644
index 873d72b..0acc74f 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -176,7 +176,7 @@ void wined3d_texture_invalidate_location(struct wined3d_texture *texture,
/* Context activation is done by the caller. Context may be NULL in
* WINED3D_NO3D mode. */
-static BOOL wined3d_texture_load_location(struct wined3d_texture *texture,
+BOOL wined3d_texture_load_location(struct wined3d_texture *texture,
unsigned int sub_resource_idx, struct wined3d_context *context, DWORD location)
{
return texture->texture_ops->texture_load_location(texture, sub_resource_idx, context, location);
@@ -1441,6 +1441,7 @@ void wined3d_texture_upload_data(struct wined3d_texture *texture, unsigned int s
context, data, row_pitch, slice_pitch);
}
@ -154,19 +56,6 @@ index 8cb8274..8939660 100644
static void texture2d_upload_data(struct wined3d_texture *texture, unsigned int sub_resource_idx,
const struct wined3d_context *context, const struct wined3d_const_bo_address *data,
unsigned int row_pitch, unsigned int slice_pitch)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 12fc7de..bbfb1f6 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2761,6 +2761,8 @@ void *wined3d_texture_map_bo_address(const struct wined3d_bo_address *data, size
const struct wined3d_gl_info *gl_info, GLenum binding, DWORD flags) DECLSPEC_HIDDEN;
BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
+BOOL wined3d_texture_load_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
+ struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
void wined3d_texture_prepare_texture(struct wined3d_texture *texture,
struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
void wined3d_texture_set_map_binding(struct wined3d_texture *texture, DWORD map_binding) DECLSPEC_HIDDEN;
--
2.9.0

View File

@ -1,18 +1,17 @@
From 39cecce0d60c0b630442f1b5dc61d73a205599a9 Mon Sep 17 00:00:00 2001
From 5fa9c86a97fe07adf65c2c7dfdbb44522b31ad33 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Tue, 17 Nov 2015 23:13:29 -0800
Subject: wined3d: Call texture_load_location instead of surface_load_location.
---
dlls/wined3d/device.c | 9 ++++++---
dlls/wined3d/drawprim.c | 2 +-
dlls/wined3d/surface.c | 38 ++++++++++++++++++++++++--------------
dlls/wined3d/surface.c | 32 ++++++++++++++++++++------------
dlls/wined3d/swapchain.c | 8 ++++----
dlls/wined3d/texture.c | 2 +-
5 files changed, 36 insertions(+), 23 deletions(-)
4 files changed, 31 insertions(+), 20 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 5b3b0c9..147bb9a 100644
index 727abe6..afd4616 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -203,12 +203,15 @@ void device_switch_onscreen_ds(struct wined3d_device *device,
@ -42,38 +41,11 @@ index 5b3b0c9..147bb9a 100644
SetRect(out_rect, 0, 0, ds->ds_current_size.cx, ds->ds_current_size.cy);
}
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 0f914df..9103d42 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -481,7 +481,7 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s
IntersectRect(&r, &draw_rect, &current_rect);
if (!EqualRect(&r, &draw_rect))
- surface_load_location(ds, context, location);
+ wined3d_texture_load_location(ds->container, surface_get_sub_resource_idx(ds), context, location);
else
wined3d_texture_prepare_location(ds->container, dsv->sub_resource_idx, context, location);
}
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 61135b9..fe9f4fa 100644
index 2e1b97b..82d1ebd 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -450,9 +450,11 @@ static void surface_depth_blt_fbo(const struct wined3d_device *device,
/* Make sure the locations are up-to-date. Loading the destination
* surface isn't required if the entire surface is overwritten. */
- surface_load_location(src_surface, context, src_location);
+ wined3d_texture_load_location(src_surface->container, surface_get_sub_resource_idx(src_surface),
+ context, src_location);
if (!surface_is_full_rect(dst_surface, dst_rect))
- surface_load_location(dst_surface, context, dst_location);
+ wined3d_texture_load_location(dst_surface->container, surface_get_sub_resource_idx(dst_surface),
+ context, dst_location);
else
wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, context, dst_location);
@@ -546,9 +548,11 @@ static void surface_blt_fbo(const struct wined3d_device *device,
@@ -545,9 +545,11 @@ static void surface_blt_fbo(const struct wined3d_device *device,
* surface isn't required if the entire surface is overwritten. (And is
* in fact harmful if we're being called by surface_load_location() with
* the purpose of loading the destination surface.) */
@ -87,7 +59,7 @@ index 61135b9..fe9f4fa 100644
else
wined3d_texture_prepare_location(dst_texture, dst_sub_resource_idx, old_ctx, dst_location);
@@ -1192,7 +1196,7 @@ HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const P
@@ -1187,7 +1189,7 @@ HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const P
if (update_w == dst_w && update_h == dst_h)
wined3d_texture_prepare_texture(dst_texture, context, FALSE);
else
@ -96,7 +68,7 @@ index 61135b9..fe9f4fa 100644
wined3d_texture_bind_and_dirtify(dst_texture, context, FALSE);
wined3d_texture_get_memory(src_texture, src_sub_resource_idx, &data,
@@ -2451,7 +2455,7 @@ static void surface_blt_to_drawable(const struct wined3d_device *device,
@@ -2446,7 +2448,7 @@ static void surface_blt_to_drawable(const struct wined3d_device *device,
gl_info = context->gl_info;
/* Make sure the surface is up-to-date. This should probably use
@ -105,7 +77,7 @@ index 61135b9..fe9f4fa 100644
* unless we're overwriting it completely. */
wined3d_texture_load(src_texture, context, FALSE);
@@ -2949,7 +2953,8 @@ static void surface_load_sysmem(struct wined3d_surface *surface,
@@ -2944,7 +2946,8 @@ static void surface_load_sysmem(struct wined3d_surface *surface,
}
if (sub_resource->locations & (WINED3D_LOCATION_RB_MULTISAMPLE | WINED3D_LOCATION_RB_RESOLVED))
@ -115,7 +87,7 @@ index 61135b9..fe9f4fa 100644
/* Download the surface to system memory. */
if (sub_resource->locations & (WINED3D_LOCATION_TEXTURE_RGB | WINED3D_LOCATION_TEXTURE_SRGB))
@@ -2987,7 +2992,8 @@ static HRESULT surface_load_drawable(struct wined3d_surface *surface,
@@ -2982,7 +2985,8 @@ static HRESULT surface_load_drawable(struct wined3d_surface *surface,
}
surface_get_rect(surface, NULL, &r);
@ -125,7 +97,7 @@ index 61135b9..fe9f4fa 100644
surface_blt_to_drawable(texture->resource.device, context,
WINED3D_TEXF_POINT, FALSE, surface, &r, surface, &r);
@@ -3064,7 +3070,8 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
@@ -3059,7 +3063,8 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
== WINED3D_LOCATION_TEXTURE_RGB)
{
FIXME_(d3d_perf)("Downloading RGB surface %p to reload it as sRGB.\n", surface);
@ -135,7 +107,7 @@ index 61135b9..fe9f4fa 100644
}
}
else
@@ -3073,7 +3080,8 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
@@ -3068,7 +3073,8 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
== WINED3D_LOCATION_TEXTURE_SRGB)
{
FIXME_(d3d_perf)("Downloading sRGB surface %p to reload it as RGB.\n", surface);
@ -145,7 +117,7 @@ index 61135b9..fe9f4fa 100644
}
}
@@ -3081,7 +3089,7 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
@@ -3076,7 +3082,7 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
{
WARN("Trying to load a texture from sysmem, but no simple location is valid.\n");
/* Lets hope we get it from somewhere... */
@ -154,7 +126,7 @@ index 61135b9..fe9f4fa 100644
}
wined3d_texture_prepare_texture(texture, context, srgb);
@@ -3099,7 +3107,7 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
@@ -3094,7 +3100,7 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
{
TRACE("Removing the pbo attached to surface %p.\n", surface);
@ -163,7 +135,7 @@ index 61135b9..fe9f4fa 100644
wined3d_texture_set_map_binding(texture, WINED3D_LOCATION_SYSMEM);
}
@@ -3228,7 +3236,8 @@ void surface_load_location(struct wined3d_surface *surface, struct wined3d_conte
@@ -3223,7 +3229,8 @@ void surface_load_location(struct wined3d_surface *surface, struct wined3d_conte
{
ERR("Surface %p does not have any up to date location.\n", surface);
wined3d_texture_validate_location(texture, sub_resource_idx, WINED3D_LOCATION_DISCARDED);
@ -173,7 +145,7 @@ index 61135b9..fe9f4fa 100644
}
if (texture->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
@@ -4383,7 +4392,8 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
@@ -4378,7 +4385,8 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
if (!wined3d_resource_is_offscreen(&dst_texture->resource))
{
struct wined3d_context *context = context_acquire(device, dst_surface);
@ -184,7 +156,7 @@ index 61135b9..fe9f4fa 100644
}
return WINED3D_OK;
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 853d447..08b8fc2 100644
index 306c499..7000bc2 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -457,7 +457,7 @@ static void wined3d_swapchain_rotate(struct wined3d_swapchain *swapchain, struct
@ -213,10 +185,10 @@ index 853d447..08b8fc2 100644
SetRectEmpty(&swapchain->front_buffer_update);
}
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 2024bbf..e22e306 100644
index 0acc74f..2d155cb 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -2575,7 +2575,7 @@ HRESULT CDECL wined3d_texture_get_dc(struct wined3d_texture *texture, unsigned i
@@ -2883,7 +2883,7 @@ HRESULT CDECL wined3d_texture_get_dc(struct wined3d_texture *texture, unsigned i
if (device->d3d_initialized)
context = context_acquire(device, NULL);
@ -226,5 +198,5 @@ index 2024bbf..e22e306 100644
if (!surface->dc)
--
2.8.0
2.9.0

View File

@ -1,4 +1,4 @@
From 590b2e4bdbc7f4dd6719a3172a439294d64b4c7a Mon Sep 17 00:00:00 2001
From 39ded1220f3314f3ffe059fa6791444ea7e8b5c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefandoesinger@gmx.at>
Date: Sun, 3 Apr 2016 19:34:19 +0100
Subject: wined3d: send texture maps through the command stream
@ -116,7 +116,7 @@ index 737c39a..0fc98be 100644
static void *wined3d_cs_st_require_space(struct wined3d_cs *cs, size_t size)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 43615c38..d7e68ba 100644
index 2437b5a..cf93667 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -1750,6 +1750,63 @@ static void wined3d_texture_unload(struct wined3d_resource *resource)
@ -343,19 +343,19 @@ index 43615c38..d7e68ba 100644
--sub_resource->map_count;
if (!--resource->map_count && texture->update_map_binding)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 924c8aa..64b874f 100644
index c7b2e81..bc7ba09 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2784,6 +2784,8 @@ BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
BOOL wined3d_texture_load_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
@@ -2787,6 +2787,8 @@ void *wined3d_texture_map_bo_address(const struct wined3d_bo_address *data, size
const struct wined3d_gl_info *gl_info, GLenum binding, DWORD flags) DECLSPEC_HIDDEN;
BOOL wined3d_texture_prepare_location(struct wined3d_texture *texture, unsigned int sub_resource_idx,
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
+void *wined3d_texture_map_internal(struct wined3d_texture *texture, unsigned int sub_resource_idx,
+ DWORD flags) DECLSPEC_HIDDEN;
void wined3d_texture_prepare_texture(struct wined3d_texture *texture,
struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
void wined3d_texture_set_map_binding(struct wined3d_texture *texture, DWORD map_binding) DECLSPEC_HIDDEN;
@@ -2791,6 +2793,8 @@ void wined3d_texture_set_swapchain(struct wined3d_texture *texture,
@@ -2794,6 +2796,8 @@ void wined3d_texture_set_swapchain(struct wined3d_texture *texture,
struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
void wined3d_texture_unmap_bo_address(const struct wined3d_bo_address *data,
const struct wined3d_gl_info *gl_info, GLenum binding) DECLSPEC_HIDDEN;
@ -364,7 +364,7 @@ index 924c8aa..64b874f 100644
void wined3d_texture_upload_data(struct wined3d_texture *texture, unsigned int sub_resource_idx,
const struct wined3d_context *context, const struct wined3d_const_bo_address *data,
unsigned int row_pitch, unsigned int slice_pitch) DECLSPEC_HIDDEN;
@@ -3143,6 +3147,10 @@ void wined3d_cs_emit_blt(struct wined3d_cs *cs, struct wined3d_surface *dst_surf
@@ -3146,6 +3150,10 @@ void wined3d_cs_emit_blt(struct wined3d_cs *cs, struct wined3d_surface *dst_surf
void wined3d_cs_emit_clear_rtv(struct wined3d_cs *cs, struct wined3d_rendertarget_view *view,
const RECT *rect, DWORD flags, const struct wined3d_color *color, float depth, DWORD stencil,
const struct blit_shader *blitter) DECLSPEC_HIDDEN;

File diff suppressed because it is too large Load Diff