Merge branch 'glsl-to-tgsi'
[mesa.git] / src / gallium / state_trackers / wgl / stw_st.c
index b58d91673b7867dfe483e961cd2a1508122c8494..28c93f4fb57f90952e8fbcb2952ec06817f44c43 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "util/u_memory.h"
 #include "util/u_inlines.h"
+#include "util/u_atomic.h"
 #include "state_tracker/st_gl_api.h" /* for st_gl_api_create */
 
 #include "stw_st.h"
@@ -154,7 +155,8 @@ stw_st_framebuffer_validate(struct st_framebuffer_iface *stfb,
  * Present an attachment of the framebuffer.
  */
 static boolean
-stw_st_framebuffer_present_locked(struct st_framebuffer_iface *stfb,
+stw_st_framebuffer_present_locked(HDC hdc,
+                                  struct st_framebuffer_iface *stfb,
                                   enum st_attachment_type statt)
 {
    struct stw_st_framebuffer *stwfb = stw_st_framebuffer(stfb);
@@ -162,7 +164,7 @@ stw_st_framebuffer_present_locked(struct st_framebuffer_iface *stfb,
 
    resource = stwfb->textures[statt];
    if (resource) {
-      stw_framebuffer_present_locked(stwfb->fb->hDC, stwfb->fb, resource);
+      stw_framebuffer_present_locked(hdc, stwfb->fb, resource);
    }
 
    return TRUE;
@@ -176,7 +178,7 @@ stw_st_framebuffer_flush_front(struct st_framebuffer_iface *stfb,
 
    pipe_mutex_lock(stwfb->fb->mutex);
 
-   return stw_st_framebuffer_present_locked(&stwfb->base, statt);
+   return stw_st_framebuffer_present_locked(stwfb->fb->hDC, &stwfb->base, statt);
 }
 
 /**
@@ -195,6 +197,7 @@ stw_st_create_framebuffer(struct stw_framebuffer *fb)
    stwfb->stvis = fb->pfi->stvis;
 
    stwfb->base.visual = &stwfb->stvis;
+   p_atomic_set(&stwfb->base.stamp, 1);
    stwfb->base.flush_front = stw_st_framebuffer_flush_front;
    stwfb->base.validate = stw_st_framebuffer_validate;
 
@@ -220,7 +223,7 @@ stw_st_destroy_framebuffer_locked(struct st_framebuffer_iface *stfb)
  * Swap the buffers of the given framebuffer.
  */
 boolean
-stw_st_swap_framebuffer_locked(struct st_framebuffer_iface *stfb)
+stw_st_swap_framebuffer_locked(HDC hdc, struct st_framebuffer_iface *stfb)
 {
    struct stw_st_framebuffer *stwfb = stw_st_framebuffer(stfb);
    unsigned front = ST_ATTACHMENT_FRONT_LEFT, back = ST_ATTACHMENT_BACK_LEFT;
@@ -245,7 +248,7 @@ stw_st_swap_framebuffer_locked(struct st_framebuffer_iface *stfb)
    stwfb->texture_mask = mask;
 
    front = ST_ATTACHMENT_FRONT_LEFT;
-   return stw_st_framebuffer_present_locked(&stwfb->base, front);
+   return stw_st_framebuffer_present_locked(hdc, &stwfb->base, front);
 }
 
 /**