Add driGetVBlankInterval() helper function.
authorMichel Dänzer <michel@daenzer.net>
Thu, 28 Sep 2006 14:04:19 +0000 (14:04 +0000)
committerMichel Dänzer <michel@daenzer.net>
Thu, 28 Sep 2006 14:04:19 +0000 (14:04 +0000)
This can be used by drivers to determine the current swap interval of a
drawable.

src/mesa/drivers/dri/common/vblank.c
src/mesa/drivers/dri/common/vblank.h

index 2ec3c12353a4c71f835233b72259af039087f684..9c219ea37d8ebc6bba06636d7d63f64af3888202 100644 (file)
@@ -266,6 +266,30 @@ void driDrawableInitVBlank( __DRIdrawablePrivate *priv, GLuint flags,
 }
 
 
+/****************************************************************************/
+/**
+ * Returns the current swap interval of the given drawable.
+ */
+
+unsigned
+driGetVBlankInterval( const  __DRIdrawablePrivate *priv, GLuint flags )
+{
+   if ( (flags & VBLANK_FLAG_INTERVAL) != 0 ) {
+      /* this must have been initialized when the drawable was first bound
+       * to a direct rendering context. */
+      assert ( priv->pdraw->swap_interval != (unsigned)-1 );
+
+      return priv->pdraw->swap_interval;
+   }
+   else if ( (flags & (VBLANK_FLAG_THROTTLE | VBLANK_FLAG_SYNC)) != 0 ) {
+      return 1;
+   }
+   else {
+      return 0;
+   }
+}
+
+
 /****************************************************************************/
 /**
  * Waits for the vertical blank for use with glXSwapBuffers.
@@ -310,20 +334,7 @@ driWaitForVBlank( const  __DRIdrawablePrivate *priv, GLuint * vbl_seq,
     */
 
    original_seq = *vbl_seq;
-
-   if ( (flags & VBLANK_FLAG_INTERVAL) != 0 ) {
-      interval = priv->pdraw->swap_interval;
-      /* this must have been initialized when the drawable was first bound
-       * to a direct rendering context. */
-      assert ( interval != (unsigned)-1 );
-   }
-   else if ( (flags & (VBLANK_FLAG_THROTTLE | VBLANK_FLAG_SYNC)) != 0 ) {
-      interval = 1;
-   }
-   else {
-      interval = 0;
-   }
-
+   interval = driGetVBlankInterval(priv, flags);
    deadline = original_seq + interval;
 
    vbl.request.type = DRM_VBLANK_RELATIVE;
index ca386a6a340fc002bce8bcfe0c300b08324e5eae..00f0e7506f4c3d2a1d61a59d6a2356243c6ccd8b 100644 (file)
@@ -51,6 +51,8 @@ extern int driWaitForMSC32( __DRIdrawablePrivate *priv,
 extern GLuint driGetDefaultVBlankFlags( const driOptionCache *optionCache );
 extern void driDrawableInitVBlank ( __DRIdrawablePrivate *priv, GLuint flags,
                                    GLuint *vbl_seq );
+extern unsigned driGetVBlankInterval( const  __DRIdrawablePrivate *priv,
+                                     GLuint flags );
 extern int driWaitForVBlank( const __DRIdrawablePrivate *priv,
     GLuint * vbl_seq, GLuint flags, GLboolean * missed_deadline );