Out of what will probably end up being 6 total parts.
From: Zebediah Figura zfigura@codeweavers.com
--- dlls/ddraw/surface.c | 94 +++++++++++++++++++------------------------- 1 file changed, 41 insertions(+), 53 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 4d8812cf106..eaa036b21bf 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -1325,6 +1325,36 @@ static unsigned int ddraw_swap_interval_from_flags(DWORD flags) } }
+static void ddraw_texture_rename_to(struct ddraw_texture *dst_texture, struct wined3d_texture *wined3d_texture, + struct wined3d_texture *draw_texture, struct wined3d_rendertarget_view *rtv, void *texture_memory) +{ + struct ddraw_surface *dst_surface = dst_texture->root; + struct wined3d_rendertarget_view *current_rtv; + + /* We don't have to worry about potential texture bindings, since + * flippable surfaces can never be textures. */ + + current_rtv = wined3d_device_context_get_rendertarget_view(dst_surface->ddraw->immediate_context, 0); + if (current_rtv == dst_surface->wined3d_rtv) + wined3d_device_context_set_rendertarget_views(dst_surface->ddraw->immediate_context, 0, 1, &rtv, FALSE); + wined3d_rendertarget_view_set_parent(rtv, dst_surface); + dst_surface->wined3d_rtv = rtv; + + if (dst_surface->sub_resource_idx) + ERR("Invalid sub-resource index %u for surface %p.\n", dst_surface->sub_resource_idx, dst_surface); + + wined3d_texture_set_sub_resource_parent(wined3d_texture, 0, dst_surface); + if (draw_texture) + wined3d_texture_set_sub_resource_parent(draw_texture, 0, dst_surface); + wined3d_resource_set_parent(wined3d_texture_get_resource(wined3d_texture), dst_texture); + if (draw_texture) + wined3d_resource_set_parent(wined3d_texture_get_resource(draw_texture), dst_texture); + dst_surface->wined3d_texture = wined3d_texture; + dst_surface->draw_texture = draw_texture; + + dst_texture->texture_memory = texture_memory; +} + /* FRAPS hooks IDirectDrawSurface::Flip and expects the version 1 method to be called when the * game uses later interfaces. */ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface1_Flip(IDirectDrawSurface *iface, @@ -1333,9 +1363,9 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface1_Flip(IDirectDrawSurface * struct ddraw_surface *dst_impl = impl_from_IDirectDrawSurface(iface); struct ddraw_surface *src_impl = unsafe_impl_from_IDirectDrawSurface(src); struct ddraw_texture *dst_ddraw_texture, *src_ddraw_texture; - struct wined3d_rendertarget_view *tmp_rtv, *src_rtv, *rtv; - DDSCAPS caps = {DDSCAPS_FLIP}; struct wined3d_texture *texture, *draw_texture; + struct wined3d_rendertarget_view *tmp_rtv; + DDSCAPS caps = {DDSCAPS_FLIP}; IDirectDrawSurface *current; void *texture_memory; HRESULT hr; @@ -1359,10 +1389,7 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface1_Flip(IDirectDrawSurface * }
tmp_rtv = ddraw_surface_get_rendertarget_view(dst_impl); - if (dst_impl->sub_resource_idx) - ERR("Invalid sub-resource index %u on surface %p.\n", dst_impl->sub_resource_idx, dst_impl); texture = dst_impl->wined3d_texture; - rtv = wined3d_device_context_get_rendertarget_view(dst_impl->ddraw->immediate_context, 0); dst_ddraw_texture = wined3d_texture_get_parent(dst_impl->wined3d_texture); texture_memory = dst_ddraw_texture->texture_memory; draw_texture = dst_impl->draw_texture; @@ -1386,24 +1413,12 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface1_Flip(IDirectDrawSurface * } }
- src_rtv = ddraw_surface_get_rendertarget_view(src_impl); - if (rtv == dst_impl->wined3d_rtv) - wined3d_device_context_set_rendertarget_views(dst_impl->ddraw->immediate_context, 0, 1, &src_rtv, FALSE); - wined3d_rendertarget_view_set_parent(src_rtv, dst_impl); - dst_impl->wined3d_rtv = src_rtv; - wined3d_texture_set_sub_resource_parent(src_impl->wined3d_texture, 0, dst_impl); - if (src_impl->draw_texture) - wined3d_texture_set_sub_resource_parent(src_impl->draw_texture, 0, dst_impl); src_ddraw_texture = wined3d_texture_get_parent(src_impl->wined3d_texture); - dst_ddraw_texture->texture_memory = src_ddraw_texture->texture_memory; - wined3d_resource_set_parent(wined3d_texture_get_resource(src_impl->wined3d_texture), dst_ddraw_texture); - if (src_impl->draw_texture) - wined3d_resource_set_parent(wined3d_texture_get_resource(src_impl->draw_texture), dst_ddraw_texture); + + ddraw_texture_rename_to(dst_ddraw_texture, src_impl->wined3d_texture, src_impl->draw_texture, + ddraw_surface_get_rendertarget_view(src_impl), src_ddraw_texture->texture_memory); + dst_ddraw_texture = src_ddraw_texture; - if (src_impl->sub_resource_idx) - ERR("Invalid sub-resource index %u on surface %p.\n", src_impl->sub_resource_idx, src_impl); - dst_impl->wined3d_texture = src_impl->wined3d_texture; - dst_impl->draw_texture = src_impl->draw_texture; } else { @@ -1423,44 +1438,17 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface1_Flip(IDirectDrawSurface * }
src_impl = impl_from_IDirectDrawSurface(current); - src_rtv = ddraw_surface_get_rendertarget_view(src_impl); - if (rtv == dst_impl->wined3d_rtv) - wined3d_device_context_set_rendertarget_views(dst_impl->ddraw->immediate_context, - 0, 1, &src_rtv, FALSE); - wined3d_rendertarget_view_set_parent(src_rtv, dst_impl); - dst_impl->wined3d_rtv = src_rtv; - wined3d_texture_set_sub_resource_parent(src_impl->wined3d_texture, 0, dst_impl); - if (src_impl->draw_texture) - wined3d_texture_set_sub_resource_parent(src_impl->draw_texture, 0, dst_impl); src_ddraw_texture = wined3d_texture_get_parent(src_impl->wined3d_texture); - dst_ddraw_texture->texture_memory = src_ddraw_texture->texture_memory; - wined3d_resource_set_parent(wined3d_texture_get_resource(src_impl->wined3d_texture), dst_ddraw_texture); - if (src_impl->draw_texture) - wined3d_resource_set_parent(wined3d_texture_get_resource(src_impl->draw_texture), dst_ddraw_texture); + + ddraw_texture_rename_to(dst_ddraw_texture, src_impl->wined3d_texture, src_impl->draw_texture, + ddraw_surface_get_rendertarget_view(src_impl), src_ddraw_texture->texture_memory); + dst_ddraw_texture = src_ddraw_texture; - if (src_impl->sub_resource_idx) - ERR("Invalid sub-resource index %u on surface %p.\n", src_impl->sub_resource_idx, src_impl); - dst_impl->wined3d_texture = src_impl->wined3d_texture; - dst_impl->draw_texture = src_impl->draw_texture; dst_impl = src_impl; } }
- /* We don't have to worry about potential texture bindings, since - * flippable surfaces can never be textures. */ - if (rtv == src_impl->wined3d_rtv) - wined3d_device_context_set_rendertarget_views(dst_impl->ddraw->immediate_context, 0, 1, &tmp_rtv, FALSE); - wined3d_rendertarget_view_set_parent(tmp_rtv, src_impl); - src_impl->wined3d_rtv = tmp_rtv; - wined3d_texture_set_sub_resource_parent(texture, 0, src_impl); - if (draw_texture) - wined3d_texture_set_sub_resource_parent(draw_texture, 0, src_impl); - dst_ddraw_texture->texture_memory = texture_memory; - wined3d_resource_set_parent(wined3d_texture_get_resource(texture), dst_ddraw_texture); - if (draw_texture) - wined3d_resource_set_parent(wined3d_texture_get_resource(draw_texture), dst_ddraw_texture); - src_impl->wined3d_texture = texture; - src_impl->draw_texture = draw_texture; + ddraw_texture_rename_to(dst_ddraw_texture, texture, draw_texture, tmp_rtv, texture_memory);
if (flags & ~(DDFLIP_NOVSYNC | DDFLIP_INTERVAL2 | DDFLIP_INTERVAL3 | DDFLIP_INTERVAL4)) {
From: Zebediah Figura zfigura@codeweavers.com
So that we can allow setting the sub resource and parent ops not from the texture_sub_resource_created() callback, and also that we can "detach" a wined3d surface from ddraw after creating it, so that we can recreate the backing wined3d texture, viz. in SetSurfaceDesc(). --- dlls/ddraw/surface.c | 15 ++++++++++++--- dlls/wined3d/texture.c | 3 ++- dlls/wined3d/wined3d.spec | 2 +- include/wine/wined3d.h | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index eaa036b21bf..a881572e027 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -29,6 +29,8 @@ WINE_DECLARE_DEBUG_CHANNEL(fps); static struct ddraw_surface *unsafe_impl_from_IDirectDrawSurface2(IDirectDrawSurface2 *iface); static struct ddraw_surface *unsafe_impl_from_IDirectDrawSurface3(IDirectDrawSurface3 *iface);
+static const struct wined3d_parent_ops ddraw_surface_wined3d_parent_ops; + static inline struct ddraw_surface *impl_from_IDirectDrawGammaControl(IDirectDrawGammaControl *iface) { return CONTAINING_RECORD(iface, struct ddraw_surface, IDirectDrawGammaControl_iface); @@ -1343,9 +1345,16 @@ static void ddraw_texture_rename_to(struct ddraw_texture *dst_texture, struct wi if (dst_surface->sub_resource_idx) ERR("Invalid sub-resource index %u for surface %p.\n", dst_surface->sub_resource_idx, dst_surface);
- wined3d_texture_set_sub_resource_parent(wined3d_texture, 0, dst_surface); if (draw_texture) - wined3d_texture_set_sub_resource_parent(draw_texture, 0, dst_surface); + { + wined3d_texture_set_sub_resource_parent(draw_texture, 0, dst_surface, &ddraw_surface_wined3d_parent_ops); + wined3d_texture_set_sub_resource_parent(wined3d_texture, 0, dst_surface, &ddraw_null_wined3d_parent_ops); + } + else + { + wined3d_texture_set_sub_resource_parent(wined3d_texture, 0, dst_surface, &ddraw_surface_wined3d_parent_ops); + } + wined3d_resource_set_parent(wined3d_texture_get_resource(wined3d_texture), dst_texture); if (draw_texture) wined3d_resource_set_parent(wined3d_texture_get_resource(draw_texture), dst_texture); @@ -6132,7 +6141,7 @@ static HRESULT ddraw_texture_init(struct ddraw_texture *texture, struct ddraw *d assert(parent->wined3d_texture == draw_texture); parent->draw_texture = draw_texture; parent->wined3d_texture = wined3d_texture; - wined3d_texture_set_sub_resource_parent(wined3d_texture, i, parent); + wined3d_texture_set_sub_resource_parent(wined3d_texture, i, parent, &ddraw_null_wined3d_parent_ops); wined3d_texture_incref(wined3d_texture); } } diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index 33b938ad460..c6e80f45766 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -4329,7 +4329,7 @@ void * CDECL wined3d_texture_get_sub_resource_parent(struct wined3d_texture *tex }
void CDECL wined3d_texture_set_sub_resource_parent(struct wined3d_texture *texture, - unsigned int sub_resource_idx, void *parent) + unsigned int sub_resource_idx, void *parent, const struct wined3d_parent_ops *parent_ops) { TRACE("texture %p, sub_resource_idx %u, parent %p.\n", texture, sub_resource_idx, parent);
@@ -4337,6 +4337,7 @@ void CDECL wined3d_texture_set_sub_resource_parent(struct wined3d_texture *textu return;
texture->sub_resources[sub_resource_idx].parent = parent; + texture->sub_resources[sub_resource_idx].parent_ops = parent_ops; }
HRESULT CDECL wined3d_texture_get_sub_resource_desc(const struct wined3d_texture *texture, diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 2980568d94e..0f7c7938c39 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -307,7 +307,7 @@ @ cdecl wined3d_texture_set_color_key(ptr long ptr) @ cdecl wined3d_texture_set_lod(ptr long) @ cdecl wined3d_texture_set_overlay_position(ptr long long long) -@ cdecl wined3d_texture_set_sub_resource_parent(ptr long ptr) +@ cdecl wined3d_texture_set_sub_resource_parent(ptr long ptr ptr) @ cdecl wined3d_texture_update_desc(ptr long long long long long long ptr long) @ cdecl wined3d_texture_update_overlay(ptr long ptr ptr long ptr long)
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 5d8a1156b21..4535892fb5f 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2866,7 +2866,7 @@ unsigned int __cdecl wined3d_texture_set_lod(struct wined3d_texture *texture, un HRESULT __cdecl wined3d_texture_set_overlay_position(struct wined3d_texture *texture, unsigned int sub_resource_idx, LONG x, LONG y); void __cdecl wined3d_texture_set_sub_resource_parent(struct wined3d_texture *texture, - unsigned int sub_resource_idx, void *parent); + unsigned int sub_resource_idx, void *parent, const struct wined3d_parent_ops *parent_ops); HRESULT __cdecl wined3d_texture_update_desc(struct wined3d_texture *texture, unsigned int sub_resource_idx, UINT width, UINT height, enum wined3d_format_id format_id, enum wined3d_multisample_type multisample_type, UINT multisample_quality,
From: Zebediah Figura zfigura@codeweavers.com
So that we can "detach" a wined3d surface from ddraw after creating it, in turn so that we can recreate the backing wined3d texture for a surface, namely for SetSurfaceDesc(). --- dlls/ddraw/surface.c | 14 ++++++++++---- dlls/wined3d/resource.c | 3 ++- dlls/wined3d/wined3d.spec | 2 +- include/wine/wined3d.h | 3 ++- 4 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index a881572e027..3caee53ee73 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -30,6 +30,7 @@ static struct ddraw_surface *unsafe_impl_from_IDirectDrawSurface2(IDirectDrawSur static struct ddraw_surface *unsafe_impl_from_IDirectDrawSurface3(IDirectDrawSurface3 *iface);
static const struct wined3d_parent_ops ddraw_surface_wined3d_parent_ops; +static const struct wined3d_parent_ops ddraw_texture_wined3d_parent_ops;
static inline struct ddraw_surface *impl_from_IDirectDrawGammaControl(IDirectDrawGammaControl *iface) { @@ -1349,15 +1350,18 @@ static void ddraw_texture_rename_to(struct ddraw_texture *dst_texture, struct wi { wined3d_texture_set_sub_resource_parent(draw_texture, 0, dst_surface, &ddraw_surface_wined3d_parent_ops); wined3d_texture_set_sub_resource_parent(wined3d_texture, 0, dst_surface, &ddraw_null_wined3d_parent_ops); + wined3d_resource_set_parent(wined3d_texture_get_resource(draw_texture), + dst_texture, &ddraw_texture_wined3d_parent_ops); + wined3d_resource_set_parent(wined3d_texture_get_resource(wined3d_texture), + dst_texture, &ddraw_null_wined3d_parent_ops); } else { wined3d_texture_set_sub_resource_parent(wined3d_texture, 0, dst_surface, &ddraw_surface_wined3d_parent_ops); + wined3d_resource_set_parent(wined3d_texture_get_resource(wined3d_texture), + dst_texture, &ddraw_texture_wined3d_parent_ops); }
- wined3d_resource_set_parent(wined3d_texture_get_resource(wined3d_texture), dst_texture); - if (draw_texture) - wined3d_resource_set_parent(wined3d_texture_get_resource(draw_texture), dst_texture); dst_surface->wined3d_texture = wined3d_texture; dst_surface->draw_texture = draw_texture;
@@ -6134,7 +6138,9 @@ static HRESULT ddraw_texture_init(struct ddraw_texture *texture, struct ddraw *d NULL, &ddraw_null_wined3d_parent_ops, &wined3d_texture))) goto fail;
- wined3d_resource_set_parent(wined3d_texture_get_resource(wined3d_texture), texture); + wined3d_resource_set_parent(wined3d_texture_get_resource(wined3d_texture), + texture, &ddraw_null_wined3d_parent_ops); + for (i = 0; i < layers * levels; ++i) { parent = wined3d_texture_get_sub_resource_parent(draw_texture, i); diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c index e2100627198..c1e16c71799 100644 --- a/dlls/wined3d/resource.c +++ b/dlls/wined3d/resource.c @@ -292,9 +292,10 @@ void * CDECL wined3d_resource_get_parent(const struct wined3d_resource *resource return resource->parent; }
-void CDECL wined3d_resource_set_parent(struct wined3d_resource *resource, void *parent) +void CDECL wined3d_resource_set_parent(struct wined3d_resource *resource, void *parent, const struct wined3d_parent_ops *parent_ops) { resource->parent = parent; + resource->parent_ops = parent_ops; }
void CDECL wined3d_resource_get_desc(const struct wined3d_resource *resource, struct wined3d_resource_desc *desc) diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 0f7c7938c39..300fc2978da 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -195,7 +195,7 @@ @ cdecl wined3d_resource_get_priority(ptr) @ cdecl wined3d_resource_map(ptr long ptr ptr long) @ cdecl wined3d_resource_preload(ptr) -@ cdecl wined3d_resource_set_parent(ptr ptr) +@ cdecl wined3d_resource_set_parent(ptr ptr ptr) @ cdecl wined3d_resource_set_priority(ptr long) @ cdecl wined3d_resource_unmap(ptr long)
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 4535892fb5f..ea4be6100f2 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2679,7 +2679,8 @@ unsigned int __cdecl wined3d_resource_get_priority(const struct wined3d_resource HRESULT __cdecl wined3d_resource_map(struct wined3d_resource *resource, unsigned int sub_resource_idx, struct wined3d_map_desc *map_desc, const struct wined3d_box *box, uint32_t flags); void __cdecl wined3d_resource_preload(struct wined3d_resource *resource); -void __cdecl wined3d_resource_set_parent(struct wined3d_resource *resource, void *parent); +void __cdecl wined3d_resource_set_parent(struct wined3d_resource *resource, + void *parent, const struct wined3d_parent_ops *parent_ops); unsigned int __cdecl wined3d_resource_set_priority(struct wined3d_resource *resource, unsigned int priority); HRESULT __cdecl wined3d_resource_unmap(struct wined3d_resource *resource, unsigned int sub_resource_idx);
From: Zebediah Figura zfigura@codeweavers.com
--- dlls/ddraw/ddraw.c | 28 ++--------------- dlls/ddraw/ddraw_private.h | 3 +- dlls/ddraw/surface.c | 63 ++++++++++++++++++++++++-------------- 3 files changed, 43 insertions(+), 51 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c index 7d9d25e62c7..d6570739a51 100644 --- a/dlls/ddraw/ddraw.c +++ b/dlls/ddraw/ddraw.c @@ -5033,35 +5033,11 @@ static HRESULT CDECL device_parent_texture_sub_resource_created(struct wined3d_d enum wined3d_resource_type type, struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx, void **parent, const struct wined3d_parent_ops **parent_ops) { - struct ddraw *ddraw = ddraw_from_device_parent(device_parent); - struct ddraw_surface *ddraw_surface; - TRACE("device_parent %p, type %#x, wined3d_texture %p, sub_resource_idx %u, parent %p, parent_ops %p.\n", device_parent, type, wined3d_texture, sub_resource_idx, parent, parent_ops);
- /* We have a swapchain or wined3d internal texture. */ - if (type != WINED3D_RTYPE_TEXTURE_2D || !wined3d_texture_get_parent(wined3d_texture) - || wined3d_texture_get_parent(wined3d_texture) == ddraw) - { - *parent = NULL; - *parent_ops = &ddraw_null_wined3d_parent_ops; - - return DD_OK; - } - - if (!(ddraw_surface = heap_alloc_zero(sizeof(*ddraw_surface)))) - { - ERR("Failed to allocate surface memory.\n"); - return DDERR_OUTOFVIDEOMEMORY; - } - - ddraw_surface_init(ddraw_surface, ddraw, wined3d_texture, sub_resource_idx, parent_ops); - *parent = ddraw_surface; - - ddraw_update_lost_surfaces(ddraw); - list_add_head(&ddraw->surface_list, &ddraw_surface->surface_list_entry); - - TRACE("Created ddraw surface %p.\n", ddraw_surface); + *parent = NULL; + *parent_ops = &ddraw_null_wined3d_parent_ops;
return DD_OK; } diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index e3fac63a38f..42ec8868257 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -239,8 +239,7 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_ struct ddraw_surface **surface, IUnknown *outer_unknown, unsigned int version) DECLSPEC_HIDDEN; struct wined3d_rendertarget_view *ddraw_surface_get_rendertarget_view(struct ddraw_surface *surface) DECLSPEC_HIDDEN; void ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, - struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx, - const struct wined3d_parent_ops **parent_ops) DECLSPEC_HIDDEN; + struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx) DECLSPEC_HIDDEN; HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface, const RECT *rect, BOOL read, unsigned int swap_interval) DECLSPEC_HIDDEN;
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 3caee53ee73..7941abc323a 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -6117,10 +6117,8 @@ static HRESULT ddraw_texture_init(struct ddraw_texture *texture, struct ddraw *d draw_texture_desc.access = WINED3D_RESOURCE_ACCESS_GPU; draw_texture_desc.usage = WINED3DUSAGE_PRIVATE;
- if (SUCCEEDED(hr = wined3d_texture_create(wined3d_device, &draw_texture_desc, layers, + if (FAILED(hr = wined3d_texture_create(wined3d_device, &draw_texture_desc, layers, levels, 0, NULL, texture, &ddraw_texture_wined3d_parent_ops, &draw_texture))) - wined3d_texture_decref(draw_texture); - else WARN("Failed to create draw texture, hr %#lx.\n", hr); }
@@ -6140,16 +6138,6 @@ static HRESULT ddraw_texture_init(struct ddraw_texture *texture, struct ddraw *d
wined3d_resource_set_parent(wined3d_texture_get_resource(wined3d_texture), texture, &ddraw_null_wined3d_parent_ops); - - for (i = 0; i < layers * levels; ++i) - { - parent = wined3d_texture_get_sub_resource_parent(draw_texture, i); - assert(parent->wined3d_texture == draw_texture); - parent->draw_texture = draw_texture; - parent->wined3d_texture = wined3d_texture; - wined3d_texture_set_sub_resource_parent(wined3d_texture, i, parent, &ddraw_null_wined3d_parent_ops); - wined3d_texture_incref(wined3d_texture); - } } else { @@ -6167,12 +6155,14 @@ static HRESULT ddraw_texture_init(struct ddraw_texture *texture, struct ddraw *d goto fail; }
- root = wined3d_texture_get_sub_resource_parent(wined3d_texture, 0); - texture->root = root; - for (i = 0; i < layers; ++i) { - struct ddraw_surface **attach = &root->complex_array[layers - 1 - i]; + struct ddraw_surface **attach; + + if (!i) + attach = &texture->root; + else + attach = &texture->root->complex_array[layers - 1 - i];
for (j = 0; j < levels; ++j) { @@ -6182,7 +6172,27 @@ static HRESULT ddraw_texture_init(struct ddraw_texture *texture, struct ddraw *d struct ddraw_surface *mip; DDSURFACEDESC2 *mip_desc;
- mip = wined3d_texture_get_sub_resource_parent(wined3d_texture, sub_resource_idx); + if (!(mip = heap_alloc_zero(sizeof(*mip)))) + { + hr = DDERR_OUTOFVIDEOMEMORY; + goto fail; + } + + ddraw_surface_init(mip, ddraw, wined3d_texture, sub_resource_idx); + + if (draw_texture) + { + wined3d_texture_set_sub_resource_parent(draw_texture, sub_resource_idx, + mip, &ddraw_surface_wined3d_parent_ops); + wined3d_texture_set_sub_resource_parent(wined3d_texture, sub_resource_idx, + mip, &ddraw_null_wined3d_parent_ops); + wined3d_texture_incref(mip->draw_texture = draw_texture); + } + else + { + wined3d_texture_set_sub_resource_parent(wined3d_texture, sub_resource_idx, + mip, &ddraw_surface_wined3d_parent_ops); + }
mip->sysmem_fallback = sysmem_fallback; mip_desc = &mip->surface_desc; @@ -6254,14 +6264,18 @@ static HRESULT ddraw_texture_init(struct ddraw_texture *texture, struct ddraw *d
}
- if (mip == root) - continue; + ddraw_update_lost_surfaces(ddraw); + list_add_head(&ddraw->surface_list, &mip->surface_list_entry); + + TRACE("Created ddraw surface %p.\n", mip);
*attach = mip; attach = &mip->complex_array[0]; } }
+ root = texture->root; + wined3d_device_incref(texture->wined3d_device = ddraw->wined3d_device);
if (desc->dwFlags & DDSD_CKDESTOVERLAY) @@ -6278,6 +6292,8 @@ static HRESULT ddraw_texture_init(struct ddraw_texture *texture, struct ddraw *d (struct wined3d_color_key *)&desc->ddckCKSrcBlt);
wined3d_texture_decref(wined3d_texture); + if (draw_texture) + wined3d_texture_decref(draw_texture);
if (reserve_memory && FAILED(hr = ddraw_surface_reserve_memory(wined3d_texture, 1))) { @@ -6289,6 +6305,9 @@ static HRESULT ddraw_texture_init(struct ddraw_texture *texture, struct ddraw *d return D3D_OK;
fail: + if (draw_texture) + wined3d_texture_decref(draw_texture); + parent = wined3d_texture_get_sub_resource_parent(draw_texture, 0); if (texture->version == 7) IDirectDrawSurface7_Release(&parent->IDirectDrawSurface7_iface); @@ -6809,8 +6828,7 @@ fail: }
void ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, - struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx, - const struct wined3d_parent_ops **parent_ops) + struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx) { struct ddraw_texture *texture = wined3d_texture_get_parent(wined3d_texture); unsigned int version = texture->version; @@ -6847,7 +6865,6 @@ void ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw,
wined3d_texture_incref(surface->wined3d_texture = wined3d_texture); surface->sub_resource_idx = sub_resource_idx; - *parent_ops = &ddraw_surface_wined3d_parent_ops; surface->texture_location = DDRAW_SURFACE_LOCATION_DEFAULT;
wined3d_private_store_init(&surface->private_store);
From: Zebediah Figura zfigura@codeweavers.com
--- dlls/ddraw/ddraw_private.h | 2 - dlls/ddraw/surface.c | 86 +++++++++++++++++++------------------- 2 files changed, 43 insertions(+), 45 deletions(-)
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index 42ec8868257..18ec1d84a5b 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -238,8 +238,6 @@ struct ddraw_texture HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_desc, struct ddraw_surface **surface, IUnknown *outer_unknown, unsigned int version) DECLSPEC_HIDDEN; struct wined3d_rendertarget_view *ddraw_surface_get_rendertarget_view(struct ddraw_surface *surface) DECLSPEC_HIDDEN; -void ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, - struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx) DECLSPEC_HIDDEN; HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface, const RECT *rect, BOOL read, unsigned int swap_interval) DECLSPEC_HIDDEN;
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 7941abc323a..2fa2ef01687 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -5912,6 +5912,49 @@ static const struct wined3d_parent_ops ddraw_surface_wined3d_parent_ops = ddraw_surface_wined3d_object_destroyed, };
+static void ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, + struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx) +{ + struct ddraw_texture *texture = wined3d_texture_get_parent(wined3d_texture); + unsigned int version = texture->version; + + surface->IDirectDrawSurface7_iface.lpVtbl = &ddraw_surface7_vtbl; + surface->IDirectDrawSurface4_iface.lpVtbl = &ddraw_surface4_vtbl; + surface->IDirectDrawSurface3_iface.lpVtbl = &ddraw_surface3_vtbl; + surface->IDirectDrawSurface2_iface.lpVtbl = &ddraw_surface2_vtbl; + surface->IDirectDrawSurface_iface.lpVtbl = &ddraw_surface1_vtbl; + surface->IDirectDrawGammaControl_iface.lpVtbl = &ddraw_gamma_control_vtbl; + surface->IDirect3DTexture2_iface.lpVtbl = &d3d_texture2_vtbl; + surface->IDirect3DTexture_iface.lpVtbl = &d3d_texture1_vtbl; + surface->iface_count = 1; + surface->version = version; + surface->ddraw = ddraw; + + if (version == 7) + { + surface->ref7 = 1; + surface->texture_outer = (IUnknown *)&surface->IDirectDrawSurface7_iface; + } + else if (version == 4) + { + surface->ref4 = 1; + surface->texture_outer = (IUnknown *)&surface->IDirectDrawSurface4_iface; + } + else + { + surface->ref1 = 1; + surface->texture_outer = (IUnknown *)&surface->IDirectDrawSurface_iface; + } + + surface->first_attached = surface; + + wined3d_texture_incref(surface->wined3d_texture = wined3d_texture); + surface->sub_resource_idx = sub_resource_idx; + surface->texture_location = DDRAW_SURFACE_LOCATION_DEFAULT; + + wined3d_private_store_init(&surface->private_store); +} + static void STDMETHODCALLTYPE ddraw_texture_wined3d_object_destroyed(void *parent) { struct ddraw_texture *texture = parent; @@ -6827,49 +6870,6 @@ fail: return hr; }
-void ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, - struct wined3d_texture *wined3d_texture, unsigned int sub_resource_idx) -{ - struct ddraw_texture *texture = wined3d_texture_get_parent(wined3d_texture); - unsigned int version = texture->version; - - surface->IDirectDrawSurface7_iface.lpVtbl = &ddraw_surface7_vtbl; - surface->IDirectDrawSurface4_iface.lpVtbl = &ddraw_surface4_vtbl; - surface->IDirectDrawSurface3_iface.lpVtbl = &ddraw_surface3_vtbl; - surface->IDirectDrawSurface2_iface.lpVtbl = &ddraw_surface2_vtbl; - surface->IDirectDrawSurface_iface.lpVtbl = &ddraw_surface1_vtbl; - surface->IDirectDrawGammaControl_iface.lpVtbl = &ddraw_gamma_control_vtbl; - surface->IDirect3DTexture2_iface.lpVtbl = &d3d_texture2_vtbl; - surface->IDirect3DTexture_iface.lpVtbl = &d3d_texture1_vtbl; - surface->iface_count = 1; - surface->version = version; - surface->ddraw = ddraw; - - if (version == 7) - { - surface->ref7 = 1; - surface->texture_outer = (IUnknown *)&surface->IDirectDrawSurface7_iface; - } - else if (version == 4) - { - surface->ref4 = 1; - surface->texture_outer = (IUnknown *)&surface->IDirectDrawSurface4_iface; - } - else - { - surface->ref1 = 1; - surface->texture_outer = (IUnknown *)&surface->IDirectDrawSurface_iface; - } - - surface->first_attached = surface; - - wined3d_texture_incref(surface->wined3d_texture = wined3d_texture); - surface->sub_resource_idx = sub_resource_idx; - surface->texture_location = DDRAW_SURFACE_LOCATION_DEFAULT; - - wined3d_private_store_init(&surface->private_store); -} - static void STDMETHODCALLTYPE view_wined3d_object_destroyed(void *parent) { struct ddraw_surface *surface = parent;
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=130780
Your paranoid android.
=== debian11 (32 bit report) ===
ddraw: dsurface.c:534: Test failed: Surface has 5 attachments dsurface.c:374: Test failed: Unexpected surface 001A5640 enumerated dsurface.c:374: Test failed: Unexpected surface 001A5510 enumerated dsurface.c:374: Test failed: Unexpected surface 001A53E0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A52B0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A5180 enumerated dsurface.c:374: Test failed: Unexpected surface 001A5050 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4F20 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4DF0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4CC0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4B90 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4A60 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4930 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4800 enumerated dsurface.c:374: Test failed: Unexpected surface 001A46D0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A45A0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4470 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4340 enumerated dsurface.c:374: Test failed: Unexpected surface 001A41F8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A40C8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3F98 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3E68 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3D38 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3C08 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3AD8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A39A8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3878 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3748 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3618 enumerated dsurface.c:374: Test failed: Unexpected surface 001A34E8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A33B8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3288 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3158 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3028 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2EF8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2DC8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2C98 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2B68 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2A38 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2908 enumerated dsurface.c:374: Test failed: Unexpected surface 001A27D8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A26A8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2578 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2448 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2318 enumerated dsurface.c:374: Test failed: Unexpected surface 001A21E8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A20B8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A1F88 enumerated dsurface.c:374: Test failed: Unexpected surface 001A1130 enumerated dsurface.c:374: Test failed: Unexpected surface 001A1000 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0ED0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0DA0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0C70 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0B40 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0A10 enumerated dsurface.c:374: Test failed: Unexpected surface 001A08E0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A07B0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0680 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0550 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0420 enumerated dsurface.c:374: Test failed: Unexpected surface 001A02F0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A01C0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0090 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FF60 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FE30 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FD00 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FBD0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FAA0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F970 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F840 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F710 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F5E0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F4B0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F380 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F250 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F120 enumerated dsurface.c:374: Test failed: Unexpected surface 0019EFF0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019EEC0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019ED90 enumerated dsurface.c:374: Test failed: Unexpected surface 0019EC48 enumerated dsurface.c:374: Test failed: Unexpected surface 0019EB18 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E9E8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E8B8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E788 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E658 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E528 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E3F8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E2C8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E198 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E068 enumerated dsurface.c:374: Test failed: Unexpected surface 0019DF38 enumerated dsurface.c:374: Test failed: Unexpected surface 0019DE08 enumerated dsurface.c:374: Test failed: Unexpected surface 0019DCD8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019DBA8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019DA78 enumerated dsurface.c:637: Test failed: 94 surfaces enumerated, expected 0
=== debian11 (32 bit zh:CN report) ===
ddraw: dsurface.c:534: Test failed: Surface has 5 attachments dsurface.c:374: Test failed: Unexpected surface 001A5A50 enumerated dsurface.c:374: Test failed: Unexpected surface 001A5920 enumerated dsurface.c:374: Test failed: Unexpected surface 001A57F0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A56C0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A5590 enumerated dsurface.c:374: Test failed: Unexpected surface 001A5460 enumerated dsurface.c:374: Test failed: Unexpected surface 001A5330 enumerated dsurface.c:374: Test failed: Unexpected surface 001A5200 enumerated dsurface.c:374: Test failed: Unexpected surface 001A50D0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4FA0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4E70 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4D40 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4C10 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4AE0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A49B0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4880 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4750 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4608 enumerated dsurface.c:374: Test failed: Unexpected surface 001A44D8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A43A8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4278 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4148 enumerated dsurface.c:374: Test failed: Unexpected surface 001A4018 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3EE8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3DB8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3C88 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3B58 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3A28 enumerated dsurface.c:374: Test failed: Unexpected surface 001A38F8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A37C8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3698 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3568 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3438 enumerated dsurface.c:374: Test failed: Unexpected surface 001A3308 enumerated dsurface.c:374: Test failed: Unexpected surface 001A31D8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A30A8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2F78 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2E48 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2D18 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2BE8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2AB8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2988 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2858 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2728 enumerated dsurface.c:374: Test failed: Unexpected surface 001A25F8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A24C8 enumerated dsurface.c:374: Test failed: Unexpected surface 001A2398 enumerated dsurface.c:374: Test failed: Unexpected surface 001A1540 enumerated dsurface.c:374: Test failed: Unexpected surface 001A1410 enumerated dsurface.c:374: Test failed: Unexpected surface 001A12E0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A11B0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A1080 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0F50 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0E20 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0CF0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0BC0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0A90 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0960 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0830 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0700 enumerated dsurface.c:374: Test failed: Unexpected surface 001A05D0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A04A0 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0370 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0240 enumerated dsurface.c:374: Test failed: Unexpected surface 001A0110 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FFE0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FEB0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FD80 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FC50 enumerated dsurface.c:374: Test failed: Unexpected surface 0019FB20 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F9F0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F8C0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F790 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F660 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F530 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F400 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F2D0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F1A0 enumerated dsurface.c:374: Test failed: Unexpected surface 0019F058 enumerated dsurface.c:374: Test failed: Unexpected surface 0019EF28 enumerated dsurface.c:374: Test failed: Unexpected surface 0019EDF8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019ECC8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019EB98 enumerated dsurface.c:374: Test failed: Unexpected surface 0019EA68 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E938 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E808 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E6D8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E5A8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E478 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E348 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E218 enumerated dsurface.c:374: Test failed: Unexpected surface 0019E0E8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019DFB8 enumerated dsurface.c:374: Test failed: Unexpected surface 0019DE88 enumerated dsurface.c:637: Test failed: 94 surfaces enumerated, expected 0
=== debian11b (64 bit WoW report) ===
ddraw: dsurface.c:534: Test failed: Surface has 5 attachments dsurface.c:374: Test failed: Unexpected surface 0000000000911D00 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000911B30 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000911960 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000911790 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009115C0 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009113F0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000911220 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000911050 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000910E80 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000910CB0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000910AE0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000910910 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000910740 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000910570 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009103A0 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009101D0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000910000 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090FE10 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090FC40 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090FA70 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090F8A0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090F6D0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090F500 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090F330 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090F160 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090EF90 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090EDC0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090EBF0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090EA20 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090E850 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090E680 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090E4B0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090E2E0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090E110 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090DF40 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090DD70 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090DBA0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090D9D0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090D800 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090D630 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090D460 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090D290 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090D0C0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090CEF0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090CD20 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090CB50 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090C980 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090B5C0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090B3F0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090B220 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090B050 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090AE80 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090ACB0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090AAE0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090A910 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090A740 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090A570 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090A3A0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090A1D0 enumerated dsurface.c:374: Test failed: Unexpected surface 000000000090A000 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000909E30 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000909C60 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000909A90 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009098C0 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009096F0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000909520 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000909350 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000909180 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000908FB0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000908DE0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000908C10 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000908A40 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000908870 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009086A0 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009084D0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000908300 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000908130 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000907F60 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000907D70 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000907BA0 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009079D0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000907800 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000907630 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000907460 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000907290 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009070C0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000906EF0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000906D20 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000906B50 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000906980 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009067B0 enumerated dsurface.c:374: Test failed: Unexpected surface 00000000009065E0 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000906410 enumerated dsurface.c:374: Test failed: Unexpected surface 0000000000906240 enumerated dsurface.c:637: Test failed: 94 surfaces enumerated, expected 0