kdrive: Move Xephyr-specific fields out of KdScreenInfo
memory_base, memory_size, off_screen_base fields in KdScreenInfo are used only by fake EXA in Xephyr. Move them into Xephyr, cleanup Xfake and Xfbdev. Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
This commit is contained in:
parent
62883b499b
commit
5337ddcfd9
|
@ -220,6 +220,22 @@ ephyrWindowLinear (ScreenPtr pScreen,
|
|||
return priv->base + row * priv->bytes_per_line + offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Figure out display buffer size. If fakexa is enabled, allocate a larger
|
||||
* buffer so that fakexa has space to put offscreen pixmaps.
|
||||
*/
|
||||
int
|
||||
ephyrBufferHeight(KdScreenInfo *screen)
|
||||
{
|
||||
int buffer_height;
|
||||
if (ephyrFuncs.initAccel == NULL)
|
||||
buffer_height = screen->height;
|
||||
else
|
||||
buffer_height = 3 * screen->height;
|
||||
return buffer_height;
|
||||
}
|
||||
|
||||
|
||||
Bool
|
||||
ephyrMapFramebuffer (KdScreenInfo *screen)
|
||||
{
|
||||
|
@ -235,22 +251,11 @@ ephyrMapFramebuffer (KdScreenInfo *screen)
|
|||
KdSetPointerMatrix (&m);
|
||||
|
||||
priv->bytes_per_line = ((screen->width * screen->fb[0].bitsPerPixel + 31) >> 5) << 2;
|
||||
|
||||
/* point the framebuffer to the data in an XImage */
|
||||
/* If fakexa is enabled, allocate a larger buffer so that fakexa has space to
|
||||
* put offscreen pixmaps.
|
||||
*/
|
||||
if (ephyrFuncs.initAccel == NULL)
|
||||
buffer_height = screen->height;
|
||||
else
|
||||
buffer_height = 3 * screen->height;
|
||||
|
||||
buffer_height = ephyrBufferHeight(screen);
|
||||
|
||||
priv->base = hostx_screen_init (screen, screen->width, screen->height, buffer_height);
|
||||
|
||||
screen->memory_base = (CARD8 *) (priv->base);
|
||||
screen->memory_size = priv->bytes_per_line * buffer_height;
|
||||
screen->off_screen_base = priv->bytes_per_line * screen->height;
|
||||
|
||||
if ((scrpriv->randr & RR_Rotate_0) && !(scrpriv->randr & RR_Reflect_All))
|
||||
{
|
||||
scrpriv->shadow = FALSE;
|
||||
|
|
|
@ -180,6 +180,8 @@ extern Bool ephyrCursorInit(ScreenPtr pScreen);
|
|||
|
||||
extern void ephyrCursorEnable(ScreenPtr pScreen);
|
||||
|
||||
extern int ephyrBufferHeight(KdScreenInfo *screen);
|
||||
|
||||
/* ephyr_draw.c */
|
||||
|
||||
Bool
|
||||
|
|
|
@ -428,6 +428,7 @@ ephyrDrawInit(ScreenPtr pScreen)
|
|||
KdScreenPriv(pScreen);
|
||||
KdScreenInfo *screen = pScreenPriv->screen;
|
||||
EphyrScrPriv *scrpriv = screen->driver;
|
||||
EphyrPriv *priv = screen->card->driver;
|
||||
EphyrFakexaPriv *fakexa;
|
||||
Bool success;
|
||||
|
||||
|
@ -441,9 +442,9 @@ ephyrDrawInit(ScreenPtr pScreen)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
fakexa->exa->memoryBase = screen->memory_base;
|
||||
fakexa->exa->memorySize = screen->memory_size;
|
||||
fakexa->exa->offScreenBase = screen->off_screen_base;
|
||||
fakexa->exa->memoryBase = (CARD8 *) (priv->base);
|
||||
fakexa->exa->memorySize = priv->bytes_per_line * ephyrBufferHeight(screen);
|
||||
fakexa->exa->offScreenBase = priv->bytes_per_line * screen->height;
|
||||
|
||||
/* Since we statically link against EXA, we shouldn't have to be smart about
|
||||
* versioning.
|
||||
|
|
|
@ -171,9 +171,6 @@ fakeMapFramebuffer (KdScreenInfo *screen)
|
|||
if (priv->base)
|
||||
free (priv->base);
|
||||
priv->base = malloc (priv->bytes_per_line * screen->height);
|
||||
screen->memory_base = (CARD8 *) (priv->base);
|
||||
screen->memory_size = 0;
|
||||
screen->off_screen_base = 0;
|
||||
|
||||
if (scrpriv->shadow)
|
||||
{
|
||||
|
|
|
@ -345,15 +345,12 @@ fbdevMapFramebuffer (KdScreenInfo *screen)
|
|||
|
||||
screen->width = priv->var.xres;
|
||||
screen->height = priv->var.yres;
|
||||
screen->memory_base = (CARD8 *) (priv->fb);
|
||||
screen->memory_size = priv->fix.smem_len;
|
||||
|
||||
if (scrpriv->shadow)
|
||||
{
|
||||
if (!KdShadowFbAlloc (screen, 0,
|
||||
scrpriv->randr & (RR_Rotate_90|RR_Rotate_270)))
|
||||
return FALSE;
|
||||
screen->off_screen_base = screen->memory_size;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -361,7 +358,6 @@ fbdevMapFramebuffer (KdScreenInfo *screen)
|
|||
screen->fb[0].pixelStride = (priv->fix.line_length * 8 /
|
||||
priv->var.bits_per_pixel);
|
||||
screen->fb[0].frameBuffer = (CARD8 *) (priv->fb);
|
||||
screen->off_screen_base = screen->fb[0].byteStride * screen->height;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -111,9 +111,6 @@ typedef struct _KdScreenInfo {
|
|||
int mynum;
|
||||
DDXPointRec origin;
|
||||
KdFrameBuffer fb[KD_MAX_FB];
|
||||
CARD8 *memory_base;
|
||||
unsigned long memory_size;
|
||||
unsigned long off_screen_base;
|
||||
} KdScreenInfo;
|
||||
|
||||
typedef struct _KdCardFuncs {
|
||||
|
|
Loading…
Reference in New Issue
Block a user