From 3350c54719272d8c49b1b579c7711d13a8f290d5 Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Thu, 21 Jul 2022 22:35:17 -0700 Subject: til: simplify and clarify module_render_fragment() This consolidates the prepare_frame+render_fragment potentially-threaded branch but more importantly introduces some asserts codifying the whole prepare_frame() must return a fragmenter /and/ be accompanied by a render_fragment(). Any single-threaded modules are expected to just populate render_fragment() and leave prepare_frame() unused. --- src/til.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/til.c b/src/til.c index 00b73f6..478d43e 100644 --- a/src/til.c +++ b/src/til.c @@ -173,24 +173,27 @@ static void module_render_fragment(til_module_context_t *context, til_threads_t module = context->module; - if (context->n_cpus > 1 && module->prepare_frame) { + if (module->prepare_frame) { til_frame_plan_t frame_plan = {}; module->prepare_frame(context, ticks, fragment, &frame_plan); - if (module->render_fragment) { + /* XXX: any module which provides prepare_frame() must return a frame_plan.fragmenter, + * and provide render_fragment() + */ + assert(frame_plan.fragmenter); + assert(module->render_fragment); + + if (context->n_cpus > 1) { til_threads_frame_submit(threads, fragment, &frame_plan, module->render_fragment, context, ticks); til_threads_wait_idle(threads); - } - } else if (module->prepare_frame) { - til_frame_plan_t frame_plan = {}; - unsigned fragnum = 0; - til_fb_fragment_t frag; - - module->prepare_frame(context, ticks, fragment, &frame_plan); + } else { + unsigned fragnum = 0; + til_fb_fragment_t frag; - while (frame_plan.fragmenter(context, fragment, fragnum++, &frag)) - module->render_fragment(context, ticks, 0, &frag); + while (frame_plan.fragmenter(context, fragment, fragnum++, &frag)) + module->render_fragment(context, ticks, 0, &frag); + } } else if (module->render_fragment) module->render_fragment(context, ticks, 0, fragment); -- cgit v1.2.3