diff options
author | Ander Conselvan de Oliveira <[email protected]> | 2012-04-30 13:27:51 +0300 |
---|---|---|
committer | Kristian Høgsberg <[email protected]> | 2012-04-30 13:09:39 -0400 |
commit | 310d8d189d14eb6c29be205bf2c9e98187b2fa84 (patch) | |
tree | 2fab4f3ab0af33879db76e14f84fcbdf5b382e50 | |
parent | f641c57cfa91b259077b4be89789dc01235b0187 (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.
-rw-r--r-- | src/gbm/main/gbm.c | 32 | ||||
-rw-r--r-- | src/gbm/main/gbm.h | 7 | ||||
-rw-r--r-- | src/gbm/main/gbmint.h | 2 |
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 { |