summaryrefslogtreecommitdiff
path: root/src/gbm
diff options
context:
space:
mode:
authorJames Jones <jajones@nvidia.com>2019-12-13 16:32:57 -0800
committerMarge Bot <eric+marge@anholt.net>2021-07-06 16:57:59 +0000
commit45bd17610ce10c1b99a966f56a517789cd36ae29 (patch)
tree7a22fcebf10b9415e9ff1bca51eecf63cf088c90 /src/gbm
parentceb6c44fe4ff848f4c6f95c842ea001ec66e0f9e (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.c17
-rw-r--r--src/gbm/main/backend.h3
-rw-r--r--src/gbm/main/gbm.c2
-rw-r--r--src/gbm/main/gbmint.h4
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;