summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2021-10-21 23:17:03 -0400
committerMarge Bot <emma+marge@anholt.net>2021-10-29 06:54:21 +0000
commit61bd8ec0430868c29870620d685a3400454480a7 (patch)
tree37f44c9bf1fdfeea6f92697e8551a0462816096c /src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
parent90ff5ef5c0a029c023e166569b17c0122f274cc2 (diff)
gallium/radeon: merge BO read/write usage flags with priority flags
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13478>
Diffstat (limited to 'src/gallium/winsys/amdgpu/drm/amdgpu_cs.c')
-rw-r--r--src/gallium/winsys/amdgpu/drm/amdgpu_cs.c36
1 files changed, 16 insertions, 20 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
index 7e28c42add7..8135f477c07 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
@@ -574,7 +574,7 @@ static int amdgpu_lookup_or_add_slab_buffer(struct amdgpu_winsys *ws,
memset(buffer, 0, sizeof(*buffer));
amdgpu_winsys_bo_reference(ws, &buffer->bo, bo);
- buffer->u.slab.real_idx = real_idx;
+ buffer->slab_real_idx = real_idx;
cs->num_slab_buffers++;
hash = bo->unique_id & (BUFFER_HASHLIST_SIZE-1);
@@ -643,9 +643,8 @@ static int amdgpu_lookup_or_add_sparse_buffer(struct amdgpu_winsys *ws,
static unsigned amdgpu_cs_add_buffer(struct radeon_cmdbuf *rcs,
struct pb_buffer *buf,
- enum radeon_bo_usage usage,
- enum radeon_bo_domain domains,
- unsigned priority)
+ unsigned usage,
+ enum radeon_bo_domain domains)
{
/* Don't use the "domains" parameter. Amdgpu doesn't support changing
* the buffer placement during command submission.
@@ -661,8 +660,7 @@ static unsigned amdgpu_cs_add_buffer(struct radeon_cmdbuf *rcs,
* are outside of the winsys.
*/
if (bo == cs->last_added_bo &&
- (usage & cs->last_added_bo_usage) == usage &&
- priority & cs->last_added_bo_priority_usage)
+ (usage & cs->last_added_bo_usage) == usage)
return cs->last_added_bo_index;
if (!(bo->base.usage & RADEON_FLAG_SPARSE)) {
@@ -675,7 +673,7 @@ static unsigned amdgpu_cs_add_buffer(struct radeon_cmdbuf *rcs,
buffer->usage |= usage;
usage &= ~RADEON_USAGE_SYNCHRONIZED;
- index = buffer->u.slab.real_idx;
+ index = buffer->slab_real_idx;
} else {
index = amdgpu_lookup_or_add_real_buffer(rcs, acs, bo);
if (index < 0)
@@ -691,13 +689,11 @@ static unsigned amdgpu_cs_add_buffer(struct radeon_cmdbuf *rcs,
buffer = &cs->sparse_buffers[index];
}
- buffer->u.real.priority_usage |= priority;
buffer->usage |= usage;
cs->last_added_bo = bo;
cs->last_added_bo_index = index;
cs->last_added_bo_usage = buffer->usage;
- cs->last_added_bo_priority_usage = buffer->u.real.priority_usage;
return index;
}
@@ -807,7 +803,7 @@ static bool amdgpu_get_new_ib(struct amdgpu_winsys *ws,
ib->ptr_ib_size_inside_ib = false;
amdgpu_cs_add_buffer(cs->main.rcs, ib->big_ib_buffer,
- RADEON_USAGE_READ, 0, RADEON_PRIO_IB);
+ RADEON_USAGE_READ | RADEON_PRIO_IB, 0);
rcs->current.buf = (uint32_t*)(ib->ib_mapped + ib->used_ib_space);
@@ -1060,8 +1056,8 @@ amdgpu_cs_setup_preemption(struct radeon_cmdbuf *rcs, const uint32_t *preamble_i
assert(!cs->preamble_ib_bo);
cs->preamble_ib_bo = preamble_bo;
- amdgpu_cs_add_buffer(rcs, cs->preamble_ib_bo, RADEON_USAGE_READ, 0,
- RADEON_PRIO_IB);
+ amdgpu_cs_add_buffer(rcs, cs->preamble_ib_bo,
+ RADEON_USAGE_READ | RADEON_PRIO_IB, 0);
return true;
}
@@ -1152,7 +1148,7 @@ static bool amdgpu_cs_check_space(struct radeon_cmdbuf *rcs, unsigned dw)
rcs->gpu_address = va;
amdgpu_cs_add_buffer(cs->main.rcs, ib->big_ib_buffer,
- RADEON_USAGE_READ, 0, RADEON_PRIO_IB);
+ RADEON_USAGE_READ | RADEON_PRIO_IB, 0);
return true;
}
@@ -1167,7 +1163,7 @@ static unsigned amdgpu_cs_get_buffer_list(struct radeon_cmdbuf *rcs,
for (i = 0; i < cs->num_real_buffers; i++) {
list[i].bo_size = cs->real_buffers[i].bo->base.size;
list[i].vm_address = cs->real_buffers[i].bo->va;
- list[i].priority_usage = cs->real_buffers[i].u.real.priority_usage;
+ list[i].priority_usage = cs->real_buffers[i].usage;
}
}
return cs->num_real_buffers;
@@ -1368,7 +1364,7 @@ static bool amdgpu_add_sparse_backing_buffers(struct amdgpu_winsys *ws,
return false;
}
- cs->real_buffers[idx].u.real.priority_usage = buffer->u.real.priority_usage;
+ cs->real_buffers[idx].usage = buffer->usage;
}
simple_mtx_unlock(&bo->lock);
@@ -1429,10 +1425,10 @@ static void amdgpu_cs_submit_ib(void *job, void *gdata, int thread_index)
unsigned num_handles = 0;
for (i = 0; i < cs->num_real_buffers; ++i) {
struct amdgpu_cs_buffer *buffer = &cs->real_buffers[i];
- assert(buffer->u.real.priority_usage != 0);
list[num_handles].bo_handle = buffer->bo->u.real.kms_handle;
- list[num_handles].bo_priority = (util_last_bit(buffer->u.real.priority_usage) - 1) / 2;
+ list[num_handles].bo_priority =
+ (util_last_bit(buffer->usage & RADEON_ALL_PRIORITIES) - 1) / 2;
++num_handles;
}
@@ -1769,8 +1765,8 @@ static int amdgpu_cs_flush(struct radeon_cmdbuf *rcs,
amdgpu_get_new_ib(ws, rcs, &cs->main, cs);
if (cs->preamble_ib_bo) {
- amdgpu_cs_add_buffer(rcs, cs->preamble_ib_bo, RADEON_USAGE_READ, 0,
- RADEON_PRIO_IB);
+ amdgpu_cs_add_buffer(rcs, cs->preamble_ib_bo,
+ RADEON_USAGE_READ | RADEON_PRIO_IB, 0);
}
rcs->used_gart_kb = 0;
@@ -1805,7 +1801,7 @@ static void amdgpu_cs_destroy(struct radeon_cmdbuf *rcs)
static bool amdgpu_bo_is_referenced(struct radeon_cmdbuf *rcs,
struct pb_buffer *_buf,
- enum radeon_bo_usage usage)
+ unsigned usage)
{
struct amdgpu_cs *cs = amdgpu_cs(rcs);
struct amdgpu_winsys_bo *bo = (struct amdgpu_winsys_bo*)_buf;