summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Rudolph <[email protected]>2016-02-10 19:41:12 +0100
committerAxel Davy <[email protected]>2016-05-18 23:37:14 +0200
commit72be473ad17893ecc4697644e88defa38b35f126 (patch)
tree5f19c74f889851319232f8c8fc129bf7beee0bbd
parentc673c46ccf1ed78eaf68011f32bfb1696f765966 (diff)
st/nine: Don't present if window is occluded
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 <[email protected]> Reviewed-by: Axel Davy <[email protected]>
-rw-r--r--src/gallium/state_trackers/nine/swapchain9.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/gallium/state_trackers/nine/swapchain9.c b/src/gallium/state_trackers/nine/swapchain9.c
index 803bd519a59..db3766063a5 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);