nouveau: allow NV3x's to be used with nouveau_vieux
authorIlia Mirkin <imirkin@alum.mit.edu>
Sat, 27 Aug 2016 23:46:25 +0000 (19:46 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Tue, 30 Aug 2016 04:21:42 +0000 (00:21 -0400)
NV34 and possibly other NV3x hardware has the capability of exposing the
NV25 graph class. This allows forcing nouveau_vieux to be used instead
of the gallium driver, primarily for testing purposes. (Among other
things, NV2x only ever came as AGP or inside an Xbox, never PCI/PCIe).

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/loader/pci_id_driver_map.c
src/mesa/drivers/dri/nouveau/nouveau_screen.c
src/mesa/drivers/dri/nouveau/nv04_surface.c

index 3c4657fd014ea503d73db339f82db0d78734e8de..8b2079e4354c3cf60dbd424b9bc410672a91d777 100644 (file)
@@ -25,6 +25,7 @@ int is_nouveau_vieux(int fd);
 
 #ifdef HAVE_LIBDRM
 
+#include <stdlib.h>
 #include <xf86drm.h>
 #include <nouveau_drm.h>
 
@@ -45,7 +46,8 @@ int
 is_nouveau_vieux(int fd)
 {
    int chipset = nouveau_chipset(fd);
-   return chipset > 0 && chipset < 0x30;
+   return (chipset > 0 && chipset < 0x30) ||
+      (chipset < 0x40 && getenv("NOUVEAU_VIEUX") != NULL);
 }
 
 #else
index 0545e68cbe1b8c54d84b6cd7119e8d48c061b930..de578a5d70fe65e77a832004a3018767a17c711c 100644 (file)
@@ -130,6 +130,7 @@ nouveau_init_screen2(__DRIscreen *dri_screen)
                dri_screen->max_gl_es1_version = 10;
                break;
        case 0x20:
+       case 0x30:
                screen->driver = &nv20_driver;
                dri_screen->max_gl_compat_version = 13;
                dri_screen->max_gl_es1_version = 10;
index 968c05f6593d8fbc5f39dfc99add5615ba53fed1..b1f0ea0a983b9194b827db6ab6b35d939c82f99b 100644 (file)
@@ -577,8 +577,10 @@ nv04_surface_init(struct gl_context *ctx)
        /* Swizzled surface. */
        if (context_chipset(ctx) < 0x20)
                class = NV04_SURFACE_SWZ_CLASS;
-       else
+       else if (context_chipset (ctx) < 0x30)
                class = NV20_SURFACE_SWZ_CLASS;
+       else
+               class = NV30_SURFACE_SWZ_CLASS;
 
        ret = nouveau_object_new(chan, handle++, class, NULL, 0, &hw->swzsurf);
        if (ret)