Skip to content

Commit 8c33868

Browse files
committed
cros_gralloc: Use property to select custom backends
property name: vendor.gralloc.minigbm.backend possible values: 1. auto (default) 2. gbm_mesa 3. dmaheaps Change-Id: I5ab2649f98d40d139afb008ea8a804c790b81c31 Signed-off-by: Roman Stratiienko <[email protected]> For reviews, comments, suggestions and questions visit: #10
1 parent 1b29b1b commit 8c33868

File tree

3 files changed

+53
-21
lines changed

3 files changed

+53
-21
lines changed

cros_gralloc/cros_gralloc_driver.cc

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ std::shared_ptr<cros_gralloc_driver> cros_gralloc_driver::get_instance()
9191
return s_instance;
9292
}
9393

94-
#ifndef DRV_EXTERNAL
9594
static struct driver *init_try_node(int idx, char const *str)
9695
{
9796
int fd;
@@ -132,6 +131,27 @@ static struct driver *init_try_nodes()
132131
uint32_t min_card_node = DRM_CARD_NODE_START;
133132
uint32_t max_card_node = (min_card_node + num_nodes);
134133

134+
char lib_name[PROPERTY_VALUE_MAX];
135+
property_get("vendor.gralloc.minigbm.backend", lib_name, "auto");
136+
137+
if (strcmp(lib_name, "dmaheaps") == 0) {
138+
ALOGI("Initializing dma-buf heaps backend");
139+
drv = drv_create(DRV_DMAHEAPS_DRIVER);
140+
if (drv)
141+
return drv;
142+
143+
ALOGE("Failed to initialize dma-buf heap backend.");
144+
}
145+
146+
if (strcmp(lib_name, "gbm_mesa") == 0) {
147+
ALOGI("Initializing gbm_mesa backend");
148+
drv = drv_create(DRV_GBM_MESA_DRIVER);
149+
if (drv)
150+
return drv;
151+
152+
ALOGE("Failed to initialize gbm_mesa backend.");
153+
}
154+
135155
// Try render nodes...
136156
for (uint32_t i = min_render_node; i < max_render_node; i++) {
137157
drv = init_try_node(i, render_nodes_fmt);
@@ -146,18 +166,19 @@ static struct driver *init_try_nodes()
146166
return drv;
147167
}
148168

149-
return nullptr;
150-
}
169+
/* Fallback to gbm_mesa which is a way smarter than dumb_driver */
170+
if (strcmp(lib_name, "gbm_mesa") != 0) {
171+
ALOGI("Falling-back to gbm_mesa backend");
172+
drv = drv_create(DRV_GBM_MESA_DRIVER);
173+
if (drv)
174+
return drv;
175+
}
151176

152-
#else
177+
ALOGE("Failed for find suitable backend");
153178

154-
static struct driver *init_try_nodes()
155-
{
156-
return drv_create(-1);
179+
return nullptr;
157180
}
158181

159-
#endif
160-
161182
static void drv_destroy_and_close(struct driver *drv)
162183
{
163184
int fd = drv_get_fd(drv);

drv.c

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,12 @@
2727
#include "drv_priv.h"
2828
#include "util.h"
2929

30-
#ifdef DRV_EXTERNAL
31-
extern struct backend *init_external_backend();
32-
33-
static const struct backend *drv_get_backend(int fd)
34-
{
35-
return init_external_backend();
36-
}
37-
#else
38-
30+
#ifdef DRV_DMABUF_HEAP
31+
extern const struct backend backend_dmabuf_heap;
32+
#endif
33+
#ifdef DRV_GBM_MESA
34+
extern const struct backend backend_gbm_mesa;
35+
#endif
3936
#ifdef DRV_AMDGPU
4037
extern const struct backend backend_amdgpu;
4138
#endif
@@ -118,7 +115,6 @@ static const struct backend *drv_get_backend(int fd)
118115
drmFreeVersion(drm_version);
119116
return NULL;
120117
}
121-
#endif
122118

123119
struct driver *drv_create(int fd)
124120
{
@@ -134,8 +130,20 @@ struct driver *drv_create(int fd)
134130
minigbm_debug = drv_get_os_option(MINIGBM_DEBUG);
135131
drv->compression = (minigbm_debug == NULL) || (strcmp(minigbm_debug, "nocompression") != 0);
136132

137-
drv->fd = fd;
138-
drv->backend = drv_get_backend(fd);
133+
#ifdef DRV_GBM_MESA
134+
if (fd == DRV_GBM_MESA_DRIVER) {
135+
drv->backend = &backend_gbm_mesa;
136+
} else
137+
#endif
138+
#ifdef DRV_DMABUF_HEAP
139+
if (fd == DRV_DMAHEAPS_DRIVER) {
140+
drv->backend = &backend_dmabuf_heap;
141+
} else
142+
#endif
143+
{
144+
drv->fd = fd;
145+
drv->backend = drv_get_backend(fd);
146+
}
139147

140148
if (!drv->backend)
141149
goto free_driver;

drv.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ extern "C" {
1616
#include <stdint.h>
1717
#include <stdlib.h>
1818

19+
#define DRV_GBM_MESA_DRIVER (-2)
20+
#define DRV_DMAHEAPS_DRIVER (-3)
21+
1922
#define DRV_MAX_PLANES 4
2023

2124
// clang-format off

0 commit comments

Comments
 (0)