MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ sample_full_frame()

Kinesis::Vision::FieldSample MayaFlux::Yantra::VisionAnalyzer::sample_full_frame ( const std::shared_ptr< Core::VKImage > &  image,
uint32_t  w,
uint32_t  h 
)
private

Dispatch region_sample.comp over the whole image (no region concept for MeasureAppearance).

Definition at line 290 of file VisionAnalyzer.cpp.

292{
294 m_gradient_sample_ctx = std::make_shared<TextureExecutionContext>(
295 GpuComputeConfig {
296 .shader_path = "region_sample.comp.spv",
297 .workgroup_size = { 256, 1, 1 },
298 .push_constant_size = sizeof(RegionSamplePC) },
299 Portal::Graphics::ImageFormat::RGBA8,
301 1,
302 std::vector<GpuBufferBinding> {
303 { .set = 0, .binding = 2, .direction = GpuBufferBinding::Direction::OUTPUT, .element_type = GpuBufferBinding::ElementType::FLOAT32 } });
304 }
305
306 auto& foundry = Portal::Graphics::get_shader_foundry();
307
308 m_gradient_sample_ctx->stage_image(image);
309 m_gradient_sample_ctx->set_push_constants(RegionSamplePC { .px = 0, .py = 0, .pw = w, .ph = h });
310 m_gradient_sample_ctx->set_output_size(2, 3 * sizeof(glm::vec4));
311 m_gradient_sample_ctx->set_output_dimensions(1, 1);
312
313 const auto fence = m_gradient_sample_ctx->dispatch_async({});
314 m_gradient_sample_ctx->clear_output_dimensions();
315 foundry.wait_for_fence(fence);
316 foundry.release_fence(fence);
317
318 const auto gpu_result = m_gradient_sample_ctx->collect_result();
319
320 Kinesis::Vision::FieldSample out;
321 if (auto it = gpu_result.aux.find(2); it != gpu_result.aux.end() && it->second.size() >= 3 * sizeof(glm::vec4)) {
322 std::array<glm::vec4, 3> raw {};
323 std::memcpy(raw.data(), it->second.data(), sizeof(raw));
324 out.mean = raw[0];
325 out.min_val = raw[1];
326 out.max_val = raw[2];
327 }
328 return out;
329}
vk::Fence fence
IO::ImageData image
Definition Decoder.cpp:47
uint32_t h
Definition InkPress.cpp:29
std::vector< float > * out
@ SCALAR
Return SSBO readback via collect_result(); no image download.
std::shared_ptr< TextureExecutionContext > m_gradient_sample_ctx
MAYAFLUX_API ShaderFoundry & get_shader_foundry()
Get the global shader compiler instance.
enum MayaFlux::Portal::Graphics::GpuBufferBinding::ElementType FLOAT32

References fence, MayaFlux::Portal::Graphics::GpuBufferBinding::FLOAT32, MayaFlux::Portal::Graphics::get_shader_foundry(), h, image, m_gradient_sample_ctx, out, MayaFlux::Portal::Graphics::GpuBufferBinding::OUTPUT, MayaFlux::Yantra::TextureExecutionContext::SCALAR, and MayaFlux::Portal::Graphics::GpuComputeConfig::shader_path.

Referenced by measure_appearance().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: