MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-ValidationLayers / Create

Method Create

layers/profiling/profiling.cpp:219–345  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

217}
218
219void TracyVkCollector::Create(VkDevice device, VkQueue queue, uint32_t queue_family_i) {
220 if (std::find_if(queue_to_collector_map.begin(), queue_to_collector_map.end(),
221 [queue](const std::unique_ptr<TracyVkCollector>& collector) { return collector->queue == queue; }) !=
222 queue_to_collector_map.end()) {
223 return;
224 }
225
226 std::unique_ptr<TracyVkCollector> collector = std::make_unique<TracyVkCollector>();
227 collector->device = device;
228 collector->queue = queue;
229
230 VkCommandPoolCreateInfo cmd_pool_ci = vku::InitStructHelper();
231 cmd_pool_ci.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
232 cmd_pool_ci.queueFamilyIndex = queue_family_i;
233 VkResult result = TracyVkCollector::CreateCommandPool(device, &cmd_pool_ci, nullptr, &collector->cmd_pool);
234 assert(result == VK_SUCCESS);
235
236 {
237 auto zone_profiling_cmd_pool = new ZoneProfilingCommandPool;
238 zone_profiling_cmd_pool->device = device;
239 result = TracyVkCollector::CreateCommandPool(device, &cmd_pool_ci, nullptr, &zone_profiling_cmd_pool->cmd_pool);
240 assert(result == VK_SUCCESS);
241 if (auto find_it = GetQueueToGpuZoneProfilingCommandPoolMap().find(queue);
242 find_it != GetQueueToGpuZoneProfilingCommandPoolMap().end()) {
243 VVL_TracyMessageL("[tracyvk] Already created command pool for queue");
244 assert(false);
245 }
246
247 VkCommandBufferAllocateInfo cmd_buf_ai = vku::InitStructHelper();
248 cmd_buf_ai.commandPool = zone_profiling_cmd_pool->cmd_pool;
249 cmd_buf_ai.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
250 cmd_buf_ai.commandBufferCount = zone_profiling_command_buffers_count;
251
252 zone_profiling_cmd_pool->cmd_buffers.resize(cmd_buf_ai.commandBufferCount);
253 result =
254 TracyVkCollector::AllocateCommandBuffers(collector->device, &cmd_buf_ai, zone_profiling_cmd_pool->cmd_buffers.data());
255 assert(result == VK_SUCCESS);
256
257 zone_profiling_cmd_pool->fences.resize(cmd_buf_ai.commandBufferCount);
258 for (VkFence& fence : zone_profiling_cmd_pool->fences) {
259 VkFenceCreateInfo fence_ci = vku::InitStructHelper();
260 fence_ci.flags = VK_FENCE_CREATE_SIGNALED_BIT;
261 result = TracyVkCollector::CreateFence(device, &fence_ci, nullptr, &fence);
262 assert(result == VK_SUCCESS);
263 }
264
265 GetQueueToGpuZoneProfilingCommandPoolMap().insert(queue, std::move(zone_profiling_cmd_pool));
266 }
267
268 VkCommandBufferAllocateInfo cmd_buf_ai = vku::InitStructHelper();
269 cmd_buf_ai.commandPool = collector->cmd_pool;
270 cmd_buf_ai.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
271 cmd_buf_ai.commandBufferCount = 1;
272
273 result = TracyVkCollector::AllocateCommandBuffers(device, &cmd_buf_ai, &collector->cmd_buf);
274 assert(result == VK_SUCCESS);
275
276 VkFenceCreateInfo fence_ci = vku::InitStructHelper();

Callers

nothing calls this directly

Calls 15

CreateCommandPoolFunction · 0.85
AllocateCommandBuffersFunction · 0.85
CreateFenceFunction · 0.85
WaitForFencesFunction · 0.85
ResetFencesFunction · 0.85
ResetCommandBufferFunction · 0.85
EndCommandBufferFunction · 0.85
CollectMethod · 0.80
emplace_backMethod · 0.80
BeginCommandBufferFunction · 0.50
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected