device->instance = physical_device->instance;
device->physical_device = physical_device;
+ simple_mtx_init(&device->trace_mtx, mtx_plain);
device->ws = physical_device->ws;
device->vk.create_sync_for_memory = radv_create_sync_for_memory;
device->ws->ctx_destroy(device->hw_ctx[i]);
}
+ simple_mtx_destroy(&device->trace_mtx);
mtx_destroy(&device->overallocation_mutex);
vk_device_finish(&device->vk);
}
mtx_destroy(&device->overallocation_mutex);
+ simple_mtx_destroy(&device->trace_mtx);
radv_device_finish_meta(device);
if (result != VK_SUCCESS)
goto fail;
} else {
+ if (queue->device->trace_bo)
+ simple_mtx_lock(&queue->device->trace_mtx);
+
struct radeon_cmdbuf **cs_array =
malloc(sizeof(struct radeon_cmdbuf *) * (submission->command_buffer_count));
can_patch);
if (result != VK_SUCCESS) {
free(cs_array);
+ if (queue->device->trace_bo)
+ simple_mtx_unlock(&queue->device->trace_mtx);
goto fail;
}
}
free(cs_array);
+ if (queue->device->trace_bo)
+ simple_mtx_unlock(&queue->device->trace_mtx);
}
fail:
struct radv_shader_prolog *simple_vs_prologs[MAX_VERTEX_ATTRIBS];
struct radv_shader_prolog *instance_rate_vs_prologs[816];
+
+ simple_mtx_t trace_mtx;
};
struct radv_device_memory {