From: Marek Olšák <marek.ol...@amd.com> --- src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 23 +++++------------------ src/gallium/winsys/amdgpu/drm/amdgpu_cs.h | 4 ---- 2 files changed, 5 insertions(+), 22 deletions(-)
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index 6628ff9f170..9aa489adaa4 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -895,23 +895,21 @@ static void amdgpu_cs_context_cleanup(struct amdgpu_cs_context *cs) cs->num_syncobj_to_signal = 0; amdgpu_fence_reference(&cs->fence, NULL); memset(cs->buffer_indices_hashlist, -1, sizeof(cs->buffer_indices_hashlist)); cs->last_added_bo = NULL; } static void amdgpu_destroy_cs_context(struct amdgpu_cs_context *cs) { amdgpu_cs_context_cleanup(cs); - FREE(cs->flags); FREE(cs->real_buffers); - FREE(cs->handles); FREE(cs->slab_buffers); FREE(cs->sparse_buffers); FREE(cs->fence_dependencies); FREE(cs->syncobj_to_signal); } static struct radeon_cmdbuf * amdgpu_cs_create(struct radeon_winsys_ctx *rwctx, enum ring_type ring_type, @@ -1321,54 +1319,43 @@ void amdgpu_cs_submit_ib(void *job, int thread_index) free(handles); simple_mtx_unlock(&ws->global_bo_list_lock); } else { unsigned num_handles; if (!amdgpu_add_sparse_backing_buffers(cs)) { r = -ENOMEM; goto bo_list_error; } - if (cs->max_real_submit < cs->num_real_buffers) { - FREE(cs->handles); - FREE(cs->flags); - - cs->handles = MALLOC(sizeof(*cs->handles) * cs->num_real_buffers); - cs->flags = MALLOC(sizeof(*cs->flags) * cs->num_real_buffers); - - if (!cs->handles || !cs->flags) { - cs->max_real_submit = 0; - r = -ENOMEM; - goto bo_list_error; - } - } + amdgpu_bo_handle *handles = alloca(sizeof(*handles) * cs->num_real_buffers); + uint8_t *flags = alloca(sizeof(*flags) * cs->num_real_buffers); num_handles = 0; for (i = 0; i < cs->num_real_buffers; ++i) { struct amdgpu_cs_buffer *buffer = &cs->real_buffers[i]; if (buffer->bo->is_local) continue; assert(buffer->u.real.priority_usage != 0); - cs->handles[num_handles] = buffer->bo->bo; - cs->flags[num_handles] = (util_last_bit64(buffer->u.real.priority_usage) - 1) / 4; + handles[num_handles] = buffer->bo->bo; + flags[num_handles] = (util_last_bit64(buffer->u.real.priority_usage) - 1) / 4; ++num_handles; } if (acs->ring_type == RING_GFX) ws->gfx_bo_list_counter += cs->num_real_buffers; if (num_handles) { r = amdgpu_bo_list_create(ws->dev, num_handles, - cs->handles, cs->flags, &bo_list); + handles, flags, &bo_list); } else { r = 0; } } bo_list_error: if (r) { fprintf(stderr, "amdgpu: buffer list creation failed (%d)\n", r); amdgpu_fence_signalled(cs->fence); cs->error_code = r; diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h index 5f96193750b..3b10cc66c21 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h @@ -74,24 +74,20 @@ struct amdgpu_ib { }; struct amdgpu_cs_context { struct drm_amdgpu_cs_chunk_ib ib[IB_NUM]; /* Buffers. */ unsigned max_real_buffers; unsigned num_real_buffers; struct amdgpu_cs_buffer *real_buffers; - unsigned max_real_submit; - amdgpu_bo_handle *handles; - uint8_t *flags; - unsigned num_slab_buffers; unsigned max_slab_buffers; struct amdgpu_cs_buffer *slab_buffers; unsigned num_sparse_buffers; unsigned max_sparse_buffers; struct amdgpu_cs_buffer *sparse_buffers; int buffer_indices_hashlist[4096]; -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev