[1/2] wined3d: Copy the depth buffer after all dirty states are applied

H. Verbeet hverbeet at gmail.com
Mon Dec 25 10:12:45 CST 2006


We shouldn't copy the depth buffer until all dirty states are applied.
This fixes a regression in BF2 when FBOs are used for offscreen
rendering.

Changelog:
  - Copy the depth buffer after all dirty states are applied
-------------- next part --------------
---

 dlls/wined3d/drawprim.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index a050bb2..a1992c4 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -1949,15 +1949,6 @@ void drawPrimitive(IWineD3DDevice *iface
 
     BOOL lighting_changed, lighting_original = FALSE;
 
-    if (TRACE_ON(d3d_draw) && wined3d_settings.offscreen_rendering_mode == ORM_FBO) {
-        check_fbo_status(iface);
-    }
-
-    if (This->depth_copy_state == WINED3D_DCS_COPY) {
-        depth_copy(iface);
-    }
-    This->depth_copy_state = WINED3D_DCS_INITIAL;
-
     /* Shaders can be implemented using ARB_PROGRAM, GLSL, or software - 
      * here simply check whether a shader was set, or the user disabled shaders */
     if (This->vs_selected_mode != SHADER_NONE && This->stateBlock->vertexShader && 
@@ -1990,6 +1981,15 @@ void drawPrimitive(IWineD3DDevice *iface
     }
     This->numDirtyEntries = 0; /* This makes the whole list clean */
 
+    if (TRACE_ON(d3d_draw) && wined3d_settings.offscreen_rendering_mode == ORM_FBO) {
+        check_fbo_status(iface);
+    }
+
+    if (This->depth_copy_state == WINED3D_DCS_COPY) {
+        depth_copy(iface);
+    }
+    This->depth_copy_state = WINED3D_DCS_INITIAL;
+
     if(DrawPrimStrideData) {
 
         /* Note: this is a ddraw fixed-function code path */


More information about the wine-patches mailing list