#include "nouveau/nouveau_stateobj.h"
-#define GRCLASS5097_CHIPSETS 0x00000000
-#define GRCLASS8297_CHIPSETS 0x00000010
+#define NV5X_GRCLASS5097_CHIPSETS 0x00000001
+#define NV8X_GRCLASS8297_CHIPSETS 0x00000010
+#define NV9X_GRCLASS8297_CHIPSETS 0x00000004
static boolean
nv50_screen_is_format_supported(struct pipe_screen *pscreen,
return NULL;
}
- if (GRCLASS5097_CHIPSETS & (1 << (chipset & 0x0f))) {
- tesla_class = 0x5097;
- } else
- if (GRCLASS8297_CHIPSETS & (1 << (chipset & 0x0f))) {
- tesla_class = 0x8297;
- } else {
+ switch (chipset & 0xf0) {
+ case 0x50:
+ if (NV5X_GRCLASS5097_CHIPSETS & (1 << (chipset & 0x0f)))
+ tesla_class = 0x5097;
+ break;
+ case 0x80:
+ if (NV8X_GRCLASS8297_CHIPSETS & (1 << (chipset & 0x0f)))
+ tesla_class = 0x8297;
+ break;
+ case 0x90:
+ if (NV9X_GRCLASS8297_CHIPSETS & (1 << (chipset & 0x0f)))
+ tesla_class = 0x8297;
+ break;
+ default:
+ break;
+ }
+
+ if (tesla_class == 0) {
NOUVEAU_ERR("Unknown G8x chipset: NV%02x\n", chipset);
nv50_screen_destroy(&screen->pipe);
return NULL;
switch (chipset & 0xf0) {
case 0x50:
case 0x80:
+ case 0x90:
ret = nouveau_surface_channel_create_nv50(nvc);
break;
default:
st_share = ((struct nouveau_context *)sharedContextPrivate)->st;
}
+ /* Check for supported arch */
if ((ret = nouveau_device_get_param(nv_screen->device,
NOUVEAU_GETPARAM_CHIPSET_ID,
&nv->chipset))) {
return GL_FALSE;
}
+ switch (nv->chipset & 0xf0) {
+ case 0x30:
+ /* NV30 */
+ case 0x40:
+ case 0x60:
+ /* NV40 */
+ case 0x50:
+ case 0x80:
+ case 0x90:
+ /* G80 */
+ break;
+ default:
+ NOUVEAU_ERR("Unsupported chipset: NV%02x\n", nv->chipset);
+ return GL_FALSE;
+ }
+
driContextPriv->driverPrivate = (void *)nv;
nv->nv_screen = nv_screen;
nv->dri_screen = driScrnPriv;
}
}
- /*XXX: temporary - disable multi-context/single-channel on non-NV4x */
+ /*XXX: temporary - disable multi-context/single-channel on pre-NV4x */
switch (nv->chipset & 0xf0) {
case 0x40:
case 0x60:
+ /* NV40 class */
+ case 0x50:
+ case 0x80:
+ case 0x90:
+ /* G80 class */
break;
default:
nvc = NULL;
}
/* Create pipe */
- if (nv->chipset < 0x50)
- ret = nouveau_surface_init_nv04(nv);
- else
- ret = nouveau_surface_init_nv50(nv);
- if (ret) {
- return GL_FALSE;
+ switch (nv->chipset & 0xf0) {
+ case 0x50:
+ case 0x80:
+ case 0x90:
+ if (nouveau_surface_init_nv50(nv))
+ return GL_FALSE;
+ break;
+ default:
+ if (nouveau_surface_init_nv04(nv))
+ return GL_FALSE;
+ break;
}
if (!getenv("NOUVEAU_FORCE_SOFTPIPE")) {