From: Ilia Mirkin Date: Sat, 27 Aug 2016 23:46:25 +0000 (-0400) Subject: nouveau: allow NV3x's to be used with nouveau_vieux X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=91681302d0308a70aece883c3b56a18f9a44041f;p=mesa.git nouveau: allow NV3x's to be used with nouveau_vieux 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 --- diff --git a/src/loader/pci_id_driver_map.c b/src/loader/pci_id_driver_map.c index 3c4657fd014..8b2079e4354 100644 --- a/src/loader/pci_id_driver_map.c +++ b/src/loader/pci_id_driver_map.c @@ -25,6 +25,7 @@ int is_nouveau_vieux(int fd); #ifdef HAVE_LIBDRM +#include #include #include @@ -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 diff --git a/src/mesa/drivers/dri/nouveau/nouveau_screen.c b/src/mesa/drivers/dri/nouveau/nouveau_screen.c index 0545e68cbe1..de578a5d70f 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_screen.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_screen.c @@ -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; diff --git a/src/mesa/drivers/dri/nouveau/nv04_surface.c b/src/mesa/drivers/dri/nouveau/nv04_surface.c index 968c05f6593..b1f0ea0a983 100644 --- a/src/mesa/drivers/dri/nouveau/nv04_surface.c +++ b/src/mesa/drivers/dri/nouveau/nv04_surface.c @@ -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)