diff options
author | Marek Olšák <[email protected]> | 2016-08-18 15:25:51 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2016-08-24 15:39:57 +0200 |
commit | 2c13abb49137d0f81b530b3c67f1ed79c58c796e (patch) | |
tree | 85382a06c2684469098d31ff193bbb8f79ed303e /src/gallium | |
parent | 577f85e2bba093084d5d2af6047aeb328d708d9b (diff) |
radeonsi: fix VM faults due NULL internal const buffers on CIK
They are harmless, but the interrupts do decrease performance.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97039
Cc: 12.0 <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_pipe.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 131d3a21739..67c3a260ef0 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -251,8 +251,8 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen, si_begin_new_cs(sctx); r600_query_init_backend_mask(&sctx->b); /* this emits commands and must be last */ - /* CIK cannot unbind a constant buffer (S_BUFFER_LOAD is buggy - * with a NULL buffer). We need to use a dummy buffer instead. */ + /* CIK cannot unbind a constant buffer (S_BUFFER_LOAD doesn't skip loads + * if NUM_RECORDS == 0). We need to use a dummy buffer instead. */ if (sctx->b.chip_class == CIK) { sctx->null_const_buf.buffer = pipe_buffer_create(screen, PIPE_BIND_CONSTANT_BUFFER, PIPE_USAGE_DEFAULT, 16); @@ -267,6 +267,15 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen, } } + si_set_rw_buffer(sctx, SI_HS_CONST_DEFAULT_TESS_LEVELS, + &sctx->null_const_buf); + si_set_rw_buffer(sctx, SI_VS_CONST_CLIP_PLANES, + &sctx->null_const_buf); + si_set_rw_buffer(sctx, SI_PS_CONST_POLY_STIPPLE, + &sctx->null_const_buf); + si_set_rw_buffer(sctx, SI_PS_CONST_SAMPLE_POSITIONS, + &sctx->null_const_buf); + /* Clear the NULL constant buffer, because loads should return zeros. */ sctx->b.clear_buffer(&sctx->b.b, sctx->null_const_buf.buffer, 0, sctx->null_const_buf.buffer->width0, 0, |