[PATCH 4/5] wined3d: Simply pass an IWineD3DSurfaceImpl pointer to surface_is_offscreen().

Henri Verbeet hverbeet at codeweavers.com
Sun Apr 18 15:50:45 CDT 2010


---
 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 ffb2a8c..1a1a69d 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 1fb0dac..5ae2b5c 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 a91acb1..d2bdc9c 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 9bcfc7f..3594dfd 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;
 
-- 
1.6.4.4




More information about the wine-patches mailing list