Module: Mesa
Branch: master
Commit: 24004a24359af16fcb8671e6b0478f3adee509a7
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=24004a24359af16fcb8671e6b0478f3adee509a7

Author: Brian Paul <bri...@vmware.com>
Date:   Thu May 12 16:33:30 2016 -0600

st/wgl: release the pbuffer DC at the end of wglBindTexImageARB()

Otherwise we were leaking DC GDI objects and if wglBindTexImageARB()
was called enough we'd eventually hit the GDI limit of 10,000 objects.
Things started failing at that point.

v2: also release DC if we return early, per Charmaine.

Reviewed-by: Charmaine Lee <charmai...@vmware.com>
Reviewed-by: José Fonseca <jfons...@vmware.com>

---

 src/gallium/state_trackers/wgl/stw_ext_rendertexture.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/wgl/stw_ext_rendertexture.c 
b/src/gallium/state_trackers/wgl/stw_ext_rendertexture.c
index 18df2eb..5eeb0df 100644
--- a/src/gallium/state_trackers/wgl/stw_ext_rendertexture.c
+++ b/src/gallium/state_trackers/wgl/stw_ext_rendertexture.c
@@ -104,6 +104,7 @@ BOOL WINAPI
 wglBindTexImageARB(HPBUFFERARB hPbuffer, int iBuffer)
 {
    HDC prevDrawable = stw_get_current_dc();
+   HDC dc;
    struct stw_context *curctx = stw_current_context();
    struct stw_framebuffer *fb;
    GLenum texFormat, srcBuffer, target;
@@ -164,10 +165,12 @@ wglBindTexImageARB(HPBUFFERARB hPbuffer, int iBuffer)
     */
    pixelFormatSave = fb->iPixelFormat;
    fb->iPixelFormat = curctx->iPixelFormat;
-   retVal = stw_make_current(wglGetPbufferDCARB(hPbuffer), curctx->dhglrc);
+   dc = wglGetPbufferDCARB(hPbuffer);
+   retVal = stw_make_current(dc, curctx->dhglrc);
    fb->iPixelFormat = pixelFormatSave;
    if (!retVal) {
       debug_printf("stw_make_current(#1) failed in wglBindTexImageARB()\n");
+      wglReleasePbufferDCARB(hPbuffer, dc);
       return FALSE;
    }
 
@@ -181,6 +184,8 @@ wglBindTexImageARB(HPBUFFERARB hPbuffer, int iBuffer)
       debug_printf("stw_make_current(#2) failed in wglBindTexImageARB()\n");
    }
 
+   wglReleasePbufferDCARB(hPbuffer, dc);
+
    return retVal;
 }
 

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to