Mesa (7.10): r600c: add tiling support for evergreen+

Alex Deucher agd5f at kemper.freedesktop.org
Tue Jun 14 22:47:42 UTC 2011


Module: Mesa
Branch: 7.10
Commit: bdc518e341ed5342f9a75da5a52033d63fc5e80c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bdc518e341ed5342f9a75da5a52033d63fc5e80c

Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Tue Jun 14 18:47:11 2011 -0400

r600c: add tiling support for evergreen+

Signed-off-by: Alex Deucher <alexdeucher at gmail.com>

---

 src/mesa/drivers/dri/radeon/radeon_screen.c |  140 ++++++++++++++++++---------
 1 files changed, 95 insertions(+), 45 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c
index 6a49b0e..d829cdd 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.c
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
@@ -1640,52 +1640,102 @@ radeonCreateScreen2(__DRIscreen *sPriv)
 	   screen->group_bytes = 512;
    else
 	   screen->group_bytes = 256;
-   if (IS_R600_CLASS(screen) && (sPriv->drm_version.minor >= 6) &&
-       (screen->chip_family < CHIP_FAMILY_CEDAR)) {
-	   ret = radeonGetParam(sPriv, RADEON_INFO_TILE_CONFIG, &temp);
-	   if (ret)
-		   fprintf(stderr, "failed to get tiling info\n");
-	   else {
-		   screen->tile_config = temp;
-		   screen->r7xx_bank_op = 0;
-		   switch((screen->tile_config & 0xe) >> 1) {
-		   case 0:
-			   screen->num_channels = 1;
-			   break;
-		   case 1:
-			   screen->num_channels = 2;
-			   break;
-		   case 2:
-			   screen->num_channels = 4;
-			   break;
-		   case 3:
-			   screen->num_channels = 8;
-			   break;
-		   default:
-			   fprintf(stderr, "bad channels\n");
-			   break;
+   if (IS_R600_CLASS(screen)) {
+	   if ((sPriv->drm_version.minor >= 6) &&
+	       (screen->chip_family < CHIP_FAMILY_CEDAR)) {
+		   ret = radeonGetParam(sPriv, RADEON_INFO_TILE_CONFIG, &temp);
+		   if (ret)
+			   fprintf(stderr, "failed to get tiling info\n");
+		   else {
+			   screen->tile_config = temp;
+			   screen->r7xx_bank_op = 0;
+			   switch ((screen->tile_config & 0xe) >> 1) {
+			   case 0:
+				   screen->num_channels = 1;
+				   break;
+			   case 1:
+				   screen->num_channels = 2;
+				   break;
+			   case 2:
+				   screen->num_channels = 4;
+				   break;
+			   case 3:
+				   screen->num_channels = 8;
+				   break;
+			   default:
+				   fprintf(stderr, "bad channels\n");
+				   break;
+			   }
+			   switch ((screen->tile_config & 0x30) >> 4) {
+			   case 0:
+				   screen->num_banks = 4;
+				   break;
+			   case 1:
+				   screen->num_banks = 8;
+				   break;
+			   default:
+				   fprintf(stderr, "bad banks\n");
+				   break;
+			   }
+			   switch ((screen->tile_config & 0xc0) >> 6) {
+			   case 0:
+				   screen->group_bytes = 256;
+				   break;
+			   case 1:
+				   screen->group_bytes = 512;
+				   break;
+			   default:
+				   fprintf(stderr, "bad group_bytes\n");
+				   break;
+			   }
 		   }
-		   switch((screen->tile_config & 0x30) >> 4) {
-		   case 0:
-			   screen->num_banks = 4;
-			   break;
-		   case 1:
-			   screen->num_banks = 8;
-			   break;
-		   default:
-			   fprintf(stderr, "bad banks\n");
-			   break;
-		   }
-		   switch((screen->tile_config & 0xc0) >> 6) {
-		   case 0:
-			   screen->group_bytes = 256;
-			   break;
-		   case 1:
-			   screen->group_bytes = 512;
-			   break;
-		   default:
-			   fprintf(stderr, "bad group_bytes\n");
-			   break;
+	   } else if ((sPriv->drm_version.minor >= 7) &&
+		      (screen->chip_family >= CHIP_FAMILY_CEDAR)) {
+		   ret = radeonGetParam(sPriv, RADEON_INFO_TILE_CONFIG, &temp);
+		   if (ret)
+			   fprintf(stderr, "failed to get tiling info\n");
+		   else {
+			   screen->tile_config = temp;
+			   screen->r7xx_bank_op = 0;
+			   switch (screen->tile_config & 0xf) {
+			   case 0:
+				   screen->num_channels = 1;
+				   break;
+			   case 1:
+				   screen->num_channels = 2;
+				   break;
+			   case 2:
+				   screen->num_channels = 4;
+				   break;
+			   case 3:
+				   screen->num_channels = 8;
+				   break;
+			   default:
+				   fprintf(stderr, "bad channels\n");
+				   break;
+			   }
+			   switch ((screen->tile_config & 0xf0) >> 4) {
+			   case 0:
+				   screen->num_banks = 4;
+				   break;
+			   case 1:
+				   screen->num_banks = 8;
+				   break;
+			   default:
+				   fprintf(stderr, "bad banks\n");
+				   break;
+			   }
+			   switch ((screen->tile_config & 0xf00) >> 8) {
+			   case 0:
+				   screen->group_bytes = 256;
+				   break;
+			   case 1:
+				   screen->group_bytes = 512;
+				   break;
+			   default:
+				   fprintf(stderr, "bad group_bytes\n");
+				   break;
+			   }
 		   }
 	   }
    }




More information about the mesa-commit mailing list