ecore_drm2: Move fb from plane state struct to plane struct
authorDerek Foreman <derekf@osg.samsung.com>
Fri, 16 Jun 2017 21:07:15 +0000 (16:07 -0500)
committerDerek Foreman <derekf@osg.samsung.com>
Fri, 23 Jun 2017 13:15:41 +0000 (08:15 -0500)
The plane state struct needs the fb id for drm updates, and the plane
state can be updated even if it's pointed to by a dead plane.

Dead planes need to keep their fb so we can properly handle the fb
lifetime.

src/lib/ecore_drm2/ecore_drm2_plane.c
src/lib/ecore_drm2/ecore_drm2_private.h

index a83d1fb..cc79bff 100644 (file)
@@ -96,7 +96,7 @@ out:
    pstate->in_use = EINA_TRUE;
    pstate->cid.value = output->crtc_id;
    pstate->fid.value = fb->id;
-   pstate->fb = fb;
+   plane->fb = fb;
 
    pstate->sx.value = 0;
    pstate->sy.value = 0;
@@ -130,11 +130,15 @@ out:
 EAPI void
 ecore_drm2_plane_release(Ecore_Drm2_Plane *plane)
 {
+   Ecore_Drm2_Fb *fb;
+
    EINA_SAFETY_ON_NULL_RETURN(plane);
    EINA_SAFETY_ON_TRUE_RETURN(plane->dead);
 
+   fb = plane->fb;
+
    plane->output->fbs =
-     eina_list_append(plane->output->fbs, plane->state->fb);
+     eina_list_append(plane->output->fbs, fb);
 
    plane->dead = EINA_TRUE;
    plane->state->in_use = EINA_FALSE;
@@ -171,9 +175,9 @@ ecore_drm2_plane_fb_set(Ecore_Drm2_Plane *plane, Ecore_Drm2_Fb *fb)
         _ecore_drm2_fb_ref(fb);
 
         plane->output->fbs =
-          eina_list_append(plane->output->fbs, plane->state->fb);
+          eina_list_append(plane->output->fbs, plane->fb);
 
-        plane->state->fb = fb;
+        plane->fb = fb;
         return EINA_TRUE;
      }
    plane->state->fid.value = fallback_id;
index 4837871..730c7b5 100644 (file)
@@ -104,7 +104,6 @@ typedef struct _Ecore_Drm2_Plane_State
 
    /* these are not part of an atomic state, but we store these here
     * so that we do not have to refetch properties when iterating planes */
-   Ecore_Drm2_Fb *fb;
    uint32_t rotation_map[6];
    uint32_t supported_rotations;
 
@@ -175,6 +174,7 @@ struct _Ecore_Drm2_Plane
    int type;
    Ecore_Drm2_Plane_State *state;
    Ecore_Drm2_Output *output;
+   Ecore_Drm2_Fb *fb;
    Eina_Bool dead;
 };