st/vega: Fix window resizing with egl_g3d.
authorChia-I Wu <olvaffe@gmail.com>
Mon, 18 Jan 2010 04:05:25 +0000 (12:05 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Mon, 18 Jan 2010 04:07:57 +0000 (12:07 +0800)
egl_g3d calls st_set_framebuffer_surface on window resize.  It updates
the renderbuffer's geometry and makes st_resize_framebuffer a no-op.
This commit improves the no-op check a little bit.  It can do better
after gallium-fb-dimensions is merged.

src/gallium/state_trackers/vega/vg_context.h
src/gallium/state_trackers/vega/vg_tracker.c

index ff8c1a04217368c7acb725f2bf53678e46e8f451..bc88c8d139dca9b992b8bb3cfc5cde71f3af2eb3 100644 (file)
@@ -50,7 +50,7 @@ struct st_renderbuffer {
 };
 
 struct st_framebuffer {
-   VGint init_width, init_height;
+   VGint width, height;
    struct st_renderbuffer *strb;
    struct st_renderbuffer *dsrb;
 
index ff80aab03a389d77d203ae5fa10e570761558052..617c174eb6a0054565cb46525e199b421289571a 100644 (file)
@@ -193,8 +193,8 @@ struct st_framebuffer * st_create_framebuffer(const void *visual,
       */
       stfb->alpha_mask = 0;
 
-      stfb->init_width = width;
-      stfb->init_height = height;
+      stfb->width = width;
+      stfb->height = height;
       stfb->privateData = privateData;
    }
 
@@ -282,11 +282,14 @@ void st_resize_framebuffer(struct st_framebuffer *stfb,
 
    /* If this is a noop, exit early and don't do the clear, etc below.
     */
-   if (strb->width == width &&
-       strb->height == height &&
+   if (stfb->width == width &&
+       stfb->height == height &&
        state->zsbuf)
       return;
 
+   stfb->width = width;
+   stfb->height = height;
+
    if (strb->width != width || strb->height != height)
       st_renderbuffer_alloc_storage(ctx, strb,
                                  width, height);