Module: Mesa Branch: main Commit: 2afe6cea4c3dcf8598e36492bbf03d2282982f03 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2afe6cea4c3dcf8598e36492bbf03d2282982f03
Author: Marek Olšák <marek.ol...@amd.com> Date: Sun Dec 3 18:24:18 2023 -0500 winsys/amdgpu: change amdgpu_lookup_buffer to take struct amdgpu_buffer_list Reviewed-by: Yogesh Mohan Marimuthu <yogesh.mohanmarimu...@amd.com> Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-pra...@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26547> --- src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 35 ++++++++++--------------------- src/gallium/winsys/amdgpu/drm/amdgpu_cs.h | 7 +++++++ 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index f909fa76b4f..d1b2c5dabf7 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -551,8 +551,10 @@ static inline unsigned amdgpu_cs_epilog_dws(struct amdgpu_cs *cs) } static int amdgpu_lookup_buffer(struct amdgpu_cs_context *cs, struct amdgpu_winsys_bo *bo, - struct amdgpu_cs_buffer *buffers, unsigned num_buffers) + struct amdgpu_buffer_list *list) { + unsigned num_buffers = list->num_buffers; + struct amdgpu_cs_buffer *buffers = list->buffers; unsigned hash = bo->unique_id & (BUFFER_HASHLIST_SIZE-1); int i = cs->buffer_indices_hashlist[hash]; @@ -581,21 +583,7 @@ static int amdgpu_lookup_buffer(struct amdgpu_cs_context *cs, struct amdgpu_wins int amdgpu_lookup_buffer_any_type(struct amdgpu_cs_context *cs, struct amdgpu_winsys_bo *bo) { - struct amdgpu_cs_buffer *buffers; - int num_buffers; - - if (is_real_bo(bo)) { - buffers = cs->buffer_lists[AMDGPU_BO_REAL].buffers; - num_buffers = cs->buffer_lists[AMDGPU_BO_REAL].num_buffers; - } else if (bo->type == AMDGPU_BO_SLAB) { - buffers = cs->buffer_lists[AMDGPU_BO_SLAB].buffers; - num_buffers = cs->buffer_lists[AMDGPU_BO_SLAB].num_buffers; - } else { - buffers = cs->buffer_lists[AMDGPU_BO_SPARSE].buffers; - num_buffers = cs->buffer_lists[AMDGPU_BO_SPARSE].num_buffers; - } - - return amdgpu_lookup_buffer(cs, bo, buffers, num_buffers); + return amdgpu_lookup_buffer(cs, bo, &cs->buffer_lists[get_buf_list_idx(bo)]); } static int @@ -644,8 +632,8 @@ static int amdgpu_lookup_or_add_real_buffer(struct amdgpu_cs_context *cs, struct amdgpu_winsys_bo *bo) { unsigned hash; - int idx = amdgpu_lookup_buffer(cs, bo, cs->buffer_lists[AMDGPU_BO_REAL].buffers, - cs->buffer_lists[AMDGPU_BO_REAL].num_buffers); + struct amdgpu_buffer_list *list = &cs->buffer_lists[AMDGPU_BO_REAL]; + int idx = amdgpu_lookup_buffer(cs, bo, list); if (idx >= 0) return idx; @@ -662,14 +650,13 @@ static int amdgpu_lookup_or_add_slab_buffer(struct amdgpu_cs_context *cs, { struct amdgpu_cs_buffer *buffer; unsigned hash; - int idx = amdgpu_lookup_buffer(cs, bo, cs->buffer_lists[AMDGPU_BO_SLAB].buffers, - cs->buffer_lists[AMDGPU_BO_SLAB].num_buffers); - int real_idx; + struct amdgpu_buffer_list *list = &cs->buffer_lists[AMDGPU_BO_SLAB]; + int idx = amdgpu_lookup_buffer(cs, bo, list); if (idx >= 0) return idx; - real_idx = amdgpu_lookup_or_add_real_buffer(cs, &get_slab_bo(bo)->real->b); + int real_idx = amdgpu_lookup_or_add_real_buffer(cs, &get_slab_bo(bo)->real->b); if (real_idx < 0) return -1; @@ -712,8 +699,8 @@ static int amdgpu_lookup_or_add_sparse_buffer(struct amdgpu_cs_context *cs, { struct amdgpu_cs_buffer *buffer; unsigned hash; - int idx = amdgpu_lookup_buffer(cs, bo, cs->buffer_lists[AMDGPU_BO_SPARSE].buffers, - cs->buffer_lists[AMDGPU_BO_SPARSE].num_buffers); + struct amdgpu_buffer_list *list = &cs->buffer_lists[AMDGPU_BO_SPARSE]; + int idx = amdgpu_lookup_buffer(cs, bo, list); if (idx >= 0) return idx; diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h index bb712b91242..c1ae663c0db 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h @@ -221,6 +221,13 @@ amdgpu_bo_is_referenced_by_cs(struct amdgpu_cs *cs, return amdgpu_lookup_buffer_any_type(cs->csc, bo) != -1; } +static inline unsigned get_buf_list_idx(struct amdgpu_winsys_bo *bo) +{ + /* AMDGPU_BO_REAL_REUSABLE maps to AMDGPU_BO_REAL. */ + static_assert(ARRAY_SIZE(((struct amdgpu_cs_context*)NULL)->buffer_lists) == NUM_BO_LIST_TYPES, ""); + return MIN2(bo->type, AMDGPU_BO_REAL); +} + static inline bool amdgpu_bo_is_referenced_by_cs_with_usage(struct amdgpu_cs *cs, struct amdgpu_winsys_bo *bo,