lib: Add igt_plane_set_size()

Allow tests to specify the plane size instead of assuming that the
entire FB will be scanned out.

To keep the current tests working without having to sprinkle
igt_plane_set_size() calls all over the place, make
igt_plane_set_fb() reset the plane size to the FB size.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
This commit is contained in:
Ville Syrjälä 2014-09-12 20:18:04 +03:00
parent b4fe481d4f
commit 7b76754e0e
2 changed files with 33 additions and 4 deletions

View File

@ -1269,7 +1269,7 @@ static int igt_drm_plane_commit(igt_plane_t *plane,
fb_id,
0, /* flags */
plane->crtc_x, plane->crtc_y,
plane->fb->width, plane->fb->height,
plane->crtc_w, plane->crtc_h,
IGT_FIXED(0,0), /* src_x */
IGT_FIXED(0,0), /* src_y */
IGT_FIXED(plane->fb->width,0), /* src_w */
@ -1314,12 +1314,12 @@ static int igt_cursor_commit_legacy(igt_plane_t *cursor,
igt_output_name(output),
kmstest_pipe_name(output->config.pipe),
gem_handle,
cursor->fb->width, cursor->fb->height);
cursor->crtc_w, cursor->crtc_h);
ret = drmModeSetCursor(display->drm_fd, crtc_id,
gem_handle,
cursor->fb->width,
cursor->fb->height);
cursor->crtc_w,
cursor->crtc_h);
} else {
LOG(display,
"%s: SetCursor pipe %s, disabling\n",
@ -1631,6 +1631,14 @@ void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb)
plane->index, fb ? fb->fb_id : 0);
plane->fb = fb;
/* hack to keep tests working that don't call igt_plane_set_size() */
if (fb) {
plane->crtc_w = fb->width;
plane->crtc_h = fb->height;
} else {
plane->crtc_w = 0;
plane->crtc_h = 0;
}
plane->fb_changed = true;
}
@ -1649,6 +1657,24 @@ void igt_plane_set_position(igt_plane_t *plane, int x, int y)
plane->position_changed = true;
}
void igt_plane_set_size(igt_plane_t *plane, int w, int h)
{
igt_pipe_t *pipe = plane->pipe;
igt_display_t *display = pipe->display;
LOG(display, "%s.%d: plane_set_size(%d,%d)\n",
kmstest_pipe_name(pipe->pipe), plane->index, w, h);
plane->crtc_w = w;
plane->crtc_h = h;
/*
* must be fb_changed so that legacy cursors call
* drmModeSetCursor() instead of drmModeMoveCursor()
*/
plane->fb_changed = true;
}
void igt_plane_set_panning(igt_plane_t *plane, int x, int y)
{
igt_pipe_t *pipe = plane->pipe;

View File

@ -212,6 +212,8 @@ typedef struct {
/* position within pipe_src_w x pipe_src_h */
int crtc_x, crtc_y;
/* size within pipe_src_w x pipe_src_h */
int crtc_w, crtc_h;
/* panning offset within the fb */
unsigned int pan_x, pan_y;
igt_rotation_t rotation;
@ -266,6 +268,7 @@ static inline bool igt_plane_supports_rotation(igt_plane_t *plane)
void igt_plane_set_fb(igt_plane_t *plane, struct igt_fb *fb);
void igt_plane_set_position(igt_plane_t *plane, int x, int y);
void igt_plane_set_size(igt_plane_t *plane, int w, int h);
void igt_plane_set_panning(igt_plane_t *plane, int x, int y);
void igt_plane_set_rotation(igt_plane_t *plane, igt_rotation_t rotation);