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

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


---
 dlls/wined3d/device.c          |    4 +-
 dlls/wined3d/drawprim.c        |    2 +-
 dlls/wined3d/surface.c         |   69 ++++++++++++++++++++++-----------------
 dlls/wined3d/wined3d_private.h |    3 +-
 4 files changed, 44 insertions(+), 34 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index a45c577..547b109 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4429,7 +4429,7 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfac
     {
         DWORD location = context->render_offscreen ? SFLAG_DS_OFFSCREEN : SFLAG_DS_ONSCREEN;
         if (!(depth_stencil->Flags & location) && !is_full_clear(depth_stencil, vp, scissor_rect, clear_rect))
-            surface_load_ds_location(This->stencilBufferTarget, context, location);
+            surface_load_ds_location(depth_stencil, context, location);
 
         glDepthMask(GL_TRUE);
         IWineD3DDeviceImpl_MarkStateDirty(This, STATE_RENDER(WINED3DRS_ZWRITEENABLE));
@@ -5923,7 +5923,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetDepthStencilSurface(IWineD3DDevice *
                 surface_modify_ds_location(This->stencilBufferTarget, SFLAG_DS_DISCARDED);
             } else {
                 struct wined3d_context *context = context_acquire(This, This->render_targets[0], CTXUSAGE_RESOURCELOAD);
-                surface_load_ds_location(This->stencilBufferTarget, context, SFLAG_DS_OFFSCREEN);
+                surface_load_ds_location((IWineD3DSurfaceImpl *)This->stencilBufferTarget, context, SFLAG_DS_OFFSCREEN);
                 surface_modify_ds_location(This->stencilBufferTarget, SFLAG_DS_OFFSCREEN);
                 context_release(context);
             }
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index dafdd93..03927c9 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -612,7 +612,7 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
         DWORD location = context->render_offscreen ? SFLAG_DS_OFFSCREEN : SFLAG_DS_ONSCREEN;
         if (This->stateBlock->renderState[WINED3DRS_ZWRITEENABLE]
                 || This->stateBlock->renderState[WINED3DRS_ZENABLE])
-            surface_load_ds_location(This->stencilBufferTarget, context, location);
+            surface_load_ds_location((IWineD3DSurfaceImpl *)This->stencilBufferTarget, context, location);
         if (This->stateBlock->renderState[WINED3DRS_ZWRITEENABLE])
             surface_modify_ds_location(This->stencilBufferTarget, location);
     }
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 312cd50..d376e28 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -4068,33 +4068,36 @@ void surface_modify_ds_location(IWineD3DSurface *iface, DWORD location) {
 }
 
 /* Context activation is done by the caller. */
-void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *context, DWORD location)
+void surface_load_ds_location(IWineD3DSurfaceImpl *surface, struct wined3d_context *context, DWORD location)
 {
-    IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
-    IWineD3DDeviceImpl *device = This->resource.device;
+    IWineD3DDeviceImpl *device = surface->resource.device;
     const struct wined3d_gl_info *gl_info = context->gl_info;
 
-    TRACE("(%p) New location %#x\n", This, location);
+    TRACE("surface %p, new location %#x.\n", surface, location);
 
     /* TODO: Make this work for modes other than FBO */
     if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) return;
 
-    if (This->Flags & location) {
-        TRACE("(%p) Location (%#x) is already up to date\n", This, location);
+    if (surface->Flags & location)
+    {
+        TRACE("Location (%#x) is already up to date.\n", location);
         return;
     }
 
-    if (This->current_renderbuffer) {
-        FIXME("(%p) Not supported with fixed up depth stencil\n", This);
+    if (surface->current_renderbuffer)
+    {
+        FIXME("Not supported with fixed up depth stencil.\n");
         return;
     }
 
-    if (location == SFLAG_DS_OFFSCREEN) {
-        if (This->Flags & SFLAG_DS_ONSCREEN) {
+    if (location == SFLAG_DS_OFFSCREEN)
+    {
+        if (surface->Flags & SFLAG_DS_ONSCREEN)
+        {
             GLint old_binding = 0;
             GLenum bind_target;
 
-            TRACE("(%p) Copying onscreen depth buffer to depth texture\n", This);
+            TRACE("Copying onscreen depth buffer to depth texture.\n");
 
             ENTER_GL();
 
@@ -4105,7 +4108,7 @@ void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *co
             /* Note that we use depth_blt here as well, rather than glCopyTexImage2D
              * directly on the FBO texture. That's because we need to flip. */
             context_bind_fbo(context, GL_FRAMEBUFFER, NULL);
-            if (This->texture_target == GL_TEXTURE_RECTANGLE_ARB)
+            if (surface->texture_target == GL_TEXTURE_RECTANGLE_ARB)
             {
                 glGetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_binding);
                 bind_target = GL_TEXTURE_RECTANGLE_ARB;
@@ -4114,8 +4117,8 @@ void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *co
                 bind_target = GL_TEXTURE_2D;
             }
             glBindTexture(bind_target, device->depth_blt_texture);
-            glCopyTexImage2D(bind_target, This->texture_level, This->resource.format_desc->glInternal,
-                    0, 0, This->currentDesc.Width, This->currentDesc.Height, 0);
+            glCopyTexImage2D(bind_target, surface->texture_level, surface->resource.format_desc->glInternal,
+                    0, 0, surface->currentDesc.Width, surface->currentDesc.Height, 0);
             glTexParameteri(bind_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
             glTexParameteri(bind_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
             glTexParameteri(bind_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
@@ -4129,26 +4132,27 @@ void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *co
                 gl_info->fbo_ops.glGenRenderbuffers(1, &device->depth_blt_rb);
                 checkGLcall("glGenRenderbuffersEXT");
             }
-            if (device->depth_blt_rb_w != This->currentDesc.Width
-                    || device->depth_blt_rb_h != This->currentDesc.Height) {
+            if (device->depth_blt_rb_w != surface->currentDesc.Width
+                    || device->depth_blt_rb_h != surface->currentDesc.Height)
+            {
                 gl_info->fbo_ops.glBindRenderbuffer(GL_RENDERBUFFER, device->depth_blt_rb);
                 checkGLcall("glBindRenderbufferEXT");
                 gl_info->fbo_ops.glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8,
-                        This->currentDesc.Width, This->currentDesc.Height);
+                        surface->currentDesc.Width, surface->currentDesc.Height);
                 checkGLcall("glRenderbufferStorageEXT");
-                device->depth_blt_rb_w = This->currentDesc.Width;
-                device->depth_blt_rb_h = This->currentDesc.Height;
+                device->depth_blt_rb_w = surface->currentDesc.Width;
+                device->depth_blt_rb_h = surface->currentDesc.Height;
             }
 
             context_bind_fbo(context, GL_FRAMEBUFFER, &context->dst_fbo);
             gl_info->fbo_ops.glFramebufferRenderbuffer(GL_FRAMEBUFFER,
                     GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, device->depth_blt_rb);
             checkGLcall("glFramebufferRenderbufferEXT");
-            context_attach_depth_stencil_fbo(context, GL_FRAMEBUFFER, This, FALSE);
+            context_attach_depth_stencil_fbo(context, GL_FRAMEBUFFER, surface, FALSE);
 
             /* Do the actual blit */
-            surface_depth_blt(This, gl_info, device->depth_blt_texture,
-                    This->currentDesc.Width, This->currentDesc.Height, bind_target);
+            surface_depth_blt(surface, gl_info, device->depth_blt_texture,
+                    surface->currentDesc.Width, surface->currentDesc.Height, bind_target);
             checkGLcall("depth_blt");
 
             if (context->current_fbo) context_bind_fbo(context, GL_FRAMEBUFFER, &context->current_fbo->id);
@@ -4162,15 +4166,18 @@ void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *co
         {
             FIXME("No up to date depth stencil location\n");
         }
-    } else if (location == SFLAG_DS_ONSCREEN) {
-        if (This->Flags & SFLAG_DS_OFFSCREEN) {
-            TRACE("(%p) Copying depth texture to onscreen depth buffer\n", This);
+    }
+    else if (location == SFLAG_DS_ONSCREEN)
+    {
+        if (surface->Flags & SFLAG_DS_OFFSCREEN)
+        {
+            TRACE("Copying depth texture to onscreen depth buffer.\n");
 
             ENTER_GL();
 
             context_bind_fbo(context, GL_FRAMEBUFFER, NULL);
-            surface_depth_blt(This, gl_info, This->texture_name,
-                    This->currentDesc.Width, This->currentDesc.Height, This->texture_target);
+            surface_depth_blt(surface, gl_info, surface->texture_name,
+                    surface->currentDesc.Width, surface->currentDesc.Height, surface->texture_target);
             checkGLcall("depth_blt");
 
             if (context->current_fbo) context_bind_fbo(context, GL_FRAMEBUFFER, &context->current_fbo->id);
@@ -4183,11 +4190,13 @@ void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *co
         {
             FIXME("No up to date depth stencil location\n");
         }
-    } else {
-        ERR("(%p) Invalid location (%#x) specified\n", This, location);
+    }
+    else
+    {
+        ERR("Invalid location (%#x) specified.\n", location);
     }
 
-    This->Flags |= location;
+    surface->Flags |= location;
 }
 
 static void WINAPI IWineD3DSurfaceImpl_ModifyLocation(IWineD3DSurface *iface, DWORD flag, BOOL persistent) {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 460c2b3..42bafca 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2677,7 +2677,8 @@ void state_fog_fragpart(DWORD state, IWineD3DStateBlockImpl *stateblock,
 
 void surface_add_dirty_rect(IWineD3DSurface *iface, const RECT *dirty_rect) DECLSPEC_HIDDEN;
 GLenum surface_get_gl_buffer(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
-void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
+void surface_load_ds_location(IWineD3DSurfaceImpl *surface,
+        struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
 void surface_modify_ds_location(IWineD3DSurface *iface, DWORD location) DECLSPEC_HIDDEN;
 void surface_set_compatible_renderbuffer(IWineD3DSurface *iface,
         unsigned int width, unsigned int height) DECLSPEC_HIDDEN;
-- 
1.6.4.4




More information about the wine-patches mailing list