45 uint32_t pool_index = queries_issued_ / query_chunk_len_;
46 bool is_new_pool = (queries_issued_ % query_chunk_len_) == 0;
48 if (pool_index == vk_query_pools_.size()) {
51 VkQueryPoolCreateInfo create_info = {};
52 create_info.sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO;
53 create_info.queryType = vk_query_type_;
54 create_info.queryCount = query_chunk_len_;
56 VkQueryPool vk_query_pool = VK_NULL_HANDLE;
57 vkCreateQueryPool(device.
vk_handle(), &create_info,
nullptr, &vk_query_pool);
58 vk_query_pools_.append(vk_query_pool);
60 BLI_assert(pool_index < vk_query_pools_.size());
64 VkQueryPool vk_query_pool = vk_query_pools_[pool_index];
70 context.render_graph().add_node(reset_query_pool);
94 context.rendering_end();
99 int queries_left = queries_issued_;
103 while (queries_left) {
104 VkQueryPool vk_query_pool = vk_query_pools_[pool_index];
105 uint32_t *r_values_chunk = &r_values[pool_index * query_chunk_len_];
106 uint32_t values_chunk_size =
min_ii(queries_left, query_chunk_len_);
107 vkGetQueryPoolResults(device.
vk_handle(),
111 values_chunk_size *
sizeof(uint32_t),
114 VK_QUERY_RESULT_WAIT_BIT);
116 queries_left =
max_ii(queries_left - query_chunk_len_, 0);