finalized virtualscreen panning control granularity constraints for VIA HW. Overlay is now completed BTW. Bumped version to 0.16. Next up: 2D acceleration. Hopefully :)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14277 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
217024e94c
commit
0d492d2ff8
@ -4,7 +4,7 @@
|
||||
|
||||
Other authors:
|
||||
Mark Watson,
|
||||
Rudolf Cornelissen 4/2003-5/2004
|
||||
Rudolf Cornelissen 4/2003-9/2005
|
||||
*/
|
||||
|
||||
#define MODULE_BIT 0x20000000
|
||||
@ -55,9 +55,41 @@ void MOVE_CURSOR(uint16 x, uint16 y)
|
||||
si->cursor.x = x;
|
||||
si->cursor.y = y;
|
||||
|
||||
/* setting up minimum amount to scroll not needed:
|
||||
* Nvidia cards can always do pixelprecise panning on both heads */
|
||||
h_adjust = 0x00;
|
||||
/* set up minimum amount to scroll */
|
||||
if (si->dm.flags & DUALHEAD_BITS)
|
||||
{
|
||||
//fixme for VIA...
|
||||
switch(si->dm.space)
|
||||
{
|
||||
case B_RGB16_LITTLE:
|
||||
h_adjust = 0x1f;
|
||||
break;
|
||||
case B_RGB32_LITTLE:
|
||||
h_adjust = 0x0f;
|
||||
break;
|
||||
default:
|
||||
h_adjust = 0x1f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(si->dm.space)
|
||||
{
|
||||
case B_CMAP8:
|
||||
h_adjust = 0x07;
|
||||
break;
|
||||
case B_RGB15_LITTLE:case B_RGB16_LITTLE:
|
||||
h_adjust = 0x03;
|
||||
break;
|
||||
case B_RGB32_LITTLE:
|
||||
h_adjust = 0x01;
|
||||
break;
|
||||
default:
|
||||
h_adjust = 0x07;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* adjust h/v_display_start to move cursor onto screen */
|
||||
switch (si->dm.flags & DUALHEAD_BITS)
|
||||
|
@ -6,7 +6,7 @@
|
||||
Other authors:
|
||||
Mark Watson,
|
||||
Apsed,
|
||||
Rudolf Cornelissen 11/2002-7/2005
|
||||
Rudolf Cornelissen 11/2002-9/2005
|
||||
*/
|
||||
|
||||
#define MODULE_BIT 0x00200000
|
||||
@ -339,28 +339,49 @@ status_t MOVE_DISPLAY(uint16 h_display_start, uint16 v_display_start) {
|
||||
|
||||
LOG(4,("MOVE_DISPLAY: h %d, v %d\n", h_display_start, v_display_start));
|
||||
|
||||
/* nVidia cards support pixelprecise panning on both heads in all modes:
|
||||
* No stepping granularity needed! */
|
||||
/* VIA CRTC1 handles multiples of 8 for 8bit, 4 for 16bit, 2 for 32 bit
|
||||
VIA CRTC2 is yet unknown...
|
||||
*/
|
||||
|
||||
/* determine bits used for the colordepth */
|
||||
/* reset lower bits, don't return an error! */
|
||||
if (si->dm.flags & DUALHEAD_BITS)
|
||||
{
|
||||
//fixme for VIA...
|
||||
switch(si->dm.space)
|
||||
{
|
||||
case B_RGB16_LITTLE:
|
||||
colour_depth=16;
|
||||
h_display_start &= ~0x1f;
|
||||
break;
|
||||
case B_RGB32_LITTLE:
|
||||
colour_depth=32;
|
||||
h_display_start &= ~0x0f;
|
||||
break;
|
||||
default:
|
||||
LOG(8,("SET:Invalid DH colour depth 0x%08x, should never happen\n", si->dm.space));
|
||||
return B_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(si->dm.space)
|
||||
{
|
||||
case B_CMAP8:
|
||||
colour_depth=8;
|
||||
h_display_start &= ~0x07;
|
||||
break;
|
||||
case B_RGB15_LITTLE:
|
||||
case B_RGB16_LITTLE:
|
||||
case B_RGB15_LITTLE: case B_RGB16_LITTLE:
|
||||
colour_depth=16;
|
||||
break;
|
||||
case B_RGB24_LITTLE:
|
||||
colour_depth=24;
|
||||
h_display_start &= ~0x03;
|
||||
break;
|
||||
case B_RGB32_LITTLE:
|
||||
colour_depth=32;
|
||||
h_display_start &= ~0x01;
|
||||
break;
|
||||
default:
|
||||
return B_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
/* do not run past end of display */
|
||||
switch (si->dm.flags & DUALHEAD_BITS)
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* CTRC functionality */
|
||||
/* Author:
|
||||
Rudolf Cornelissen 11/2002-7/2005
|
||||
Rudolf Cornelissen 11/2002-9/2005
|
||||
*/
|
||||
|
||||
#define MODULE_BIT 0x00040000
|
||||
@ -585,76 +585,27 @@ status_t eng_crtc_set_display_pitch()
|
||||
CRTCW(PITCHL, (offset & 0x00ff));
|
||||
CRTCW(VTIMEXT_PIT, (((CRTCR(VTIMEXT_PIT)) & 0x1f) | ((offset & 0x0700) >> 3)));
|
||||
|
||||
//test stuff:
|
||||
// LOG(2,("CRTC: $32=$%02x, $33=$%02x, $35=$%02x, $36=$%02x\n",
|
||||
// (CRTCR(0x32)), (CRTCR(0x33)), (CRTCR(0x35)), (CRTCR(0x36))));
|
||||
// LOG(2,("SEQ: $14=$%02x, $15=$%02x, $16=$%02x, $17=$%02x\n",
|
||||
// (SEQR(0x14)), (SEQR(0x15)), (SEQR(0x16)), (SEQR(0x17))));
|
||||
// LOG(2,("SEQ: $18=$%02x, $19=$%02x, $1a=$%02x, $1b=$%02x\n",
|
||||
// (SEQR(0x18)), (SEQR(0x19)), (SEQR(0x1a)), (SEQR(0x1b))));
|
||||
// LOG(2,("SEQ: $1c=$%02x, $1d=$%02x, $1e=$%02x, $1f=$%02x\n",
|
||||
// (SEQR(0x1c)), (SEQR(0x1d)), (SEQR(0x1e)), (SEQR(0x1f))));
|
||||
// LOG(2,("SEQ: $22=$%02x, $23=$%02x, $24=$%02x, $25=$%02x\n",
|
||||
// (SEQR(0x22)), (SEQR(0x23)), (SEQR(0x24)), (SEQR(0x25))));
|
||||
// LOG(2,("SEQ: $26=$%02x, $27=$%02x, $28=$%02x, $29=$%02x\n",
|
||||
// (SEQR(0x26)), (SEQR(0x27)), (SEQR(0x28)), (SEQR(0x29))));
|
||||
// LOG(2,("SEQ: $2a=$%02x, $2b=$%02x, $2e=$%02x\n",
|
||||
// (SEQR(0x2a)), (SEQR(0x2b)), (SEQR(0x2e))));
|
||||
// LOG(2,("SEQ: $44=$%02x, $45=$%02x, $46=$%02x, $47=$%02x\n",
|
||||
// (SEQR(0x44)), (SEQR(0x45)), (SEQR(0x46)), (SEQR(0x47))));
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
status_t eng_crtc_set_display_start(uint32 startadd,uint8 bpp)
|
||||
{
|
||||
// uint8 temp;
|
||||
uint32 timeout = 0;
|
||||
|
||||
LOG(4,("CRTC: setting card RAM to be displayed bpp %d\n", bpp));
|
||||
|
||||
LOG(2,("CRTC: startadd: $%08x\n", startadd));
|
||||
LOG(2,("CRTC: frameRAM: $%08x\n", si->framebuffer));
|
||||
LOG(2,("CRTC: framebuffer: $%08x\n", si->fbc.frame_buffer));
|
||||
|
||||
/* we might have no retraces during setmode! */
|
||||
/* wait 25mS max. for retrace to occur (refresh > 40Hz) */
|
||||
// while (((ENG_REG32(RG32_RASTER) & 0x000007ff) < si->dm.timing.v_display) &&
|
||||
// (timeout < (25000/10)))
|
||||
if (0)
|
||||
{
|
||||
/* don't snooze much longer or retrace might get missed! */
|
||||
snooze(10);
|
||||
timeout++;
|
||||
}
|
||||
|
||||
/*
|
||||
linux:
|
||||
vgaHWGetIOBase(hwp);
|
||||
vgaIOBase = hwp->IOBase; //3d0 (rud)
|
||||
vgaCRIndex = vgaIOBase + 4;
|
||||
|
||||
define VGAOUT16(addr, val) MMIO_OUT16(pVia->MapBase+0x8000, addr, val)
|
||||
|
||||
Base = Base >> 1;
|
||||
VGAOUT16(vgaCRIndex, (Base & 0x00ff00) | 0x0c);
|
||||
VGAOUT16(vgaCRIndex, ((Base & 0x00ff) << 8) | 0x0d);
|
||||
VGAOUT16(vgaCRIndex, ((Base & 0xff0000) >> 8) | 0x34);
|
||||
*/
|
||||
|
||||
/* VIA: upto 32Mb RAM can be adressed */
|
||||
|
||||
/* set standard registers */
|
||||
/* (VIA: startadress in 16bit words (b1 - b16) */
|
||||
CRTCW(FBSTADDL, ((startadd & 0x000001fe) >> 1));
|
||||
/* (VIA: startadress in 64bit words (b3 - b16): checked CLE266) */
|
||||
CRTCW(FBSTADDL, ((startadd & 0x000001f8) >> 1));
|
||||
CRTCW(FBSTADDH, ((startadd & 0x0001fe00) >> 9));
|
||||
/* set extended bits: (b17-24) */
|
||||
CRTCW(FBSTADDE, ((startadd & 0x01fe0000) >> 17));
|
||||
|
||||
//fixme: findout if VIA supports pixelpanning...
|
||||
|
||||
/* set NV4/NV10 byte adress: (b0 - 1) */
|
||||
// ATBW(HORPIXPAN, ((startadd & 0x00000003) << 1));
|
||||
/* VIA doesn't support pixelpanning (checked CLE266). */
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ status_t eng_general_powerup()
|
||||
{
|
||||
status_t status;
|
||||
|
||||
LOG(1,("POWERUP: Haiku VIA Accelerant 0.15 running.\n"));
|
||||
LOG(1,("POWERUP: Haiku VIA Accelerant 0.16 running.\n"));
|
||||
|
||||
/* preset no laptop */
|
||||
si->ps.laptop = false;
|
||||
|
Loading…
Reference in New Issue
Block a user