Module: wine Branch: master Commit: ebd6bf7f7a3493284b2aaa21ce3ab982336e3835 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ebd6bf7f7a3493284b2aaa21ce...
Author: Stefan Dösinger stefan@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. */