aboutsummaryrefslogtreecommitdiffstats
path: root/src/gbm/main
diff options
context:
space:
mode:
authorAnder Conselvan de Oliveira <[email protected]>2012-04-30 13:27:51 +0300
committerKristian Høgsberg <[email protected]>2012-04-30 13:09:39 -0400
commit310d8d189d14eb6c29be205bf2c9e98187b2fa84 (patch)
tree2fab4f3ab0af33879db76e14f84fcbdf5b382e50 /src/gbm/main
parentf641c57cfa91b259077b4be89789dc01235b0187 (diff)
gbm: add gbm_bo_get/set_user_data()
This allows the user to associate some data to a gbm_bo and get a callback when the bo is destroyed.
Diffstat (limited to 'src/gbm/main')
-rw-r--r--src/gbm/main/gbm.c32
-rw-r--r--src/gbm/main/gbm.h7
-rw-r--r--src/gbm/main/gbmint.h2
3 files changed, 41 insertions, 0 deletions
diff --git a/src/gbm/main/gbm.c b/src/gbm/main/gbm.c
index 79ba65051f2..c8e7ee70993 100644
--- a/src/gbm/main/gbm.c
+++ b/src/gbm/main/gbm.c
@@ -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);
}
diff --git a/src/gbm/main/gbm.h b/src/gbm/main/gbm.h
index 6748752d8f1..16489f36bba 100644
--- a/src/gbm/main/gbm.h
+++ b/src/gbm/main/gbm.h
@@ -246,6 +246,13 @@ 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);
struct gbm_surface *
diff --git a/src/gbm/main/gbmint.h b/src/gbm/main/gbmint.h
index 53d73f40df6..0e98bdf3d8d 100644
--- a/src/gbm/main/gbmint.h
+++ b/src/gbm/main/gbmint.h
@@ -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 {