From 03dc612c9c1c69aa599294bee948b0c5aeb877b9 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Sun, 18 Apr 2010 22:50:45 +0200 Subject: [PATCH] wined3d: Simply pass an IWineD3DSurfaceImpl pointer to surface_is_offscreen(). --- dlls/wined3d/context.c | 6 +++--- dlls/wined3d/device.c | 17 ++++++++-------- dlls/wined3d/surface.c | 36 +++++++++++++++++----------------- dlls/wined3d/wined3d_private.h | 2 +- 4 files changed, 30 insertions(+), 31 deletions(-) diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index ffb2a8c6a28..1a1a69d7063 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -1353,7 +1353,7 @@ struct wined3d_context *context_create(IWineD3DSwapChainImpl *swapchain, IWineD3 ret->current_rt = (IWineD3DSurface *)target; ret->tid = GetCurrentThreadId(); - ret->render_offscreen = surface_is_offscreen((IWineD3DSurface *) target); + ret->render_offscreen = surface_is_offscreen(target); ret->draw_buffer_dirty = TRUE; ret->valid = 1; @@ -1881,7 +1881,7 @@ static void context_apply_draw_buffer(struct wined3d_context *context, BOOL blit IWineD3DDeviceImpl *device; device = ((IWineD3DSurfaceImpl *)rt)->resource.device; - if (!surface_is_offscreen(rt)) + if (!surface_is_offscreen((IWineD3DSurfaceImpl *)rt)) { ENTER_GL(); glDrawBuffer(surface_get_gl_buffer(rt)); @@ -2099,7 +2099,7 @@ static void context_setup_target(IWineD3DDeviceImpl *device, struct wined3d_cont if (!target) return; else if (context->current_rt == target) return; - render_offscreen = surface_is_offscreen(target); + render_offscreen = surface_is_offscreen((IWineD3DSurfaceImpl *)target); context_set_render_offscreen(context, StateTable, render_offscreen); diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 1fb0dacd21a..5ae2b5c03fb 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -4378,7 +4378,7 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfac context = context_acquire(This, (IWineD3DSurface *)target, CTXUSAGE_CLEAR); if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) { - if (!surface_is_offscreen((IWineD3DSurface *)target)) + if (!surface_is_offscreen(target)) { TRACE("Surface %p is onscreen\n", target); @@ -5441,7 +5441,7 @@ static void color_fill_fbo(IWineD3DDevice *iface, IWineD3DSurface *surface, if (rect) IWineD3DSurface_LoadLocation(surface, SFLAG_INDRAWABLE, NULL); IWineD3DSurface_ModifyLocation(surface, SFLAG_INDRAWABLE, TRUE); - if (!surface_is_offscreen(surface)) + if (!surface_is_offscreen((IWineD3DSurfaceImpl *)surface)) { TRACE("Surface %p is onscreen\n", surface); @@ -5463,12 +5463,11 @@ static void color_fill_fbo(IWineD3DDevice *iface, IWineD3DSurface *surface, if (rect) { glEnable(GL_SCISSOR_TEST); - if(surface_is_offscreen(surface)) { + if (surface_is_offscreen((IWineD3DSurfaceImpl *)surface)) glScissor(rect->x1, rect->y1, rect->x2 - rect->x1, rect->y2 - rect->y1); - } else { + else glScissor(rect->x1, ((IWineD3DSurfaceImpl *)surface)->currentDesc.Height - rect->y2, rect->x2 - rect->x1, rect->y2 - rect->y1); - } checkGLcall("glScissor"); IWineD3DDeviceImpl_MarkStateDirty(This, STATE_SCISSORRECT); } else { @@ -5742,8 +5741,8 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, const IWineD3DSurface_LoadLocation(src_surface, SFLAG_INDRAWABLE, NULL); IWineD3DSurface_LoadLocation(dst_surface, SFLAG_INDRAWABLE, NULL); - if (!surface_is_offscreen(src_surface)) context = context_acquire(This, src_surface, CTXUSAGE_RESOURCELOAD); - else if (!surface_is_offscreen(dst_surface)) context = context_acquire(This, dst_surface, CTXUSAGE_RESOURCELOAD); + if (!surface_is_offscreen((IWineD3DSurfaceImpl *)src_surface)) context = context_acquire(This, src_surface, CTXUSAGE_RESOURCELOAD); + else if (!surface_is_offscreen((IWineD3DSurfaceImpl *)dst_surface)) context = context_acquire(This, dst_surface, CTXUSAGE_RESOURCELOAD); else context = context_acquire(This, NULL, CTXUSAGE_RESOURCELOAD); if (!context->valid) @@ -5755,7 +5754,7 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, const gl_info = context->gl_info; - if (!surface_is_offscreen(src_surface)) + if (!surface_is_offscreen((IWineD3DSurfaceImpl *)src_surface)) { GLenum buffer = surface_get_gl_buffer(src_surface); @@ -5791,7 +5790,7 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, const LEAVE_GL(); /* Attach dst surface to dst fbo */ - if (!surface_is_offscreen(dst_surface)) + if (!surface_is_offscreen((IWineD3DSurfaceImpl *)dst_surface)) { GLenum buffer = surface_get_gl_buffer(dst_surface); diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index a91acb14f6e..d2bdc9c1334 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -730,8 +730,7 @@ static void surface_upload_data(IWineD3DSurfaceImpl *This, const struct wined3d_ { internal = format_desc->glGammaInternal; } - else if (This->resource.usage & WINED3DUSAGE_RENDERTARGET - && surface_is_offscreen((IWineD3DSurface *)This)) + else if (This->resource.usage & WINED3DUSAGE_RENDERTARGET && surface_is_offscreen(This)) { internal = format_desc->rtInternal; } @@ -811,8 +810,7 @@ static void surface_allocate_surface(IWineD3DSurfaceImpl *This, const struct win { internal = format_desc->glGammaInternal; } - else if (This->resource.usage & WINED3DUSAGE_RENDERTARGET - && surface_is_offscreen((IWineD3DSurface *)This)) + else if (This->resource.usage & WINED3DUSAGE_RENDERTARGET && surface_is_offscreen(This)) { internal = format_desc->rtInternal; } @@ -1280,7 +1278,7 @@ static void read_from_framebuffer(IWineD3DSurfaceImpl *This, const RECT *rect, v * There is no need to keep track of the current read buffer or reset it, every part of the code * that reads sets the read buffer as desired. */ - if (surface_is_offscreen((IWineD3DSurface *) This)) + if (surface_is_offscreen(This)) { /* Locking the primary render target which is not on a swapchain(=offscreen render target). * Read from the back buffer @@ -1512,7 +1510,7 @@ static void read_from_framebuffer_texture(IWineD3DSurfaceImpl *This, BOOL srgb) * There is no need to keep track of the current read buffer or reset it, every part of the code * that reads sets the read buffer as desired. */ - if (!surface_is_offscreen((IWineD3DSurface *)This)) + if (!surface_is_offscreen(This)) { GLenum buffer = surface_get_gl_buffer((IWineD3DSurface *)This); TRACE("Locking %#x buffer\n", buffer); @@ -1771,7 +1769,7 @@ static void flush_to_framebuffer_drawpixels(IWineD3DSurfaceImpl *This, GLenum fm ENTER_GL(); - if (!surface_is_offscreen((IWineD3DSurface *)This)) + if (!surface_is_offscreen(This)) { GLenum buffer = surface_get_gl_buffer((IWineD3DSurface *)This); TRACE("Unlocking %#x buffer.\n", buffer); @@ -2989,7 +2987,8 @@ static inline void fb_copy_to_texture_direct(IWineD3DSurfaceImpl *This, IWineD3D /* Bind the target texture */ glBindTexture(This->texture_target, This->texture_name); checkGLcall("glBindTexture"); - if(surface_is_offscreen(SrcSurface)) { + if (surface_is_offscreen(Src)) + { TRACE("Reading from an offscreen target\n"); upsidedown = !upsidedown; glReadBuffer(device->offscreenBuffer); @@ -3090,7 +3089,7 @@ static inline void fb_copy_to_texture_hwstretch(IWineD3DSurfaceImpl *This, IWine context = context_acquire(device, SrcSurface, CTXUSAGE_BLIT); surface_internal_preload((IWineD3DSurface *) This, SRGB_RGB); - src_offscreen = surface_is_offscreen(SrcSurface); + src_offscreen = surface_is_offscreen(Src); noBackBufferBackup = src_offscreen && wined3d_settings.offscreen_rendering_mode == ORM_FBO; if (!noBackBufferBackup && !Src->texture_name) { @@ -4205,8 +4204,9 @@ static void WINAPI IWineD3DSurfaceImpl_ModifyLocation(IWineD3DSurface *iface, DW TRACE("(%p)->(%s, %s)\n", iface, debug_surflocation(flag), persistent ? "TRUE" : "FALSE"); - if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) { - if (surface_is_offscreen(iface)) + if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) + { + if (surface_is_offscreen(This)) { /* With ORM_FBO, SFLAG_INTEXTURE and SFLAG_INDRAWABLE are the same for offscreen targets. */ if (flag & (SFLAG_INTEXTURE | SFLAG_INDRAWABLE)) flag |= (SFLAG_INTEXTURE | SFLAG_INDRAWABLE); @@ -4322,8 +4322,9 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D BOOL drawable_read_ok = TRUE; BOOL in_fbo = FALSE; - if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) { - if (surface_is_offscreen(iface)) + if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) + { + if (surface_is_offscreen(This)) { /* With ORM_FBO, SFLAG_INTEXTURE and SFLAG_INDRAWABLE are the same for offscreen targets. * Prefer SFLAG_INTEXTURE. */ @@ -4605,16 +4606,15 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_DrawOverlay(IWineD3DSurface *iface) { return hr; } -BOOL surface_is_offscreen(IWineD3DSurface *iface) +BOOL surface_is_offscreen(IWineD3DSurfaceImpl *surface) { - IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *) iface; - IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *) This->container; + IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)surface->container; /* Not on a swapchain - must be offscreen */ - if (!(This->Flags & SFLAG_SWAPCHAIN)) return TRUE; + if (!(surface->Flags & SFLAG_SWAPCHAIN)) return TRUE; /* The front buffer is always onscreen */ - if(iface == swapchain->frontBuffer) return FALSE; + if (surface == (IWineD3DSurfaceImpl *)swapchain->frontBuffer) return FALSE; /* If the swapchain is rendered to an FBO, the backbuffer is * offscreen, otherwise onscreen */ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 9bcfc7fc882..3594dfdcb49 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1872,7 +1872,7 @@ typedef struct IWineD3DBaseTextureClass void surface_internal_preload(IWineD3DSurface *iface, enum WINED3DSRGB srgb) DECLSPEC_HIDDEN; BOOL surface_init_sysmem(IWineD3DSurface *iface) DECLSPEC_HIDDEN; -BOOL surface_is_offscreen(IWineD3DSurface *iface) DECLSPEC_HIDDEN; +BOOL surface_is_offscreen(IWineD3DSurfaceImpl *iface) DECLSPEC_HIDDEN; void surface_prepare_texture(IWineD3DSurfaceImpl *surface, const struct wined3d_gl_info *gl_info, BOOL srgb) DECLSPEC_HIDDEN;