summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r600/r600_pipe.c
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2012-06-17 17:54:38 +0200
committerMarek Olšák <[email protected]>2012-06-17 18:28:32 +0200
commit6e7756db14c362ede6fdc97454267a32b8eab1d4 (patch)
tree6978ebe61253e66c5903ab0dc7f6a2d1f8c08ec9 /src/gallium/drivers/r600/r600_pipe.c
parent7c3786d780e1c475b219c3f2ddbe33554177be02 (diff)
r600g: enable streamout by default on r7xx and DRM 2.17.0
Now that it's in Linus's tree. Has anyone had a chance to test streamout on Cayman recently?
Diffstat (limited to 'src/gallium/drivers/r600/r600_pipe.c')
-rw-r--r--src/gallium/drivers/r600/r600_pipe.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c
index e0ee823ce39..e9b1445200d 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -414,9 +414,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
/* Stream output. */
case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS:
- return rscreen->info.r600_has_streamout ? 4 : 0;
+ return rscreen->has_streamout ? 4 : 0;
case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
- return rscreen->info.r600_has_streamout ? 1 : 0;
+ return rscreen->has_streamout ? 1 : 0;
case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS:
case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS:
return 16*4;
@@ -898,11 +898,18 @@ struct pipe_screen *r600_screen_create(struct radeon_winsys *ws)
rscreen->chip_class = R600;
}
- /* XXX streamout is said to be broken on r700 and cayman */
- if ((rscreen->chip_class == R700 ||
- rscreen->chip_class == CAYMAN) &&
- !debug_get_bool_option("R600_STREAMOUT", FALSE)) {
- rscreen->info.r600_has_streamout = false;
+ /* Figure out streamout kernel support. */
+ switch (rscreen->chip_class) {
+ case R600:
+ case EVERGREEN:
+ rscreen->has_streamout = rscreen->info.drm_minor >= 13;
+ break;
+ case R700:
+ rscreen->has_streamout = rscreen->info.drm_minor >= 17;
+ break;
+ /* TODO: Cayman */
+ default:
+ rscreen->has_streamout = debug_get_bool_option("R600_STREAMOUT", FALSE);
}
if (r600_init_tiling(rscreen)) {