venus: use instance allocator for indirect cs storage alloc

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26179>
This commit is contained in:
Yiwei Zhang 2023-11-08 16:21:07 -08:00 committed by Marge Bot
parent ec131c6e55
commit 2cdab2c25d

View file

@ -283,7 +283,8 @@ struct vn_instance_submission {
};
static const struct vn_cs_encoder *
vn_instance_submission_get_cs(struct vn_instance_submission *submit,
vn_instance_submission_get_cs(struct vn_instance *instance,
struct vn_instance_submission *submit,
const struct vn_cs_encoder *cs,
bool direct)
{
@ -308,7 +309,9 @@ vn_instance_submission_get_cs(struct vn_instance_submission *submit,
desc_count, descs, NULL, 0, NULL, 0);
void *exec_data = submit->indirect.data;
if (exec_size > sizeof(submit->indirect.data)) {
exec_data = malloc(exec_size);
const VkAllocationCallbacks *alloc = &instance->base.base.alloc;
exec_data = vk_alloc(alloc, exec_size, VN_DEFAULT_ALIGN,
VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);
if (!exec_data) {
STACK_ARRAY_FINISH(descs);
return NULL;
@ -355,29 +358,31 @@ vn_instance_submission_get_ring_submit(struct vn_ring *ring,
return submit;
}
static void
vn_instance_submission_cleanup(struct vn_instance_submission *submit)
static inline void
vn_instance_submission_cleanup(struct vn_instance *instance,
struct vn_instance_submission *submit)
{
const VkAllocationCallbacks *alloc = &instance->base.base.alloc;
if (submit->cs == &submit->indirect.cs &&
submit->indirect.buffer.base != submit->indirect.data)
free(submit->indirect.buffer.base);
vk_free(alloc, submit->indirect.buffer.base);
}
static VkResult
vn_instance_submission_prepare(struct vn_instance_submission *submit,
vn_instance_submission_prepare(struct vn_instance *instance,
struct vn_instance_submission *submit,
const struct vn_cs_encoder *cs,
struct vn_ring *ring,
struct vn_renderer_shmem *extra_shmem,
bool direct)
{
submit->cs = vn_instance_submission_get_cs(submit, cs, direct);
submit->cs = vn_instance_submission_get_cs(instance, submit, cs, direct);
if (!submit->cs)
return VK_ERROR_OUT_OF_HOST_MEMORY;
submit->submit =
vn_instance_submission_get_ring_submit(ring, cs, extra_shmem, direct);
submit->submit = vn_instance_submission_get_ring_submit(
&instance->ring.ring, cs, extra_shmem, direct);
if (!submit->submit) {
vn_instance_submission_cleanup(submit);
vn_instance_submission_cleanup(instance, submit);
return VK_ERROR_OUT_OF_HOST_MEMORY;
}
@ -431,8 +436,8 @@ vn_instance_ring_submit_locked(struct vn_instance *instance,
}
struct vn_instance_submission submit;
VkResult result =
vn_instance_submission_prepare(&submit, cs, ring, extra_shmem, direct);
VkResult result = vn_instance_submission_prepare(instance, &submit, cs,
extra_shmem, direct);
if (result != VK_SUCCESS)
return result;
@ -447,7 +452,7 @@ vn_instance_ring_submit_locked(struct vn_instance *instance,
vn_cs_encoder_get_len(&local_enc));
}
vn_instance_submission_cleanup(&submit);
vn_instance_submission_cleanup(instance, &submit);
if (ring_seqno)
*ring_seqno = seqno;