1174{
1177 return { .label = label, .duration_ns = 0, .valid = false };
1178 }
1179
1180 auto query_it = it->second.timestamp_queries.find(label);
1181 if (query_it == it->second.timestamp_queries.end()) {
1182 return { .label = label, .duration_ns = 0, .valid = false };
1183 }
1184
1185 if (!it->second.timestamp_pool) {
1186 return { .label = label, .duration_ns = 0, .valid = false };
1187 }
1188
1189 uint32_t query_index = query_it->second;
1190 uint64_t timestamps[2];
1191
1192 auto result =
get_device().getQueryPoolResults(
1193 it->second.timestamp_pool,
1194 query_index,
1195 2,
1196 sizeof(timestamps),
1197 timestamps,
1198 sizeof(uint64_t),
1199 vk::QueryResultFlagBits::e64 | vk::QueryResultFlagBits::eWait);
1200
1201 if (result != vk::Result::eSuccess) {
1202 return { .label = label, .duration_ns = 0, .valid = false };
1203 }
1204
1205 auto props =
m_backend->get_context().get_physical_device().getProperties();
1206 float timestamp_period = props.limits.timestampPeriod;
1207
1208 auto duration_ns = static_cast<uint64_t>((timestamps[1] - timestamps[0]) * timestamp_period);
1209
1210 return { .label = label, .duration_ns = duration_ns, .valid = true };
1211}
vk::Device get_device() const
Get logical device handle.
std::unordered_map< CommandBufferID, CommandBufferState > m_command_buffers
std::shared_ptr< Core::VulkanBackend > m_backend