anv/sparse: don't issue a single bind operation per vm_bind ioctl

The xe.ko driver finally fixed bug 746, which means we can finally
pass multiple bind operations in a single ioctl. There's a dEQP test
that issues 960 bind operations in a single call, so our gains here
have potential, although most real-world apps are not even remotely
close to this.

Link: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/746
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27926>
This commit is contained in:
Paulo Zanoni 2024-02-28 13:00:26 -08:00 committed by Marge Bot
parent dd6301935e
commit aa07d8a04c

View file

@ -624,24 +624,9 @@ anv_sparse_bind_vm_bind(struct anv_device *device,
if (result != VK_SUCCESS)
return vk_queue_set_lost(&queue->vk, "vk_sync_wait failed");
/* FIXME: here we were supposed to issue a single vm_bind ioctl by calling
* vm_bind(device, num_binds, binds), but for an unknown reason some
* shader-related tests fail when we do that, so work around it for now.
* See: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/746
*/
for (int b = 0; b < submit->binds_len; b++) {
struct anv_sparse_submission s = {
.queue = submit->queue,
.binds = &submit->binds[b],
.binds_len = 1,
.binds_capacity = 1,
.wait_count = 0,
.signal_count = 0,
};
int rc = device->kmd_backend->vm_bind(device, &s);
if (rc)
return vk_error(device, VK_ERROR_OUT_OF_DEVICE_MEMORY);
}
int rc = device->kmd_backend->vm_bind(device, submit);
if (rc)
return vk_error(device, VK_ERROR_OUT_OF_DEVICE_MEMORY);
for (uint32_t i = 0; i < submit->signal_count; i++) {
struct vk_sync_signal *s = &submit->signals[i];