Skip to content

Commit

Permalink
Refactor dt_iop_module_is_skipped()
Browse files Browse the repository at this point in the history
1. Use only 'piece' as parameter
2. Include/deduplicate pipe->type check
3. Don't use iop_order to test for skipping
4. Some debugging log
  • Loading branch information
jenshannoschwalm committed Jan 28, 2025
1 parent 1757ac5 commit 46cd9cc
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 23 deletions.
10 changes: 4 additions & 6 deletions src/develop/develop.c
Original file line number Diff line number Diff line change
Expand Up @@ -2592,6 +2592,7 @@ static gboolean _dev_distort_backtransform_locked(dt_develop_t *dev,
dt_dev_pixelpipe_iop_t *piece = pieces->data;
if(piece->enabled
&& piece->data
&& !dt_iop_piece_is_skipped(piece)
&& ((transf_direction == DT_DEV_TRANSFORM_DIR_ALL)
|| (transf_direction == DT_DEV_TRANSFORM_DIR_FORW_INCL
&& module->iop_order >= iop_order)
Expand All @@ -2600,9 +2601,7 @@ static gboolean _dev_distort_backtransform_locked(dt_develop_t *dev,
|| (transf_direction == DT_DEV_TRANSFORM_DIR_BACK_INCL
&& module->iop_order <= iop_order)
|| (transf_direction == DT_DEV_TRANSFORM_DIR_BACK_EXCL
&& module->iop_order < iop_order))
&& !(dt_iop_module_is_skipped(dev, module)
&& (pipe->type & DT_DEV_PIXELPIPE_BASIC)))
&& module->iop_order < iop_order)))
{
module->distort_backtransform(module, piece, points, points_count);
}
Expand Down Expand Up @@ -2632,6 +2631,7 @@ static gboolean _dev_distort_transform_locked(dt_develop_t *dev,
dt_dev_pixelpipe_iop_t *piece = pieces->data;
if(piece->enabled
&& piece->data
&& !dt_iop_piece_is_skipped(piece)
&& ((transf_direction == DT_DEV_TRANSFORM_DIR_ALL)
|| (transf_direction == DT_DEV_TRANSFORM_DIR_FORW_INCL
&& module->iop_order >= iop_order)
Expand All @@ -2640,9 +2640,7 @@ static gboolean _dev_distort_transform_locked(dt_develop_t *dev,
|| (transf_direction == DT_DEV_TRANSFORM_DIR_BACK_INCL
&& module->iop_order <= iop_order)
|| (transf_direction == DT_DEV_TRANSFORM_DIR_BACK_EXCL
&& module->iop_order < iop_order))
&& !(dt_iop_module_is_skipped(dev, module)
&& (pipe->type & DT_DEV_PIXELPIPE_BASIC)))
&& module->iop_order < iop_order)))
{
module->distort_transform(module, piece, points, points_count);
}
Expand Down
23 changes: 16 additions & 7 deletions src/develop/imageop.c
Original file line number Diff line number Diff line change
Expand Up @@ -3873,13 +3873,22 @@ void dt_iop_gui_changed(dt_action_t *action, GtkWidget *widget, gpointer data)
dt_dev_add_history_item_target(darktable.develop, module, TRUE, widget);
}

gboolean dt_iop_module_is_skipped(const dt_develop_t *dev,
const dt_iop_module_t *module)
{
return dev->gui_module
&& dev->gui_module != module
&& (dev->gui_module->operation_tags_filter() & module->operation_tags())
&& (dev->gui_module->iop_order < module->iop_order);
gboolean dt_iop_piece_is_skipped(const dt_dev_pixelpipe_iop_t *piece)
{
const dt_iop_module_t *gui_module = dt_dev_gui_module();
const gboolean skipped = gui_module
&& gui_module != piece->module
&& (gui_module->operation_tags_filter() & piece->module->operation_tags())
&& (piece->pipe->type & DT_DEV_PIXELPIPE_BASIC);

if(skipped || (piece->module->iop_order == INT_MAX))
dt_print_pipe(DT_DEBUG_PIPE | DT_DEBUG_IOPORDER,
"skip test", piece->pipe, piece->module, piece->pipe->devid, &piece->processed_roi_in, &piece->processed_roi_out,
"gui module '%s': %s%s",
gui_module ? gui_module->op : "???",
skipped ? "skipped " : "",
piece->module->iop_order == INT_MAX ? "illegal order" : "");
return skipped;
}

enum
Expand Down
2 changes: 1 addition & 1 deletion src/develop/imageop.h
Original file line number Diff line number Diff line change
Expand Up @@ -566,7 +566,7 @@ void dt_iop_gui_rename_module(dt_iop_module_t *module);

void dt_iop_gui_changed(dt_action_t *action, GtkWidget *widget, gpointer data);

gboolean dt_iop_module_is_skipped(const struct dt_develop_t *dev, const dt_iop_module_t *module);
gboolean dt_iop_piece_is_skipped(const struct dt_dev_pixelpipe_iop_t *piece);

// copy the RGB channels of a pixel using nontemporal stores if
// possible; includes the 'alpha' channel as well if faster due to
Expand Down
5 changes: 1 addition & 4 deletions src/develop/pixelpipe_cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,7 @@ static dt_hash_t _dev_pixelpipe_cache_basichash(const dt_imgid_t imgid,
if(module->iop_order > order) break;

// don't take skipped modules into account
const gboolean skipped = dt_iop_module_is_skipped(module->dev, module)
&& (pipe->type & DT_DEV_PIXELPIPE_BASIC);

if(!skipped)
if(!dt_iop_piece_is_skipped(piece))
{
hash = dt_hash(hash, &piece->hash, sizeof(piece->hash));
if(module->request_color_pick != DT_REQUEST_COLORPICK_OFF)
Expand Down
5 changes: 2 additions & 3 deletions src/develop/pixelpipe_hb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1433,9 +1433,8 @@ static inline gboolean _skip_piece_on_tags(const dt_dev_pixelpipe_iop_t *piece)
if(!piece->enabled || piece->module->iop_order == INT_MAX)
return TRUE;

return dt_iop_module_is_skipped(piece->module->dev, piece->module)
&& (piece->pipe->type & DT_DEV_PIXELPIPE_BASIC);
}
return dt_iop_piece_is_skipped(piece);
}

// recursive helper for process, returns TRUE in case of unfinished work or error
static gboolean _dev_pixelpipe_process_rec(dt_dev_pixelpipe_t *pipe,
Expand Down
3 changes: 1 addition & 2 deletions src/iop/ashift.c
Original file line number Diff line number Diff line change
Expand Up @@ -4072,8 +4072,7 @@ static int call_distort_transform(dt_develop_t *dev,
if(!piece) return ret;
if(piece->module == self
// && *piece->enabled see note below
&& !(dt_iop_module_is_skipped(dev, piece->module)
&& (pipe->type & DT_DEV_PIXELPIPE_BASIC)))
&& !dt_iop_piece_is_skipped(piece))
{
ret = piece->module->distort_transform(piece->module, piece, points, points_count);
}
Expand Down

0 comments on commit 46cd9cc

Please sign in to comment.