Allows allocation of >= 4 GiB. Signed-off-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> --- src/gallium/drivers/radeonsi/si_compute.c | 23 +++++++++++------------ src/gallium/drivers/radeonsi/si_pipe.c | 4 ++-- src/gallium/drivers/radeonsi/si_pipe.h | 4 ++-- src/gallium/drivers/radeonsi/si_shader.c | 2 +- src/gallium/drivers/radeonsi/si_shader.h | 2 +- src/gallium/drivers/radeonsi/si_state_draw.c | 6 +++--- src/gallium/drivers/radeonsi/si_state_shaders.c | 18 +++++++++--------- 7 files changed, 29 insertions(+), 30 deletions(-)
diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c index 905c169..b4981b4 100644 --- a/src/gallium/drivers/radeonsi/si_compute.c +++ b/src/gallium/drivers/radeonsi/si_compute.c @@ -203,30 +203,29 @@ static bool si_setup_compute_scratch_buffer(struct si_context *sctx, scratch_bo_size = 0; scratch_needed = config->scratch_bytes_per_wave * sctx->scratch_waves; if (sctx->compute_scratch_buffer) - scratch_bo_size = sctx->compute_scratch_buffer->b.b.width0; + scratch_bo_size = sctx->compute_scratch_buffer->size; if (scratch_bo_size < scratch_needed) { - pipe_resource_reference( - (struct pipe_resource**)&sctx->compute_scratch_buffer, - NULL); + pb_reference(&sctx->compute_scratch_buffer, NULL); - sctx->compute_scratch_buffer = - si_resource_create_custom(&sctx->screen->b.b, - PIPE_USAGE_DEFAULT, scratch_needed); + sctx->compute_scratch_buffer = sctx->b.ws->buffer_create(sctx->b.ws, + scratch_needed, 256, false, RADEON_DOMAIN_VRAM, + RADEON_FLAG_NO_CPU_ACCESS); if (!sctx->compute_scratch_buffer) return false; } if (sctx->compute_scratch_buffer != shader->scratch_bo && scratch_needed) { - uint64_t scratch_va = sctx->compute_scratch_buffer->gpu_address; + uint64_t scratch_va = sctx->b.ws->buffer_get_virtual_address( + sctx->compute_scratch_buffer); si_shader_apply_scratch_relocs(sctx, shader, scratch_va); if (si_shader_binary_upload(sctx->screen, shader)) return false; - r600_resource_reference(&shader->scratch_bo, + pb_reference(&shader->scratch_bo, sctx->compute_scratch_buffer); } @@ -282,9 +281,9 @@ static bool si_switch_compute_shader(struct si_context *sctx, config->scratch_bytes_per_wave * sctx->scratch_waves); - radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, - shader->scratch_bo, RADEON_USAGE_READWRITE, - RADEON_PRIO_SCRATCH_BUFFER); + sctx->b.ws->cs_add_buffer(sctx->b.gfx.cs, shader->scratch_bo, + RADEON_USAGE_READWRITE, RADEON_DOMAIN_VRAM, + RADEON_PRIO_SCRATCH_BUFFER); } shader_va = shader->bo->gpu_address + offset; diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 17d59b6..89df7db 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -51,8 +51,8 @@ static void si_destroy_context(struct pipe_context *context) pipe_resource_reference(&sctx->null_const_buf.buffer, NULL); r600_resource_reference(&sctx->border_color_buffer, NULL); free(sctx->border_color_table); - r600_resource_reference(&sctx->scratch_buffer, NULL); - r600_resource_reference(&sctx->compute_scratch_buffer, NULL); + pb_reference(&sctx->scratch_buffer, NULL); + pb_reference(&sctx->compute_scratch_buffer, NULL); sctx->b.ws->fence_reference(&sctx->last_gfx_fence, NULL); si_pm4_free_state(sctx, sctx->init_config, ~0); diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index a28c7d70..6ff6c3e 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -300,12 +300,12 @@ struct si_context { unsigned last_gsvs_itemsize; /* Scratch buffer */ - struct r600_resource *scratch_buffer; + struct pb_buffer *scratch_buffer; boolean emit_scratch_reloc; unsigned scratch_waves; unsigned spi_tmpring_size; - struct r600_resource *compute_scratch_buffer; + struct pb_buffer *compute_scratch_buffer; /* Emitted derived tessellation state. */ struct si_shader *last_ls; /* local shader (VS) */ diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 3bf68eb..a77392d 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -7119,7 +7119,7 @@ void si_shader_destroy(struct si_shader *shader) } if (shader->scratch_bo) - r600_resource_reference(&shader->scratch_bo, NULL); + pb_reference(&shader->scratch_bo, NULL); r600_resource_reference(&shader->bo, NULL); diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index 6ea849d..197e67d 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -402,7 +402,7 @@ struct si_shader { struct si_shader *gs_copy_shader; struct si_pm4_state *pm4; struct r600_resource *bo; - struct r600_resource *scratch_bo; + struct pb_buffer *scratch_bo; union si_shader_key key; bool is_binary_shared; unsigned z_order; diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c index b61c05a..758ffd2 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.c +++ b/src/gallium/drivers/radeonsi/si_state_draw.c @@ -359,9 +359,9 @@ static void si_emit_scratch_reloc(struct si_context *sctx) sctx->spi_tmpring_size); if (sctx->scratch_buffer) { - radeon_add_to_buffer_list(&sctx->b, &sctx->b.gfx, - sctx->scratch_buffer, RADEON_USAGE_READWRITE, - RADEON_PRIO_SCRATCH_BUFFER); + sctx->b.ws->cs_add_buffer(sctx->b.gfx.cs, sctx->scratch_buffer, + RADEON_USAGE_READWRITE, RADEON_DOMAIN_VRAM, + RADEON_PRIO_SCRATCH_BUFFER); } sctx->emit_scratch_reloc = false; diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index d560aae..412a4c9 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -1617,7 +1617,8 @@ static void si_update_gsvs_ring_bindings(struct si_context *sctx) static int si_update_scratch_buffer(struct si_context *sctx, struct si_shader *shader) { - uint64_t scratch_va = sctx->scratch_buffer->gpu_address; + uint64_t scratch_va = sctx->b.ws->buffer_get_virtual_address( + sctx->scratch_buffer); int r; if (!shader) @@ -1644,14 +1645,14 @@ static int si_update_scratch_buffer(struct si_context *sctx, /* Update the shader state to use the new shader bo. */ si_shader_init_pm4_state(shader); - r600_resource_reference(&shader->scratch_bo, sctx->scratch_buffer); + pb_reference(&shader->scratch_bo, sctx->scratch_buffer); return 1; } static unsigned si_get_current_scratch_buffer_size(struct si_context *sctx) { - return sctx->scratch_buffer ? sctx->scratch_buffer->b.b.width0 : 0; + return sctx->scratch_buffer ? sctx->scratch_buffer->size : 0; } static unsigned si_get_scratch_buffer_bytes_per_wave(struct si_shader *shader) @@ -1685,13 +1686,12 @@ static bool si_update_spi_tmpring_size(struct si_context *sctx) if (scratch_needed_size > 0) { if (scratch_needed_size > current_scratch_buffer_size) { /* Create a bigger scratch buffer */ - pipe_resource_reference( - (struct pipe_resource**)&sctx->scratch_buffer, - NULL); + pb_reference(&sctx->scratch_buffer, NULL); - sctx->scratch_buffer = - si_resource_create_custom(&sctx->screen->b.b, - PIPE_USAGE_DEFAULT, scratch_needed_size); + sctx->scratch_buffer = sctx->b.ws->buffer_create(sctx->b.ws, + scratch_needed_size, 256, false, + RADEON_DOMAIN_VRAM, + RADEON_FLAG_NO_CPU_ACCESS); if (!sctx->scratch_buffer) return false; sctx->emit_scratch_reloc = true; -- 2.8.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev