diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-01-03 18:33:35 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-01-03 18:33:35 +0100 |
commit | b5008f3b562404811a81a755c6d06b47f47e545f (patch) | |
tree | 4b26c81f1920a244dfd4145530d22931789241fa /sys/src/9 | |
parent | ce2e8e56873cae9889ce8eadd056a62ae0636d63 (diff) |
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.
Diffstat (limited to 'sys/src/9')
-rw-r--r-- | sys/src/9/pc/devvga.c | 4 | ||||
-rw-r--r-- | sys/src/9/pc/screen.c | 11 | ||||
-rw-r--r-- | sys/src/9/pc/screen.h | 6 | ||||
-rw-r--r-- | sys/src/9/pc/vgai81x.c | 1 | ||||
-rw-r--r-- | sys/src/9/pc/vgamach64xx.c | 1 | ||||
-rw-r--r-- | sys/src/9/pc/vgaradeon.c | 3 | ||||
-rw-r--r-- | sys/src/9/pc/vgas3.c | 1 | ||||
-rw-r--r-- | sys/src/9/pc/vgasavage.c | 1 | ||||
-rw-r--r-- | sys/src/9/pc/vgat2r4.c | 1 |
9 files changed, 9 insertions, 20 deletions
diff --git a/sys/src/9/pc/devvga.c b/sys/src/9/pc/devvga.c index 5120f5946..151b52346 100644 --- a/sys/src/9/pc/devvga.c +++ b/sys/src/9/pc/devvga.c @@ -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(); diff --git a/sys/src/9/pc/screen.c b/sys/src/9/pc/screen.c index 494c6e908..d5cab912a 100644 --- a/sys/src/9/pc/screen.c +++ b/sys/src/9/pc/screen.c @@ -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); diff --git a/sys/src/9/pc/screen.h b/sys/src/9/pc/screen.h index bbe6b2512..ad83e82a6 100644 --- a/sys/src/9/pc/screen.h +++ b/sys/src/9/pc/screen.h @@ -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); diff --git a/sys/src/9/pc/vgai81x.c b/sys/src/9/pc/vgai81x.c index ce31f6b50..07b8b489d 100644 --- a/sys/src/9/pc/vgai81x.c +++ b/sys/src/9/pc/vgai81x.c @@ -103,7 +103,6 @@ i81xenable(VGAscr* scr) scr->storage = cursor; scr->blank = i81xblank; - hwblank = 1; } static void diff --git a/sys/src/9/pc/vgamach64xx.c b/sys/src/9/pc/vgamach64xx.c index 1c97e91d0..4e93f2453 100644 --- a/sys/src/9/pc/vgamach64xx.c +++ b/sys/src/9/pc/vgamach64xx.c @@ -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; } } diff --git a/sys/src/9/pc/vgaradeon.c b/sys/src/9/pc/vgaradeon.c index 50d0bab65..28f74f3f2 100644 --- a/sys/src/9/pc/vgaradeon.c +++ b/sys/src/9/pc/vgaradeon.c @@ -450,10 +450,7 @@ radeondrawinit(VGAscr*scr) scr->fill = radeonfill; scr->scroll = radeonscroll; - hwaccel = 1; - scr->blank = radeonblank; - hwblank = 1; } /* hw overlay */ diff --git a/sys/src/9/pc/vgas3.c b/sys/src/9/pc/vgas3.c index f59ff4bac..a948b3154 100644 --- a/sys/src/9/pc/vgas3.c +++ b/sys/src/9/pc/vgas3.c @@ -523,7 +523,6 @@ s3drawinit(VGAscr *scr) * above. */ scr->blank = s3blank; - /* hwblank = 1; not known to work well */ switch(id){ case VIRGE: diff --git a/sys/src/9/pc/vgasavage.c b/sys/src/9/pc/vgasavage.c index 263b688b0..f4c7f9f77 100644 --- a/sys/src/9/pc/vgasavage.c +++ b/sys/src/9/pc/vgasavage.c @@ -567,5 +567,4 @@ savageinit(VGAscr *scr) scr->fill = savagefill; scr->scroll = savagescroll; scr->blank = savageblank; - hwblank = 0; } diff --git a/sys/src/9/pc/vgat2r4.c b/sys/src/9/pc/vgat2r4.c index 3b5f21472..14d49dd70 100644 --- a/sys/src/9/pc/vgat2r4.c +++ b/sys/src/9/pc/vgat2r4.c @@ -499,7 +499,6 @@ t2r4drawinit(VGAscr *scr) scr->fill = t2r4hwfill; scr->scroll = t2r4hwscroll; scr->blank = t2r4blank; - hwblank = 1; } VGAdev vgat2r4dev = { |