From 4e05353d7fb310fd2ec45e1ecab31bab5018b550 Mon Sep 17 00:00:00 2001 From: Rudolf Cornelissen Date: Thu, 27 Jan 2005 14:32:45 +0000 Subject: [PATCH] fixed overlay bitmap DMA adress, fixed overlay in 15 bit mode (NV11). nVidia hardware is broken here :-/. Anyway, it works now. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11092 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/accelerants/nvidia/Overlay.c | 5 +++++ .../accelerants/nvidia/engine/nv_acc_dma.c | 17 ++++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/add-ons/accelerants/nvidia/Overlay.c b/src/add-ons/accelerants/nvidia/Overlay.c index 3aa580cbb8..fa537da948 100644 --- a/src/add-ons/accelerants/nvidia/Overlay.c +++ b/src/add-ons/accelerants/nvidia/Overlay.c @@ -294,6 +294,11 @@ const overlay_buffer *ALLOCATE_OVERLAY_BUFFER(color_space cs, uint16 width, uint /* calculate physical memory adress (for dma use) */ adress = (((uint32)((uint8*)si->framebuffer_pci)) + si->ps.memory_size); + /* don't touch the DMA acceleration engine command buffer if it exists */ + /* note: + * the buffer is 32kB in size. Keep a distance of another 32kB for safety. */ + if (si->settings.dma_acc) adress -= (64 * 1024); + for (cnt = 0; cnt <= offset; cnt++) { adress -= si->overlay.myBufInfo[cnt].size; diff --git a/src/add-ons/accelerants/nvidia/engine/nv_acc_dma.c b/src/add-ons/accelerants/nvidia/engine/nv_acc_dma.c index 28a5d7af0c..e3037507d9 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_acc_dma.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_acc_dma.c @@ -745,20 +745,12 @@ status_t nv_acc_init_dma() bitm_depth = 0x00000003; break; case B_RGB15_LITTLE: - surf_depth = 0x00000004; - patt_depth = 0x00000001; - //fixme: needed for NV11, checkout the rest! - if (si->ps.card_arch < NV40A) - bitm_depth = 0x00000002; - else - bitm_depth = 0x00000001; - break; case B_RGB16_LITTLE: surf_depth = 0x00000004; patt_depth = 0x00000001; //fixme: needed for NV11, checkout the rest! if (si->ps.card_arch < NV40A) - bitm_depth = 0x00000003; + bitm_depth = 0x00000003; /* sets bitmap input depth to broken 32-bit.. */ else bitm_depth = 0x00000001; break; @@ -1118,9 +1110,12 @@ status_t nv_acc_setup_rectangle_dma(uint32 color) switch(si->dm.space) { case B_RGB15_LITTLE: + /* unbelievable, isn't it? */ si->engine.dma.cmdbuffer[si->engine.dma.current++] = - (((color & 0x0000f800) >> 1) | ((color & 0x000007c0) >> 1) | - (color & 0x0000001f)); /* Color1A */ + (((color & 0x00007800) << 8) | /* (red b1-5: broken hardware) */ + ((color & 0x00000400) << 5) | /* (red b0: broken hardware) */ + ((color & 0x000003e0) << 5) | /* (green: broken hardware) */ + ((color & 0x0000001f) << 3)); /* Color1A */ break; case B_RGB16_LITTLE: si->engine.dma.cmdbuffer[si->engine.dma.current++] =