summaryrefslogtreecommitdiffstats
path: root/src/gallium/winsys/drm/radeon
diff options
context:
space:
mode:
authorCorbin Simpson <[email protected]>2009-12-06 23:55:58 -0800
committerCorbin Simpson <[email protected]>2009-12-06 23:55:58 -0800
commit12981589b729de0242d6ea74d8e4e9889793088c (patch)
treee7deeb7df9090afaa49e43040c653826883c8553 /src/gallium/winsys/drm/radeon
parente3a3ca097c1859c59daf99b722a788cd432b40dc (diff)
radeong: Automatically softpipe for non-r3xx.
Well, technically non-r[345]xx. At any rate... $ glxgears libGL: OpenDriver: trying /home/simpson/mesa/lib/gallium/r600_dri.so 131 frames in 5.0 seconds = 26.107 FPS I'm sure you can see where this is going. :3
Diffstat (limited to 'src/gallium/winsys/drm/radeon')
-rw-r--r--src/gallium/winsys/drm/radeon/core/radeon_drm.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/gallium/winsys/drm/radeon/core/radeon_drm.c b/src/gallium/winsys/drm/radeon/core/radeon_drm.c
index bc66b42fa75..dec7c065036 100644
--- a/src/gallium/winsys/drm/radeon/core/radeon_drm.c
+++ b/src/gallium/winsys/drm/radeon/core/radeon_drm.c
@@ -109,14 +109,15 @@ struct pipe_screen* radeon_create_screen(struct drm_api* api,
int drmFB,
struct drm_create_screen_arg *arg)
{
- struct radeon_winsys* winsys = radeon_pipe_winsys(drmFB);
- do_ioctls(drmFB, winsys);
+ struct radeon_winsys* rwinsys = radeon_pipe_winsys(drmFB);
+ do_ioctls(drmFB, rwinsys);
- if (debug_get_bool_option("RADEON_SOFTPIPE", FALSE)) {
- return softpipe_create_screen((struct pipe_winsys*)winsys);
+ if (!is_r3xx(rwinsys->pci_id) ||
+ debug_get_bool_option("RADEON_SOFTPIPE", FALSE)) {
+ return softpipe_create_screen((struct pipe_winsys*)rwinsys);
} else {
- radeon_setup_winsys(drmFB, winsys);
- return r300_create_screen(winsys);
+ radeon_setup_winsys(drmFB, rwinsys);
+ return r300_create_screen(rwinsys);
}
}
@@ -124,11 +125,13 @@ struct pipe_screen* radeon_create_screen(struct drm_api* api,
struct pipe_context* radeon_create_context(struct drm_api* api,
struct pipe_screen* screen)
{
- if (debug_get_bool_option("RADEON_SOFTPIPE", FALSE)) {
+ struct radeon_winsys* rwinsys = (struct radeon_winsys*)screen->winsys;
+
+ if (!is_r3xx(rwinsys->pci_id) ||
+ debug_get_bool_option("RADEON_SOFTPIPE", FALSE)) {
return softpipe_create(screen);
} else {
- return r300_create_context(screen,
- (struct radeon_winsys*)screen->winsys);
+ return r300_create_context(screen, rwinsys);
}
}