diff options
author | James Jones <jajones@nvidia.com> | 2019-12-13 16:32:57 -0800 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2021-07-06 16:57:59 +0000 |
commit | 45bd17610ce10c1b99a966f56a517789cd36ae29 (patch) | |
tree | 7a22fcebf10b9415e9ff1bca51eecf63cf088c90 /src/gbm | |
parent | ceb6c44fe4ff848f4c6f95c842ea001ec66e0f9e (diff) |
gbm: Give gbm_device a reference to its backend
This will be used for looking up the backend
again at destruction time to perform any backend-
agnostic cleanup. To facilitate that, also
dispatch device destruction to the backend manager
code.
Signed-off-by: James Jones <jajones@nvidia.com>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9902>
Diffstat (limited to 'src/gbm')
-rw-r--r-- | src/gbm/main/backend.c | 17 | ||||
-rw-r--r-- | src/gbm/main/backend.h | 3 | ||||
-rw-r--r-- | src/gbm/main/gbm.c | 2 | ||||
-rw-r--r-- | src/gbm/main/gbmint.h | 4 |
4 files changed, 22 insertions, 4 deletions
diff --git a/src/gbm/main/backend.c b/src/gbm/main/backend.c index ddcec0a3133..f22600b9d8b 100644 --- a/src/gbm/main/backend.c +++ b/src/gbm/main/backend.c @@ -37,12 +37,12 @@ extern const struct gbm_backend gbm_dri_backend; -struct backend_desc { +struct gbm_backend_desc { const char *name; const struct gbm_backend *backend; }; -static const struct backend_desc backends[] = { +static const struct gbm_backend_desc backends[] = { { "gbm_dri.so", &gbm_dri_backend }, }; @@ -52,11 +52,16 @@ find_backend(const char *name, int fd) struct gbm_device *dev = NULL; unsigned i; - for (i = 0; i < ARRAY_SIZE(backends) && dev == NULL; ++i) { + for (i = 0; i < ARRAY_SIZE(backends); ++i) { if (name && strcmp(backends[i].name, name)) continue; dev = backends[i].backend->create_device(fd); + + if (dev) { + dev->backend_desc = &backends[i]; + break; + } } return dev; @@ -87,3 +92,9 @@ _gbm_create_device(int fd) return dev; } + +void +_gbm_device_destroy(struct gbm_device *gbm) +{ + gbm->destroy(gbm); +} diff --git a/src/gbm/main/backend.h b/src/gbm/main/backend.h index 4a643750333..325c4123f90 100644 --- a/src/gbm/main/backend.h +++ b/src/gbm/main/backend.h @@ -33,4 +33,7 @@ struct gbm_device * _gbm_create_device(int fd); +void +_gbm_device_destroy(struct gbm_device *gbm); + #endif diff --git a/src/gbm/main/gbm.c b/src/gbm/main/gbm.c index ce74738b1c9..d53620a8943 100644 --- a/src/gbm/main/gbm.c +++ b/src/gbm/main/gbm.c @@ -106,7 +106,7 @@ gbm_device_get_format_modifier_plane_count(struct gbm_device *gbm, GBM_EXPORT void gbm_device_destroy(struct gbm_device *gbm) { - gbm->destroy(gbm); + _gbm_device_destroy(gbm); } /** Create a gbm device for allocating buffers diff --git a/src/gbm/main/gbmint.h b/src/gbm/main/gbmint.h index 7514e03ffd7..82c989960e5 100644 --- a/src/gbm/main/gbmint.h +++ b/src/gbm/main/gbmint.h @@ -42,6 +42,8 @@ * \brief Internal implementation details of gbm */ +struct gbm_backend_desc; + /** * The device used for the memory allocation. * @@ -51,6 +53,8 @@ struct gbm_device { /* Hack to make a gbm_device detectable by its first element. */ struct gbm_device *(*dummy)(int); + const struct gbm_backend_desc *backend_desc; + int fd; const char *name; |