41 std::shared_ptr<Core::VKImage>
atlas[2];
91 std::shared_ptr<Portal::Graphics::GpuBufferHandle>
export_view[2];
92 std::shared_ptr<Portal::Graphics::GpuBufferHandle>
last_export;
218 return fence != Portal::Graphics::INVALID_FENCE;
289 [[nodiscard]]
static std::vector<Kinesis::Vision::TrackResult> read_exported_tracks(
299 [[nodiscard]]
static std::vector<Kinesis::Vision::Keypoint> read_exported_keypoints(
309 [[nodiscard]]
static std::vector<Kinesis::Vision::Contour> read_exported_contours(
329 const std::shared_ptr<Core::VKImage>&
image,
330 uint32_t w, uint32_t
h);
350 const std::shared_ptr<Core::VKImage>&
image,
351 uint32_t w, uint32_t
h);
374 [[nodiscard]] std::shared_ptr<Core::VKImage> select_label(
376 const std::shared_ptr<Core::VKImage>& source,
377 uint32_t target_label,
378 uint32_t w, uint32_t
h);
385 [[nodiscard]] std::shared_ptr<Core::VKImage> select_label(
386 const std::shared_ptr<Core::VKImage>& source,
387 uint32_t target_label,
388 uint32_t w, uint32_t
h);
405 return m_contexts && m_contexts->suspended.is_active();
430 const std::vector<float>& gaussian_kernel_2d(uint32_t
radius,
float sigma);
441 Kinesis::Vision::GpuVisionPass::Completed op_threshold_otsu(
452 Kinesis::Vision::GpuVisionPass::Completed op_confine(
464 Kinesis::Vision::GpuVisionPass::Completed op_open_close(
478 Kinesis::Vision::GpuVisionPass::Completed op_canny(
491 Kinesis::Vision::GpuVisionPass::Completed op_harris_response(
502 void op_extract_peaks(
513 void op_connected_components(
525 bool op_find_contours(
575 static void build_flow_pyramid(
VisionGpuContexts& contexts, uint32_t requested_levels, uint32_t src_channel);
Placement of an image pyramid inside a single atlas.
GpuExecutionContext specialisation for image compute shaders.
VisionGpuExecutor()=default
VisionGpuExecutor & operator=(const VisionGpuExecutor &)=delete
VisionGpuExecutor(const VisionGpuExecutor &)=delete
VisionGpuExecutor & operator=(VisionGpuExecutor &&)=delete
~VisionGpuExecutor()=default
VisionGpuExecutor(VisionGpuExecutor &&)=delete
std::unique_ptr< VisionGpuContexts > m_contexts
bool is_suspended() const
True when a deferred step has work outstanding and the next run will poll rather than start a fresh s...
Stateful GPU dispatch engine for VisionSequence execution.
VisionOp
Named operations available in a VisionSequence.
std::variant< std::monostate, ThresholdParams, ThresholdAdaptiveParams, OtsuParams, NormalizeRangeParams, GaussianBlurParams, FilterSeparableParams, CannyParams, MorphParams, HarrisParams, ExtractPeaksParams, TrackKeypointsParams, ConnectedComponentsParams, FindContoursParams, OpticalFlowDenseParams, ConfineParams > VisionParams
Parameter variant covering all ops that carry parameters.
constexpr FenceID INVALID_FENCE
Connected-component label export and color output.
Contour filtering, trace limits, and output selection.
Harris response parameters.
Placement of every pyramid level in a single atlas.
Result of executing a VisionSequence on one frame.
Ordered VisionSteps and the backend chosen to execute them.
One step in a VisionSequence: an op and its parameters.
Plain-data description of the compute shader to dispatch.
std::shared_ptr< Core::VKImage > last_flow
Most recent flow image and track list produced from a frame that differed from the one before it.
std::shared_ptr< Core::VKImage > flow_out[2]
Dense flow images, allocated on first use of OpticalFlowDense.
Kinesis::Vision::PyramidLayout dense_layout
uint32_t last_track_count
Track count of the last distinct frame, independent of whether a host list was produced for it,...
std::shared_ptr< Core::VKImage > flow_lvl
std::shared_ptr< Portal::Graphics::GpuBufferHandle > export_view[2]
Bookkeeping for the device resident track export.
std::shared_ptr< Core::VKImage > dense_a
std::shared_ptr< Core::VKImage > dense_tensor
Kinesis::Vision::PyramidLayout layout
std::shared_ptr< Core::VKImage > flow_vis
Portal::Graphics::FenceID build_fence
std::shared_ptr< Portal::Graphics::GpuBufferHandle > last_export
std::vector< Kinesis::Vision::TrackResult > last_tracks
std::shared_ptr< Core::VKImage > dense_b
std::shared_ptr< Core::VKImage > atlas[2]
Cross-run state of the flow context.
std::function< void(VisionGpuContexts &)> finalize
Work to run once the fence has signaled, before the walk resumes.
Outstanding work at a deferred step, and the point to resume.
TextureExecutionContext component_contours
Shared image and buffer pipeline for ConnectedComponents and FindContours.
GpuComputeConfig bound_config
Shader currently bound on pixel, and the image staged into it.
TextureExecutionContext ingest
Sampled-in, rgba32f-storage-out.
TextureExecutionContext labels
Image + aux SSBO.
Kinesis::Vision::GpuVisionPass pass
Walk state for the current run: sequence position, geometry, working image, and the result under cons...
std::shared_ptr< Core::VKImage > source
Input image the current walk started from.
std::shared_ptr< Core::VKImage > bound_staged
TextureExecutionContext pixel
Image pipeline.
std::vector< Portal::Graphics::ImageCacheSet > snapshot_images
One image cache per Snapshot step, indexed by the step's order among the snapshots of a run.
TextureExecutionContext flow
Pyramidal optical flow.
TextureExecutionContext structured
Buffer-only readback.
Fixed set of TextureExecutionContexts covering every GPU-implemented VisionOp shape.