modetest: Compute CRTC pipe number as needed

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
main
Laurent Pinchart 2013-02-27 05:35:13 +01:00
parent 549fe0ba62
commit 605efd7e05
1 changed files with 17 additions and 12 deletions

View File

@ -640,7 +640,6 @@ struct connector_arg {
drmModeModeInfo *mode; drmModeModeInfo *mode;
drmModeEncoder *encoder; drmModeEncoder *encoder;
int crtc; int crtc;
int pipe;
unsigned int fb_id[2], current_fb_id; unsigned int fb_id[2], current_fb_id;
struct timeval start; struct timeval start;
@ -703,15 +702,6 @@ static void connector_find_mode(struct device *dev, struct connector_arg *c)
if (c->crtc == -1) if (c->crtc == -1)
c->crtc = c->encoder->crtc_id; c->crtc = c->encoder->crtc_id;
/* and figure out which crtc index it is: */
for (i = 0; i < dev->resources->res->count_crtcs; i++) {
if (c->crtc == (int)dev->resources->res->crtcs[i]) {
c->pipe = i;
break;
}
}
} }
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
@ -829,15 +819,30 @@ set_plane(struct device *dev, struct connector_arg *c, struct plane_arg *p)
struct kms_bo *plane_bo; struct kms_bo *plane_bo;
uint32_t plane_flags = 0; uint32_t plane_flags = 0;
int crtc_x, crtc_y, crtc_w, crtc_h; int crtc_x, crtc_y, crtc_w, crtc_h;
unsigned int pipe;
unsigned int i; unsigned int i;
/* find an unused plane which can be connected to our crtc */ /* Find an unused plane which can be connected to our CRTC. Find the
* CRTC index first, then iterate over available planes.
*/
for (i = 0; i < (unsigned int)dev->resources->res->count_crtcs; i++) {
if (c->crtc == (int)dev->resources->res->crtcs[i]) {
pipe = i;
break;
}
}
if (pipe == (unsigned int)dev->resources->res->count_crtcs) {
fprintf(stderr, "CRTC %u not found\n", c->crtc);
return -1;
}
for (i = 0; i < dev->resources->plane_res->count_planes && !plane_id; i++) { for (i = 0; i < dev->resources->plane_res->count_planes && !plane_id; i++) {
ovr = dev->resources->planes[i].plane; ovr = dev->resources->planes[i].plane;
if (!ovr) if (!ovr)
continue; continue;
if ((ovr->possible_crtcs & (1 << c->pipe)) && !ovr->crtc_id) if ((ovr->possible_crtcs & (1 << pipe)) && !ovr->crtc_id)
plane_id = ovr->plane_id; plane_id = ovr->plane_id;
} }