devvga: disable hardware blanking when switching drivers, check softscreen

we have to reset hwblank when switching drivers to
prevent the generic vgablank() to be called by
blankscreen().

remove code setting hwblank from vga drivers as
devvga will always force hwblank to be 1 or 0
depending on if the driver provides a native blanking
routine.

set hwaccel to 1 when the driver provides native fill
and scroll routines independent of softscreen being
disabled. this allows hw acceleration to be used when
softscreen gets switched off.
This commit is contained in:
cinap_lenrek 2015-01-03 18:33:35 +01:00
parent ce2e8e5687
commit b5008f3b56
9 changed files with 9 additions and 20 deletions

View file

@ -314,6 +314,8 @@ vgactl(Cmdbuf *cb)
scr->fill = nil;
scr->scroll = nil;
scr->blank = nil;
hwblank = 0;
hwaccel = 0;
qunlock(&drawlock);
if(scr->dev->disable)
scr->dev->disable(scr);
@ -410,7 +412,7 @@ vgactl(Cmdbuf *cb)
if(scr->dev && scr->dev->drawinit)
scr->dev->drawinit(scr);
hwblank = scr->blank != nil;
hwaccel = !scr->softscreen && (scr->scroll || scr->fill);
hwaccel = scr->fill != nil || scr->scroll != nil;
vgascreenwin(scr);
resetscreenimage();
cursoron();

View file

@ -393,8 +393,8 @@ setcursor(Cursor* curs)
scr->cur->load(scr, curs);
}
int hwaccel = 1;
int hwblank = 0; /* turned on by drivers that are known good */
int hwaccel = 0;
int hwblank = 0;
int panning = 0;
int
@ -423,12 +423,10 @@ hwdraw(Memdrawparam *par)
if(mask && mask->data->bdata == scrd->bdata)
swcursoravoid(par->mr);
}
if(hwaccel == 0)
if(!hwaccel || scr->softscreen)
return 0;
if(dst->data->bdata != scrd->bdata || src == nil || mask == nil)
return 0;
if(scr->fill==nil && scr->scroll==nil)
return 0;
/*
* If we have an opaque mask and source is one opaque
@ -670,9 +668,6 @@ bootscreeninit(void)
scr->useflush = 0;
scr->dev = nil;
hwblank = 0;
hwaccel = 0;
physgscreenr = gscreen->r;
vgaimageinit(chan);

View file

@ -135,9 +135,9 @@ extern void mouseresize(void);
extern void mouseredraw(void);
/* screen.c */
extern int hwaccel; /* use hw acceleration; default on */
extern int hwblank; /* use hw blanking; default on */
extern int panning; /* use virtual screen panning; default off */
extern int hwaccel; /* use hw acceleration */
extern int hwblank; /* use hw blanking */
extern int panning; /* use virtual screen panning */
extern void addvgaseg(char*, ulong, ulong);
extern uchar* attachscreen(Rectangle*, ulong*, int*, int*, int*);
extern void flushmemscreen(Rectangle);

View file

@ -103,7 +103,6 @@ i81xenable(VGAscr* scr)
scr->storage = cursor;
scr->blank = i81xblank;
hwblank = 1;
}
static void

View file

@ -956,7 +956,6 @@ mach64xxdrawinit(VGAscr *scr)
case ('L'<<8)|'M': /* 4C4D: Rage Mobility */
case ('L'<<8)|'P': /* 4C50: Rage 3D LTPro */
scr->blank = mach64lcdblank;
hwblank = 1;
break;
}
}

View file

@ -450,10 +450,7 @@ radeondrawinit(VGAscr*scr)
scr->fill = radeonfill;
scr->scroll = radeonscroll;
hwaccel = 1;
scr->blank = radeonblank;
hwblank = 1;
}
/* hw overlay */

View file

@ -523,7 +523,6 @@ s3drawinit(VGAscr *scr)
* above.
*/
scr->blank = s3blank;
/* hwblank = 1; not known to work well */
switch(id){
case VIRGE:

View file

@ -567,5 +567,4 @@ savageinit(VGAscr *scr)
scr->fill = savagefill;
scr->scroll = savagescroll;
scr->blank = savageblank;
hwblank = 0;
}

View file

@ -499,7 +499,6 @@ t2r4drawinit(VGAscr *scr)
scr->fill = t2r4hwfill;
scr->scroll = t2r4hwscroll;
scr->blank = t2r4blank;
hwblank = 1;
}
VGAdev vgat2r4dev = {