Antoine REVERSAT wrote:

I just compiled dri from the CVS for my radeon 9000 Mobbility card (r250 lf) and it 
wont work as good as it is expected to (I.E : 30 fps in Quake3) The thing is when i do 
a glxinfo it is reported as a r200 chip which it isn't... So i'd like to know if you 
are aware of this and what solutions do i have. I also wanted to know if support 
should be better or if this is normal.
For information i'm running Gentoo linux 1.4_RC4 with 2.4.21-ac3 patched kernel 
(patched for the mmu_cr4 problem) I'm running Xfree 4.3.0.
If you need more informations let me know.

Here's a patch that should clear some of that up, at least for the R200-family of chips. I did change the code to include xf86PciInfo.h. In spite of the comment there, it doesn't seem to produce any errors. Is this a safe change to make? Also, do we really need to check the device ID against R100-family IDs in the R200 driver?


Anyway, if this is acceptable I'll expand it to include the R100 driver & commit it.

Index: lib/GL/mesa/src/drv/r200/r200_context.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/r200/r200_context.c,v
retrieving revision 1.25
diff -u -d -r1.25 r200_context.c
--- lib/GL/mesa/src/drv/r200/r200_context.c     21 May 2003 17:32:07 -0000      1.25
+++ lib/GL/mesa/src/drv/r200/r200_context.c     30 Jul 2003 01:00:09 -0000
@@ -100,8 +100,8 @@
       return (GLubyte *)"Tungsten Graphics, Inc.";
 
    case GL_RENDERER:
-      offset = driGetRendererString( buffer, "R200", DRIVER_DATE,
-                                    agp_mode );
+      offset = driGetRendererString( buffer, rmesa->r200Screen->device_name,
+                                    DRIVER_DATE, agp_mode );
 
       sprintf( & buffer[ offset ], " %sTCL",
               !(rmesa->TclFallback & R200_TCL_FALLBACK_TCL_DISABLE)
Index: lib/GL/mesa/src/drv/r200/r200_screen.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/r200/r200_screen.c,v
retrieving revision 1.11
diff -u -d -r1.11 r200_screen.c
--- lib/GL/mesa/src/drv/r200/r200_screen.c      21 May 2003 17:32:08 -0000      1.11
+++ lib/GL/mesa/src/drv/r200/r200_screen.c      30 Jul 2003 01:00:10 -0000
@@ -49,19 +49,35 @@
 
 #include "glxextensions.h"
 
-#if 1
-/* Including xf86PciInfo.h introduces a bunch of errors...
+#include "xf86PciInfo.h"
+
+#ifndef PCI_CHIP_RV250_In
+#define PCI_CHIP_RV250_In 0x496E  /* Undocumented in ATI docs, but listed in
+                                  * the Linux kernel's pci.ids.
+                                  */
+#define PCI_CHIP_RV250_Io 0x496F  /* Undocumented in ATI docs, but listed on
+                                  * 
http://www.yourvote.com/pci/pciread.asp?venid=0x1002
+                                  */
+#define PCI_CHIP_R200_Qm  0x516D  /* Undocumented in ATI docs, but listed on
+                                  * 
http://www.yourvote.com/pci/pciread.asp?venid=0x1002
+                                  */
+#endif /* PCI_CHIP_RV250_In */
+
+/* This can be removed after XFree86 merges back to DRI.
  */
-#define PCI_CHIP_R200_QD       0x5144
-#define PCI_CHIP_R200_QE       0x5145
-#define PCI_CHIP_R200_QF       0x5146
-#define PCI_CHIP_R200_QG       0x5147
-#define PCI_CHIP_R200_QY       0x5159
-#define PCI_CHIP_R200_QZ       0x515A
-#define PCI_CHIP_R200_LW       0x4C57 
-#define PCI_CHIP_R200_LY       0x4C59
-#define PCI_CHIP_R200_LZ       0x4C5A
-#define PCI_CHIP_RV200_QW      0x5157 /* Radeon 7500 - not an R200 at all */
+#ifndef PCI_CHIP_RV280_5960 
+#define PCI_CHIP_RV280_5960 0x5960
+#define PCI_CHIP_RV280_5961 0x5961
+#define PCI_CHIP_RV280_5962 0x5962
+#define PCI_CHIP_RV280_5963 0x5963
+#define PCI_CHIP_RV280_5968 0x5968
+#define PCI_CHIP_RV280_5969 0x5969
+#define PCI_CHIP_RV280_596A 0x596A
+#define PCI_CHIP_RV280_596B 0x596B
+
+#define PCI_CHIP_RV280_5941 0x5941 /* Undocumented in ATI docs, but listed on
+                                   * 
http://www.yourvote.com/pci/pciread.asp?venid=0x1002
+                                   */
 #endif
 
 static r200ScreenPtr __r200Screen;
@@ -75,10 +91,21 @@
 {
    r200ScreenPtr screen;
    RADEONDRIPtr dri_priv = (RADEONDRIPtr)sPriv->pDevPriv;
+   int  subsys_id;
+   int  subsys_vendor;
 
    if ( ! driCheckDriDdxDrmVersions( sPriv, "R200", 4, 0, 4, 0, 1, 5 ) )
       return NULL;
 
+   if ( (sPriv->ddxMajor == 4) && (sPriv->ddxMinor >= 1) ) {
+      subsys_id = dri_priv->deviceSubID;
+      subsys_vendor = dri_priv->deviceSubVendor;
+   }
+   else {
+      subsys_id = 0;
+      subsys_vendor = 0;
+   }
+
    /* Allocate the private area */
    screen = (r200ScreenPtr) CALLOC( sizeof(*screen) );
    if ( !screen ) {
@@ -88,24 +115,92 @@
    }
 
    switch ( dri_priv->deviceID ) {
-   case PCI_CHIP_R200_QD:
-   case PCI_CHIP_R200_QE:
-   case PCI_CHIP_R200_QF:
-   case PCI_CHIP_R200_QG:
-   case PCI_CHIP_R200_QY:
-   case PCI_CHIP_R200_QZ:
+   case PCI_CHIP_RADEON_QD:
+   case PCI_CHIP_RADEON_QE:
+   case PCI_CHIP_RADEON_QF:
+   case PCI_CHIP_RADEON_QG:
    case PCI_CHIP_RV200_QW:
-   case PCI_CHIP_R200_LW:
-   case PCI_CHIP_R200_LY:
-   case PCI_CHIP_R200_LZ:
+   case PCI_CHIP_RV200_QX:
+   case PCI_CHIP_RV100_QY:
+   case PCI_CHIP_RV100_QZ:
+   case PCI_CHIP_RADEON_LW:
+   case PCI_CHIP_RADEON_LX:
+   case PCI_CHIP_RADEON_LY:
+   case PCI_CHIP_RADEON_LZ:
       __driUtilMessage("r200CreateScreen(): Device isn't an r200!\n");
       FREE( screen );
       return NULL;      
+   case PCI_CHIP_R200_BB:
+      screen->device_name = "R200 (Radeon 8500DV)";
+      break;
+   case PCI_CHIP_RV250_Id:
+   case PCI_CHIP_RV250_Ie:
+   case PCI_CHIP_RV250_If:
+   case PCI_CHIP_RV250_Ig:
+      screen->device_name = "RV250 (Radeon 9000)";
+      break;
+   case PCI_CHIP_RV250_Ld:
+   case PCI_CHIP_RV250_Le:
+   case PCI_CHIP_RV250_Lg:
+      screen->device_name = "RV250 (Radeon Mobility M9)";
+      break;
+   case PCI_CHIP_RV250_Lf:
+      screen->device_name = "RV250 (Radeon Mobility M9-GL)";
+      break;
+   case PCI_CHIP_R200_QH:
+      if ( subsys_vendor == 0x1002 ) {
+        if ( subsys_id == 0x0152 ) {
+           screen->device_name = "R200 (FireGL 8800)";
+           break;
+        }
+        else if ( subsys_id == 0x0152 ) {
+           screen->device_name = "R200 (FireGL 8700)";
+           break;
+        }
+      }
+      /* FALLTHROUGH */
+   case PCI_CHIP_R200_QI:
+   case PCI_CHIP_R200_QJ:
+   case PCI_CHIP_R200_QK:
+   case PCI_CHIP_R200_QN: /* Is this actually a 9100? */
+   case PCI_CHIP_R200_QO: /* Is this actually a 9100? */
+   case PCI_CHIP_R200_Qh:
+   case PCI_CHIP_R200_Qi:
+   case PCI_CHIP_R200_Qj:
+   case PCI_CHIP_R200_Qk:
+   case PCI_CHIP_R200_Ql:
+      screen->device_name = "R200 (Radeon 8500)";
+      break;
+   case PCI_CHIP_R200_QL:
+      screen->device_name = "R200 (Radeon 8500LE)";
+      break;
+   case PCI_CHIP_R200_QM:
+      screen->device_name = "R200 (Radeon 9100)";
+      break;
+   case PCI_CHIP_R200_Qm:
+      screen->device_name = "R200 (Radeon 9100 - Secondary)";
+      break;
+   case PCI_CHIP_RV250_In:
+   case PCI_CHIP_RV250_Io:
+      screen->device_name = "RV250 (Radeon 9000 - Secondary)";
+      break;
+   case PCI_CHIP_RV280_5941:
+   case PCI_CHIP_RV280_5960:
+   case PCI_CHIP_RV280_5961:
+   case PCI_CHIP_RV280_5962:
+   case PCI_CHIP_RV280_5963:
+   case PCI_CHIP_RV280_5968:
+   case PCI_CHIP_RV280_5969:
+   case PCI_CHIP_RV280_596A:
+   case PCI_CHIP_RV280_596B:
+      screen->device_name = "RV280 (Radeon 9200)";
+      break;
    default:
-      screen->chipset = R200_CHIPSET_R200;
+      screen->device_name = "R200 (Unknown Radeon)";
       break;
    }
 
+   screen->chipset = R200_CHIPSET_R200;
 
    /* This is first since which regions we map depends on whether or
     * not we are using a PCI card.
Index: lib/GL/mesa/src/drv/r200/r200_screen.h
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/r200/r200_screen.h,v
retrieving revision 1.6
diff -u -d -r1.6 r200_screen.h
--- lib/GL/mesa/src/drv/r200/r200_screen.h      30 Apr 2003 01:50:48 -0000      1.6
+++ lib/GL/mesa/src/drv/r200/r200_screen.h      30 Jul 2003 01:00:10 -0000
@@ -59,6 +59,7 @@
 typedef struct {
 
    int chipset;
+   const char * device_name;
    int cpp;
    int IsPCI;                          /* Current card is a PCI card */
    int AGPMode;
Index: programs/Xserver/hw/xfree86/drivers/ati/radeon.h
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon.h,v
retrieving revision 1.35
diff -u -d -r1.35 radeon.h
--- programs/Xserver/hw/xfree86/drivers/ati/radeon.h    25 Mar 2003 11:19:48 -0000     
 1.35
+++ programs/Xserver/hw/xfree86/drivers/ati/radeon.h    30 Jul 2003 01:00:10 -0000
@@ -263,6 +263,8 @@
     pciVideoPtr       PciInfo;
     PCITAG            PciTag;
     int               Chipset;
+    int               SubChipset;
+    int               SubVendor;
     RADEONChipFamily  ChipFamily;
 
     Bool              FBDev;
Index: programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.h
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.h,v
retrieving revision 1.11
diff -u -d -r1.11 radeon_dri.h
--- programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.h        25 Mar 2003 11:19:52 
-0000      1.11
+++ programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.h        30 Jul 2003 01:00:10 
-0000
@@ -102,6 +102,8 @@
 #ifdef PER_CONTEXT_SAREA
     drmSize      perctx_sarea_size;
 #endif
+    int           deviceSubID;         /* PCI device subsystem ID */
+    int           deviceSubVendor;     /* PCI device subsystem vendor */
 } RADEONDRIRec, *RADEONDRIPtr;
 
 #endif
Index: programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c,v
retrieving revision 1.58
diff -u -d -r1.58 radeon_driver.c
--- programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c     14 Jul 2003 22:09:45 
-0000      1.58
+++ programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c     30 Jul 2003 01:00:10 
-0000
@@ -1332,15 +1332,21 @@
     unsigned char *RADEONMMIO;
 
                                /* Chipset */
-    from = X_PROBED;
     if (dev->chipset && *dev->chipset) {
-       info->Chipset  = xf86StringToToken(RADEONChipsets, dev->chipset);
-       from           = X_CONFIG;
+       info->Chipset    = xf86StringToToken(RADEONChipsets, dev->chipset);
+       info->SubChipset = 0;
+       info->SubVendor  = 0;
+       from             = X_CONFIG;
     } else if (dev->chipID >= 0) {
-       info->Chipset  = dev->chipID;
-       from           = X_CONFIG;
+       info->Chipset    = dev->chipID;
+       info->SubChipset = 0;
+       info->SubVendor  = 0;
+       from             = X_CONFIG;
     } else {
-       info->Chipset = info->PciInfo->chipType;
+       info->Chipset    = info->PciInfo->chipType;
+       info->SubChipset = info->PciInfo->subsysCard;
+       info->SubVendor  = info->PciInfo->subsysVendor;
+       from             = X_PROBED;
     }
 
     pScrn->chipset = (char *)xf86TokenToString(RADEONChipsets, info->Chipset);
Index: programs/Xserver/hw/xfree86/drivers/ati/radeon_version.h
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_version.h,v
retrieving revision 1.5
diff -u -d -r1.5 radeon_version.h
--- programs/Xserver/hw/xfree86/drivers/ati/radeon_version.h    25 Mar 2003 11:19:53 
-0000      1.5
+++ programs/Xserver/hw/xfree86/drivers/ati/radeon_version.h    30 Jul 2003 01:00:10 
-0000
@@ -41,8 +41,8 @@
 #define RV250_DRIVER_NAME    "r200"
 
 #define RADEON_VERSION_MAJOR 4
-#define RADEON_VERSION_MINOR 0
-#define RADEON_VERSION_PATCH 1
+#define RADEON_VERSION_MINOR 1
+#define RADEON_VERSION_PATCH 0
 
 #ifndef RADEON_VERSION_EXTRA
 #define RADEON_VERSION_EXTRA ""

Reply via email to