From 45240ce598c8ab38b5e0c10cbe7050549561eced Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Wed, 15 Feb 2017 20:44:24 +0100 Subject: [PATCH] radeonsi: use R600_RESOURCE_FLAG_UNMAPPABLE where it's desirable MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeon/r600_texture.c | 11 +++-- src/gallium/drivers/radeonsi/si_compute.c | 6 ++- src/gallium/drivers/radeonsi/si_cp_dma.c | 6 ++- src/gallium/drivers/radeonsi/si_pipe.c | 12 ++++-- .../drivers/radeonsi/si_state_shaders.c | 41 ++++++++++++------- 5 files changed, 50 insertions(+), 26 deletions(-) diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c index 47aa8b12531..0865d35fd29 100644 --- a/src/gallium/drivers/radeon/r600_texture.c +++ b/src/gallium/drivers/radeon/r600_texture.c @@ -763,7 +763,9 @@ static void r600_texture_alloc_cmask_separate(struct r600_common_screen *rscreen } rtex->cmask_buffer = (struct r600_resource *) - r600_aligned_buffer_create(&rscreen->b, 0, PIPE_USAGE_DEFAULT, + r600_aligned_buffer_create(&rscreen->b, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, rtex->cmask.size, rtex->cmask.alignment); if (rtex->cmask_buffer == NULL) { @@ -874,7 +876,9 @@ static void r600_texture_allocate_htile(struct r600_common_screen *rscreen, return; rtex->htile_buffer = (struct r600_resource*) - r600_aligned_buffer_create(&rscreen->b, 0, PIPE_USAGE_DEFAULT, + r600_aligned_buffer_create(&rscreen->b, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, rtex->surface.htile_size, rtex->surface.htile_alignment); if (rtex->htile_buffer == NULL) { @@ -2106,7 +2110,8 @@ static void vi_separate_dcc_try_enable(struct r600_common_context *rctx, tex->last_dcc_separate_buffer = NULL; } else { tex->dcc_separate_buffer = (struct r600_resource*) - r600_aligned_buffer_create(rctx->b.screen, 0, + r600_aligned_buffer_create(rctx->b.screen, + R600_RESOURCE_FLAG_UNMAPPABLE, PIPE_USAGE_DEFAULT, tex->surface.dcc_size, tex->surface.dcc_alignment); diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c index 88d72c1ea2a..f4efb0df8d3 100644 --- a/src/gallium/drivers/radeonsi/si_compute.c +++ b/src/gallium/drivers/radeonsi/si_compute.c @@ -289,8 +289,10 @@ static bool si_setup_compute_scratch_buffer(struct si_context *sctx, r600_resource_reference(&sctx->compute_scratch_buffer, NULL); sctx->compute_scratch_buffer = (struct r600_resource*) - pipe_buffer_create(&sctx->screen->b.b, 0, - PIPE_USAGE_DEFAULT, scratch_needed); + r600_aligned_buffer_create(&sctx->screen->b.b, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, + scratch_needed, 256); if (!sctx->compute_scratch_buffer) return false; diff --git a/src/gallium/drivers/radeonsi/si_cp_dma.c b/src/gallium/drivers/radeonsi/si_cp_dma.c index ea999d9f654..1be7586d16b 100644 --- a/src/gallium/drivers/radeonsi/si_cp_dma.c +++ b/src/gallium/drivers/radeonsi/si_cp_dma.c @@ -276,8 +276,10 @@ static void si_cp_dma_realign_engine(struct si_context *sctx, unsigned size, sctx->scratch_buffer->b.b.width0 < scratch_size) { r600_resource_reference(&sctx->scratch_buffer, NULL); sctx->scratch_buffer = (struct r600_resource*) - pipe_buffer_create(&sctx->screen->b.b, 0, - PIPE_USAGE_DEFAULT, scratch_size); + r600_aligned_buffer_create(&sctx->screen->b.b, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, + scratch_size, 256); if (!sctx->scratch_buffer) return; diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index a947bad5e42..843c6b349b7 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -204,8 +204,9 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen, } sctx->ce_suballocator = - u_suballocator_create(&sctx->b.b, 1024 * 1024, - 0, PIPE_USAGE_DEFAULT, 0, false); + u_suballocator_create(&sctx->b.b, 1024 * 1024, 0, + PIPE_USAGE_DEFAULT, + R600_RESOURCE_FLAG_UNMAPPABLE, false); if (!sctx->ce_suballocator) goto fail; } @@ -257,8 +258,11 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen, /* 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); + sctx->null_const_buf.buffer = + r600_aligned_buffer_create(screen, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, 16, + sctx->screen->b.info.tcc_cache_line_size); if (!sctx->null_const_buf.buffer) goto fail; sctx->null_const_buf.buffer_size = sctx->null_const_buf.buffer->width0; diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index 179176c486e..4a81b566dc1 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -2079,18 +2079,22 @@ static bool si_update_gs_ring_buffers(struct si_context *sctx) if (update_esgs) { pipe_resource_reference(&sctx->esgs_ring, NULL); - sctx->esgs_ring = pipe_buffer_create(sctx->b.b.screen, 0, - PIPE_USAGE_DEFAULT, - esgs_ring_size); + sctx->esgs_ring = + r600_aligned_buffer_create(sctx->b.b.screen, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, + esgs_ring_size, alignment); if (!sctx->esgs_ring) return false; } if (update_gsvs) { pipe_resource_reference(&sctx->gsvs_ring, NULL); - sctx->gsvs_ring = pipe_buffer_create(sctx->b.b.screen, 0, - PIPE_USAGE_DEFAULT, - gsvs_ring_size); + sctx->gsvs_ring = + r600_aligned_buffer_create(sctx->b.b.screen, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, + gsvs_ring_size, alignment); if (!sctx->gsvs_ring) return false; } @@ -2227,8 +2231,10 @@ static bool si_update_spi_tmpring_size(struct si_context *sctx) r600_resource_reference(&sctx->scratch_buffer, NULL); sctx->scratch_buffer = (struct r600_resource*) - pipe_buffer_create(&sctx->screen->b.b, 0, - PIPE_USAGE_DEFAULT, scratch_needed_size); + r600_aligned_buffer_create(&sctx->screen->b.b, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, + scratch_needed_size, 256); if (!sctx->scratch_buffer) return false; @@ -2332,18 +2338,23 @@ static void si_init_tess_factor_ring(struct si_context *sctx) } assert(!sctx->tf_ring); - sctx->tf_ring = pipe_buffer_create(sctx->b.b.screen, 0, - PIPE_USAGE_DEFAULT, - 32768 * sctx->screen->b.info.max_se); + sctx->tf_ring = r600_aligned_buffer_create(sctx->b.b.screen, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, + 32768 * sctx->screen->b.info.max_se, + 256); if (!sctx->tf_ring) return; assert(((sctx->tf_ring->width0 / 4) & C_030938_SIZE) == 0); - sctx->tess_offchip_ring = pipe_buffer_create(sctx->b.b.screen, 0, - PIPE_USAGE_DEFAULT, - max_offchip_buffers * - sctx->screen->tess_offchip_block_dw_size * 4); + sctx->tess_offchip_ring = + r600_aligned_buffer_create(sctx->b.b.screen, + R600_RESOURCE_FLAG_UNMAPPABLE, + PIPE_USAGE_DEFAULT, + max_offchip_buffers * + sctx->screen->tess_offchip_block_dw_size * 4, + 256); if (!sctx->tess_offchip_ring) return; -- 2.30.2