diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2022-05-01 11:27:23 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2022-05-01 13:49:57 -0700 |
commit | 45d1f956b35fa9003106716e42425cc86cadc7a1 (patch) | |
tree | f90106b3ac93981e37f4027caa5cf9c626ac3403 | |
parent | a4d50ba990cd8df5617bb945938aee7b5b556d11 (diff) |
til: introduce some generic fragmenters for convenience
Most of the threaded modules have settled down on two basic forms
of fragmenter function:
1. a slice per cpu, where tile-oriented locality isn't useful
2. ~64x64 tiles, in scenarios where screen-space locality helps
Now that n_cpus is wired up to the fragmenter, #1 can be
fulfilled without requiring a module-private context plumbing
n_cpus from create_context().
A future commit will replace some module-specific fragmenters by
returning one of these instead as res_fragmenter in their
prepare_frame(), wherever applicable.
-rw-r--r-- | src/til.c | 14 | ||||
-rw-r--r-- | src/til.h | 2 |
2 files changed, 16 insertions, 0 deletions
@@ -291,3 +291,17 @@ int til_module_randomize_setup(const til_module_t *module, til_setup_t **res_set return r; } + + +/* generic fragmenter using a horizontal slice per cpu according to n_cpus */ +int til_fragmenter_slice_per_cpu(void *context, unsigned n_cpus, const til_fb_fragment_t *fragment, unsigned number, til_fb_fragment_t *res_fragment) +{ + return til_fb_fragment_slice_single(fragment, n_cpus, number, res_fragment); +} + + +/* generic fragmenter using 64x64 tiles, ignores n_cpus */ +int til_fragmenter_tile64(void *context, unsigned n_cpus, const til_fb_fragment_t *fragment, unsigned number, til_fb_fragment_t *res_fragment) +{ + return til_fb_fragment_tile_single(fragment, 64, number, res_fragment); +} @@ -38,5 +38,7 @@ int til_module_create_context(const til_module_t *module, unsigned ticks, til_se void * til_module_destroy_context(const til_module_t *module, void *context); int til_module_setup(til_settings_t *settings, til_setting_t **res_setting, const til_setting_desc_t **res_desc, til_setup_t **res_setup); int til_module_randomize_setup(const til_module_t *module, til_setup_t **res_setup, char **res_arg); +int til_fragmenter_slice_per_cpu(void *context, unsigned n_cpus, const til_fb_fragment_t *fragment, unsigned number, til_fb_fragment_t *res_fragment); +int til_fragmenter_tile64(void *context, unsigned n_cpus, const til_fb_fragment_t *fragment, unsigned number, til_fb_fragment_t *res_fragment); #endif |