47 uint32_t pool_index = queries_issued_ / query_chunk_len_;
48 bool is_new_pool = (queries_issued_ % query_chunk_len_) == 0;
50 if (pool_index == vk_query_pools_.
size()) {
54 VkQueryPoolCreateInfo create_info = {};
55 create_info.sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO;
56 create_info.queryType = vk_query_type_;
57 create_info.queryCount = query_chunk_len_;
59 VkQueryPool vk_query_pool = VK_NULL_HANDLE;
60 vkCreateQueryPool(device.
vk_handle(), &create_info, vk_allocation_callbacks, &vk_query_pool);
61 vk_query_pools_.
append(vk_query_pool);
67 VkQueryPool vk_query_pool = vk_query_pools_[pool_index];
73 context.render_graph.add_node(reset_query_pool);
97 context.rendering_end();
98 context.descriptor_set_get().upload_descriptor_sets();
99 context.render_graph.submit();
101 int queries_left = queries_issued_;
105 while (queries_left) {
106 VkQueryPool vk_query_pool = vk_query_pools_[pool_index];
107 uint32_t *r_values_chunk = &r_values[pool_index * query_chunk_len_];
108 uint32_t values_chunk_size =
min_ii(queries_left, query_chunk_len_);
109 vkGetQueryPoolResults(device.
vk_handle(),
113 values_chunk_size *
sizeof(
uint32_t),
116 VK_QUERY_RESULT_WAIT_BIT);
118 queries_left =
max_ii(queries_left - query_chunk_len_, 0);