st/egl: fix a crash in Android backend
authorChia-I Wu <olv@lunarg.com>
Thu, 24 Nov 2011 09:13:15 +0000 (17:13 +0800)
committerChia-I Wu <olv@lunarg.com>
Fri, 25 Nov 2011 03:18:02 +0000 (11:18 +0800)
There is no buffer and android_surface_present should be a no-op when
eglSwapBuffers is called twice in a row.

src/gallium/state_trackers/egl/android/native_android.cpp

index 5f4638a..490d6e8 100644 (file)
@@ -355,9 +355,6 @@ android_surface_swap_buffers(struct native_surface *nsurf)
    struct android_surface *asurf = android_surface(nsurf);
    struct android_display *adpy = asurf->adpy;
 
-   if (!asurf->buf)
-      return TRUE;
-
    android_surface_enqueue_buffer(&asurf->base);
 
    asurf->stamp++;
@@ -395,6 +392,10 @@ android_surface_present(struct native_surface *nsurf,
    if (ctrl->swap_interval || ctrl->natt != NATIVE_ATTACHMENT_BACK_LEFT)
       return FALSE;
 
+   /* this happens when eglSwapBuffers is called more than once in a row */
+   if (!asurf->buf)
+      return TRUE;
+
    /* we always render to color_res first when it exists */
    if (asurf->color_res) {
       copy_resources(&adpy->base, asurf->color_res, asurf->buf_res);