From dd446dd3f32c79eeb8f4e4791196c26970ca376d Mon Sep 17 00:00:00 2001 From: Rudolf Cornelissen Date: Tue, 18 Jan 2005 18:18:09 +0000 Subject: [PATCH] added a nv.settings switch 'dma_acc'. User can choose method for acceleration. Default is off, selecting (old) PIO mode. DMA still does not work, and is not completed. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10842 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/accelerants/nvidia/Acceleration.c | 8 ++++---- src/add-ons/accelerants/nvidia/EngineManagment.c | 4 ++-- src/add-ons/accelerants/nvidia/GetAccelerantHook.c | 5 +++-- src/add-ons/accelerants/nvidia/InitAccelerant.c | 6 +++--- src/add-ons/accelerants/nvidia/SetDisplayMode.c | 2 +- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/add-ons/accelerants/nvidia/Acceleration.c b/src/add-ons/accelerants/nvidia/Acceleration.c index 4aaa458c13..b99bed5086 100644 --- a/src/add-ons/accelerants/nvidia/Acceleration.c +++ b/src/add-ons/accelerants/nvidia/Acceleration.c @@ -21,7 +21,7 @@ void SCREEN_TO_SCREEN_BLIT(engine_token *et, blit_params *list, uint32 count) { int i; - if(si->ps.card_arch < NV40A) + if(!si->settings.dma_acc) { /* init acc engine for blit function */ nv_acc_setup_blit(); @@ -114,7 +114,7 @@ void FILL_RECTANGLE(engine_token *et, uint32 colorIndex, fill_rect_params *list, { int i; - if(si->ps.card_arch < NV40A) + if(!si->settings.dma_acc) { /* init acc engine for fill function */ nv_acc_setup_rectangle(colorIndex); @@ -158,7 +158,7 @@ void INVERT_RECTANGLE(engine_token *et, fill_rect_params *list, uint32 count) { int i; - if(si->ps.card_arch < NV40A) + if(!si->settings.dma_acc) { /* init acc engine for invert function */ nv_acc_setup_rect_invert(); @@ -202,7 +202,7 @@ void FILL_SPAN(engine_token *et, uint32 colorIndex, uint16 *list, uint32 count) { int i; - if(si->ps.card_arch < NV40A) + if(!si->settings.dma_acc) { /* init acc engine for fill function */ nv_acc_setup_rectangle(colorIndex); diff --git a/src/add-ons/accelerants/nvidia/EngineManagment.c b/src/add-ons/accelerants/nvidia/EngineManagment.c index e2d86d0811..9cb9be4a45 100644 --- a/src/add-ons/accelerants/nvidia/EngineManagment.c +++ b/src/add-ons/accelerants/nvidia/EngineManagment.c @@ -35,7 +35,7 @@ status_t ACQUIRE_ENGINE(uint32 capabilities, uint32 max_wait, sync_token *st, en if (st) SYNC_TO_TOKEN(st); /* make sure all needed engine cmd's are mapped to the FIFO */ - if (si->ps.card_arch < NV40A) + if (!si->settings.dma_acc) nv_acc_assert_fifo(); else nv_acc_assert_fifo_dma(); @@ -58,7 +58,7 @@ status_t RELEASE_ENGINE(engine_token *et, sync_token *st) void WAIT_ENGINE_IDLE(void) { /*wait for the engine to be totally idle*/ - if (si->ps.card_arch < NV40A) + if (!si->settings.dma_acc) nv_acc_wait_idle(); else nv_acc_wait_idle_dma(); diff --git a/src/add-ons/accelerants/nvidia/GetAccelerantHook.c b/src/add-ons/accelerants/nvidia/GetAccelerantHook.c index e665867c25..01634a771d 100644 --- a/src/add-ons/accelerants/nvidia/GetAccelerantHook.c +++ b/src/add-ons/accelerants/nvidia/GetAccelerantHook.c @@ -208,9 +208,10 @@ status_t check_acc_capability(uint32 feature) } //fixme: - if(si->ps.card_arch >= NV40A) + if ((si->settings.dma_acc && (feature != B_SCREEN_TO_SCREEN_BLIT)) || + si->ps.card_arch >= NV40A) { - LOG(4, ("Acc: Acc not setup yet; not exporting hook %s.\n", msg)); + LOG(4, ("Acc: Function not setup yet; not exporting hook %s.\n", msg)); return B_ERROR; } diff --git a/src/add-ons/accelerants/nvidia/InitAccelerant.c b/src/add-ons/accelerants/nvidia/InitAccelerant.c index 059c64b749..c90537d913 100644 --- a/src/add-ons/accelerants/nvidia/InitAccelerant.c +++ b/src/add-ons/accelerants/nvidia/InitAccelerant.c @@ -4,7 +4,7 @@ Other authors: Mark Watson, - Rudolf Cornelissen 10/2002-7/2004. + Rudolf Cornelissen 10/2002-1/2005. */ #define MODULE_BIT 0x00800000 @@ -40,8 +40,8 @@ static status_t init_common(int the_fd) { // LOG is now available, si !NULL LOG(4,("init_common: logmask 0x%08x, memory %dMB, hardcursor %d, usebios %d, switchhead %d, force_pci %d\n", 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\n", - si->settings.dumprom, si->settings.unhide_fw, si->settings.pgm_panel)); + LOG(4,("init_common: dumprom %d, unhide_fw %d, pgm_panel %d, dma_acc %d\n", + si->settings.dumprom, si->settings.unhide_fw, si->settings.pgm_panel, si->settings.dma_acc)); /*Check for R4.5.0 and if it is running, use work around*/ { diff --git a/src/add-ons/accelerants/nvidia/SetDisplayMode.c b/src/add-ons/accelerants/nvidia/SetDisplayMode.c index 80e3f7c2d9..38f7dbf405 100644 --- a/src/add-ons/accelerants/nvidia/SetDisplayMode.c +++ b/src/add-ons/accelerants/nvidia/SetDisplayMode.c @@ -314,7 +314,7 @@ status_t SET_DISPLAY_MODE(display_mode *mode_to_set) * attempting DMA on NV40 and higher because without it I can't get it going ATM. * Later on this can become a nv.settings switch, and maybe later we can even * forget about non-DMA completely (depends on 3D acceleration attempts). */ - if (si->ps.card_arch < NV40A) + if (!si->settings.dma_acc) nv_acc_init(); else nv_acc_init_dma();