gbm: add gbm_bo_get/set_user_data()
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Mon, 30 Apr 2012 10:27:51 +0000 (13:27 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 30 Apr 2012 17:09:39 +0000 (13:09 -0400)
This allows the user to associate some data to a gbm_bo and get a
callback when the bo is destroyed.

src/gbm/main/gbm.c
src/gbm/main/gbm.h
src/gbm/main/gbmint.h

index 79ba65051f221465a0aec966336ddc631a630925..c8e7ee7099327264938a7eea5b13c101c1418ec3 100644 (file)
@@ -231,6 +231,35 @@ gbm_bo_get_handle(struct gbm_bo *bo)
    return bo->handle;
 }
 
+/** Set the user data associated with a buffer object
+ *
+ * \param bo The buffer object
+ * \param data The data to associate to the buffer object
+ * \param destroy_user_data A callback (which may be %NULL) that will be
+ * called prior to the buffer destruction
+ */
+GBM_EXPORT void
+gbm_bo_set_user_data(struct gbm_bo *bo, void *data,
+                    void (*destroy_user_data)(struct gbm_bo *, void *))
+{
+   bo->user_data = data;
+   bo->destroy_user_data = destroy_user_data;
+}
+
+/** Get the user data associated with a buffer object
+ *
+ * \param bo The buffer object
+ * \return Returns the user data associated with the buffer object or %NULL
+ * if no data was associated with it
+ *
+ * \sa gbm_bo_set_user_data()
+ */
+GBM_EXPORT void *
+gbm_bo_get_user_data(struct gbm_bo *bo)
+{
+   return bo->user_data;
+}
+
 /**
  * Destroys the given buffer object and frees all resources associated with
  * it.
@@ -240,6 +269,9 @@ gbm_bo_get_handle(struct gbm_bo *bo)
 GBM_EXPORT void
 gbm_bo_destroy(struct gbm_bo *bo)
 {
+   if (bo->destroy_user_data)
+      bo->destroy_user_data(bo, bo->user_data);
+
    bo->gbm->bo_destroy(bo);
 }
 
index 6748752d8f1d99cdc34499447bc47a17e871af6e..16489f36bba6c8261cf56013516ddba761bc7afc 100644 (file)
@@ -245,6 +245,13 @@ gbm_bo_get_format(struct gbm_bo *bo);
 union gbm_bo_handle
 gbm_bo_get_handle(struct gbm_bo *bo);
 
+void
+gbm_bo_set_user_data(struct gbm_bo *bo, void *data,
+                    void (*destroy_user_data)(struct gbm_bo *, void *));
+
+void *
+gbm_bo_get_user_data(struct gbm_bo *bo);
+
 void
 gbm_bo_destroy(struct gbm_bo *bo);
 
index 53d73f40df61e61f8002fe330ab6ebac6c26cc2f..0e98bdf3d8d07c21987a4b32903a416079e4b27e 100644 (file)
@@ -94,6 +94,8 @@ struct gbm_bo {
    uint32_t pitch;
    uint32_t format;
    union gbm_bo_handle  handle;
+   void *user_data;
+   void (*destroy_user_data)(struct gbm_bo *, void *);
 };
 
 struct gbm_surface {