diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-10-07 16:00:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-07 16:00:39 +0200 |
commit | fb5572db5aff25e6e103fa9163d58d15d8857531 (patch) | |
tree | f71d482c54290769bf8d62ee1dc95f207ad9d280 /backend/drm/drm.c | |
parent | eb44d18cdd62cd04cda2660541996e5bd54504a9 (diff) | |
parent | 37de179013987ae56ef40cc2cccf570e3b1a0351 (diff) |
Merge pull request #1286 from emersion/drm-no-crtc
backend/drm: better handle GPUs without CRTCs
Diffstat (limited to 'backend/drm/drm.c')
-rw-r--r-- | backend/drm/drm.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/backend/drm/drm.c b/backend/drm/drm.c index b9ab7f82..272a168c 100644 --- a/backend/drm/drm.c +++ b/backend/drm/drm.c @@ -156,6 +156,11 @@ bool init_drm_resources(struct wlr_drm_backend *drm) { wlr_log(WLR_INFO, "Found %d DRM CRTCs", res->count_crtcs); drm->num_crtcs = res->count_crtcs; + if (drm->num_crtcs == 0) { + drmModeFreeResources(res); + return true; + } + drm->crtcs = calloc(drm->num_crtcs, sizeof(drm->crtcs[0])); if (!drm->crtcs) { wlr_log_errno(WLR_ERROR, "Allocation failed"); @@ -433,9 +438,9 @@ static void realloc_planes(struct wlr_drm_backend *drm, const uint32_t *crtc_in, continue; } - uint32_t possible[drm->num_type_planes[type]]; - uint32_t crtc[drm->num_crtcs]; - uint32_t crtc_res[drm->num_crtcs]; + uint32_t possible[drm->num_type_planes[type] + 1]; + uint32_t crtc[drm->num_crtcs + 1]; + uint32_t crtc_res[drm->num_crtcs + 1]; for (size_t i = 0; i < drm->num_type_planes[type]; ++i) { possible[i] = drm->type_planes[type][i].possible_crtcs; @@ -1160,7 +1165,7 @@ void scan_drm_connectors(struct wlr_drm_backend *drm) { } } - bool changed_outputs[wl_list_length(&drm->outputs)]; + bool changed_outputs[wl_list_length(&drm->outputs) + 1]; memset(changed_outputs, false, sizeof(changed_outputs)); for (size_t i = 0; i < new_outputs_len; ++i) { struct wlr_drm_connector *conn = new_outputs[i]; |