You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
Rebase against upstream changes.
This commit is contained in:
@@ -8307,7 +8307,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
static HRESULT ffp_blit_alloc(struct wined3d_device *device) { return WINED3D_OK; }
|
||||
@@ -4179,6 +5368,7 @@
|
||||
@@ -4176,6 +5365,7 @@
|
||||
const RECT *dst_rect, const struct wined3d_color *color)
|
||||
{
|
||||
const RECT draw_rect = {0, 0, dst_surface->resource.width, dst_surface->resource.height};
|
||||
@@ -8315,7 +8315,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
struct wined3d_rendertarget_view view, *view_ptr = &view;
|
||||
struct wined3d_fb_state fb = {&view_ptr, NULL, 1};
|
||||
struct wined3d_texture *texture = dst_surface->container;
|
||||
@@ -4199,6 +5389,21 @@
|
||||
@@ -4196,6 +5386,21 @@
|
||||
view.sub_resource_idx = dst_surface->texture_layer * texture->level_count + dst_surface->texture_level;
|
||||
|
||||
device_clear_render_targets(device, 1, &fb, 1, dst_rect, &draw_rect, WINED3DCLEAR_TARGET, color, 0.0f, 0);
|
||||
@@ -8337,7 +8337,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
return WINED3D_OK;
|
||||
}
|
||||
@@ -4207,6 +5412,7 @@
|
||||
@@ -4204,6 +5409,7 @@
|
||||
const RECT *dst_rect, float depth)
|
||||
{
|
||||
const RECT draw_rect = {0, 0, dst_surface->resource.width, dst_surface->resource.height};
|
||||
@@ -8345,7 +8345,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
struct wined3d_rendertarget_view view;
|
||||
struct wined3d_fb_state fb = {NULL, &view};
|
||||
struct wined3d_texture *texture = dst_surface->container;
|
||||
@@ -4222,6 +5428,20 @@
|
||||
@@ -4219,6 +5425,20 @@
|
||||
view.sub_resource_idx = dst_surface->texture_layer * texture->level_count + dst_surface->texture_level;
|
||||
|
||||
device_clear_render_targets(device, 0, &fb, 1, dst_rect, &draw_rect, WINED3DCLEAR_ZBUFFER, 0, depth, 0);
|
||||
@@ -8366,7 +8366,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
return WINED3D_OK;
|
||||
}
|
||||
@@ -4234,6 +5454,7 @@
|
||||
@@ -4231,6 +5451,7 @@
|
||||
/* Blit from offscreen surface to render target */
|
||||
struct wined3d_color_key old_blt_key = src_surface->container->async.src_blt_color_key;
|
||||
DWORD old_color_key_flags = src_surface->container->async.color_key_flags;
|
||||
@@ -8374,7 +8374,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
struct wined3d_context *context;
|
||||
|
||||
TRACE("Blt from surface %p to rendertarget %p\n", src_surface, dst_surface);
|
||||
@@ -4251,6 +5472,22 @@
|
||||
@@ -4248,6 +5469,22 @@
|
||||
|
||||
wined3d_resource_validate_location(&dst_surface->resource, dst_surface->container->resource.draw_binding);
|
||||
wined3d_resource_invalidate_location(&dst_surface->resource, ~dst_surface->container->resource.draw_binding);
|
||||
@@ -8397,7 +8397,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
const struct blit_shader ffp_blit = {
|
||||
@@ -4410,6 +5647,7 @@
|
||||
@@ -4407,6 +5644,7 @@
|
||||
const struct wined3d_format *src_format, *dst_format;
|
||||
unsigned int src_fmt_flags, dst_fmt_flags;
|
||||
struct wined3d_texture *src_texture = NULL;
|
||||
@@ -8405,7 +8405,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
void *src_data = NULL, *dst_data = NULL;
|
||||
UINT src_row_pitch, src_slice_pitch, dst_row_pitch, dst_slice_pitch;
|
||||
const BYTE *sbase = NULL;
|
||||
@@ -4440,6 +5678,23 @@
|
||||
@@ -4437,6 +5675,23 @@
|
||||
wined3d_resource_get_pitch(&dst_surface->resource, &dst_row_pitch, &dst_slice_pitch);
|
||||
src_data = dst_data;
|
||||
src_row_pitch = dst_row_pitch;
|
||||
@@ -8429,7 +8429,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
src_format = dst_surface->resource.format;
|
||||
dst_format = src_format;
|
||||
dst_fmt_flags = dst_surface->resource.format_flags;
|
||||
@@ -4451,12 +5706,14 @@
|
||||
@@ -4448,12 +5703,14 @@
|
||||
dst_fmt_flags = dst_surface->resource.format_flags;
|
||||
if (src_surface)
|
||||
{
|
||||
@@ -8444,7 +8444,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (dst_surface->resource.format->id != src_surface->resource.format->id)
|
||||
{
|
||||
if (!(src_texture = surface_convert_format(src_surface, dst_format->id)))
|
||||
@@ -4467,9 +5724,13 @@
|
||||
@@ -4464,9 +5721,13 @@
|
||||
}
|
||||
src_surface = surface_from_resource(wined3d_texture_get_sub_resource(src_texture, 0));
|
||||
}
|
||||
@@ -8458,7 +8458,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
src_format = src_surface->resource.format;
|
||||
src_fmt_flags = src_surface->resource.format_flags;
|
||||
}
|
||||
@@ -4479,8 +5740,12 @@
|
||||
@@ -4476,8 +5737,12 @@
|
||||
src_fmt_flags = dst_fmt_flags;
|
||||
}
|
||||
|
||||
@@ -8471,7 +8471,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
bpp = dst_surface->resource.format->byte_count;
|
||||
@@ -4491,12 +5756,24 @@
|
||||
@@ -4488,12 +5753,24 @@
|
||||
width = (dst_rect->right - dst_rect->left) * bpp;
|
||||
|
||||
if (src_surface)
|
||||
@@ -8496,7 +8496,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
if (src_fmt_flags & dst_fmt_flags & WINED3DFMT_FLAG_BLOCKS)
|
||||
{
|
||||
@@ -4531,7 +5808,11 @@
|
||||
@@ -4528,7 +5805,11 @@
|
||||
}
|
||||
|
||||
hr = surface_cpu_blt_compressed(sbase, dbuf,
|
||||
@@ -8508,7 +8508,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
src_format, flags, fx);
|
||||
goto release;
|
||||
}
|
||||
@@ -4539,7 +5820,11 @@
|
||||
@@ -4536,7 +5817,11 @@
|
||||
/* First, all the 'source-less' blits */
|
||||
if (flags & WINEDDBLT_COLORFILL)
|
||||
{
|
||||
@@ -8520,7 +8520,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
flags &= ~WINEDDBLT_COLORFILL;
|
||||
}
|
||||
|
||||
@@ -4588,6 +5873,7 @@
|
||||
@@ -4585,6 +5870,7 @@
|
||||
for (y = 0; y < dstheight; ++y)
|
||||
{
|
||||
memcpy(dbuf, sbuf, width);
|
||||
@@ -8528,7 +8528,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
sbuf += src_row_pitch;
|
||||
dbuf += dst_row_pitch;
|
||||
}
|
||||
@@ -4601,6 +5887,21 @@
|
||||
@@ -4598,6 +5884,21 @@
|
||||
{
|
||||
sbuf -= src_row_pitch;
|
||||
dbuf -= dst_row_pitch;
|
||||
@@ -8550,7 +8550,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
memcpy(dbuf, sbuf, width);
|
||||
}
|
||||
}
|
||||
@@ -4610,8 +5911,13 @@
|
||||
@@ -4607,8 +5908,13 @@
|
||||
for (y = 0; y < dstheight; ++y)
|
||||
{
|
||||
memmove(dbuf, sbuf, width);
|
||||
@@ -8564,7 +8564,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4620,9 +5926,15 @@
|
||||
@@ -4617,9 +5923,15 @@
|
||||
/* Stretching in y direction only. */
|
||||
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
|
||||
{
|
||||
@@ -8580,7 +8580,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4632,6 +5944,7 @@
|
||||
@@ -4629,6 +5941,7 @@
|
||||
int last_sy = -1;
|
||||
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
|
||||
{
|
||||
@@ -8588,7 +8588,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
sbuf = sbase + (sy >> 16) * src_row_pitch;
|
||||
|
||||
if ((sy >> 16) == (last_sy >> 16))
|
||||
@@ -4639,6 +5952,15 @@
|
||||
@@ -4636,6 +5949,15 @@
|
||||
/* This source row is the same as last source row -
|
||||
* Copy the already stretched row. */
|
||||
memcpy(dbuf, dbuf - dst_row_pitch, width);
|
||||
@@ -8604,7 +8604,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4685,6 +6007,7 @@
|
||||
@@ -4682,6 +6004,7 @@
|
||||
}
|
||||
#undef STRETCH_ROW
|
||||
}
|
||||
@@ -8612,7 +8612,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
dbuf += dst_row_pitch;
|
||||
last_sy = sy;
|
||||
}
|
||||
@@ -4693,6 +6016,16 @@
|
||||
@@ -4690,6 +6013,16 @@
|
||||
else
|
||||
{
|
||||
LONG dstyinc = dst_row_pitch, dstxinc = bpp;
|
||||
@@ -8629,7 +8629,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
DWORD keylow = 0xffffffff, keyhigh = 0, keymask = 0xffffffff;
|
||||
DWORD destkeylow = 0x0, destkeyhigh = 0xffffffff, destkeymask = 0xffffffff;
|
||||
if (flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYDEST | WINEDDBLT_KEYSRCOVERRIDE | WINEDDBLT_KEYDESTOVERRIDE))
|
||||
@@ -4742,7 +6075,11 @@
|
||||
@@ -4739,7 +6072,11 @@
|
||||
LONG tmpxy;
|
||||
dTopLeft = dbuf;
|
||||
dTopRight = dbuf + ((dstwidth - 1) * bpp);
|
||||
@@ -8641,7 +8641,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
dBottomRight = dBottomLeft + ((dstwidth - 1) * bpp);
|
||||
|
||||
if (fx->dwDDFX & WINEDDBLTFX_ARITHSTRETCHY)
|
||||
@@ -4819,6 +6156,7 @@
|
||||
@@ -4816,6 +6153,7 @@
|
||||
flags &= ~(WINEDDBLT_DDFX);
|
||||
}
|
||||
|
||||
@@ -8649,7 +8649,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
#define COPY_COLORKEY_FX(type) \
|
||||
do { \
|
||||
const type *s; \
|
||||
@@ -4840,6 +6178,29 @@
|
||||
@@ -4837,6 +6175,29 @@
|
||||
d = (type *)(((BYTE *)d) + dstyinc); \
|
||||
} \
|
||||
} while(0)
|
||||
@@ -8679,7 +8679,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
switch (bpp)
|
||||
{
|
||||
@@ -4858,7 +6219,11 @@
|
||||
@@ -4855,7 +6216,11 @@
|
||||
BYTE *d = dbuf, *dx;
|
||||
for (y = sy = 0; y < dstheight; ++y, sy += yinc)
|
||||
{
|
||||
@@ -8691,7 +8691,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
dx = d;
|
||||
for (x = sx = 0; x < dstwidth; ++x, sx+= xinc)
|
||||
{
|
||||
@@ -4889,10 +6254,12 @@
|
||||
@@ -4886,10 +6251,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8704,7 +8704,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
error:
|
||||
if (flags && FIXME_ON(d3d_surface))
|
||||
{
|
||||
@@ -4900,6 +6267,7 @@
|
||||
@@ -4897,6 +6264,7 @@
|
||||
}
|
||||
|
||||
release:
|
||||
@@ -8712,7 +8712,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (dst_data)
|
||||
{
|
||||
wined3d_resource_release_map_ptr(&dst_surface->resource, context);
|
||||
@@ -4918,6 +6286,14 @@
|
||||
@@ -4915,6 +6283,14 @@
|
||||
wined3d_texture_decref(src_texture);
|
||||
if (context)
|
||||
context_release(context);
|
||||
@@ -8727,7 +8727,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
return hr;
|
||||
}
|
||||
@@ -4962,6 +6338,7 @@
|
||||
@@ -4959,6 +6335,7 @@
|
||||
cpu_blit_blit_surface,
|
||||
};
|
||||
|
||||
@@ -8735,7 +8735,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
void surface_blt_ugly(struct wined3d_surface *dst_surface, const RECT *dst_rect,
|
||||
struct wined3d_surface *src_surface, const RECT *src_rect, DWORD flags,
|
||||
const WINEDDBLTFX *fx, enum wined3d_texture_filter_type filter)
|
||||
@@ -4969,6 +6346,16 @@
|
||||
@@ -4966,6 +6343,16 @@
|
||||
struct wined3d_swapchain *src_swapchain, *dst_swapchain;
|
||||
struct wined3d_device *device = dst_surface->resource.device;
|
||||
DWORD src_ds_flags, dst_ds_flags;
|
||||
@@ -8752,7 +8752,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
BOOL scale, convert;
|
||||
|
||||
static const DWORD simple_blit = WINEDDBLT_ASYNC
|
||||
@@ -4979,6 +6366,106 @@
|
||||
@@ -4976,6 +6363,106 @@
|
||||
| WINEDDBLT_DEPTHFILL
|
||||
| WINEDDBLT_DONOTWAIT;
|
||||
|
||||
@@ -8859,7 +8859,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
if (!device->d3d_initialized)
|
||||
{
|
||||
WARN("D3D not initialized, using fallback.\n");
|
||||
@@ -5021,8 +6508,13 @@
|
||||
@@ -5018,8 +6505,13 @@
|
||||
}
|
||||
|
||||
scale = src_surface
|
||||
@@ -8873,7 +8873,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
convert = src_surface && src_surface->resource.format->id != dst_surface->resource.format->id;
|
||||
|
||||
dst_ds_flags = dst_surface->resource.format_flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL);
|
||||
@@ -5040,6 +6532,7 @@
|
||||
@@ -5037,6 +6529,7 @@
|
||||
TRACE("Depth fill.\n");
|
||||
|
||||
if (!surface_convert_depth_to_float(dst_surface, fx->u5.dwFillDepth, &depth))
|
||||
@@ -8881,7 +8881,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
return;
|
||||
|
||||
if (SUCCEEDED(wined3d_surface_depth_fill(dst_surface, dst_rect, depth)))
|
||||
@@ -5050,6 +6543,24 @@
|
||||
@@ -5047,6 +6540,24 @@
|
||||
if (SUCCEEDED(wined3d_surface_depth_blt(src_surface, src_surface->container->resource.draw_binding,
|
||||
src_rect, dst_surface, dst_surface->container->resource.draw_binding, dst_rect)))
|
||||
return;
|
||||
@@ -8906,7 +8906,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -5058,8 +6569,13 @@
|
||||
@@ -5055,8 +6566,13 @@
|
||||
|
||||
/* In principle this would apply to depth blits as well, but we don't
|
||||
* implement those in the CPU blitter at the moment. */
|
||||
@@ -8920,7 +8920,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
{
|
||||
if (scale)
|
||||
TRACE("Not doing sysmem blit because of scaling.\n");
|
||||
@@ -5080,8 +6596,13 @@
|
||||
@@ -5077,8 +6593,13 @@
|
||||
palette, fx->u5.dwFillColor, &color))
|
||||
goto fallback;
|
||||
|
||||
@@ -8934,7 +8934,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -5099,8 +6620,13 @@
|
||||
@@ -5096,8 +6617,13 @@
|
||||
color_key = &src_surface->container->async.src_blt_color_key;
|
||||
blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY;
|
||||
}
|
||||
@@ -8948,7 +8948,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
{
|
||||
/* Upload */
|
||||
if (scale)
|
||||
@@ -5109,6 +6635,7 @@
|
||||
@@ -5106,6 +6632,7 @@
|
||||
TRACE("Not doing upload because of format conversion.\n");
|
||||
else
|
||||
{
|
||||
@@ -8956,7 +8956,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
POINT dst_point = {dst_rect->left, dst_rect->top};
|
||||
|
||||
if (SUCCEEDED(surface_upload_from_surface(dst_surface, &dst_point, src_surface, src_rect)))
|
||||
@@ -5121,6 +6648,15 @@
|
||||
@@ -5118,6 +6645,15 @@
|
||||
context_release(context);
|
||||
}
|
||||
return;
|
||||
@@ -8972,7 +8972,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5144,6 +6680,7 @@
|
||||
@@ -5141,6 +6677,7 @@
|
||||
wined3d_swapchain_present(dst_swapchain, NULL, NULL, dst_swapchain->win_handle, NULL, 0);
|
||||
dst_swapchain->desc.swap_effect = swap_effect;
|
||||
|
||||
@@ -8980,7 +8980,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5339,6 +6876,49 @@
|
||||
@@ -5336,6 +6873,49 @@
|
||||
wined3d_surface_location_invalidated,
|
||||
wined3d_surface_load_location,
|
||||
};
|
||||
@@ -9030,7 +9030,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
|
||||
static HRESULT surface_init(struct wined3d_surface *surface, struct wined3d_texture *container,
|
||||
const struct wined3d_resource_desc *desc, GLenum target, unsigned int level, unsigned int layer, DWORD flags)
|
||||
@@ -5406,7 +6986,11 @@
|
||||
@@ -5403,7 +6983,11 @@
|
||||
}
|
||||
|
||||
surface->container = container;
|
||||
@@ -9042,7 +9042,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
list_init(&surface->renderbuffers);
|
||||
list_init(&surface->overlays);
|
||||
|
||||
@@ -5438,9 +7022,14 @@
|
||||
@@ -5435,9 +7019,14 @@
|
||||
if (surface->resource.map_binding == WINED3D_LOCATION_DIB)
|
||||
{
|
||||
wined3d_resource_free_sysmem(&surface->resource);
|
||||
@@ -9057,7 +9057,7 @@ diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
|
||||
}
|
||||
|
||||
return hr;
|
||||
@@ -5467,7 +7056,11 @@
|
||||
@@ -5464,7 +7053,11 @@
|
||||
if (FAILED(hr = surface_init(object, container, desc, target, level, layer, flags)))
|
||||
{
|
||||
WARN("Failed to initialize surface, returning %#x.\n", hr);
|
||||
|
||||
Reference in New Issue
Block a user