On 14.01.2013 18:06, Thierry Reding wrote:
> +static int tegra_dc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer 
> *fb,
> +                           struct drm_pending_vblank_event *event)
> +{
> +     struct tegra_framebuffer *newfb = to_tegra_fb(fb);
> +     struct tegra_dc *dc = to_tegra_dc(crtc);
> +     struct drm_device *drm = crtc->dev;
> +     unsigned long flags;
> +
> +     if (dc->event)
> +             return -EBUSY;
> +
> +     tegra_dc_set_base(dc, 0, 0, newfb);
> +
> +     if (event) {
> +             event->pipe = dc->pipe;
> +
> +             spin_lock_irqsave(&drm->event_lock, flags);
> +             dc->event = event;
> +             spin_unlock_irqrestore(&drm->event_lock, flags);
> +
> +             drm_vblank_get(drm, dc->pipe);
> +     }
> +
> +     return 0;
> +}

The patch seems fine to me. I have a question for a follow-up.

In downstream dc driver we initiate a page flip, and assign a fence
(syncpt id, value) to it. We return the fence to user space. Then when
the actual page flip is done, dc increments the sync point.

User space can take the fence and use it for synchronizing graphics
operations. In downstream, we use that fence to be able to submit
operations to graphics units and synchronize them to the flip by adding
a host wait. It improves performance, because we can prepare and send
the graphics operations to hardware while flip is still happening.

Is this something we could do in tegra-drm, too? DRM's page flip IOCTL
doesn't seem to have a way to pass a fence back from fence, so we'd need
to find a way to pass the fence back to user space.

Of course, this has the prerequisite of having support for syncpts,
which I hoped we would get to 3.9. The review for host1x patches seem to
have stalled, so that's iffy.

Terje
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to