summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2017-02-07 17:06:06 +0100
committerNicolai Hähnle <[email protected]>2017-04-05 10:37:17 +0200
commit1c125fdef0417fc86bcb041784234f030a8dc48f (patch)
treee195b78d4abb242518c3cd33591ebb2553b1636c
parenta338f427ac486aeedd2a5a19013ee2550d0ebb1a (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.c26
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;