14class Sequence :
public std::enable_shared_from_this<Sequence>
27 Sequence(std::shared_ptr<vk::PhysicalDevice> physicalDevice,
28 std::shared_ptr<vk::Device> device,
29 std::shared_ptr<vk::Queue> computeQueue,
31 uint32_t totalTimestamps = 0) noexcept;
71 template<typename T, typename... TArgs>
73 std::vector<std::shared_ptr<
Memory>> memObjects,
76 std::shared_ptr<T> op{
new T(memObjects,
77 std::forward<TArgs>(params)...) };
92 template<
typename T,
typename... TArgs>
93 std::shared_ptr<Sequence>
record(std::shared_ptr<Algorithm> algorithm,
96 std::shared_ptr<T> op{
new T(algorithm,
97 std::forward<TArgs>(params)...) };
107 std::shared_ptr<Sequence>
eval();
116 std::shared_ptr<Sequence>
eval(std::shared_ptr<OpBase> op);
127 template<
typename T,
typename... TArgs>
128 std::shared_ptr<Sequence>
eval(
129 std::vector<std::shared_ptr<Memory>> memObjects,
132 std::shared_ptr<T> op{
new T(memObjects,
133 std::forward<TArgs>(params)...) };
134 return this->
eval(op);
146 template<
typename T,
typename... TArgs>
147 std::shared_ptr<Sequence>
eval(std::shared_ptr<Algorithm> algorithm,
150 std::shared_ptr<T> op{
new T(algorithm,
151 std::forward<TArgs>(params)...) };
152 return this->
eval(op);
172 std::shared_ptr<Sequence>
evalAsync(std::shared_ptr<OpBase> op);
182 template<
typename T,
typename... TArgs>
184 std::vector<std::shared_ptr<Memory>> memObjects,
187 std::shared_ptr<T> op{
new T(memObjects,
188 std::forward<TArgs>(params)...) };
201 template<
typename T,
typename... TArgs>
202 std::shared_ptr<Sequence>
evalAsync(std::shared_ptr<Algorithm> algorithm,
205 std::shared_ptr<T> op{
new T(algorithm,
206 std::forward<TArgs>(params)...) };
217 std::shared_ptr<Sequence>
evalAwait(uint64_t waitFor = UINT64_MAX);
281 std::shared_ptr<vk::PhysicalDevice> mPhysicalDevice =
nullptr;
282 std::shared_ptr<vk::Device> mDevice =
nullptr;
283 std::shared_ptr<vk::Queue> mComputeQueue =
nullptr;
284 uint32_t mQueueIndex = -1;
287 std::shared_ptr<vk::CommandPool> mCommandPool =
nullptr;
288 bool mFreeCommandPool =
false;
289 std::shared_ptr<vk::CommandBuffer> mCommandBuffer =
nullptr;
290 bool mFreeCommandBuffer =
false;
294 std::vector<std::shared_ptr<OpBase>> mOperations{};
295 std::shared_ptr<vk::QueryPool> timestampQueryPool =
nullptr;
298 bool mRecording =
false;
299 bool mIsRunning =
false;
302 void createCommandPool();
303 void createCommandBuffer();
304 void createTimestampQueryPool(uint32_t totalTimestamps);
Sequence(std::shared_ptr< vk::PhysicalDevice > physicalDevice, std::shared_ptr< vk::Device > device, std::shared_ptr< vk::Queue > computeQueue, uint32_t queueIndex, uint32_t totalTimestamps=0) noexcept