panfrost: split asserts in pandecode
[mesa.git] / src / gallium / state_trackers / wgl / stw_framebuffer.h
index 109c79dd002eb3850a831ed68e3ba557d2847004..d44c3a6634a841ee035ec6fe4ba70e00ded0cc1e 100644 (file)
 
 #include <windows.h>
 
+#include <GL/gl.h>
+#include <GL/wglext.h>
+
 #include "util/u_debug.h"
+#include "stw_st.h"
 
 
 struct pipe_resource;
@@ -85,6 +89,15 @@ struct stw_framebuffer
    unsigned width;
    unsigned height;
    
+   /** WGL_ARB_render_texture - set at Pbuffer creation time */
+   unsigned textureFormat;  /**< WGL_NO_TEXTURE or WGL_TEXTURE_RGB[A]_ARB */
+   unsigned textureTarget;  /**< WGL_NO_TEXTURE or WGL_TEXTURE_1D/2D/
+                                 CUBE_MAP_ARB */
+   boolean textureMipmap;   /**< TRUE/FALSE */
+   /** WGL_ARB_render_texture - set with wglSetPbufferAttribARB() */
+   unsigned textureLevel;
+   unsigned textureFace;    /**< [0..6] */
+
    /**
     * Client area rectangle, relative to the window upper-left corner.
     *
@@ -95,6 +108,9 @@ struct stw_framebuffer
    HANDLE hSharedSurface;
    struct stw_shared_surface *shared_surface;
 
+   /* For WGL_EXT_swap_control */
+   int64_t prev_swap_time;
+
    /** 
     * This is protected by stw_device::fb_mutex, not the mutex above.
     * 
@@ -119,9 +135,24 @@ struct stw_framebuffer
 struct stw_framebuffer *
 stw_framebuffer_create(HDC hdc, int iPixelFormat);
 
+
+/**
+ * Increase fb reference count.  The referenced framebuffer should be locked.
+ *
+ * It's not necessary to hold stw_dev::fb_mutex global lock.
+ */
+static inline void
+stw_framebuffer_reference_locked(struct stw_framebuffer *fb)
+{
+   if (fb) {
+      assert(stw_own_mutex(&fb->mutex));
+      fb->refcnt++;
+   }
+}
+
+
 void
-stw_framebuffer_reference(struct stw_framebuffer **ptr,
-                          struct stw_framebuffer *fb);
+stw_framebuffer_release_locked(struct stw_framebuffer *fb);
 
 /**
  * Search a framebuffer with a matching HWND.
@@ -167,6 +198,7 @@ static inline void
 stw_framebuffer_unlock(struct stw_framebuffer *fb)
 {
    assert(fb);
+   assert(stw_own_mutex(&fb->mutex));
    LeaveCriticalSection(&fb->mutex);
 }
 
@@ -177,4 +209,19 @@ stw_framebuffer_unlock(struct stw_framebuffer *fb)
 void
 stw_framebuffer_cleanup(void);
 
+
+static inline struct stw_st_framebuffer *
+stw_st_framebuffer(struct st_framebuffer_iface *stfb)
+{
+   return (struct stw_st_framebuffer *) stfb;
+}
+
+
+static inline struct stw_framebuffer *
+stw_framebuffer_from_HPBUFFERARB(HPBUFFERARB hPbuffer)
+{
+   return (struct stw_framebuffer *) hPbuffer;
+}
+
+
 #endif /* STW_FRAMEBUFFER_H */