anv/cmd_buffer: fix host memory leak
authorCraig Stout <cstout@google.com>
Wed, 29 Mar 2017 19:14:30 +0000 (12:14 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 29 Mar 2017 21:32:32 +0000 (14:32 -0700)
push_constants must be free'd.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100452
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Cc: "17.0 13.0" <mesa-stable@lists.freedesktop.org>
src/intel/vulkan/anv_cmd_buffer.c

index 909bee2add4169fe8cf05d96b1eda51987ae4b1b..c65eba287d660834f1c2341ff8fc30f070accd86 100644 (file)
@@ -120,7 +120,12 @@ anv_cmd_state_reset(struct anv_cmd_buffer *cmd_buffer)
    cmd_buffer->batch.status = VK_SUCCESS;
 
    memset(&state->descriptors, 0, sizeof(state->descriptors));
-   memset(&state->push_constants, 0, sizeof(state->push_constants));
+   for (uint32_t i = 0; i < MESA_SHADER_STAGES; i++) {
+      if (state->push_constants[i] != NULL) {
+         vk_free(&cmd_buffer->pool->alloc, state->push_constants[i]);
+         state->push_constants[i] = NULL;
+      }
+   }
    memset(state->binding_tables, 0, sizeof(state->binding_tables));
    memset(state->samplers, 0, sizeof(state->samplers));
 
@@ -193,6 +198,9 @@ static VkResult anv_create_cmd_buffer(
 
    cmd_buffer->batch.status = VK_SUCCESS;
 
+   for (uint32_t i = 0; i < MESA_SHADER_STAGES; i++) {
+      cmd_buffer->state.push_constants[i] = NULL;
+   }
    cmd_buffer->_loader_data.loaderMagic = ICD_LOADER_MAGIC;
    cmd_buffer->device = device;
    cmd_buffer->pool = pool;