=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: wined3d: Remove old surface flipping hacks.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Sep 8 08:15:46 CDT 2015
Module: wine
Branch: master
Commit: ebd6bf7f7a3493284b2aaa21ce3ab982336e3835
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ebd6bf7f7a3493284b2aaa21ce3ab982336e3835
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Mon Sep 7 23:50:35 2015 +0200
wined3d: Remove old surface flipping hacks.
They're non-functional these days anyway.
---
dlls/wined3d/surface.c | 77 ------------------------------------------
dlls/wined3d/swapchain.c | 47 +++++---------------------
dlls/wined3d/wined3d_private.h | 1 -
3 files changed, 9 insertions(+), 116 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index f303d90..f01260c 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -2881,83 +2881,6 @@ void surface_prepare_rb(struct wined3d_surface *surface, const struct wined3d_gl
}
}
-void flip_surface(struct wined3d_surface *front, struct wined3d_surface *back)
-{
- if (front->container->level_count != 1 || front->container->layer_count != 1
- || back->container->level_count != 1 || back->container->layer_count != 1)
- ERR("Flip between surfaces %p and %p not supported.\n", front, back);
-
- /* Flip the surface contents */
- /* Flip the DC */
- {
- HDC tmp;
- tmp = front->hDC;
- front->hDC = back->hDC;
- back->hDC = tmp;
- }
-
- /* Flip the DIBsection */
- {
- HBITMAP tmp = front->dib.DIBsection;
- front->dib.DIBsection = back->dib.DIBsection;
- back->dib.DIBsection = tmp;
- }
-
- /* Flip the surface data */
- {
- void* tmp;
-
- tmp = front->dib.bitmap_data;
- front->dib.bitmap_data = back->dib.bitmap_data;
- back->dib.bitmap_data = tmp;
-
- tmp = front->resource.heap_memory;
- front->resource.heap_memory = back->resource.heap_memory;
- back->resource.heap_memory = tmp;
- }
-
- /* Flip the PBO */
- {
- GLuint tmp_pbo = front->pbo;
- front->pbo = back->pbo;
- back->pbo = tmp_pbo;
- }
-
- /* Flip the opengl texture */
- {
- GLuint tmp;
-
- tmp = back->container->texture_rgb.name;
- back->container->texture_rgb.name = front->container->texture_rgb.name;
- front->container->texture_rgb.name = tmp;
-
- tmp = back->container->texture_srgb.name;
- back->container->texture_srgb.name = front->container->texture_srgb.name;
- front->container->texture_srgb.name = tmp;
-
- tmp = back->rb_multisample;
- back->rb_multisample = front->rb_multisample;
- front->rb_multisample = tmp;
-
- tmp = back->rb_resolved;
- back->rb_resolved = front->rb_resolved;
- front->rb_resolved = tmp;
-
- resource_unload(&back->resource);
- resource_unload(&front->resource);
- }
-
- {
- DWORD tmp_flags = back->flags;
- back->flags = front->flags;
- front->flags = tmp_flags;
-
- tmp_flags = back->locations;
- back->locations = front->locations;
- front->locations = tmp_flags;
- }
-}
-
/* Does a direct frame buffer -> texture copy. Stretching is done with single
* pixel copy calls. */
static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struct wined3d_surface *src_surface,
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index b37bbb9..0a1373f 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -555,45 +555,16 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT
}
front = surface_from_resource(wined3d_texture_get_sub_resource(swapchain->front_buffer, 0));
- if (!swapchain->render_to_fbo && ((front->locations & WINED3D_LOCATION_SYSMEM)
- || (back_buffer->locations & WINED3D_LOCATION_SYSMEM)))
- {
- /* Both memory copies of the surfaces are ok, flip them around too instead of dirtifying
- * Doesn't work with render_to_fbo because we're not flipping
- */
-
- if (front->resource.size == back_buffer->resource.size)
- {
- flip_surface(front, back_buffer);
- /* Tell the front buffer surface that is has been modified. However,
- * the other locations were preserved during that, so keep the flags.
- * This serves to update the emulated overlay, if any. */
- surface_validate_location(front, WINED3D_LOCATION_DRAWABLE);
- }
- else
- {
- surface_validate_location(front, WINED3D_LOCATION_DRAWABLE);
- surface_invalidate_location(front, ~WINED3D_LOCATION_DRAWABLE);
- surface_validate_location(back_buffer, WINED3D_LOCATION_DRAWABLE);
- surface_invalidate_location(back_buffer, ~WINED3D_LOCATION_DRAWABLE);
- }
- }
- else
- {
- surface_validate_location(front, WINED3D_LOCATION_DRAWABLE);
- surface_invalidate_location(front, ~WINED3D_LOCATION_DRAWABLE);
- /* If the swapeffect is DISCARD, the back buffer is undefined. That means the SYSMEM
- * and INTEXTURE copies can keep their old content if they have any defined content.
- * If the swapeffect is COPY, the content remains the same. If it is FLIP however,
- * the texture / sysmem copy needs to be reloaded from the drawable
- */
- if (swapchain->desc.swap_effect == WINED3D_SWAP_EFFECT_FLIP)
- {
- surface_validate_location(back_buffer, back_buffer->container->resource.draw_binding);
- surface_invalidate_location(back_buffer, ~back_buffer->container->resource.draw_binding);
- }
- }
+ surface_validate_location(front, WINED3D_LOCATION_DRAWABLE);
+ surface_invalidate_location(front, ~WINED3D_LOCATION_DRAWABLE);
+ /* If the swapeffect is DISCARD, the back buffer is undefined. That means the SYSMEM
+ * and INTEXTURE copies can keep their old content if they have any defined content.
+ * If the swapeffect is COPY, the content remains the same.
+ *
+ * The FLIP swap effect is not implemented yet. We could mark WINED3D_LOCATION_DRAWABLE
+ * up to date and hope WGL flipped front and back buffers and read this data into
+ * the FBO. Don't bother about this for now. */
if (fb->depth_stencil)
{
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index d1ba5e4..758af54 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2456,7 +2456,6 @@ void wined3d_surface_upload_data(struct wined3d_surface *surface, const struct w
void draw_textured_quad(const struct wined3d_surface *src_surface, struct wined3d_context *context,
const RECT *src_rect, const RECT *dst_rect, enum wined3d_texture_filter_type filter) DECLSPEC_HIDDEN;
-void flip_surface(struct wined3d_surface *front, struct wined3d_surface *back) DECLSPEC_HIDDEN;
/* Surface flags: */
#define SFLAG_DIBSECTION 0x00000001 /* Has a DIB section attached for GetDC. */
More information about the wine-cvs
mailing list