Merge "libdrm: add freeze last frame function [1/1]"
diff --git a/meson/meson_drm_kms.c b/meson/meson_drm_kms.c
index 67ed569..edfed63 100644
--- a/meson/meson_drm_kms.c
+++ b/meson/meson_drm_kms.c
@@ -129,7 +129,15 @@
close(buf->fd[i]);
fd = drm_disp->alloc_only ? drm_disp->dev->render_fd : drm_disp->dev->fd;
- drmModeRmFB(drm_disp->drm_fd, buf->fb_id);
+ if (drm_disp->freeze) {
+ ret = drmIoctl(drm_disp->drm_fd, DRM_IOCTL_MESON_RMFB, &buf->fb_id);
+ if (ret < 0) {
+ fprintf(stderr, "Unable to rmfb: %s\n",
+ strerror(errno));
+ }
+ } else {
+ drmModeRmFB(drm_disp->drm_fd, buf->fb_id);
+ }
memset(&destroy_dumb, 0, sizeof(destroy_dumb));
for ( i = 0; i < buf->nbo; i++) {
@@ -808,6 +816,7 @@
base->free_buf = kms_free_buf;
base->post_buf = kms_post_buf;
base->alloc_only = 0;
+ base->freeze = 0;
ret = drm_kms_init_resource(display);
if (ret) {
diff --git a/meson/meson_drm_util.h b/meson/meson_drm_util.h
index 758fca7..f623104 100644
--- a/meson/meson_drm_util.h
+++ b/meson/meson_drm_util.h
@@ -67,7 +67,8 @@
size_t nbuf;
struct drm_buf *bufs;
- int alloc_only;
+ int alloc_only;
+ int freeze;
void (*destroy_display)(struct drm_display *disp);
int (*alloc_bufs)(struct drm_display *disp, int num, struct drm_buf_metadata *info);
diff --git a/meson_drm.h b/meson_drm.h
index 7a8c7a8..ec05b1e 100644
--- a/meson_drm.h
+++ b/meson_drm.h
@@ -41,6 +41,8 @@
/*Memory related.*/
#define DRM_IOCTL_MESON_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + \
0x00, struct drm_meson_gem_create)
+#define DRM_IOCTL_MESON_RMFB DRM_IOWR(DRM_COMMAND_BASE + \
+ 0x01, unsigned int)
/*KMS related.*/
#define DRM_IOCTL_MESON_ASYNC_ATOMIC DRM_IOWR(DRM_COMMAND_BASE + \