added 'block_acc' option in nvidia.settings to completely disable the acceleration engine. This lets my G72 run (not crash) for the first time when enabled. Note: Haiku becomes very slow in drawing in 32bit mode when the driver is running this way compared to vesa mode. I am assuming this is because of (too) fine-grained calling of the engine management functions. Never saw this effect AFAIK in BeOS.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29381 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
Other authors:
|
Other authors:
|
||||||
Mark Watson;
|
Mark Watson;
|
||||||
Apsed;
|
Apsed;
|
||||||
Rudolf Cornelissen 10/2002-6/2008.
|
Rudolf Cornelissen 10/2002-3/2009.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DRIVERINTERFACE_H
|
#ifndef DRIVERINTERFACE_H
|
||||||
@@ -205,7 +205,7 @@ typedef struct {
|
|||||||
uint32 size;
|
uint32 size;
|
||||||
} int_buf_info;
|
} int_buf_info;
|
||||||
|
|
||||||
typedef struct { // apsed, see comments in nv.settings
|
typedef struct { // apsed, see comments in nvidia.settings
|
||||||
// for driver
|
// for driver
|
||||||
char accelerant[B_FILE_NAME_LENGTH];
|
char accelerant[B_FILE_NAME_LENGTH];
|
||||||
char primary[B_FILE_NAME_LENGTH];
|
char primary[B_FILE_NAME_LENGTH];
|
||||||
@@ -224,6 +224,7 @@ typedef struct { // apsed, see comments in nv.settings
|
|||||||
bool vga_on_tv;
|
bool vga_on_tv;
|
||||||
bool force_sync;
|
bool force_sync;
|
||||||
bool force_ws;
|
bool force_ws;
|
||||||
|
bool block_acc;
|
||||||
uint32 gpu_clk;
|
uint32 gpu_clk;
|
||||||
uint32 ram_clk;
|
uint32 ram_clk;
|
||||||
} nv_settings;
|
} nv_settings;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
other authors:
|
other authors:
|
||||||
Mark Watson
|
Mark Watson
|
||||||
Rudolf Cornelissen 3/2004-2/2005
|
Rudolf Cornelissen 3/2004-3/2009
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -34,8 +34,8 @@ status_t ACQUIRE_ENGINE_PIO(uint32 capabilities, uint32 max_wait, sync_token *st
|
|||||||
/* sync if required */
|
/* sync if required */
|
||||||
if (st) SYNC_TO_TOKEN(st);
|
if (st) SYNC_TO_TOKEN(st);
|
||||||
|
|
||||||
/* make sure all needed engine cmd's are mapped to the FIFO */
|
/* make sure all needed engine cmd's are mapped to the FIFO if acceleration isn't blocked */
|
||||||
nv_acc_assert_fifo();
|
if (!si->settings.block_acc) nv_acc_assert_fifo();
|
||||||
|
|
||||||
/* return an engine token */
|
/* return an engine token */
|
||||||
*et = &nv_engine_token;
|
*et = &nv_engine_token;
|
||||||
@@ -49,8 +49,8 @@ status_t ACQUIRE_ENGINE_DMA(uint32 capabilities, uint32 max_wait, sync_token *st
|
|||||||
/* sync if required */
|
/* sync if required */
|
||||||
if (st) SYNC_TO_TOKEN(st);
|
if (st) SYNC_TO_TOKEN(st);
|
||||||
|
|
||||||
/* make sure all needed engine cmd's are mapped to the FIFO */
|
/* make sure all needed engine cmd's are mapped to the FIFO if acceleration isn't blocked */
|
||||||
nv_acc_assert_fifo_dma();
|
if (!si->settings.block_acc) nv_acc_assert_fifo_dma();
|
||||||
|
|
||||||
/* return an engine token */
|
/* return an engine token */
|
||||||
*et = &nv_engine_token;
|
*et = &nv_engine_token;
|
||||||
@@ -69,6 +69,9 @@ status_t RELEASE_ENGINE(engine_token *et, sync_token *st)
|
|||||||
|
|
||||||
void WAIT_ENGINE_IDLE(void)
|
void WAIT_ENGINE_IDLE(void)
|
||||||
{
|
{
|
||||||
|
/* do nothing if acceleration is te be blocked */
|
||||||
|
if (si->settings.block_acc) return;
|
||||||
|
|
||||||
/*wait for the engine to be totally idle*/
|
/*wait for the engine to be totally idle*/
|
||||||
if (!si->settings.dma_acc)
|
if (!si->settings.dma_acc)
|
||||||
nv_acc_wait_idle();
|
nv_acc_wait_idle();
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Other authors:
|
Other authors:
|
||||||
Mark Watson,
|
Mark Watson,
|
||||||
Rudolf Cornelissen 10/2002-1/2006
|
Rudolf Cornelissen 10/2002-3/2009
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MODULE_BIT 0x08000000
|
#define MODULE_BIT 0x08000000
|
||||||
@@ -227,8 +227,8 @@ status_t check_acc_capability(uint32 feature)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* hardware acceleration is only supported in modes with upto a certain
|
/* hardware acceleration is only supported in modes with upto a certain
|
||||||
* memory pitch.. */
|
* memory pitch.. and acceleration must not be blocked */
|
||||||
if (si->acc_mode)
|
if (si->acc_mode && !si->settings.block_acc)
|
||||||
{
|
{
|
||||||
LOG(4, ("Acc: Exporting hook %s.\n", msg));
|
LOG(4, ("Acc: Exporting hook %s.\n", msg));
|
||||||
return B_OK;
|
return B_OK;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Other authors:
|
Other authors:
|
||||||
Mark Watson,
|
Mark Watson,
|
||||||
Rudolf Cornelissen 10/2002-4/2006.
|
Rudolf Cornelissen 10/2002-3/2009.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MODULE_BIT 0x00800000
|
#define MODULE_BIT 0x00800000
|
||||||
@@ -42,8 +42,8 @@ static status_t init_common(int the_fd) {
|
|||||||
si->settings.logmask, si->settings.memory, si->settings.hardcursor, si->settings.usebios, si->settings.switchhead, si->settings.force_pci));
|
si->settings.logmask, si->settings.memory, si->settings.hardcursor, si->settings.usebios, si->settings.switchhead, si->settings.force_pci));
|
||||||
LOG(4,("init_common: dumprom %d, unhide_fw %d, pgm_panel %d, dma_acc %d, tv_output %d, vga_on_tv %d\n",
|
LOG(4,("init_common: dumprom %d, unhide_fw %d, pgm_panel %d, dma_acc %d, tv_output %d, vga_on_tv %d\n",
|
||||||
si->settings.dumprom, si->settings.unhide_fw, si->settings.pgm_panel, si->settings.dma_acc, si->settings.tv_output, si->settings.vga_on_tv));
|
si->settings.dumprom, si->settings.unhide_fw, si->settings.pgm_panel, si->settings.dma_acc, si->settings.tv_output, si->settings.vga_on_tv));
|
||||||
LOG(4,("init_common: force_sync %d, gpu_clk %dMhz, ram_clk %dMhz, force_ws %d\n",
|
LOG(4,("init_common: force_sync %d, gpu_clk %dMhz, ram_clk %dMhz, force_ws %d, block_acc %d\n",
|
||||||
si->settings.force_sync, si->settings.gpu_clk, si->settings.ram_clk, si->settings.force_ws));
|
si->settings.force_sync, si->settings.gpu_clk, si->settings.ram_clk, si->settings.force_ws, si->settings.block_acc));
|
||||||
|
|
||||||
/*Check for R4.5.0 and if it is running, use work around*/
|
/*Check for R4.5.0 and if it is running, use work around*/
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
Other authors:
|
Other authors:
|
||||||
Mark Watson,
|
Mark Watson,
|
||||||
Apsed,
|
Apsed,
|
||||||
Rudolf Cornelissen 11/2002-6/2008
|
Rudolf Cornelissen 11/2002-3/2009
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MODULE_BIT 0x00200000
|
#define MODULE_BIT 0x00200000
|
||||||
@@ -292,10 +292,12 @@ status_t SET_DISPLAY_MODE(display_mode *mode_to_set)
|
|||||||
/* note:
|
/* note:
|
||||||
* Maybe later we can forget about non-DMA mode (depends on 3D acceleration
|
* Maybe later we can forget about non-DMA mode (depends on 3D acceleration
|
||||||
* attempts). */
|
* attempts). */
|
||||||
if (!si->settings.dma_acc)
|
if (!si->settings.block_acc) {
|
||||||
nv_acc_init();
|
if (!si->settings.dma_acc)
|
||||||
else
|
nv_acc_init();
|
||||||
nv_acc_init_dma();
|
else
|
||||||
|
nv_acc_init_dma();
|
||||||
|
}
|
||||||
|
|
||||||
/* set up overlay unit for this mode */
|
/* set up overlay unit for this mode */
|
||||||
nv_bes_init();
|
nv_bes_init();
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ status_t nv_general_powerup()
|
|||||||
{
|
{
|
||||||
status_t status;
|
status_t status;
|
||||||
|
|
||||||
LOG(1,("POWERUP: Haiku nVidia Accelerant 0.85 running.\n"));
|
LOG(1,("POWERUP: Haiku nVidia Accelerant 0.86 running.\n"));
|
||||||
|
|
||||||
/* log VBLANK INT usability status */
|
/* log VBLANK INT usability status */
|
||||||
if (si->ps.int_assigned)
|
if (si->ps.int_assigned)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Other authors:
|
Other authors:
|
||||||
Mark Watson;
|
Mark Watson;
|
||||||
Rudolf Cornelissen 3/2002-6/2008.
|
Rudolf Cornelissen 3/2002-3/2009.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@@ -383,6 +383,7 @@ static nv_settings sSettings = { // see comments in nvidia.settings
|
|||||||
false, // vga_on_tv
|
false, // vga_on_tv
|
||||||
false, // force_sync
|
false, // force_sync
|
||||||
true, // force_ws
|
true, // force_ws
|
||||||
|
false, // block_acc
|
||||||
0, // gpu_clk
|
0, // gpu_clk
|
||||||
0, // ram_clk
|
0, // ram_clk
|
||||||
};
|
};
|
||||||
@@ -1441,6 +1442,8 @@ init_driver(void)
|
|||||||
"force_sync", false, false);
|
"force_sync", false, false);
|
||||||
sSettings.force_ws = get_driver_boolean_parameter(settings,
|
sSettings.force_ws = get_driver_boolean_parameter(settings,
|
||||||
"force_ws", false, false);
|
"force_ws", false, false);
|
||||||
|
sSettings.block_acc = get_driver_boolean_parameter(settings,
|
||||||
|
"block_acc", false, false);
|
||||||
|
|
||||||
item = get_driver_parameter(settings, "gpu_clk", "0", "0");
|
item = get_driver_parameter(settings, "gpu_clk", "0", "0");
|
||||||
value = strtoul(item, &end, 0);
|
value = strtoul(item, &end, 0);
|
||||||
|
|||||||
@@ -4,29 +4,30 @@
|
|||||||
# ~/config/settings/kernel/drivers/
|
# ~/config/settings/kernel/drivers/
|
||||||
#
|
#
|
||||||
|
|
||||||
# nv.driver parameters:
|
# nvidia driver parameters:
|
||||||
#accelerant "nvidia.accelerant" # if enabled selects accelerant filename to be used
|
#accelerant "nvidia.accelerant" # if enabled selects accelerant filename to be used
|
||||||
#primary "10de_0110_010000" # if enabled selects device to be used as primary device ('hack')
|
#primary "10de_0110_010000" # if enabled selects device to be used as primary device ('hack')
|
||||||
dumprom false # dump bios rom to file (in home folder)
|
dumprom false # dump bios rom to file (in home folder)
|
||||||
|
|
||||||
# nv.accelerant parameters:
|
# nvidia.accelerant parameters:
|
||||||
usebios true # if true rely on bios to coldstart the card
|
usebios true # if true rely on bios to coldstart the card
|
||||||
#memory 2 # in MB, override builtin memory size detection
|
#memory 2 # in MB, override builtin memory size detection
|
||||||
hardcursor true # if true use on-chip cursor capabilities
|
hardcursor true # if true use on-chip cursor capabilities
|
||||||
#logmask 0x00000000 # nothing logged, is default
|
#logmask 0x00000000 # nothing logged, is default
|
||||||
#logmask 0x08000604 # log overlay use in full to file (in home folder)
|
#logmask 0x08000604 # log overlay use in full to file (in home folder)
|
||||||
#logmask 0xffffffff # log everything to file (in home folder)
|
#logmask 0xffffffff # log everything to file (in home folder)
|
||||||
switchhead false # switch head assignment (dualhead cards only)
|
switchhead false # switch head assignment (dualhead cards only)
|
||||||
force_pci false # block AGP mode use if true (AGP cards only)
|
force_pci false # block AGP mode use if true (AGP cards only)
|
||||||
dma_acc true # if true enable DMA cmd fetching for 2D acc (instead of using PIO)
|
dma_acc true # if true enable DMA cmd fetching for 2D acc (instead of using PIO)
|
||||||
#tv_output 0 # disabled or 0 = autodetect, 1 = Y/C (and CVBS if possible), 2 = CVBS
|
#tv_output 0 # disabled or 0 = autodetect, 1 = Y/C (and CVBS if possible), 2 = CVBS
|
||||||
force_sync false # if true forces 3D rendering to be synchronized to the vertical retrace
|
force_sync false # if true forces 3D rendering to be synchronized to the vertical retrace
|
||||||
force_ws true # if true forces widescreen type detection for all connected screens
|
force_ws true # if true forces widescreen type detection for all connected screens
|
||||||
|
block_acc false # if true disables the acceleration engine
|
||||||
|
|
||||||
# WARNING: tweak alert! modify stuff below on your own risk...
|
# WARNING: tweak alert! modify stuff below on your own risk...
|
||||||
unhide_fw false # if true 'unhide' cards AGP fastwrite support on cards that hide it
|
unhide_fw false # if true 'unhide' cards AGP fastwrite support on cards that hide it
|
||||||
pgm_panel false # if false don't program DVI and laptop panel pixelclocks (refreshrates)
|
pgm_panel false # if false don't program DVI and laptop panel pixelclocks (refreshrates)
|
||||||
vga_on_tv false # if true enables VGA output on the head outputting to TV
|
vga_on_tv false # if true enables VGA output on the head outputting to TV
|
||||||
#gpu_clk 150 # in Mhz, (tries to) override default GPU clockspeed (be carefull!!!)
|
#gpu_clk 150 # in Mhz, (tries to) override default GPU clockspeed (be carefull!!!)
|
||||||
#ram_clk 150 # in Mhz, (tries to) override default cardRAM clockspeed (be carefull!!!)
|
#ram_clk 150 # in Mhz, (tries to) override default cardRAM clockspeed (be carefull!!!)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user