Needed for the the 2D tiling span functions.

Signed-off-by: Alex Deucher <alexdeuc...@gmail.com>
---
 src/mesa/drivers/dri/radeon/radeon_screen.c |   53 +++++++++++++++++++++++++++
 1 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c 
b/src/mesa/drivers/dri/radeon/radeon_screen.c
index 4f59511..175ef71 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.c
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
@@ -233,6 +233,9 @@ radeonGetParam(__DRIscreen *sPriv, int param, void *value)
       case RADEON_PARAM_NUM_Z_PIPES:
           info.request = RADEON_INFO_NUM_Z_PIPES;
           break;
+      case 0x05: /* RADEON_INFO_TILE_CONFIG */
+          info.request = 0x05;
+          break;
       default:
           return -EINVAL;
       }
@@ -1316,6 +1319,56 @@ radeonCreateScreen2(__DRIscreen *sPriv)
    else
           screen->chip_flags |= RADEON_CLASS_R600;
 
+   /* r6xx+ tiling */
+   if (IS_R600_CLASS(screen) && (sPriv->drm_version.minor >= 5)) {
+          ret = radeonGetParam(sPriv, 0x05, &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;
+                  }
+          }
+   }
+
    if (IS_R300_CLASS(screen)) {
        ret = radeonGetParam(sPriv, RADEON_PARAM_NUM_GB_PIPES, &temp);
        if (ret) {
-- 
1.5.6.3

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to