[Mesa-dev] [PATCH v2 22/24] anv: handle errors while allocating new binding table blocks
Pohjolainen, Topi
topi.pohjolainen at gmail.com
Wed Mar 15 08:39:21 UTC 2017
On Fri, Mar 10, 2017 at 01:38:35PM +0100, Iago Toral Quiroga wrote:
> Also, we had a couple of instances in flush_descriptor_sets() were
> we were returning a VkResult directly upon error, but the return
> value of this function is not a VkResult but a uint32_t dirty mask,
> so simply return 0 in these cases which reduces the amount of
> work the driver will do after the error has been raised.
> ---
> src/intel/vulkan/anv_batch_chain.c | 8 ++++++--
> src/intel/vulkan/genX_cmd_buffer.c | 11 +++++++----
> 2 files changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c
> index 0dc781c..d01d9d7 100644
> --- a/src/intel/vulkan/anv_batch_chain.c
> +++ b/src/intel/vulkan/anv_batch_chain.c
> @@ -661,8 +661,10 @@ anv_cmd_buffer_new_binding_table_block(struct anv_cmd_buffer *cmd_buffer)
> &cmd_buffer->device->surface_state_block_pool;
>
> int32_t *offset = u_vector_add(&cmd_buffer->bt_blocks);
> - if (offset == NULL)
> + if (offset == NULL) {
> + anv_batch_set_error(&cmd_buffer->batch, VK_ERROR_OUT_OF_HOST_MEMORY);
> return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
> + }
>
> *offset = anv_block_pool_alloc_back(block_pool);
> cmd_buffer->bt_next = 0;
> @@ -715,7 +717,9 @@ anv_cmd_buffer_init_batch_bo_chain(struct anv_cmd_buffer *cmd_buffer)
> goto fail_bt_blocks;
> cmd_buffer->last_ss_pool_center = 0;
>
> - anv_cmd_buffer_new_binding_table_block(cmd_buffer);
> + result = anv_cmd_buffer_new_binding_table_block(cmd_buffer);
> + if (result != VK_SUCCESS)
> + goto fail_bt_blocks;
>
> return VK_SUCCESS;
>
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
> index 510355e..3069297 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -1348,7 +1348,8 @@ flush_descriptor_sets(struct anv_cmd_buffer *cmd_buffer)
> assert(result == VK_ERROR_OUT_OF_DEVICE_MEMORY);
>
> result = anv_cmd_buffer_new_binding_table_block(cmd_buffer);
> - assert(result == VK_SUCCESS);
> + if (result != VK_SUCCESS)
> + return 0;
>
> /* Re-emit state base addresses so we get the new surface state base
> * address before we start emitting binding tables etc.
> @@ -1360,11 +1361,11 @@ flush_descriptor_sets(struct anv_cmd_buffer *cmd_buffer)
> anv_foreach_stage(s, dirty) {
> result = emit_samplers(cmd_buffer, s, &cmd_buffer->state.samplers[s]);
> if (result != VK_SUCCESS)
> - return result;
> + return 0;
> result = emit_binding_table(cmd_buffer, s,
> &cmd_buffer->state.binding_tables[s]);
> if (result != VK_SUCCESS)
> - return result;
> + return 0;
> }
> }
>
> @@ -1819,8 +1820,10 @@ flush_compute_descriptor_set(struct anv_cmd_buffer *cmd_buffer)
> result = emit_binding_table(cmd_buffer, MESA_SHADER_COMPUTE, &surfaces);
> if (result != VK_SUCCESS) {
> assert(result == VK_ERROR_OUT_OF_DEVICE_MEMORY);
> +
Intentional or just left over?
> result = anv_cmd_buffer_new_binding_table_block(cmd_buffer);
> - assert(result == VK_SUCCESS);
> + if (result != VK_SUCCESS)
> + return result;
>
> /* Re-emit state base addresses so we get the new surface state base
> * address before we start emitting binding tables etc.
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list