OSDN Git Service

modetest: clear buffer and framebuffer for planes
authorJoonyoung Shim <jy0922.shim@samsung.com>
Tue, 28 Apr 2015 10:41:39 +0000 (11:41 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Tue, 28 Apr 2015 12:06:28 +0000 (13:06 +0100)
Currently we don't destroy buffer and remove framebuffer for
planes when closing modetest.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
[Emil Velikov: Tweak the commit message. fb_id = 0 is unused]
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
tests/modetest/modetest.c

index f2307f2..07ffd44 100644 (file)
@@ -736,6 +736,7 @@ struct plane_arg {
        uint32_t w, h;
        double scale;
        unsigned int fb_id;
+       struct bo *bo;
        char format_str[5]; /* need to leave room for terminating \0 */
        unsigned int fourcc;
 };
@@ -1018,6 +1019,8 @@ static int set_plane(struct device *dev, struct plane_arg *p)
        if (plane_bo == NULL)
                return -1;
 
+       p->bo = plane_bo;
+
        /* just use single plane format for now.. */
        if (drmModeAddFB2(dev->fd, p->w, p->h, p->fourcc,
                        handles, pitches, offsets, &p->fb_id, plane_flags)) {
@@ -1050,6 +1053,19 @@ static int set_plane(struct device *dev, struct plane_arg *p)
        return 0;
 }
 
+static void clear_planes(struct device *dev, struct plane_arg *p, unsigned int count)
+{
+       unsigned int i;
+
+       for (i = 0; i < count; i++) {
+               if (p[i].fb_id)
+                       drmModeRmFB(dev->fd, p[i].fb_id);
+               if (p[i].bo)
+                       bo_destroy(p[i].bo);
+       }
+}
+
+
 static void set_mode(struct device *dev, struct pipe_arg *pipes, unsigned int count)
 {
        uint32_t handles[4] = {0}, pitches[4] = {0}, offsets[4] = {0};
@@ -1523,6 +1539,7 @@ int main(int argc, char **argv)
                        if (parse_plane(&plane_args[plane_count], optarg) < 0)
                                usage(argv[0]);
 
+                       plane_args[plane_count].fb_id = 0;
                        plane_count++;
                        break;
                case 'p':
@@ -1655,6 +1672,9 @@ int main(int argc, char **argv)
                if (test_cursor)
                        clear_cursors(&dev);
 
+               if (plane_count)
+                       clear_planes(&dev, plane_args, plane_count);
+
                if (count)
                        clear_mode(&dev);
        }