From 310d8d189d14eb6c29be205bf2c9e98187b2fa84 Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira Date: Mon, 30 Apr 2012 13:27:51 +0300 Subject: [PATCH] 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. --- src/gbm/main/gbm.c | 32 ++++++++++++++++++++++++++++++++ src/gbm/main/gbm.h | 7 +++++++ src/gbm/main/gbmint.h | 2 ++ 3 files changed, 41 insertions(+) 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 @@ -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); 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 { -- 2.30.2