summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <darktama@iinet.net.au>2007-01-15 17:23:04 +1100
committerBen Skeggs <darktama@iinet.net.au>2007-01-15 17:23:04 +1100
commit634b4b3487dcb22e1660959b6a7ce9a42fa50fe2 (patch)
tree45f0009bd5ae122aadc54169bfee75cf7265c752
parent89f91d1804c0c4919c25d6b9931973733db1e664 (diff)
nouveau: fail CreateScreen on unknown cards instead of guessing.
-rw-r--r--src/mesa/drivers/dri/nouveau/nouveau_card.c4
-rw-r--r--src/mesa/drivers/dri/nouveau/nouveau_screen.c9
2 files changed, 10 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_card.c b/src/mesa/drivers/dri/nouveau/nouveau_card.c
index ae4f4c7ae5..91f12f0d70 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_card.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_card.c
@@ -10,8 +10,8 @@ nouveau_card* nouveau_card_lookup(uint32_t device_id)
int i;
for(i=0;i<sizeof(nouveau_card_list)/sizeof(nouveau_card)-1;i++)
if (nouveau_card_list[i].id==(device_id&0xffff))
- break;
- return &(nouveau_card_list[i]);
+ return &(nouveau_card_list[i]);
+ return NULL;
}
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_screen.c b/src/mesa/drivers/dri/nouveau/nouveau_screen.c
index 0e3901cfca..ab7742df14 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_screen.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_screen.c
@@ -71,6 +71,14 @@ static nouveauScreenPtr nouveauCreateScreen(__DRIscreenPrivate *sPriv)
return NULL;
}
+ screen->card=nouveau_card_lookup(dri_priv->device_id);
+ if (!screen->card) {
+ __driUtilMessage("%s: Unknown card type 0x%04x:0x%04x\n",
+ __func__, dri_priv->device_id >> 16, dri_priv->device_id & 0xFFFF);
+ FREE(screen);
+ return NULL;
+ }
+
/* parse information in __driConfigOptions */
driParseOptionInfo (&screen->optionCache,__driConfigOptions, __driNConfigOptions);
@@ -82,7 +90,6 @@ static nouveauScreenPtr nouveauCreateScreen(__DRIscreenPrivate *sPriv)
screen->depthOffset = dri_priv->depth_offset;
screen->depthPitch = dri_priv->depth_pitch;
- screen->card=nouveau_card_lookup(dri_priv->device_id);
screen->driScreen = sPriv;
return screen;
}