[Mesa-dev] [PATCH v2 15/24] anv/cmd_buffer: handle out of memory during vkCmdPushConstants

Iago Toral Quiroga itoral at igalia.com
Fri Mar 10 12:38:28 UTC 2017


Fixes:
dEQP-VK.api.out_of_host_memory.cmd_push_constants
---
 src/intel/vulkan/anv_cmd_buffer.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c
index 003a28c..3c9efac 100644
--- a/src/intel/vulkan/anv_cmd_buffer.c
+++ b/src/intel/vulkan/anv_cmd_buffer.c
@@ -160,13 +160,17 @@ anv_cmd_buffer_ensure_push_constants_size(struct anv_cmd_buffer *cmd_buffer,
    if (*ptr == NULL) {
       *ptr = vk_alloc(&cmd_buffer->pool->alloc, size, 8,
                        VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
-      if (*ptr == NULL)
+      if (*ptr == NULL) {
+         anv_batch_set_error(&cmd_buffer->batch, VK_ERROR_OUT_OF_HOST_MEMORY);
          return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+      }
    } else if ((*ptr)->size < size) {
       *ptr = vk_realloc(&cmd_buffer->pool->alloc, *ptr, size, 8,
                          VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
-      if (*ptr == NULL)
+      if (*ptr == NULL) {
+         anv_batch_set_error(&cmd_buffer->batch, VK_ERROR_OUT_OF_HOST_MEMORY);
          return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+      }
    }
    (*ptr)->size = size;
 
@@ -730,7 +734,11 @@ void anv_CmdPushConstants(
    ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, commandBuffer);
 
    anv_foreach_stage(stage, stageFlags) {
-      anv_cmd_buffer_ensure_push_constant_field(cmd_buffer, stage, client_data);
+      VkResult result =
+         anv_cmd_buffer_ensure_push_constant_field(cmd_buffer,
+                                                   stage, client_data);
+      if (result != VK_SUCCESS)
+         return;
 
       memcpy(cmd_buffer->state.push_constants[stage]->client_data + offset,
              pValues, size);
-- 
2.7.4



More information about the mesa-dev mailing list