diff options
author | Marek Olšák <[email protected]> | 2012-06-17 17:54:38 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2012-06-17 18:28:32 +0200 |
commit | 6e7756db14c362ede6fdc97454267a32b8eab1d4 (patch) | |
tree | 6978ebe61253e66c5903ab0dc7f6a2d1f8c08ec9 | |
parent | 7c3786d780e1c475b219c3f2ddbe33554177be02 (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?
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.c | 21 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/r600/r600_state.c | 2 | ||||
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 2 | ||||
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_winsys.h | 1 |
5 files changed, 16 insertions, 11 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)) { diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index f2865d2a22e..b5eff347987 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -128,6 +128,7 @@ struct r600_screen { unsigned family; enum chip_class chip_class; struct radeon_info info; + bool has_streamout; struct r600_tiling_info tiling_info; struct r600_pipe_fences fences; diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index 124eba29731..fc757812a86 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -2215,7 +2215,7 @@ void r600_init_atom_start_cs(struct r600_context *rctx) r600_store_context_reg(cb, R_0288A4_SQ_PGM_RESOURCES_FS, 0); r600_store_context_reg(cb, R_0288DC_SQ_PGM_CF_OFFSET_FS, 0); - if (rctx->chip_class == R700 && rctx->screen->info.r600_has_streamout) + if (rctx->chip_class == R700 && rctx->screen->has_streamout) r600_store_context_reg(cb, R_028354_SX_SURFACE_SYNC, S_028354_SURFACE_SYNC_MASK(0xf)); r600_store_context_reg(cb, R_028800_DB_DEPTH_CONTROL, 0); diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c index a831816c06e..d1ef2526442 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c @@ -299,8 +299,6 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws) &ws->info.r600_ib_vm_max_size)) ws->info.r600_virtual_address = FALSE; } - - ws->info.r600_has_streamout = ws->info.drm_minor >= 13; } /* Get max pipes, this is only needed for compute shaders. All evergreen+ diff --git a/src/gallium/winsys/radeon/drm/radeon_winsys.h b/src/gallium/winsys/radeon/drm/radeon_winsys.h index 4aa7cfc5f61..6039910f870 100644 --- a/src/gallium/winsys/radeon/drm/radeon_winsys.h +++ b/src/gallium/winsys/radeon/drm/radeon_winsys.h @@ -98,7 +98,6 @@ struct radeon_info { boolean r600_virtual_address; uint32_t r600_va_start; uint32_t r600_ib_vm_max_size; - boolean r600_has_streamout; uint32_t r600_max_pipes; }; |