[Mesa-dev] [PATCH 24/39] st/nine: Don't present if window is occluded

Axel Davy axel.davy at ens.fr
Sun May 15 10:45:38 UTC 2016


From: Patrick Rudolph <siro at das-labor.org>

The problem is that if one d3d present call fails,
because of our occlusion check in present method,
the next presentation call will send the same pixmap to the Xserver again,
without waiting it is released, which is wrong.

Move the present call after occlusion check to return and prevent
Xpixmaps errors.

Signed-off-by: Patrick Rudolph <siro at das-labor.org>
Reviewed-by: Axel Davy <axel.davy at ens.fr>
---
 src/gallium/state_trackers/nine/swapchain9.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/gallium/state_trackers/nine/swapchain9.c b/src/gallium/state_trackers/nine/swapchain9.c
index 803bd51..db37660 100644
--- a/src/gallium/state_trackers/nine/swapchain9.c
+++ b/src/gallium/state_trackers/nine/swapchain9.c
@@ -778,17 +778,13 @@ NineSwapChain9_Present( struct NineSwapChain9 *This,
     D3DWindowBuffer *handle_temp;
     struct threadpool_task *task_temp;
     int i;
-    HRESULT hr = present(This, pSourceRect, pDestRect,
-                         hDestWindowOverride, pDirtyRegion, dwFlags);
+    HRESULT hr;
 
     DBG("This=%p pSourceRect=%p pDestRect=%p hDestWindowOverride=%p "
         "pDirtyRegion=%p dwFlags=%d\n",
         This, pSourceRect, pDestRect, hDestWindowOverride,
         pDirtyRegion,dwFlags);
 
-    if (hr == D3DERR_WASSTILLDRAWING)
-        return hr;
-
     if (This->base.device->ex) {
         if (NineSwapChain9_GetOccluded(This)) {
             return S_PRESENT_OCCLUDED;
@@ -803,6 +799,11 @@ NineSwapChain9_Present( struct NineSwapChain9 *This,
         }
     }
 
+    hr = present(This, pSourceRect, pDestRect,
+                 hDestWindowOverride, pDirtyRegion, dwFlags);
+    if (hr == D3DERR_WASSTILLDRAWING)
+        return hr;
+
     switch (This->params.SwapEffect) {
         case D3DSWAPEFFECT_FLIP:
             UNTESTED(4);
-- 
2.8.2



More information about the mesa-dev mailing list