On Tue, Mar 07, 2017 at 08:15:45AM +0100, Iago Toral Quiroga wrote: > There are a number of work-in-progress CTS tests that check OOM handling > and raised a number of issues that this series addresses. > > Particularly noteworthy is the case of command buffer recording: since the > various vkCmd*() functions do not return errors, it is expected > that drivers survive until vkEndCommanBuffer() and report any errors > at that point. This requires that we are particularly careful with out of > memory scenarios, since we need to make sure that vkCmd*() commands do not > attempt to access memory that we have failed to allocate in a previous step. > We achieve this by tracking errors generated during command buffer recording > into the command buffer object and, generally, avoiding to execute new > vkCmd*() functions if the command buffer recording has generated an error > before. In general, I tried to only guard execution of vkCmd*() commands that > the tests showed needed to be guarded since most of the vkCmd*() commands are > safe to execute in any scenario. > > This series fixes all the issues raised with the new tests and a few more that > I found by inspection but I am sure we could do better in more places. > It is a first step though and the tests are still in development. > > Iago Toral Quiroga (16): > blorp: handle out of memory in blorp_emitn() > blorp: handle out of memory without crashing in various batch > emissions
These two go sort of half way - blorp_exec() still ignores the return values of blorp_emit_vertex_buffers() and blorp_emit_vertex_elements(). Neither does blorp_emit_depth_stencil_state() returning zero make blorp_exec() to take any further action. > anv: don't crash if we fail to grow the reloc list > anv: handle out of memory situations in anv_batch_emit_dwords() > anv: do not try to ref/unref NULL shaders > anv/blorp: return early if we failed to create the shader binary > anv/cmd_buffer: return a VkResult in cmd_buffer_setup_attachments > anv/cmd_buffer: track error scenarios during command buffer recording > anv: handle out of memory scenarios in anv_batch_emit_batch() > anv/cmd_buffer: handle out of memory during vkCmdPushConstants > anv: handle out of memory situations during queue submissions > anv: ensure that we don't ever try to adjust relocations more than > once > anv/cmd_buffer: skip vkCmdDraw*() on broken command buffers > anv/cmd_buffer: skip vkCmdDispatch() on broken command buffers > anv/cmd_buffer: skip vkCmdExecuteCommands() on broken command buffers > anv/cmd_buffer: handle out of device memory during binding table > emission > > src/intel/blorp/blorp_genX_exec.h | 25 ++++++++++----- > src/intel/vulkan/anv_batch_chain.c | 45 +++++++++++++++++++-------- > src/intel/vulkan/anv_blorp.c | 3 ++ > src/intel/vulkan/anv_cmd_buffer.c | 21 +++++++++++-- > src/intel/vulkan/anv_private.h | 19 ++++++++++++ > src/intel/vulkan/genX_cmd_buffer.c | 63 > ++++++++++++++++++++++++++++++++------ > 6 files changed, 142 insertions(+), 34 deletions(-) > > -- > 2.7.4 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
