mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-22 21:05:58 +01:00
render/gbm_allocator: add support for gbm_bo_get_fd_for_plane
See [1]. This allows us to remove the workaround for GBM API limitations. [1]: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5442
This commit is contained in:
parent
9ca743f9fd
commit
66e100ffbf
2 changed files with 9 additions and 2 deletions
|
@ -35,12 +35,14 @@ static bool export_gbm_bo(struct gbm_bo *bo,
|
||||||
int i;
|
int i;
|
||||||
int32_t handle = -1;
|
int32_t handle = -1;
|
||||||
for (i = 0; i < attribs.n_planes; ++i) {
|
for (i = 0; i < attribs.n_planes; ++i) {
|
||||||
|
#if HAS_GBM_BO_GET_FD_FOR_PLANE
|
||||||
|
attribs.fd[i] = gbm_bo_get_fd_for_plane(bo, i);
|
||||||
|
(void)handle;
|
||||||
|
#else
|
||||||
// GBM is lacking a function to get a FD for a given plane. Instead,
|
// GBM is lacking a function to get a FD for a given plane. Instead,
|
||||||
// check all planes have the same handle. We can't use
|
// check all planes have the same handle. We can't use
|
||||||
// drmPrimeHandleToFD because that messes up handle ref'counting in
|
// drmPrimeHandleToFD because that messes up handle ref'counting in
|
||||||
// the user-space driver.
|
// the user-space driver.
|
||||||
// TODO: use gbm_bo_get_plane_fd when it lands, see
|
|
||||||
// https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5442
|
|
||||||
union gbm_bo_handle plane_handle = gbm_bo_get_handle_for_plane(bo, i);
|
union gbm_bo_handle plane_handle = gbm_bo_get_handle_for_plane(bo, i);
|
||||||
if (plane_handle.s32 < 0) {
|
if (plane_handle.s32 < 0) {
|
||||||
wlr_log(WLR_ERROR, "gbm_bo_get_handle_for_plane failed");
|
wlr_log(WLR_ERROR, "gbm_bo_get_handle_for_plane failed");
|
||||||
|
@ -55,6 +57,8 @@ static bool export_gbm_bo(struct gbm_bo *bo,
|
||||||
}
|
}
|
||||||
|
|
||||||
attribs.fd[i] = gbm_bo_get_fd(bo);
|
attribs.fd[i] = gbm_bo_get_fd(bo);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (attribs.fd[i] < 0) {
|
if (attribs.fd[i] < 0) {
|
||||||
wlr_log(WLR_ERROR, "gbm_bo_get_fd failed");
|
wlr_log(WLR_ERROR, "gbm_bo_get_fd failed");
|
||||||
goto error_fd;
|
goto error_fd;
|
||||||
|
|
|
@ -18,6 +18,9 @@ wlr_files += files(
|
||||||
'drm_dumb_allocator.c',
|
'drm_dumb_allocator.c',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
has = cc.has_function('gbm_bo_get_fd_for_plane', dependencies: [gbm])
|
||||||
|
add_project_arguments('-DHAS_GBM_BO_GET_FD_FOR_PLANE=@0@'.format(has.to_int()), language: 'c')
|
||||||
|
|
||||||
egl = dependency('egl', required: 'gles2' in renderers)
|
egl = dependency('egl', required: 'gles2' in renderers)
|
||||||
if egl.found()
|
if egl.found()
|
||||||
wlr_deps += egl
|
wlr_deps += egl
|
||||||
|
|
Loading…
Reference in a new issue