Skip to content

nvk: Split large queue submissions into multiple pushbuf ioctls

Benjamin Lee requested to merge benjaminl/mesa:nvk/fix-deqp-many-draws into nvk/main

This is a step towards fixing the dEQP-VK.api.command_buffers.record_many_draws_* failures. These tests perform queue submissions that need more than 512 pushes, and so the submissions will need to be split between multiple ioctls. After this change, they still fail because they run into the BO limit. Fully fixing them would require one of:

  • Miscellaneous changes to reduce BO usage for the tests under the limit (I've got a change that works for this, but only in release builds. Debug builds have less efficient instruction encoding and end up exceeding the BO limit from push BOs alone)
  • Fine-grained BO usage lifetime tracking in the command buffers, so that BOs can be split in the same way that pushes are here
  • The new uapi, which avoids the entire issue because it shouldn't need the full BO list to be passed with every ioctl

New uapi definitely seems like the best option here :)


The test failures look like:

Test case 'dEQP-VK.api.command_buffers.record_many_draws_primary_2'..
deqp-vk: ../src/nouveau/vulkan/nvk_queue_drm_nouveau.c:55: push_add_bo: Assertion `pb->req.nr_buffers < NOUVEAU_GEM_MAX_BUFFERS' failed.
Aborted (core dumped)
Edited by Benjamin Lee

Merge request reports