openBeOS_Nvidia_V0.05_src

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5505 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
shatty 2003-12-01 04:27:39 +00:00
parent 05b269c0ea
commit 887d4abb1d
5 changed files with 71 additions and 18 deletions

View File

@ -130,6 +130,7 @@ chip->PMC[0x00000140/4] = chip->EnableIRQ & 0x01;
#define NV32_RASTER 0x00600808
#define NV32_NV10CURADD32 0x0060080c
#define NV32_CURCONF 0x00600810
#define NV32_FUNCSEL 0x00600860
/* secondary head */
#define NV8_ATTR2INDW 0x006033c0
@ -143,6 +144,7 @@ chip->PMC[0x00000140/4] = chip->EnableIRQ & 0x01;
#define NV32_RASTER2 0x00602808//verify!!!
#define NV32_NV10CUR2ADD32 0x0060280c//verify!!!
#define NV32_2CURCONF 0x00602810//verify!!!
#define NV32_2FUNCSEL 0x00602860
/* Nvidia DAC direct registers (standard VGA palette RAM registers) */
/* primary head */
@ -255,9 +257,11 @@ chip->PMC[0x00000140/4] = chip->EnableIRQ & 0x01;
#define NVBES_NV10_1DSTREF 0x0000894c
#define NVBES_NV10_1DSTSIZE 0x00008954
#define NVBES_NV10_1SRCPTCH 0x0000895c
/* Nvidia MPEG2 hardware decoder (GeForce4MX only) */
#define NVBES_DEC_GENCTRL 0x00001588
/*
chip->PMC[0x00008140/4] = 0;
chip->PMC[0x00001588/4] = 0;
*/
//end new.

View File

@ -4,7 +4,7 @@
Other authors:
Mark Watson,
Rudolf Cornelissen 4/2003
Rudolf Cornelissen 4/2003-8/2003
*/
#define MODULE_BIT 0x20000000
@ -24,7 +24,9 @@
status_t SET_CURSOR_SHAPE(uint16 width, uint16 height, uint16 hot_x, uint16 hot_y, uint8 *andMask, uint8 *xorMask)
{
LOG(4,("SET_CURSOR_SHAPE: width %d, height %d\n", width, height));
LOG(4,("SET_CURSOR_SHAPE: width %d, height %d, hot_x %d, hot_y %d\n",
width, height, hot_x, hot_y));
if ((width != 16) || (height != 16))
{
return B_ERROR;
@ -142,9 +144,11 @@ void MOVE_CURSOR(uint16 x, uint16 y)
//move_overlay(hds,vds);
}
/* put cursor in correct physical position */
x -= hds + si->cursor.hot_x;
y -= vds + si->cursor.hot_y;
/* put cursor in correct physical position, so stay onscreen (rel. to CRTC) */
if (x > (hds + si->cursor.hot_x)) x -= (hds + si->cursor.hot_x);
else x = 0;
if (y > (vds + si->cursor.hot_y)) y -= (vds + si->cursor.hot_y);
else y = 0;
/* account for switched CRTC's */
if (si->switched_crtcs) x -= si->dm.timing.h_display;

View File

@ -429,9 +429,19 @@ status_t GET_OVERLAY_CONSTRAINTS
}
/* GeForce scaling restrictions */
oc->h_scale.min = 0.125;
switch (si->ps.card_arch)
{
case NV30A:
/* GeForceFX series have a new BES engine... */
oc->h_scale.min = 0.5;
oc->v_scale.min = 0.5;
break;
default:
oc->h_scale.min = 0.125;
oc->v_scale.min = 0.125;
break;
}
oc->h_scale.max = 16384/(float)(ob->width - si->overlay.myBufInfo[offset].slopspace);
oc->v_scale.min = 0.125;
oc->v_scale.max = 16384/(float)ob->height;
return B_OK;

View File

@ -238,11 +238,25 @@ status_t nv_configure_bes
hiscalv = ((((uint32)my_ov.width) << 16) / 16384);
LOG(4,("Overlay: horizontal scaling factor too large, clamping at %f\n", (float)65536 / hiscalv));
}
if (hiscalv > (8 << 16))
switch (si->ps.card_arch)
{
/* (non-inverse) factor too small, set factor to min. valid value */
hiscalv = (8 << 16);
LOG(4,("Overlay: horizontal scaling factor too small, clamping at %f\n", (float)65536 / hiscalv));
case NV30A:
/* GeForceFX series have a downscaling limit of 0.5 */
if (hiscalv > (2 << 16))
{
/* (non-inverse) factor too small, set factor to min. valid value */
hiscalv = (2 << 16);
LOG(4,("Overlay: horizontal scaling factor too small, clamping at %f\n", (float)65536 / hiscalv));
}
break;
default:
if (hiscalv > (8 << 16))
{
/* (non-inverse) factor too small, set factor to min. valid value */
hiscalv = (8 << 16);
LOG(4,("Overlay: horizontal scaling factor too small, clamping at %f\n", (float)65536 / hiscalv));
}
break;
}
/* AND below is required by hardware */
hiscalv &= 0x001ffffc;
@ -338,11 +352,25 @@ status_t nv_configure_bes
viscalv = ((((uint32)my_ov.height) << 16) / 16384);
LOG(4,("Overlay: vertical scaling factor too large, clamping at %f\n", (float)65536 / viscalv));
}
if (viscalv > (8 << 16))
switch (si->ps.card_arch)
{
/* (non-inverse) factor too small, set factor to min. valid value */
viscalv = (8 << 16);
LOG(4,("Overlay: vertical scaling factor too small, clamping at %f\n", (float)65536 / viscalv));
case NV30A:
/* GeForceFX series have a downscaling limit of 0.5 */
if (viscalv > (2 << 16))
{
/* (non-inverse) factor too small, set factor to min. valid value */
viscalv = (2 << 16);
LOG(4,("Overlay: vertical scaling factor too small, clamping at %f\n", (float)65536 / viscalv));
}
break;
default:
if (viscalv > (8 << 16))
{
/* (non-inverse) factor too small, set factor to min. valid value */
viscalv = (8 << 16);
LOG(4,("Overlay: vertical scaling factor too small, clamping at %f\n", (float)65536 / viscalv));
}
break;
}
/* AND below is required by hardware */
viscalv &= 0x001ffffc;
@ -430,6 +458,8 @@ status_t nv_configure_bes
*** actually program the registers ***
**************************************/
/* shut off GeForce4MX MPEG2 decoder */
BESW(DEC_GENCTRL, 0x00000000);
/* We only use buffer buffer 0: select it. (0x01 = buffer 0, 0x10 = buffer 1) */
BESW(NV10_BUFSEL, 0x00000001);
/* setup buffer origin: GeForce uses subpixel precise clipping on left and top! (12.4 values) */

View File

@ -81,7 +81,7 @@ status_t nv_general_powerup()
{
status_t status;
LOG(1,("POWERUP: nVidia (open)BeOS Accelerant 0.04 running.\n"));
LOG(1,("POWERUP: nVidia (open)BeOS Accelerant 0.05 running.\n"));
/* preset no laptop */
si->ps.laptop = false;
@ -739,7 +739,7 @@ status_t nv_general_bios_to_powergraphics()
nv_crtc_cursor_hide();
/* power-up all nvidia hardware function blocks */
/* bit 28: PVIDEO,
/* bit 28: OVERLAY ENGINE (BES),
* bit 25: CRTC2, (> NV04A)
* bit 24: CRTC1,
* bit 20: framebuffer,
@ -750,6 +750,11 @@ status_t nv_general_bios_to_powergraphics()
* bit 0: TVOUT. (> NV04A) */
NV_REG32(NV32_PWRUPCTRL) = 0x13111111;
/* switch overlay engine to head 1 */
//fixme: add other function blocks...
NV_REG32(NV32_FUNCSEL) |= 0x00001000;
NV_REG32(NV32_2FUNCSEL) &= ~0x00001000;
/* set card to 'enhanced' mode: (only VGA standard registers used for NeoMagic cards) */
/* (keep) card enabled, set plain normal memory usage, no old VGA 'tricks' ... */
// CRTCW(MODECTL, 0xc3);