[Xorg-driver-geode] [PATCH] Modify rotation pitch & reallocatepixmap for bo

Cui, Hunk Hunk.Cui at amd.com
Sun Sep 26 03:53:10 PDT 2010


Hi, Martin,

	Thanks for your reminder, I will modify the format and resubmit it.

Thanks,
Hunk Cui

> -----Original Message-----
> From: xorg-driver-geode-bounces+hunk.cui=amd.com at lists.x.org [mailto:xorg-driver-geode-
> bounces+hunk.cui=amd.com at lists.x.org] On Behalf Of Martin-éric Racine
> Sent: Sunday, September 26, 2010 6:22 PM
> To: Cui, Hunk
> Cc: Geode Mailing List
> Subject: Re: [Xorg-driver-geode] [PATCH] Modify rotation pitch & reallocatepixmap for bo
> 
> Thanks for the revised patch.  Sadly, it fails to apply:
> 
> $ git am ~/Desktop/\[PATCH\]\ Modify\ rotation\ pitch\ \&\ reallocate\
> pixmap\ for\ bo.mbox
> Applying: Modify rotation pitch & reallocate pixmap for bo
> fatal: corrupt patch at line 11
> Patch failed at 0001 Modify rotation pitch & reallocate pixmap for bo
> When you have resolved this problem run "git am --resolved".
> If you would prefer to skip this patch, instead run "git am --skip".
> To restore the original branch and stop patching run "git am --abort".
> 
> On Sun, Sep 26, 2010 at 1:14 PM, Cui, Hunk <Hunk.Cui at amd.com> wrote:
> > From: Hunk <hunk.cui at amd.com>
> >
> > *Modify rotation pitch value with crtc_mode_set.
> > *Use own wrapper to allocate a pixmap for wrapping a bo.
> > *Ubuntu Bugzilla #377929 & Debian Bugzilla #512020
> >
> > Signed-off-by: Hunk Cui <Hunk.Cui at amd.com>
> > ---
> >  src/lx_display.c |   57
> > ++++++++++++++++++++++++++++++++++++++++++++++++++---
> >  1 files changed, 53 insertions(+), 4 deletions(-)
> >
> > diff --git a/src/lx_display.c b/src/lx_display.c
> > index 89b725f..d34a25f 100644
> > --- a/src/lx_display.c
> > +++ b/src/lx_display.c
> > @@ -266,6 +266,7 @@ lx_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr
> > mode,
> >     ScrnInfoPtr pScrni = crtc->scrn;
> >     GeodeRec *pGeode = GEODEPTR(pScrni);
> >     DF_VIDEO_SOURCE_PARAMS vs_odd, vs_even;
> > +    unsigned int rpitch;
> >
> >     df_get_video_source_configuration(&vs_odd, &vs_even);
> >
> > @@ -279,6 +280,14 @@ lx_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr
> > mode,
> >     /* The output gets turned in in the output code as
> >      * per convention */
> >
> > +    /* For rotation, any write to the frame buffer region marks
> > +     * the retire frame as dirty.
> > +     */
> > +    if (crtc->rotatedData != NULL) {
> > +       rpitch = pScrni->displayWidth * (pScrni->bitsPerPixel / 8);
> > +       vg_set_display_pitch(rpitch);
> > +    }
> > +    else
> >     vg_set_display_pitch(pGeode->Pitch);
> >     gp_set_bpp(pScrni->bitsPerPixel);
> >
> > @@ -363,6 +372,45 @@ lx_crtc_gamma_set(xf86CrtcPtr crtc, CARD16 * red,
> > CARD16 * green,
> >     WRITE_VID32(DF_DISPLAY_CONFIG, dcfg);
> >  }
> >
> > +    /* The Xserver has a scratch pixmap allocation routine that will
> > +     * try to use the existing scratch pixmap if possible. When the
> > driver
> > +     * or any other user stop using it, it need to clear out any pixmap
> > +     * state (private data etc) otherwise the next user may get stale
> > data.
> > +     */
> > +
> > +    /* Use our own wrapper to allocate a pixmap for wrapping a buffer
> > object
> > +     * It removes using scratch pixmaps for rotate.
> > +     */
> > +static PixmapPtr
> > +lx_create_bo_pixmap(ScreenPtr pScreen,
> > +               int width, int height,
> > +               int depth, int bpp,
> > +               int pitch, pointer pPixData)
> > +{
> > +    PixmapPtr pixmap;
> > +
> > +    pixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0, depth, 0);
> > +    if (!pixmap)
> > +       return NULL;
> > +    if (!(*pScreen->ModifyPixmapHeader)(pixmap, width, height,
> > +                                       depth, bpp, pitch, pPixData)) {
> > +    /* ModifyPixmapHeader failed, so we can't use it as scratch pixmap
> > +     */
> > +       (*pScreen->DestroyPixmap)(pixmap);
> > +       return NULL;
> > +    }
> > +
> > +    return pixmap;
> > +}
> > +
> > +static void
> > +lx_destory_bo_pixmap(PixmapPtr pixmap)
> > +{
> > +    ScreenPtr pScreen = pixmap->drawable.pScreen;
> > +
> > +    (*pScreen->DestroyPixmap)(pixmap);
> > +}
> > +
> >     /* Allocates shadow memory, and allocating a new space for
> > Rotation.
> >      * The size is measured in bytes, and the offset from the beginning
> >      * of card space is returned.
> > @@ -422,14 +470,15 @@ static PixmapPtr
> >  lx_crtc_shadow_create(xf86CrtcPtr crtc, void *data, int width, int
> > height)
> >  {
> >     ScrnInfoPtr pScrni = crtc->scrn;
> > -    GeodeRec *pGeode = GEODEPTR(pScrni);
> >     PixmapPtr rpixmap;
> > +    unsigned int rpitch;
> >
> > +    rpitch = pScrni->displayWidth * (pScrni->bitsPerPixel / 8);
> >     if (!data)
> >        data = lx_crtc_shadow_allocate(crtc, width, height);
> >
> > -    rpixmap = GetScratchPixmapHeader(pScrni->pScreen,
> > -       width, height, pScrni->depth, pScrni->bitsPerPixel,
> > pGeode->Pitch,
> > +    rpixmap = lx_create_bo_pixmap(pScrni->pScreen,
> > +       width, height, pScrni->depth, pScrni->bitsPerPixel, rpitch,
> >        data);
> >
> >     if (rpixmap == NULL) {
> > @@ -447,7 +496,7 @@ lx_crtc_shadow_destroy(xf86CrtcPtr crtc, PixmapPtr
> > rpixmap, void *data)
> >     GeodeRec *pGeode = GEODEPTR(pScrni);
> >
> >     if (rpixmap)
> > -       FreeScratchPixmapHeader(rpixmap);
> > +       lx_destory_bo_pixmap(rpixmap);
> >
> >     /* Free shadow memory */
> >     if (data) {
> > --
> > 1.7.1
> >
> >
> >
> 
> 
> 
> --
> - maahanmuuttoasian ja ulkomaankaupan asiantuntija
> - Suomen tutkimusverkoston jäsen, European Migration Network, MIGRI
> - neuvottelukunnan jäsen 2009-2011, Otaniemi International Network, NEO-OTANIEMI
> - käyttäjäraadin jäsen 2009-2013, Infopankki
> - vierasblogaaja, Magma
> _______________________________________________
> Xorg-driver-geode mailing list
> Xorg-driver-geode at lists.x.org
> http://lists.x.org/mailman/listinfo/xorg-driver-geode



More information about the Xorg-driver-geode mailing list