diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 268117d26bdbb834615d9cc12aa8d655747eda30..88e65bcd7a110a36cc7dbffcd78f098d916b6085 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -93,8 +93,6 @@ struct drm_backend {
 		char *filename;
 	} drm;
 	struct gbm_device *gbm;
-	uint32_t *crtcs;
-	int num_crtcs;
 	uint32_t crtc_allocator;
 	uint32_t connector_allocator;
 	struct wl_listener session_listener;
@@ -236,21 +234,9 @@ static void
 drm_output_update_msc(struct drm_output *output, unsigned int seq);
 
 static int
-drm_sprite_crtc_supported(struct drm_output *output, uint32_t supported)
+drm_sprite_crtc_supported(struct drm_output *output, struct drm_sprite *sprite)
 {
-	struct weston_compositor *ec = output->base.compositor;
-	struct drm_backend *b = to_drm_backend(ec);
-	int crtc;
-
-	for (crtc = 0; crtc < b->num_crtcs; crtc++) {
-		if (b->crtcs[crtc] != output->crtc_id)
-			continue;
-
-		if (supported & (1 << crtc))
-			return -1;
-	}
-
-	return 0;
+	return !!(sprite->possible_crtcs & (1 << output->pipe));
 }
 
 static void
@@ -718,7 +704,7 @@ drm_output_repaint(struct weston_output *output_base,
 		};
 
 		if ((!s->current && !s->next) ||
-		    !drm_sprite_crtc_supported(output, s->possible_crtcs))
+		    !drm_sprite_crtc_supported(output, s))
 			continue;
 
 		if (s->next && !backend->sprites_hidden)
@@ -993,7 +979,7 @@ drm_output_prepare_overlay_view(struct drm_output *output,
 		return NULL;
 
 	wl_list_for_each(s, &b->sprite_list, link) {
-		if (!drm_sprite_crtc_supported(output, s->possible_crtcs))
+		if (!drm_sprite_crtc_supported(output, s))
 			continue;
 
 		if (!s->next) {
@@ -2654,20 +2640,11 @@ create_outputs(struct drm_backend *b, uint32_t option_connector,
 		return -1;
 	}
 
-	b->crtcs = calloc(resources->count_crtcs, sizeof(uint32_t));
-	if (!b->crtcs) {
-		drmModeFreeResources(resources);
-		return -1;
-	}
-
 	b->min_width  = resources->min_width;
 	b->max_width  = resources->max_width;
 	b->min_height = resources->min_height;
 	b->max_height = resources->max_height;
 
-	b->num_crtcs = resources->count_crtcs;
-	memcpy(b->crtcs, resources->crtcs, sizeof(uint32_t) * b->num_crtcs);
-
 	for (i = 0; i < resources->count_connectors; i++) {
 		connector = drmModeGetConnector(b->drm.fd,
 						resources->connectors[i]);