diff options
author | Nicolai Hähnle <[email protected]> | 2017-02-07 17:06:06 +0100 |
---|---|---|
committer | Nicolai Hähnle <[email protected]> | 2017-04-05 10:37:17 +0200 |
commit | 1c125fdef0417fc86bcb041784234f030a8dc48f (patch) | |
tree | e195b78d4abb242518c3cd33591ebb2553b1636c | |
parent | a338f427ac486aeedd2a5a19013ee2550d0ebb1a (diff) |
winsys/amdgpu: extract amdgpu_do_add_real_buffer
We will use it for delayed adding of sparse buffers' backing buffers.
Reviewed-by: Marek Olšák <[email protected]>
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index cdd8e6cecdf..0381359ab79 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -315,15 +315,10 @@ int amdgpu_lookup_buffer(struct amdgpu_cs_context *cs, struct amdgpu_winsys_bo * } static int -amdgpu_lookup_or_add_real_buffer(struct amdgpu_cs *acs, struct amdgpu_winsys_bo *bo) +amdgpu_do_add_real_buffer(struct amdgpu_cs_context *cs, struct amdgpu_winsys_bo *bo) { - struct amdgpu_cs_context *cs = acs->csc; struct amdgpu_cs_buffer *buffer; - unsigned hash; - int idx = amdgpu_lookup_buffer(cs, bo); - - if (idx >= 0) - return idx; + int idx; /* New buffer, check if the backing array is large enough. */ if (cs->num_real_buffers >= cs->max_real_buffers) { @@ -338,7 +333,7 @@ amdgpu_lookup_or_add_real_buffer(struct amdgpu_cs *acs, struct amdgpu_winsys_bo new_flags = MALLOC(new_max * sizeof(*new_flags)); if (!new_buffers || !new_handles || !new_flags) { - fprintf(stderr, "amdgpu_lookup_or_add_buffer: allocation failed\n"); + fprintf(stderr, "amdgpu_do_add_buffer: allocation failed\n"); FREE(new_buffers); FREE(new_handles); FREE(new_flags); @@ -369,6 +364,21 @@ amdgpu_lookup_or_add_real_buffer(struct amdgpu_cs *acs, struct amdgpu_winsys_bo p_atomic_inc(&bo->num_cs_references); cs->num_real_buffers++; + return idx; +} + +static int +amdgpu_lookup_or_add_real_buffer(struct amdgpu_cs *acs, struct amdgpu_winsys_bo *bo) +{ + struct amdgpu_cs_context *cs = acs->csc; + unsigned hash; + int idx = amdgpu_lookup_buffer(cs, bo); + + if (idx >= 0) + return idx; + + idx = amdgpu_do_add_real_buffer(cs, bo); + hash = bo->unique_id & (ARRAY_SIZE(cs->buffer_indices_hashlist)-1); cs->buffer_indices_hashlist[hash] = idx; |