radeon: setup pipes for r300
authorDave Airlie <airlied@redhat.com>
Mon, 23 Mar 2009 23:28:52 +0000 (09:28 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 23 Mar 2009 23:28:52 +0000 (09:28 +1000)
src/mesa/drivers/dri/radeon/radeon_screen.c

index 78f769e3ed2e0461574ac7261760ae1b32560d73..3817007e9e56bf912aa3ff52b67d4e08a1ac1fd5 100644 (file)
@@ -1047,6 +1047,7 @@ radeonCreateScreen2(__DRIscreenPrivate *sPriv)
    int i;
    int ret;
    uint32_t device_id;
+   uint32_t temp = 0;
 
    /* Allocate the private area */
    screen = (radeonScreenPtr) CALLOC( sizeof(*screen) );
@@ -1083,6 +1084,36 @@ radeonCreateScreen2(__DRIscreenPrivate *sPriv)
    if (ret == -1)
      return NULL;
 
+   if (screen->chip_family >= CHIP_FAMILY_R300) {
+       ret = radeonGetParam( sPriv->fd, RADEON_PARAM_NUM_GB_PIPES,
+                            &temp);
+       if (ret) {
+          fprintf(stderr, "Unable to get num_pipes, need newer drm\n");
+          switch (screen->chip_family) {
+          case CHIP_FAMILY_R300:
+          case CHIP_FAMILY_R350:
+              screen->num_gb_pipes = 2;
+              break;
+          case CHIP_FAMILY_R420:
+          case CHIP_FAMILY_R520:
+          case CHIP_FAMILY_R580:
+          case CHIP_FAMILY_RV560:
+          case CHIP_FAMILY_RV570:
+              screen->num_gb_pipes = 4;
+              break;
+          case CHIP_FAMILY_RV350:
+          case CHIP_FAMILY_RV515:
+          case CHIP_FAMILY_RV530:
+          case CHIP_FAMILY_RV410:
+          default:
+              screen->num_gb_pipes = 1;
+              break;
+          }
+       } else {
+          screen->num_gb_pipes = temp;
+       }
+   }
+
    if (screen->chip_family <= CHIP_FAMILY_RS200)
       screen->chip_flags |= RADEON_CLASS_R100;
    else if (screen->chip_family <= CHIP_FAMILY_RV280)