aboutsummaryrefslogtreecommitdiff
path: root/src/timestamp_pool.cc
diff options
context:
space:
mode:
authorNicolas James <nj3ahxac@gmail.com>2026-03-12 19:13:55 +1100
committerNicolas James <nj3ahxac@gmail.com>2026-03-12 19:13:55 +1100
commit8fb45371b8a0d47a387f9e0c50e7700af14e3a7e (patch)
treedb18874ca2547777783bc1acf20bcb08f22ed7b1 /src/timestamp_pool.cc
parent44d88e25df14b7e191a15bfbe002a875d7c67056 (diff)
Check for bad returns on vulkan calls (lol!)
Diffstat (limited to 'src/timestamp_pool.cc')
-rw-r--r--src/timestamp_pool.cc29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/timestamp_pool.cc b/src/timestamp_pool.cc
index 5d2335a..4ca1d5a 100644
--- a/src/timestamp_pool.cc
+++ b/src/timestamp_pool.cc
@@ -21,7 +21,8 @@ TimestampPool::QueryChunk::QueryChunk(const QueueContext& queue_context) {
.queryCount = QueryChunk::CHUNK_SIZE};
auto qp = VkQueryPool{};
- vtable.CreateQueryPool(device_context.device, &qpci, nullptr, &qp);
+ THROW_NON_VKSUCCESS(
+ vtable.CreateQueryPool(device_context.device, &qpci, nullptr, &qp));
return qp;
}();
@@ -38,8 +39,8 @@ TimestampPool::QueryChunk::QueryChunk(const QueueContext& queue_context) {
.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
.commandBufferCount = static_cast<std::uint32_t>(std::size(*cbs)),
};
- vtable.AllocateCommandBuffers(device_context.device, &cbai,
- std::data(*cbs));
+ THROW_NON_VKSUCCESS(vtable.AllocateCommandBuffers(
+ device_context.device, &cbai, std::data(*cbs)));
return cbs;
}();
}
@@ -110,20 +111,26 @@ void TimestampPool::Handle::setup_command_buffers(
vtable.ResetQueryPoolEXT(device_context.device, this->query_pool,
static_cast<std::uint32_t>(this->query_index), 1);
- vtable.BeginCommandBuffer(this->command_buffer, &cbbi);
+ THROW_NON_VKSUCCESS(vtable.ResetCommandBuffer(this->command_buffer, 0));
+ THROW_NON_VKSUCCESS(vtable.BeginCommandBuffer(this->command_buffer, &cbbi));
+
vtable.CmdWriteTimestamp2KHR(
this->command_buffer, VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT,
this->query_pool, static_cast<std::uint32_t>(this->query_index));
- vtable.EndCommandBuffer(this->command_buffer);
+
+ THROW_NON_VKSUCCESS(vtable.EndCommandBuffer(this->command_buffer));
vtable.ResetQueryPoolEXT(device_context.device, tail.query_pool,
static_cast<std::uint32_t>(tail.query_index), 1);
- vtable.ResetCommandBuffer(tail.command_buffer, 0);
- vtable.BeginCommandBuffer(tail.command_buffer, &cbbi);
+
+ THROW_NON_VKSUCCESS(vtable.ResetCommandBuffer(tail.command_buffer, 0));
+ THROW_NON_VKSUCCESS(vtable.BeginCommandBuffer(tail.command_buffer, &cbbi));
+
vtable.CmdWriteTimestamp2KHR(
tail.command_buffer, VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT,
tail.query_pool, static_cast<std::uint32_t>(tail.query_index));
- vtable.EndCommandBuffer(tail.command_buffer);
+
+ THROW_NON_VKSUCCESS(vtable.EndCommandBuffer(tail.command_buffer));
}
std::optional<DeviceContext::Clock::time_point_t>
@@ -137,13 +144,15 @@ TimestampPool::Handle::get_time() {
};
auto query_result = QueryResult{};
- const auto r = vtable.GetQueryPoolResults(
+ const auto result = vtable.GetQueryPoolResults(
device_ctx.device, query_pool,
static_cast<std::uint32_t>(this->query_index), 1, sizeof(query_result),
&query_result, sizeof(query_result),
VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WITH_AVAILABILITY_BIT);
- assert(r == VK_SUCCESS || r == VK_NOT_READY);
+ if (result != VK_SUCCESS && result != VK_NOT_READY) {
+ throw result;
+ }
if (!query_result.available) {
return std::nullopt;