DGA remains an ugly wart inside the X server, and yet we can't quite get
rid of it because it is the only way to get unfiltered relative mouse
motion events.

This patch removes the drawing part of DGA, both the DGA pixmap stuff,
the DGA rendering operations and the DGA mmap ability from the
device-independent DGA code that was included in RandR 1.2.

I'm posting this to let people know what I'd like to see happen to DGA
before its ultimate demise.

-keith

From b31340789682149e75fefe372f4e66395f91f13c Mon Sep 17 00:00:00 2001
From: Keith Packard <[email protected]>
Date: Wed, 16 Sep 2009 15:26:24 -0700
Subject: [PATCH] Remove DGA pixmaps and framebuffer mmap from 
device-independent DGA

If you want direct frame buffer access, use DRI.

Signed-off-by: Keith Packard <[email protected]>
---
 hw/xfree86/modes/xf86Crtc.h  |    3 -
 hw/xfree86/modes/xf86DiDGA.c |  107 ++++--------------------------------------
 2 files changed, 9 insertions(+), 101 deletions(-)

diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index 69afaa5..5b0dca1 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -650,11 +650,8 @@ typedef struct _xf86CrtcConfig {
     Bool               rotation_damage_registered;
 
     /* DGA */
-    unsigned int       dga_flags;
-    unsigned long      dga_address;
     DGAModePtr         dga_modes;
     int                        dga_nmode;
-    int                        dga_width, dga_height, dga_stride;
     DisplayModePtr     dga_save_mode;
 
     const xf86CrtcConfigFuncsRec *funcs;
diff --git a/hw/xfree86/modes/xf86DiDGA.c b/hw/xfree86/modes/xf86DiDGA.c
index 0964cef..6f433ed 100644
--- a/hw/xfree86/modes/xf86DiDGA.c
+++ b/hw/xfree86/modes/xf86DiDGA.c
@@ -72,8 +72,7 @@ xf86_dga_get_modes (ScreenPtr pScreen)
        mode = modes + num++;
 
        mode->mode = display_mode;
-       mode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE;
-        mode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
+       mode->flags = DGA_CONCURRENT_ACCESS;
        if (display_mode->Flags & V_DBLSCAN)
            mode->flags |= DGA_DOUBLESCAN;
        if (display_mode->Flags & V_INTERLACE)
@@ -91,10 +90,10 @@ xf86_dga_get_modes (ScreenPtr pScreen)
        mode->yViewportStep = 1;
        mode->viewportFlags = DGA_FLIP_RETRACE;
        mode->offset = 0;
-       mode->address = (unsigned char *) xf86_config->dga_address;
-       mode->bytesPerScanline = xf86_config->dga_stride;
-       mode->imageWidth = xf86_config->dga_width;
-       mode->imageHeight = xf86_config->dga_height;
+       mode->address = 0;
+       mode->bytesPerScanline = display_mode->HDisplay * bpp;
+       mode->imageWidth = display_mode->HDisplay;
+       mode->imageHeight = display_mode->VDisplay;
        mode->pixmapWidth = mode->imageWidth;
        mode->pixmapHeight = mode->imageHeight;
        mode->maxViewportX = mode->imageWidth - mode->viewportWidth;
@@ -149,93 +148,11 @@ xf86_dga_set_viewport(ScrnInfoPtr scrn, int x, int y, int 
flags)
 }
 
 static Bool
-xf86_dga_get_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr *ppDrawable, GCPtr 
*ppGC)
-{
-    ScreenPtr          pScreen = scrn->pScreen;
-    xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
-    PixmapPtr          pPixmap;
-    GCPtr              pGC;
-    
-    pPixmap = GetScratchPixmapHeader (pScreen, xf86_config->dga_width, 
xf86_config->dga_height,
-                                     scrn->depth, scrn->bitsPerPixel, 
xf86_config->dga_stride, 
-                                     (char *) scrn->memPhysBase + 
scrn->fbOffset);
-    if (!pPixmap)
-       return FALSE;
-    pGC  = GetScratchGC (scrn->depth, pScreen);
-    if (!pGC)
-    {
-       FreeScratchPixmapHeader (pPixmap);
-       return FALSE;
-    }
-    *ppDrawable = &pPixmap->drawable;
-    *ppGC = pGC;
-    return TRUE;
-}
-
-static void
-xf86_dga_release_drawable_and_gc (ScrnInfoPtr scrn, DrawablePtr pDrawable, 
GCPtr pGC)
-{
-    FreeScratchGC (pGC);
-    FreeScratchPixmapHeader ((PixmapPtr) pDrawable);
-}
-
-static void
-xf86_dga_fill_rect(ScrnInfoPtr scrn, int x, int y, int w, int h, unsigned long 
color)
-{
-    GCPtr              pGC;
-    DrawablePtr                pDrawable;
-    XID                        vals[1];
-    xRectangle         r;
-
-    if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
-       return;
-    vals[0] = color;
-    ChangeGC (pGC, GCForeground, vals);
-    ValidateGC (pDrawable, pGC);
-    r.x = x;
-    r.y = y;
-    r.width = w;
-    r.height = h;
-    pGC->ops->PolyFillRect (pDrawable, pGC, 1, &r);
-    xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
-}
-
-static void
-xf86_dga_sync(ScrnInfoPtr scrn)
-{
-    ScreenPtr  pScreen = scrn->pScreen;
-    WindowPtr  pRoot = WindowTable [pScreen->myNum];
-    char       buffer[4];
-
-    pScreen->GetImage (&pRoot->drawable, 0, 0, 1, 1, ZPixmap, ~0L, buffer);
-}
-
-static void
-xf86_dga_blit_rect(ScrnInfoPtr scrn, int srcx, int srcy, int w, int h, int 
dstx, int dsty)
-{
-    DrawablePtr        pDrawable;
-    GCPtr      pGC;
-
-    if (!xf86_dga_get_drawable_and_gc (scrn, &pDrawable, &pGC))
-       return;
-    ValidateGC (pDrawable, pGC);
-    pGC->ops->CopyArea (pDrawable, pDrawable, pGC, srcx, srcy, w, h, dstx, 
dsty);
-    xf86_dga_release_drawable_and_gc (scrn, pDrawable, pGC);
-}
-
-static Bool
 xf86_dga_open_framebuffer(ScrnInfoPtr scrn,
                          char **name,
                          unsigned char **mem, int *size, int *offset, int 
*flags)
 {
-    xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
-    
-    *size = xf86_config->dga_stride * xf86_config->dga_height;
-    *mem = (unsigned char *) (xf86_config->dga_address);
-    *offset = 0;
-    *flags = DGA_NEED_ROOT;
-
-    return TRUE;
+    return FALSE;
 }
 
 static void
@@ -249,9 +166,9 @@ static DGAFunctionRec xf86_dga_funcs = {
    xf86_dga_set_mode,
    xf86_dga_set_viewport,
    xf86_dga_get_viewport,
-   xf86_dga_sync,
-   xf86_dga_fill_rect,
-   xf86_dga_blit_rect,
+   NULL,
+   NULL,
+   NULL,
    NULL
 };
 
@@ -273,12 +190,6 @@ xf86DiDGAInit (ScreenPtr pScreen, unsigned long 
dga_address)
     ScrnInfoPtr                scrn = xf86Screens[pScreen->myNum];
     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
 
-    xf86_config->dga_flags = 0;
-    xf86_config->dga_address = dga_address;
-    xf86_config->dga_width = scrn->virtualX;
-    xf86_config->dga_height = scrn->virtualY;
-    xf86_config->dga_stride = scrn->displayWidth * scrn->bitsPerPixel >> 3;
-    
     if (!xf86_dga_get_modes (pScreen))
        return FALSE;
     
-- 
1.6.3.3


Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to