[haiku-commits] r41769 - in haiku/trunk: headers/private/graphics/radeon_hd src/add-ons/accelerants/radeon_hd

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 27 May 2011 04:14:54 +0200 (CEST)

Author: kallisti5
Date: 2011-05-27 04:14:54 +0200 (Fri, 27 May 2011)
New Revision: 41769
Changeset: https://dev.haiku-os.org/changeset/41769

Modified:
   haiku/trunk/headers/private/graphics/radeon_hd/radeon_hd.h
   haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.cpp
   haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.h
   haiku/trunk/src/add-ons/accelerants/radeon_hd/mode.cpp
Log:
Add surface address high handling; set primary and secondary surface frame 
buffer offset

Modified: haiku/trunk/headers/private/graphics/radeon_hd/radeon_hd.h
===================================================================
--- haiku/trunk/headers/private/graphics/radeon_hd/radeon_hd.h  2011-05-27 
01:35:19 UTC (rev 41768)
+++ haiku/trunk/headers/private/graphics/radeon_hd/radeon_hd.h  2011-05-27 
02:14:54 UTC (rev 41769)
@@ -149,6 +149,11 @@
 #define R6XX_CONFIG_APER_SIZE                  0x5430  // r600>
 #define OLD_CONFIG_APER_SIZE                   0x0108  // <r600
 
+#define R700_D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH       0x6914
+#define R700_D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH     0x691c
+#define R700_D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH       0x6114
+#define R700_D2GRPH_SECONDARY_SURFACE_ADDRESS_HIGH     0x611c
+
 // cursor
 #define RADEON_CURSOR_CONTROL                  0x70080
 #define RADEON_CURSOR_BASE                             0x70084

Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.cpp
===================================================================
--- haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.cpp        
2011-05-27 01:35:19 UTC (rev 41768)
+++ haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.cpp        
2011-05-27 02:14:54 UTC (rev 41769)
@@ -192,6 +192,14 @@
                gRegister->grphSwapControl = offset + 
EVERGREEN_GRPH_SWAP_CONTROL;
                gRegister->grphPrimarySurfaceAddr
                        = offset + EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS;
+               gRegister->grphSecondarySurfaceAddr
+                       = offset + EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS;
+
+               gRegister->grphPrimarySurfaceAddrHigh
+                       = offset + EVERGREEN_GRPH_PRIMARY_SURFACE_ADDRESS_HIGH;
+               gRegister->grphSecondarySurfaceAddrHigh
+                       = offset + 
EVERGREEN_GRPH_SECONDARY_SURFACE_ADDRESS_HIGH;
+
                gRegister->grphPitch = offset + EVERGREEN_GRPH_PITCH;
                gRegister->grphSurfaceOffsetX
                        = offset + EVERGREEN_GRPH_SURFACE_OFFSET_X;
@@ -219,6 +227,18 @@
                gRegister->grphPrimarySurfaceAddr
                        = (crtid == 1) ? D2GRPH_PRIMARY_SURFACE_ADDRESS
                                : D1GRPH_PRIMARY_SURFACE_ADDRESS;
+               gRegister->grphSecondarySurfaceAddr
+                       = (crtid == 1) ? D2GRPH_SECONDARY_SURFACE_ADDRESS
+                               : D1GRPH_SECONDARY_SURFACE_ADDRESS;
+
+               // Surface Address high only used on r770+
+               gRegister->grphPrimarySurfaceAddrHigh
+                       = (crtid == 1) ? 
R700_D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH
+                               : R700_D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH;
+               gRegister->grphSecondarySurfaceAddrHigh
+                       = (crtid == 1) ? 
R700_D2GRPH_SECONDARY_SURFACE_ADDRESS_HIGH
+                               : R700_D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH;
+
                gRegister->grphPitch
                        = (crtid == 1) ? D2GRPH_PITCH : D1GRPH_PITCH;
                gRegister->grphSurfaceOffsetX

Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.h
===================================================================
--- haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.h  2011-05-27 
01:35:19 UTC (rev 41768)
+++ haiku/trunk/src/add-ons/accelerants/radeon_hd/accelerant.h  2011-05-27 
02:14:54 UTC (rev 41769)
@@ -43,6 +43,9 @@
        uint16_t        grphControl;
        uint16_t        grphSwapControl;
        uint16_t        grphPrimarySurfaceAddr;
+       uint16_t        grphPrimarySurfaceAddrHigh;
+       uint16_t        grphSecondarySurfaceAddr;
+       uint16_t        grphSecondarySurfaceAddrHigh;
        uint16_t        grphPitch;
        uint16_t        grphSurfaceOffsetX;
        uint16_t        grphSurfaceOffsetY;

Modified: haiku/trunk/src/add-ons/accelerants/radeon_hd/mode.cpp
===================================================================
--- haiku/trunk/src/add-ons/accelerants/radeon_hd/mode.cpp      2011-05-27 
01:35:19 UTC (rev 41768)
+++ haiku/trunk/src/add-ons/accelerants/radeon_hd/mode.cpp      2011-05-27 
02:14:54 UTC (rev 41769)
@@ -186,10 +186,20 @@
 
        // framebuffersize = w * h * bpp  =  fb bits / 8 = bytes needed
 
-       uint32 fbAddress = gInfo->shared_info->frame_buffer_phys;
+       uint64_t fbAddress = gInfo->shared_info->frame_buffer_phys ;
 
+       // Tell GPU which frame buffer address to draw from
+       if (gInfo->shared_info->device_chipset >= (RADEON_R700 & 0x70)) {
+               write32(gRegister->grphPrimarySurfaceAddrHigh,
+                       (fbAddress >> 32) & 0xf);
+               write32(gRegister->grphSecondarySurfaceAddrHigh,
+                       (fbAddress >> 32) & 0xf);
+       }
+
        write32(gRegister->grphPrimarySurfaceAddr,
-               fbAddress);
+               fbAddress & 0xffffffff);
+       write32(gRegister->grphSecondarySurfaceAddr,
+               fbAddress & 0xffffffff);
 
        write32(gRegister->grphPitch, bytesPerRow / 4);
        write32(gRegister->grphSurfaceOffsetX, 0);


Other related posts:

  • » [haiku-commits] r41769 - in haiku/trunk: headers/private/graphics/radeon_hd src/add-ons/accelerants/radeon_hd - kallisti5