Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
pixelpipe_hb.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2009-2013 johannes hanika.
4 Copyright (C) 2011 Henrik Andersson.
5 Copyright (C) 2011-2014, 2017 Ulrich Pegelow.
6 Copyright (C) 2012 Richard Wonka.
7 Copyright (C) 2013 Simon Spannagel.
8 Copyright (C) 2014-2016 Roman Lebedev.
9 Copyright (C) 2014, 2016-2017, 2019 Tobias Ellinghaus.
10 Copyright (C) 2016 Pedro Côrte-Real.
11 Copyright (C) 2018-2019 Edgardo Hoszowski.
12 Copyright (C) 2020, 2022-2026 Aurélien PIERRE.
13 Copyright (C) 2020-2021 Pascal Obry.
14 Copyright (C) 2020 Ralf Brown.
15 Copyright (C) 2021-2022 Hanno Schwalm.
16 Copyright (C) 2022 Martin Bařinka.
17
18 darktable is free software: you can redistribute it and/or modify
19 it under the terms of the GNU General Public License as published by
20 the Free Software Foundation, either version 3 of the License, or
21 (at your option) any later version.
22
23 darktable is distributed in the hope that it will be useful,
24 but WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 GNU General Public License for more details.
27
28 You should have received a copy of the GNU General Public License
29 along with darktable. If not, see <http://www.gnu.org/licenses/>.
30*/
31
32#pragma once
33
34#include "common/atomic.h"
35#include "common/image.h"
36#include "common/imageio.h"
37#include "common/iop_order.h"
38#include "develop/imageop.h"
40
41
47struct dt_iop_module_t;
48struct dt_dev_raster_mask_t;
50struct dt_develop_t;
51
53{
54 int id; // 0 is reserved for the reusable masks written in blend.c
55 float *mask;
57
96{
97 struct dt_iop_module_t *module; // the module in the dev operation stack
98 void *data; // to be used by the module to store stuff per pipe piece
99
100 // Memory size of *data upon which we will compute integrity hashes.
101 // This needs to be the size of the constant part of the data structure.
102 // It can even be 0 if nothing relevant to cache integrity hashes is held there.
103 // If the data struct contains pointers, they should go at the end of the struct,
104 // and the size here should be adjusted to only include constant bits, starting at the address of *data.
105 // "Constant" means identical between 2 pipeline nodes init,
106 // because the lifecycle of a pixelpipe cache is longer than that of a pixelpipe itself.
107 // See an example in colorbalancergb.c
108 size_t data_size;
109
110 void *blendop_data; // to be used by the module to store blendop per pipe piece
111 gboolean enabled; // used to disable parts of the pipe for export, independent on module itself.
112 gboolean detail_mask; // TRUE when the piece blend parameters request detail-mask refinement.
113
114 dt_dev_request_flags_t request_histogram; // (bitwise) set if you want an histogram captured
115 dt_dev_histogram_collection_params_t histogram_params; // set histogram generation params
116
117 int iwidth, iheight; // width and height of input buffer
118
119 // Hash representing the current state of the params, blend params and enabled state of this individual module
122
123 // Cumulative hash representing the current module hash and all the upstream modules from the pipeline,
124 // for the current ROI.
126
127 // Same as global hash but for raster masks
129
130 int bpc; // bits per channel, 32 means float
131 dt_iop_roi_t buf_in, buf_out; // theoretical full buffer regions of interest, as passed through modify_roi_out
132 dt_iop_roi_t roi_in, roi_out; // planned runtime regions of interest after backward ROI propagation
133 int process_cl_ready; // set this to 0 in commit_params to temporarily disable the use of process_cl
134 int process_tiling_ready; // set this to 0 in commit_params to temporarily disable tiling
135
136 // Sealed descriptor contract for this module instance.
137 // dsc_in is the module input contract after input_format() sanitized against
138 // the actual upstream storage format.
139 // dsc_out is the authored module output contract after commit_params() and
140 // output_format().
141 // dsc_mask carries the mask-side storage contract when masks are produced.
143
144 // bypass the cache for this module
145 gboolean bypass_cache;
146
147 // Snapshot of the last reusable output cacheline metadata.
148 // This is intentionally NOT used for bypass_cache / no_cache / reentry modes:
149 // - disposable outputs are flagged auto-destroy and must not be rekeyed,
150 // - realtime outputs and GPU-transient outputs can safely reuse their cacheline.
151 // The reused line is rekeyed while still write-locked, and it is destroyed if processing later
152 // fails before producing a valid output for the new hash.
154
155 // Set to TRUE for modules that should mandatorily cache their output to RAM
156 // even when running on OpenCL. This is a processing-policy flag authored
157 // during synchronization and then consumed by one recursion step; it does not
158 // change the descriptor contract.
160
161 GHashTable *raster_masks; // GList* of dt_dev_pixelpipe_raster_mask_t
163
165{
166 DT_DEV_PIPE_UNCHANGED = 0, // no event
167 DT_DEV_PIPE_TOP_CHANGED = 1 << 0, // only params of top element changed
168 DT_DEV_PIPE_REMOVE = 1 << 1, // possibly elements of the pipe have to be removed
170 = 1 << 2, // all nodes up to end need to be synched, but no removal of module pieces is necessary
171 DT_DEV_PIPE_ZOOMED = 1 << 3, // zoom event, preview pipe does not need changes
172 DT_DEV_PIPE_CACHE_REQUEST = 1 << 4 // GUI requested one cacheline to be materialized on host
174
181
188typedef struct dt_backbuf_t
189{
190 size_t bpp; // bits per pixel
191 size_t width; // pixel size of image
192 size_t height; // pixel size of image
193 dt_atomic_uint64 hash; // data checksum/integrity hash, for example to connect to a cacheline
194 dt_atomic_uint64 history_hash; // arbitrary state hash
196
197static inline uint64_t dt_dev_backbuf_get_hash(const dt_backbuf_t *backbuf)
198{
199 return dt_atomic_get_uint64(&backbuf->hash);
200}
201
202static inline void dt_dev_backbuf_set_hash(dt_backbuf_t *backbuf, const uint64_t hash)
203{
204 dt_atomic_set_uint64(&backbuf->hash, hash);
205}
206
208{
209 return dt_atomic_get_uint64(&backbuf->history_hash);
210}
211
212static inline void dt_dev_backbuf_set_history_hash(dt_backbuf_t *backbuf, const uint64_t history_hash)
213{
214 dt_atomic_set_uint64(&backbuf->history_hash, history_hash);
215}
216
217typedef struct dt_dev_pixelpipe_t
218{
219 // The development to which this pipeline is attached
221
222 // input image. Will be fetched directly from mipmap cache
223 int32_t imgid;
225
226 // width and height of full-resolution input buffer
228
229 // Input scaling between full-resolution source image and
230 // actual pipeline mipmap input.
231 // = 1.f, unless we take downscaled RAW for thumbnail export.
232 float iscale;
233
234 // dimensions of processed buffer assuming we take full-resolution input
236
243
244 // instances of pixelpipe, stored in GList of dt_dev_pixelpipe_iop_t
245 GList *nodes;
246 // event flag
248
249 // backbuffer (output)
251
252 // Validity checksum of whole pipeline,
253 // taken as the global hash of the last pipe node (module),
254 // after the last synchronization between dev history and pipe nodes completed.
255 // This is computed in dt_dev_pixelpipe_get_global_hash
256 // ahead of processing image.
257 dt_atomic_uint64 hash;
258
259 dt_pthread_mutex_t busy_mutex;
260
261 // The hidden detailmask module publishes the full-resolution detail mask in
262 // the global pixelpipe cache under a salted hash derived from its
263 // piece->global_hash. The pipeline keeps only that cache key plus the source
264 // ROI of the published mask so zoom/pan updates can reuse the same payload
265 // exactly like raster masks do.
269
271 // processing is true when actual pixel computations are ongoing
273 // running is true when the pipe thread is running, computing or idle
275 // shutting down?
277 /* Optional caller-owned kill switch used by background thumbnail/surface jobs.
278 * The pipe keeps its own shutdown flag for local teardown, but long-running
279 * non-GUI jobs also need a way to stop as soon as their output target changed
280 * size. Callers own the storage and may flip it from another thread. */
282 // Best-effort processing mode. When TRUE, the processing path bypasses the
283 // early-abort shutdown kill-switch checks that normally stop a stale pipeline
284 // as soon as parameters changed. This allows long-running interactive
285 // pipelines to keep producing "good enough" output until the flag is cleared.
286 // Cleanup/teardown shutdown semantics are unchanged.
288 // opencl enabled for this pixelpipe?
290 // opencl error detected?
292 // running in a tiling context?
294 // should this pixelpipe display a mask in the end?
296 // should this pixelpipe completely suppressed the blendif module?
298 // input data based on this timestamp:
301 // This pipe feeds GUI-side observables such as global histograms and picker
302 // sampling. The processing core reacts to this property instead of branching
303 // on pipeline type.
305 // the final output pixel format this pixelpipe will be converted to
307 // opencl device that has been locked for this pipe.
308 int devid;
309 // the user might choose to overwrite the output color space and rendering intent.
313 // snapshot of modules iop_order
315 // snapshot of mask list
316 GList *forms;
317 // the masks generated in the pipe for later reusal are inside dt_dev_pixelpipe_iop_t
319
320 // hash of the last history item synchronized with pipeline
321 // that's because the sync_top option can't assume only one history
322 // item was added since the last synchronization.
324 // pointer identity of the last synchronized history item.
325 // This complements `last_history_hash` for in-place top-entry updates where
326 // the same history node is reused and its hash changes.
328
329 // hash of the whole history stack at the time of synchonization
330 // between pipe and history. This is a local copy of
331 // dev_history_get_hash()
332 dt_atomic_uint64 history_hash;
333 // GUI readers can request one extra host-visible cacheline without pretending
334 // history changed. BACKBUF targets the final pipe output, MODULE targets the
335 // output of cache_request_module.
337 dt_atomic_ptr cache_request_module;
338 // Modules can set this to TRUE internally so the pipeline will
339 // restart right away, in the same thread.
340 // The reentry flag can only be reset (to FALSE) by the same object that captured it.
341 // DO NOT SET THAT DIRECTLY, use the setter/getter functions
342 gboolean reentry;
343
344 // Unique identifier of the object capturing the reentry flag.
345 // This can be a mask or module hash, or anything that stays constant
346 // across 2 pipeline runs from a same thread (aka as long as we don't reinit).
347 // DO NOT SET THAT DIRECTLY, use the setter/getter functions
349
350 // Can be set arbitrarily by pixelpipe modules at runtime
351 // to invalidate downstream module cache lines.
352 // This always gets reset to FALSE when a pipeline finishes,
353 // whether on success or on error.
354 gboolean flush_cache;
355
356 // TRUE if at least one module is bypassing the cache
357 gboolean bypass_cache;
358
359 // If TRUE, do not keep any pixelpipe cache lines around for reuse.
360 // This is intended for one-shot pipelines such as thumbnail exports where caching is pure overhead
361 // and can lead to memory pressure (RAM buffers + OpenCL pinned/device buffers).
362 gboolean no_cache;
363
364 // Temporarily pause the infinite loop of pipeline
365 gboolean pause;
366
367 // Run a self-setting pipeline that will update history for each module
368 // depending on its input if it implements the autoset() method
369 gboolean autoset;
370
372
374{
375 return dt_atomic_get_uint64(&pipe->hash);
376}
377
378static inline void dt_dev_pixelpipe_set_hash(dt_dev_pixelpipe_t *pipe, const uint64_t hash)
379{
380 dt_atomic_set_uint64(&pipe->hash, hash);
381}
382
387
388static inline void dt_dev_pixelpipe_set_history_hash(dt_dev_pixelpipe_t *pipe, const uint64_t history_hash)
389{
390 dt_atomic_set_uint64(&pipe->history_hash, history_hash);
391}
392
397
402
407
413
415{
416 return pipe ? (const struct dt_iop_module_t *)dt_atomic_get_ptr(&pipe->cache_request_module) : NULL;
417}
418
421 const struct dt_iop_module_t *module)
422{
423 if(IS_NULL_PTR(pipe)) return;
424 dt_atomic_set_ptr(&pipe->cache_request_module, (void *)module);
425 dt_atomic_set_int((dt_atomic_int *)&pipe->cache_request, (int)request);
426}
427
434
435struct dt_develop_t;
436
437#ifdef __cplusplus
438extern "C" {
439#endif
440
442
443// inits the pixelpipe with plain passthrough input/output and empty input and default caching settings.
445// inits the preview pixelpipe with plain passthrough input/output and empty input and default caching
446// settings.
448// inits the pixelpipe with settings optimized for full-image export (no history stack cache)
450// inits the pixelpipe with settings optimized for thumbnail export (no history stack cache)
452// inits all but the pixel caches, so you can't actually process an image (just get dimensions and
453// distortions)
455// inits the pixelpipe
457// enable/disable best-effort processing mode, bypassing the usual early-abort
458// shutdown checks while the flag stays enabled.
460// return whether best-effort processing mode is currently enabled.
467// constructs a new input buffer from given RGB float array.
469 int height, float iscale, dt_mipmap_size_t size);
470// set some metadata for colorout to avoid race conditions.
472 const gchar *icc_filename, dt_iop_color_intent_t icc_intent);
473// destroys all allocated data.
475// cleanup all nodes except clean input/output
477// sync with develop_t history stack from scratch (new node added, have to pop old ones)
478// this should be called with dev->history_mutex locked in read mode
480// sync with develop_t history stack by just copying the top item params (same op, new params on top)
482#define dt_dev_pixelpipe_synch_all(pipe) dt_dev_pixelpipe_synch_all_real(pipe, __FUNCTION__)
483// adjust output node according to history stack (history pop event)
485
486// process region of interest of pixels. returns 1 if pipe was altered during processing.
488
489// Refresh GUI samplers from the cachelines already published by a darkroom pipe.
490
491// disable given op and all that comes after it in the pipe:
493// disable given op and all that comes before it in the pipe:
495
496// helper function to pass a raster mask through a (so far) processed pipe
497// `*error` will be set to 1 if the raster mask reference couldn't be found while it should have been,
498// aka not if user has forgotten to input what module should provide its mask, but only
499// if the mask reference has been lost by the pipeline. This should lead to a pipeline cache flushing.
500// `*error` can be NULL, e.g. for non-cached pipelines (export, thumbnail).
501float *dt_dev_get_raster_mask(dt_dev_pixelpipe_t *pipe, const struct dt_iop_module_t *raster_mask_source,
502 const int raster_mask_id, const struct dt_iop_module_t *target_module,
503 gboolean *free_mask, int *error);
504
505// helper function writing the pipe-processed ctmask data to dest
508
509
530
541
542// check if pipeline should re-entry after it completes
544
545// Force-reset pipeline re-entry flag, for example if we lost the unique ID of the object
546// in a re-entry loop.
548
549#ifdef __cplusplus
550}
551#endif
552
553// clang-format off
554// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
555// vim: shiftwidth=2 expandtab tabstop=2 cindent
556// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
557// clang-format on
static void error(char *msg)
Definition ashift_lsd.c:202
void dt_atomic_set_int(dt_atomic_int *var, int value)
int dt_atomic_get_int(dt_atomic_int *var)
uint64_t dt_atomic_get_uint64(const dt_atomic_uint64 *var)
void dt_atomic_set_uint64(dt_atomic_uint64 *var, uint64_t value)
void dt_atomic_or_int(dt_atomic_int *var, int flags)
static void * dt_atomic_get_ptr(const dt_atomic_ptr *var)
Definition atomic.h:74
atomic_int dt_atomic_int
Definition atomic.h:66
static void dt_atomic_set_ptr(dt_atomic_ptr *var, void *value)
Definition atomic.h:73
int levels(struct dt_imageio_module_data_t *data)
Definition avif.c:635
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
dt_iop_color_intent_t
Definition colorspaces.h:63
dt_colorspaces_color_profile_type_t
Definition colorspaces.h:81
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
Definition darktable.h:281
dt_imageio_levels_t
Definition imageio.h:61
const float v
Definition iop_profile.h:221
float iscale
Definition mipmap_cache.c:2
size_t size
Definition mipmap_cache.c:3
dt_mipmap_buffer_dsc_flags flags
Definition mipmap_cache.c:4
dt_mipmap_size_t
Definition mipmap_cache.h:41
dt_dev_request_flags_t
Definition pixelpipe.h:46
dt_dev_pixelpipe_type_t
Definition pixelpipe.h:36
Pixelpipe cache for storing intermediate results in the pixelpipe.
void dt_dev_pixelpipe_set_input(dt_dev_pixelpipe_t *pipe, int32_t imgid, int width, int height, float iscale, dt_mipmap_size_t size)
Definition pixelpipe_hb.c:466
void dt_dev_pixelpipe_disable_before(dt_dev_pixelpipe_t *pipe, const char *op)
Definition pixelpipe_hb.c:1145
static dt_dev_pixelpipe_cache_request_t dt_dev_pixelpipe_get_cache_request(const dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.h:408
int dt_dev_pixelpipe_init_preview(dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev)
Definition pixelpipe_hb.c:401
void dt_dev_pixelpipe_synch_top(dt_dev_pixelpipe_t *pipe)
Definition dev_pixelpipe.c:1007
void dt_dev_pixelpipe_reset_reentry(dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.c:564
static void dt_dev_pixelpipe_set_hash(dt_dev_pixelpipe_t *pipe, const uint64_t hash)
Definition pixelpipe_hb.h:378
static dt_dev_pixelpipe_change_t dt_dev_pixelpipe_get_changed(const dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.h:393
int dt_dev_pixelpipe_init_cached(dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.c:425
gboolean dt_dev_pixelpipe_has_reentry(dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.c:559
void dt_dev_pixelpipe_disable_after(dt_dev_pixelpipe_t *pipe, const char *op)
Definition pixelpipe_hb.c:1131
static uint64_t dt_dev_backbuf_get_history_hash(const dt_backbuf_t *backbuf)
Definition pixelpipe_hb.h:207
static const struct dt_iop_module_t * dt_dev_pixelpipe_get_cache_request_module(const dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.h:414
float * dt_dev_retrieve_rawdetail_mask(const dt_dev_pixelpipe_t *pipe, const struct dt_iop_module_t *target_module)
static uint64_t dt_dev_pixelpipe_get_hash(const dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.h:373
static void dt_dev_pixelpipe_or_changed(dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_change_t flags)
Definition pixelpipe_hb.h:403
static void dt_dev_pixelpipe_reset_cache_request(dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.h:428
gboolean dt_dev_pixelpipe_get_realtime(const dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.c:461
static void dt_dev_pixelpipe_set_cache_request(dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_cache_request_t request, const struct dt_iop_module_t *module)
Definition pixelpipe_hb.h:419
dt_dev_pixelpipe_change_t
Definition pixelpipe_hb.h:165
@ DT_DEV_PIPE_ZOOMED
Definition pixelpipe_hb.h:171
@ DT_DEV_PIPE_CACHE_REQUEST
Definition pixelpipe_hb.h:172
@ DT_DEV_PIPE_SYNCH
Definition pixelpipe_hb.h:169
@ DT_DEV_PIPE_TOP_CHANGED
Definition pixelpipe_hb.h:167
@ DT_DEV_PIPE_REMOVE
Definition pixelpipe_hb.h:168
@ DT_DEV_PIPE_UNCHANGED
Definition pixelpipe_hb.h:166
static uint64_t dt_dev_pixelpipe_get_history_hash(const dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.h:383
int dt_dev_pixelpipe_init_thumbnail(dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev)
Definition pixelpipe_hb.c:383
void dt_dev_pixelpipe_set_icc(dt_dev_pixelpipe_t *pipe, dt_colorspaces_color_profile_type_t icc_type, const gchar *icc_filename, dt_iop_color_intent_t icc_intent)
Definition pixelpipe_hb.c:477
static void dt_dev_pixelpipe_set_history_hash(dt_dev_pixelpipe_t *pipe, const uint64_t history_hash)
Definition pixelpipe_hb.h:388
char * dt_pixelpipe_get_pipe_name(dt_dev_pixelpipe_type_t pipe_type)
Definition pixelpipe_hb.c:255
void dt_dev_pixelpipe_synch_all_real(dt_dev_pixelpipe_t *pipe, const char *caller_func)
Find the last history item matching each pipeline node (module), in the order of pipeline execution....
Definition dev_pixelpipe.c:984
static void dt_dev_backbuf_set_hash(dt_backbuf_t *backbuf, const uint64_t hash)
Definition pixelpipe_hb.h:202
float * dt_dev_get_raster_mask(dt_dev_pixelpipe_t *pipe, const struct dt_iop_module_t *raster_mask_source, const int raster_mask_id, const struct dt_iop_module_t *target_module, gboolean *free_mask, int *error)
int dt_dev_pixelpipe_init_dummy(dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev)
Definition pixelpipe_hb.c:392
void dt_dev_pixelpipe_create_nodes(dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.c:591
static uint64_t dt_dev_backbuf_get_hash(const dt_backbuf_t *backbuf)
Definition pixelpipe_hb.h:197
static void dt_dev_backbuf_set_history_hash(dt_backbuf_t *backbuf, const uint64_t history_hash)
Definition pixelpipe_hb.h:212
dt_dev_pixelpipe_cache_request_t
Definition pixelpipe_hb.h:176
@ DT_DEV_PIXELPIPE_CACHE_REQUEST_BACKBUF
Definition pixelpipe_hb.h:178
@ DT_DEV_PIXELPIPE_CACHE_REQUEST_NONE
Definition pixelpipe_hb.h:177
@ DT_DEV_PIXELPIPE_CACHE_REQUEST_MODULE
Definition pixelpipe_hb.h:179
void dt_dev_pixelpipe_cleanup(dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.c:486
static void dt_dev_pixelpipe_set_changed(dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_change_t v)
Definition pixelpipe_hb.h:398
gboolean dt_dev_pixelpipe_unset_reentry(dt_dev_pixelpipe_t *pipe, uint64_t hash)
Remove the re-entry pipeline flag, only if the object identifier is the one that set it....
Definition pixelpipe_hb.c:546
int dt_dev_pixelpipe_init_export(dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev, int levels, gboolean store_masks)
Definition pixelpipe_hb.c:372
int dt_dev_pixelpipe_init(dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev)
Definition pixelpipe_hb.c:414
int dt_dev_pixelpipe_process(dt_dev_pixelpipe_t *pipe, dt_iop_roi_t roi)
Definition pixelpipe_hb.c:1253
static gboolean dt_dev_pixelpipe_has_shutdown(const dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.h:462
float * dt_dev_distort_detail_mask(const dt_dev_pixelpipe_t *pipe, float *src, const struct dt_iop_module_t *target_module)
gboolean dt_dev_pixelpipe_set_reentry(dt_dev_pixelpipe_t *pipe, uint64_t hash)
Set the re-entry pipeline flag, only if no object is already capturing it. Re-entered pipelines run w...
Definition pixelpipe_hb.c:532
void dt_dev_pixelpipe_set_realtime(dt_dev_pixelpipe_t *pipe, gboolean state)
Definition pixelpipe_hb.c:455
void dt_dev_pixelpipe_cleanup_nodes(dt_dev_pixelpipe_t *pipe)
Definition pixelpipe_hb.c:571
const float uint32_t state[4]
Definition src/develop/noise_generator.h:72
unsigned __int64 uint64_t
Definition strptime.c:75
Definition pixelpipe_hb.h:189
size_t height
Definition pixelpipe_hb.h:192
size_t width
Definition pixelpipe_hb.h:191
dt_atomic_uint64 history_hash
Definition pixelpipe_hb.h:194
dt_atomic_uint64 hash
Definition pixelpipe_hb.h:193
size_t bpp
Definition pixelpipe_hb.h:190
Definition pixelpipe.h:54
Definition pixelpipe_hb.h:96
gboolean enabled
Definition pixelpipe_hb.h:111
dt_iop_buffer_dsc_t dsc_out
Definition pixelpipe_hb.h:142
dt_dev_request_flags_t request_histogram
Definition pixelpipe_hb.h:114
size_t data_size
Definition pixelpipe_hb.h:108
dt_iop_roi_t buf_in
Definition pixelpipe_hb.h:131
uint64_t blendop_hash
Definition pixelpipe_hb.h:121
gboolean detail_mask
Definition pixelpipe_hb.h:112
int iheight
Definition pixelpipe_hb.h:117
uint64_t global_hash
Definition pixelpipe_hb.h:125
uint64_t hash
Definition pixelpipe_hb.h:120
int process_cl_ready
Definition pixelpipe_hb.h:133
dt_iop_buffer_dsc_t dsc_in
Definition pixelpipe_hb.h:142
int iwidth
Definition pixelpipe_hb.h:117
uint64_t global_mask_hash
Definition pixelpipe_hb.h:128
gboolean bypass_cache
Definition pixelpipe_hb.h:145
dt_iop_roi_t buf_out
Definition pixelpipe_hb.h:131
dt_pixel_cache_entry_t cache_entry
Definition pixelpipe_hb.h:153
int process_tiling_ready
Definition pixelpipe_hb.h:134
struct dt_iop_module_t *void * data
Definition pixelpipe_hb.h:97
int bpc
Definition pixelpipe_hb.h:130
dt_iop_roi_t roi_in
Definition pixelpipe_hb.h:132
GHashTable * raster_masks
Definition pixelpipe_hb.h:161
dt_dev_histogram_collection_params_t histogram_params
Definition pixelpipe_hb.h:115
dt_iop_buffer_dsc_t dsc_mask
Definition pixelpipe_hb.h:142
dt_iop_roi_t roi_out
Definition pixelpipe_hb.h:132
void * blendop_data
Definition pixelpipe_hb.h:110
gboolean cache_output_on_ram
Definition pixelpipe_hb.h:159
Definition pixelpipe_hb.h:53
float * mask
Definition pixelpipe_hb.h:55
int id
Definition pixelpipe_hb.h:54
Definition pixelpipe_hb.h:218
dt_colorspaces_color_profile_type_t icc_type
Definition pixelpipe_hb.h:310
struct dt_iop_order_iccprofile_info_t * work_profile_info
Definition pixelpipe_hb.h:238
struct dt_iop_order_iccprofile_info_t * input_profile_info
Definition pixelpipe_hb.h:240
int iwidth
Definition pixelpipe_hb.h:227
int want_detail_mask
Definition pixelpipe_hb.h:268
gpointer last_history_item
Definition pixelpipe_hb.h:327
int opencl_error
Definition pixelpipe_hb.h:291
struct dt_iop_order_iccprofile_info_t * output_profile_info
Definition pixelpipe_hb.h:242
int running
Definition pixelpipe_hb.h:274
gboolean gui_observable_source
Definition pixelpipe_hb.h:304
gchar * icc_filename
Definition pixelpipe_hb.h:311
int processed_width
Definition pixelpipe_hb.h:235
uint64_t last_history_hash
Definition pixelpipe_hb.h:323
dt_pthread_mutex_t busy_mutex
Definition pixelpipe_hb.h:259
gboolean flush_cache
Definition pixelpipe_hb.h:354
int mask_display
Definition pixelpipe_hb.h:295
GList * nodes
Definition pixelpipe_hb.h:245
dt_imageio_levels_t levels
Definition pixelpipe_hb.h:306
dt_atomic_int realtime
Definition pixelpipe_hb.h:287
dt_atomic_uint64 history_hash
Definition pixelpipe_hb.h:332
dt_backbuf_t backbuf
Definition pixelpipe_hb.h:250
gboolean reentry
Definition pixelpipe_hb.h:342
dt_mipmap_size_t size
Definition pixelpipe_hb.h:224
dt_iop_color_intent_t icc_intent
Definition pixelpipe_hb.h:312
dt_atomic_uint64 hash
Definition pixelpipe_hb.h:257
dt_atomic_int shutdown
Definition pixelpipe_hb.h:276
uint64_t reentry_hash
Definition pixelpipe_hb.h:348
int opencl_enabled
Definition pixelpipe_hb.h:289
dt_atomic_int * shutdown_ext
Definition pixelpipe_hb.h:281
dt_atomic_ptr cache_request_module
Definition pixelpipe_hb.h:337
dt_dev_pixelpipe_type_t type
Definition pixelpipe_hb.h:300
float iscale
Definition pixelpipe_hb.h:232
dt_atomic_int changed
Definition pixelpipe_hb.h:247
int processed_height
Definition pixelpipe_hb.h:235
int32_t imgid
Definition pixelpipe_hb.h:223
gboolean no_cache
Definition pixelpipe_hb.h:362
gboolean store_all_raster_masks
Definition pixelpipe_hb.h:318
int bypass_blendif
Definition pixelpipe_hb.h:297
int tiling
Definition pixelpipe_hb.h:293
uint64_t rawdetail_mask_hash
Definition pixelpipe_hb.h:266
int iheight
Definition pixelpipe_hb.h:227
gboolean pause
Definition pixelpipe_hb.h:365
struct dt_iop_roi_t rawdetail_mask_roi
Definition pixelpipe_hb.h:267
gboolean bypass_cache
Definition pixelpipe_hb.h:357
GList * forms
Definition pixelpipe_hb.h:316
gboolean autoset
Definition pixelpipe_hb.h:369
int devid
Definition pixelpipe_hb.h:308
int processing
Definition pixelpipe_hb.h:272
int output_imgid
Definition pixelpipe_hb.h:270
struct dt_develop_t * dev
Definition pixelpipe_hb.h:220
dt_atomic_int cache_request
Definition pixelpipe_hb.h:336
GList * iop_order_list
Definition pixelpipe_hb.h:314
int input_timestamp
Definition pixelpipe_hb.h:299
Definition develop.h:159
float y
Definition develop.h:186
struct dt_dev_pixelpipe_t * pipe
Definition develop.h:236
struct dt_develop_t::@18 roi
Definition format.h:52
Definition imageop.h:246
Definition iop_profile.h:52
Region of interest passed through the pixelpipe.
Definition imageop.h:72
Definition pixelpipe_cache.h:87