mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 05:58:05 +02:00
venus: avoid client allocators for ring internals
There're many cases in which the ring submissions must succeed. We don't worry about real oom since things would fail earlier. For simulated oom from random intentional allocs, there isn't robust way to fail those must succeeds. e.g. the commands that don't have return codes or valid error return struct defaults. So real oom propagation is still at best effort. Cc: mesa-stable Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28914>
This commit is contained in:
parent
9926aedc96
commit
3e16d25d1a
1 changed files with 9 additions and 16 deletions
|
|
@ -368,7 +368,7 @@ vn_ring_destroy(struct vn_ring *ring)
|
|||
|
||||
list_for_each_entry_safe(struct vn_ring_submit, submit,
|
||||
&ring->free_submits, head)
|
||||
vk_free(alloc, submit);
|
||||
free(submit);
|
||||
|
||||
vn_cs_encoder_fini(&ring->upload);
|
||||
vn_renderer_shmem_unref(ring->instance->renderer, ring->shmem);
|
||||
|
|
@ -387,7 +387,6 @@ vn_ring_get_id(struct vn_ring *ring)
|
|||
static struct vn_ring_submit *
|
||||
vn_ring_get_submit(struct vn_ring *ring, uint32_t shmem_count)
|
||||
{
|
||||
const VkAllocationCallbacks *alloc = &ring->instance->base.base.alloc;
|
||||
const uint32_t min_shmem_count = 2;
|
||||
struct vn_ring_submit *submit;
|
||||
|
||||
|
|
@ -400,8 +399,7 @@ vn_ring_get_submit(struct vn_ring *ring, uint32_t shmem_count)
|
|||
} else {
|
||||
const size_t submit_size = offsetof(
|
||||
struct vn_ring_submit, shmems[MAX2(shmem_count, min_shmem_count)]);
|
||||
submit = vk_alloc(alloc, submit_size, VN_DEFAULT_ALIGN,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
|
||||
submit = malloc(submit_size);
|
||||
}
|
||||
|
||||
return submit;
|
||||
|
|
@ -455,8 +453,7 @@ vn_ring_submit_internal(struct vn_ring *ring,
|
|||
}
|
||||
|
||||
static const struct vn_cs_encoder *
|
||||
vn_ring_submission_get_cs(struct vn_ring *ring,
|
||||
struct vn_ring_submission *submit,
|
||||
vn_ring_submission_get_cs(struct vn_ring_submission *submit,
|
||||
const struct vn_cs_encoder *cs,
|
||||
bool direct)
|
||||
{
|
||||
|
|
@ -481,9 +478,7 @@ vn_ring_submission_get_cs(struct vn_ring *ring,
|
|||
desc_count, descs, NULL, 0, NULL, 0);
|
||||
void *exec_data = submit->indirect.data;
|
||||
if (exec_size > sizeof(submit->indirect.data)) {
|
||||
const VkAllocationCallbacks *alloc = &ring->instance->base.base.alloc;
|
||||
exec_data = vk_alloc(alloc, exec_size, VN_DEFAULT_ALIGN,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
|
||||
exec_data = malloc(exec_size);
|
||||
if (!exec_data) {
|
||||
STACK_ARRAY_FINISH(descs);
|
||||
return NULL;
|
||||
|
|
@ -531,13 +526,11 @@ vn_ring_submission_get_ring_submit(struct vn_ring *ring,
|
|||
}
|
||||
|
||||
static inline void
|
||||
vn_ring_submission_cleanup(struct vn_ring *ring,
|
||||
struct vn_ring_submission *submit)
|
||||
vn_ring_submission_cleanup(struct vn_ring_submission *submit)
|
||||
{
|
||||
const VkAllocationCallbacks *alloc = &ring->instance->base.base.alloc;
|
||||
if (submit->cs == &submit->indirect.cs &&
|
||||
submit->indirect.buffer.base != submit->indirect.data)
|
||||
vk_free(alloc, submit->indirect.buffer.base);
|
||||
free(submit->indirect.buffer.base);
|
||||
}
|
||||
|
||||
static VkResult
|
||||
|
|
@ -547,14 +540,14 @@ vn_ring_submission_prepare(struct vn_ring *ring,
|
|||
struct vn_renderer_shmem *extra_shmem,
|
||||
bool direct)
|
||||
{
|
||||
submit->cs = vn_ring_submission_get_cs(ring, submit, cs, direct);
|
||||
submit->cs = vn_ring_submission_get_cs(submit, cs, direct);
|
||||
if (!submit->cs)
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
|
||||
submit->submit =
|
||||
vn_ring_submission_get_ring_submit(ring, cs, extra_shmem, direct);
|
||||
if (!submit->submit) {
|
||||
vn_ring_submission_cleanup(ring, submit);
|
||||
vn_ring_submission_cleanup(submit);
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
|
||||
|
|
@ -625,7 +618,7 @@ vn_ring_submit_locked(struct vn_ring *ring,
|
|||
vn_cs_encoder_get_len(&local_enc));
|
||||
}
|
||||
|
||||
vn_ring_submission_cleanup(ring, &submit);
|
||||
vn_ring_submission_cleanup(&submit);
|
||||
|
||||
if (ring_seqno)
|
||||
*ring_seqno = seqno;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue