v3dv: use vk_alloc instead of malloc
authorIago Toral Quiroga <itoral@igalia.com>
Fri, 4 Nov 2022 08:17:08 +0000 (09:17 +0100)
committerEric Engestrom <eric@engestrom.ch>
Wed, 9 Nov 2022 21:22:05 +0000 (21:22 +0000)
Fixes: e6884df088 ('v3dv: fix event synchronization')
Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19518>
(cherry picked from commit 22789d34be0fb6d81012e2e4d53b738384eb98db)

.pick_status.json
src/broadcom/vulkan/v3dv_event.c

index 6c1acaa..644c4e2 100644 (file)
         "description": "v3dv: use vk_alloc instead of malloc",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "e6884df088a1e172cd87956fe9afdac63069eb2c"
     },
index 628f757..336489e 100644 (file)
@@ -594,9 +594,13 @@ v3dv_CmdSetEvent2(VkCommandBuffer commandBuffer,
    /* We need to add the compute stage to the dstStageMask of all dependencies,
     * so let's go ahead and patch the dependency info we receive.
     */
+   struct v3dv_device *device = cmd_buffer->device;
+
    uint32_t memory_barrier_count = pDependencyInfo->memoryBarrierCount;
    VkMemoryBarrier2 *memory_barriers = memory_barrier_count ?
-         malloc(memory_barrier_count * sizeof(memory_barriers[0])): NULL;
+      vk_alloc2(&device->vk.alloc, NULL,
+                memory_barrier_count * sizeof(memory_barriers[0]), 8,
+                VK_SYSTEM_ALLOCATION_SCOPE_COMMAND) : NULL;
    for (int i = 0; i < memory_barrier_count; i++) {
       memory_barriers[i] = pDependencyInfo->pMemoryBarriers[i];
       memory_barriers[i].dstStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
@@ -604,7 +608,9 @@ v3dv_CmdSetEvent2(VkCommandBuffer commandBuffer,
 
    uint32_t buffer_barrier_count = pDependencyInfo->bufferMemoryBarrierCount;
    VkBufferMemoryBarrier2 *buffer_barriers = buffer_barrier_count ?
-         malloc(buffer_barrier_count * sizeof(buffer_barriers[0])): NULL;
+      vk_alloc2(&device->vk.alloc, NULL,
+                buffer_barrier_count * sizeof(buffer_barriers[0]), 8,
+                VK_SYSTEM_ALLOCATION_SCOPE_COMMAND) : NULL;
    for (int i = 0; i < buffer_barrier_count; i++) {
       buffer_barriers[i] = pDependencyInfo->pBufferMemoryBarriers[i];
       buffer_barriers[i].dstStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
@@ -612,7 +618,9 @@ v3dv_CmdSetEvent2(VkCommandBuffer commandBuffer,
 
    uint32_t image_barrier_count = pDependencyInfo->imageMemoryBarrierCount;
    VkImageMemoryBarrier2 *image_barriers = image_barrier_count ?
-         malloc(image_barrier_count * sizeof(image_barriers[0])): NULL;
+      vk_alloc2(&device->vk.alloc, NULL,
+                image_barrier_count * sizeof(image_barriers[0]), 8,
+                VK_SYSTEM_ALLOCATION_SCOPE_COMMAND) : NULL;
    for (int i = 0; i < image_barrier_count; i++) {
       image_barriers[i] = pDependencyInfo->pImageMemoryBarriers[i];
       image_barriers[i].dstStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
@@ -634,11 +642,11 @@ v3dv_CmdSetEvent2(VkCommandBuffer commandBuffer,
    cmd_buffer_emit_set_event(cmd_buffer, event, 1);
 
    if (memory_barriers)
-      free(memory_barriers);
+      vk_free2(&device->vk.alloc, NULL, memory_barriers);
    if (buffer_barriers)
-      free(buffer_barriers);
+      vk_free2(&device->vk.alloc, NULL, buffer_barriers);
    if (image_barriers)
-      free(image_barriers);
+      vk_free2(&device->vk.alloc, NULL, image_barriers);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -685,12 +693,15 @@ v3dv_CmdWaitEvents2(VkCommandBuffer commandBuffer,
    /* We need to add the compute stage to the srcStageMask of all dependencies,
     * so let's go ahead and patch the dependency info we receive.
     */
+   struct v3dv_device *device = cmd_buffer->device;
    for (int e = 0; e < eventCount; e++) {
       const VkDependencyInfo *info = &pDependencyInfo[e];
 
       uint32_t memory_barrier_count = info->memoryBarrierCount;
       VkMemoryBarrier2 *memory_barriers = memory_barrier_count ?
-            malloc(memory_barrier_count * sizeof(memory_barriers[0])): NULL;
+         vk_alloc2(&device->vk.alloc, NULL,
+                   memory_barrier_count * sizeof(memory_barriers[0]), 8,
+                   VK_SYSTEM_ALLOCATION_SCOPE_COMMAND) : NULL;
       for (int i = 0; i < memory_barrier_count; i++) {
          memory_barriers[i] = info->pMemoryBarriers[i];
          memory_barriers[i].srcStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
@@ -698,7 +709,9 @@ v3dv_CmdWaitEvents2(VkCommandBuffer commandBuffer,
 
       uint32_t buffer_barrier_count = info->bufferMemoryBarrierCount;
       VkBufferMemoryBarrier2 *buffer_barriers = buffer_barrier_count ?
-            malloc(buffer_barrier_count * sizeof(buffer_barriers[0])): NULL;
+         vk_alloc2(&device->vk.alloc, NULL,
+                   buffer_barrier_count * sizeof(buffer_barriers[0]), 8,
+                   VK_SYSTEM_ALLOCATION_SCOPE_COMMAND) : NULL;
       for (int i = 0; i < buffer_barrier_count; i++) {
          buffer_barriers[i] = info->pBufferMemoryBarriers[i];
          buffer_barriers[i].srcStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
@@ -706,7 +719,9 @@ v3dv_CmdWaitEvents2(VkCommandBuffer commandBuffer,
 
       uint32_t image_barrier_count = info->imageMemoryBarrierCount;
       VkImageMemoryBarrier2 *image_barriers = image_barrier_count ?
-            malloc(image_barrier_count * sizeof(image_barriers[0])): NULL;
+         vk_alloc2(&device->vk.alloc, NULL,
+                   image_barrier_count * sizeof(image_barriers[0]), 8,
+                   VK_SYSTEM_ALLOCATION_SCOPE_COMMAND) : NULL;
       for (int i = 0; i < image_barrier_count; i++) {
          image_barriers[i] = info->pImageMemoryBarriers[i];
          image_barriers[i].srcStageMask |= VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT;
@@ -726,10 +741,10 @@ v3dv_CmdWaitEvents2(VkCommandBuffer commandBuffer,
       v3dv_cmd_buffer_emit_pipeline_barrier(cmd_buffer, &new_info);
 
       if (memory_barriers)
-         free(memory_barriers);
+         vk_free2(&device->vk.alloc, NULL, memory_barriers);
       if (buffer_barriers)
-         free(buffer_barriers);
+         vk_free2(&device->vk.alloc, NULL, buffer_barriers);
       if (image_barriers)
-         free(image_barriers);
+         vk_free2(&device->vk.alloc, NULL, image_barriers);
    }
 }