Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
pixelpipe_hb.h File Reference
+ Include dependency graph for pixelpipe_hb.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  dt_dev_pixelpipe_raster_mask_t
 
struct  dt_dev_pixelpipe_iop_t
 
struct  dt_backbuf_t
 What the pipeline last published: which cacheline, and what shape its pixels are in. More...
 
struct  dt_backbuf_state_t
 One coherent publication, by value. More...
 
struct  dt_dev_pixelpipe_t
 

Macros

#define dt_dev_pixelpipe_synch_all(pipe)   dt_dev_pixelpipe_synch_all_real(pipe, __FUNCTION__)
 

Typedefs

typedef struct dt_dev_pixelpipe_raster_mask_t dt_dev_pixelpipe_raster_mask_t
 
typedef struct dt_dev_pixelpipe_iop_t dt_dev_pixelpipe_iop_t
 
typedef enum dt_dev_pixelpipe_change_t dt_dev_pixelpipe_change_t
 
typedef enum dt_dev_pixelpipe_cache_request_t dt_dev_pixelpipe_cache_request_t
 
typedef struct dt_backbuf_t dt_backbuf_t
 What the pipeline last published: which cacheline, and what shape its pixels are in.
 
typedef struct dt_backbuf_state_t dt_backbuf_state_t
 One coherent publication, by value.
 
typedef struct dt_dev_pixelpipe_t dt_dev_pixelpipe_t
 

Enumerations

enum  dt_dev_pixelpipe_change_t {
  DT_DEV_PIPE_UNCHANGED = 0 ,
  DT_DEV_PIPE_TOP_CHANGED = 1 << 0 ,
  DT_DEV_PIPE_REMOVE = 1 << 1 ,
  DT_DEV_PIPE_SYNCH = 1 << 2 ,
  DT_DEV_PIPE_ZOOMED = 1 << 3 ,
  DT_DEV_PIPE_CACHE_REQUEST = 1 << 4 ,
  DT_DEV_PIPE_REENTRY = 1 << 5
}
 
enum  dt_dev_pixelpipe_cache_request_t {
  DT_DEV_PIXELPIPE_CACHE_REQUEST_NONE = 0 ,
  DT_DEV_PIXELPIPE_CACHE_REQUEST_BACKBUF = 1 ,
  DT_DEV_PIXELPIPE_CACHE_REQUEST_MODULE = 2
}
 

Functions

static void dt_dev_backbuf_publish_begin (dt_backbuf_t *backbuf)
 
static void dt_dev_backbuf_publish_end (dt_backbuf_t *backbuf)
 
static dt_backbuf_state_t dt_dev_backbuf_snapshot (const dt_backbuf_t *backbuf)
 Read the whole record as one publication.
 
static uint64_t dt_dev_backbuf_get_hash (const dt_backbuf_t *backbuf)
 
static void dt_dev_backbuf_set_hash (dt_backbuf_t *backbuf, const uint64_t hash)
 
static uint64_t dt_dev_backbuf_get_history_hash (const dt_backbuf_t *backbuf)
 
static void dt_dev_backbuf_set_history_hash (dt_backbuf_t *backbuf, const uint64_t history_hash)
 
static uint64_t dt_dev_pixelpipe_get_hash (const dt_dev_pixelpipe_t *pipe)
 
static void dt_dev_pixelpipe_set_hash (dt_dev_pixelpipe_t *pipe, const uint64_t hash)
 
static uint64_t dt_dev_pixelpipe_get_history_hash (const dt_dev_pixelpipe_t *pipe)
 
static void dt_dev_pixelpipe_set_history_hash (dt_dev_pixelpipe_t *pipe, const uint64_t history_hash)
 
static dt_dev_pixelpipe_change_t dt_dev_pixelpipe_get_changed (const dt_dev_pixelpipe_t *pipe)
 
static void dt_dev_pixelpipe_set_changed (dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_change_t v)
 
static void dt_dev_pixelpipe_or_changed (dt_dev_pixelpipe_t *pipe, const dt_dev_pixelpipe_change_t flags)
 
static dt_dev_pixelpipe_cache_request_t dt_dev_pixelpipe_get_cache_request (const dt_dev_pixelpipe_t *pipe)
 
static const struct dt_iop_module_tdt_dev_pixelpipe_get_cache_request_module (const dt_dev_pixelpipe_t *pipe)
 
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)
 
static void dt_dev_pixelpipe_reset_cache_request (dt_dev_pixelpipe_t *pipe)
 
char * dt_pixelpipe_get_pipe_name (dt_dev_pixelpipe_type_t pipe_type)
 
int dt_dev_pixelpipe_init (dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev)
 
void dt_dev_pixelpipe_set_mask_rasterization_step (struct dt_dev_pixelpipe_t *pipe, const int step)
 Set the drawn-mask rasterisation step for the next frame, in image pixels (clamped to >= 1).
 
int dt_dev_pixelpipe_init_preview (dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev)
 
int dt_dev_pixelpipe_init_export (dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev, int levels, gboolean store_masks)
 
int dt_dev_pixelpipe_init_thumbnail (dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev)
 
int dt_dev_pixelpipe_init_dummy (dt_dev_pixelpipe_t *pipe, struct dt_develop_t *dev)
 
int dt_dev_pixelpipe_init_cached (dt_dev_pixelpipe_t *pipe)
 
void dt_dev_pixelpipe_set_realtime (dt_dev_pixelpipe_t *pipe, gboolean state)
 
gboolean dt_dev_pixelpipe_get_realtime (const dt_dev_pixelpipe_t *pipe)
 
static gboolean dt_dev_pixelpipe_has_shutdown (const dt_dev_pixelpipe_t *pipe)
 
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)
 
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)
 
void dt_dev_pixelpipe_cleanup (dt_dev_pixelpipe_t *pipe)
 
void dt_dev_pixelpipe_cleanup_nodes (dt_dev_pixelpipe_t *pipe)
 
void dt_dev_pixelpipe_create_nodes (dt_dev_pixelpipe_t *pipe)
 
void dt_dev_pixelpipe_synch_all_real (dt_dev_pixelpipe_t *pipe, const char *caller_func)
 
void dt_dev_pixelpipe_synch_top (dt_dev_pixelpipe_t *pipe)
 
int dt_dev_pixelpipe_process (dt_dev_pixelpipe_t *pipe, dt_iop_roi_t roi)
 
void dt_dev_pixelpipe_disable_after (dt_dev_pixelpipe_t *pipe, const char *op)
 
void dt_dev_pixelpipe_disable_before (dt_dev_pixelpipe_t *pipe, const char *op)
 
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, int *error)
 Retrieve a provider mask from the global cache and transform it to a consumer.
 
float * dt_dev_distort_detail_mask (const dt_dev_pixelpipe_t *pipe, float *src, const struct dt_iop_module_t *target_module)
 
float * dt_dev_retrieve_rawdetail_mask (const dt_dev_pixelpipe_t *pipe, 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.
 
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. See dt_dev_pixelpipe_set_reentry.
 
gboolean dt_dev_pixelpipe_has_reentry (dt_dev_pixelpipe_t *pipe)
 
void dt_dev_pixelpipe_reset_reentry (dt_dev_pixelpipe_t *pipe)
 

Macro Definition Documentation

◆ dt_dev_pixelpipe_synch_all

#define dt_dev_pixelpipe_synch_all (   pipe)    dt_dev_pixelpipe_synch_all_real(pipe, __FUNCTION__)

Definition at line 651 of file pixelpipe_hb.h.

Typedef Documentation

◆ dt_backbuf_state_t

One coherent publication, by value.

◆ dt_backbuf_t

typedef struct dt_backbuf_t dt_backbuf_t

What the pipeline last published: which cacheline, and what shape its pixels are in.

this encapsulates the pixelpipe. a develop module will need several of these: for previews and full blits to cairo and for the export function.

These five fields are ONE fact and must be read as one. ‘hash’ names a cacheline and ‘width’/‘height’ say what shape the pixels in it are – a cacheline records how many BYTES it holds and nothing about their layout, so a consumer that pairs a hash from one publication with dimensions from the next has no way to notice. It computes a cairo stride from the wrong width and paints the diagonal striping of a stride error, or writes a mis-shaped thumbnail into the mipmap cache. The published entry is routinely LARGER than width x height x bpp (aligned allocation, pool reuse), so a size check does not catch it either.

That was reachable: ‘hash’ was atomic and the dimensions were plain fields, so a GUI thread could read the hash, resolve its entry, and then read dimensions the worker had republished in between. It needs a publication whose SHAPE changes to become visible, which is why entering a clipping module's edit mode – where the crop is neutralised and the frame jumps to the full transformed image – is where it was reported.

So the record carries a seqlock, exactly as dt_dev_geometry_store_t does (develop/dev_geometry.h), and dt_dev_backbuf_snapshot is how a consumer reads it. Do not read the fields directly to pair them with pixels; a bare read is fine only for something that pairs with nothing.

WRITERS ARE SERIALISED BY CONVENTION, not by a lock: each backbuffer belongs to one pipe and is published by the thread that runs it, with the view's leave() joining that thread before it touches anything. A second concurrent publisher needs a real lock, not a second odd counter.

◆ dt_dev_pixelpipe_cache_request_t

◆ dt_dev_pixelpipe_change_t

◆ dt_dev_pixelpipe_iop_t

Runtime representation of one history item instantiated inside a pixelpipe node.

A piece is the sealed processing contract for one module on one pipe. It is authored during history -> pipe synchronization and then consumed by the recursive runtime without recomputing its format contract.

Contract sealing order:

  • the upstream descriptor is copied into #dsc_in,
  • module input_format() may overwrite the fields it requires on #dsc_in,
  • the resulting hard storage contract is sanitized against the actual upstream storage format; only bit depth, channel count, and RAW filter layout must match,
  • #dsc_out is initialized from #dsc_in,
  • commit_params() may update value-domain metadata that depends on module parameters, such as processed_maximum or RAW normalization coefficients,
  • module output_format() may finally overwrite the output storage contract.

After synchronization:

  • #dsc_in and #dsc_out are authoritative and immutable during process(), process_cl(), process_tiling(), and blending,
  • runtime code may compare the previous piece output descriptor with #dsc_in to decide whether a colorspace conversion is needed, but it must not rewrite the contract,
  • ROI callbacks (modify_roi_in() / modify_roi_out()) are still allowed to mutate the piece because ROI planning happens before processing starts and some modules derive descriptor details from the planned crop,
  • cache entries published by this piece inherit the descriptor of the pixels produced by this stage, namely #dsc_out.

Mutable lifecycle summary:

  • commit_params(), input_format(), output_format(), and ROI planning are the only places allowed to author the contract,
  • processing code treats the piece as read-only,
  • the cache-related fields only track output ownership/reuse hints and do not participate in the pixel format contract itself.

◆ dt_dev_pixelpipe_raster_mask_t

◆ dt_dev_pixelpipe_t

Enumeration Type Documentation

◆ dt_dev_pixelpipe_cache_request_t

Enumerator
DT_DEV_PIXELPIPE_CACHE_REQUEST_NONE 
DT_DEV_PIXELPIPE_CACHE_REQUEST_BACKBUF 
DT_DEV_PIXELPIPE_CACHE_REQUEST_MODULE 

Definition at line 180 of file pixelpipe_hb.h.

◆ dt_dev_pixelpipe_change_t

Enumerator
DT_DEV_PIPE_UNCHANGED 
DT_DEV_PIPE_TOP_CHANGED 
DT_DEV_PIPE_REMOVE 
DT_DEV_PIPE_SYNCH 
DT_DEV_PIPE_ZOOMED 
DT_DEV_PIPE_CACHE_REQUEST 
DT_DEV_PIPE_REENTRY 

Definition at line 168 of file pixelpipe_hb.h.

Function Documentation

◆ dt_dev_backbuf_get_hash()

◆ dt_dev_backbuf_get_history_hash()

static uint64_t dt_dev_backbuf_get_history_hash ( const dt_backbuf_t backbuf)
inlinestatic

◆ dt_dev_backbuf_publish_begin()

static void dt_dev_backbuf_publish_begin ( dt_backbuf_t backbuf)
inlinestatic

◆ dt_dev_backbuf_publish_end()

static void dt_dev_backbuf_publish_end ( dt_backbuf_t backbuf)
inlinestatic

◆ dt_dev_backbuf_set_hash()

static void dt_dev_backbuf_set_hash ( dt_backbuf_t backbuf,
const uint64_t  hash 
)
inlinestatic

◆ dt_dev_backbuf_set_history_hash()

static void dt_dev_backbuf_set_history_hash ( dt_backbuf_t backbuf,
const uint64_t  history_hash 
)
inlinestatic

◆ dt_dev_backbuf_snapshot()

static dt_backbuf_state_t dt_dev_backbuf_snapshot ( const dt_backbuf_t backbuf)
inlinestatic

Read the whole record as one publication.

Retries until a settled generation is read twice with no write in between. A publication is five stores between two counter bumps, so this converges immediately unless a writer is running right now; there is no waiting and no lock to order against anything.

Definition at line 257 of file pixelpipe_hb.h.

References dt_backbuf_t::bpp, dt_atomic_get_uint64(), DT_PIXELPIPE_CACHE_HASH_INVALID, dt_backbuf_t::generation, dt_backbuf_t::hash, dt_backbuf_t::height, dt_backbuf_t::history_hash, IS_NULL_PTR, state, and dt_backbuf_t::width.

Referenced by _lib_navigation_draw_callback(), _preview_pipe_finished(), dt_dev_lock_pipe_surface(), dt_dev_resync_mipmap_cache(), expose(), test_single_field_setter_is_a_publication(), and test_snapshot_never_crosses_publications().

◆ dt_dev_distort_detail_mask()

float * dt_dev_distort_detail_mask ( const dt_dev_pixelpipe_t pipe,
float *  src,
const struct dt_iop_module_t target_module 
)

◆ dt_dev_get_raster_mask()

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,
int *  error 
)

Retrieve a provider mask from the global cache and transform it to a consumer.

The returned buffer is always a caller-owned working copy. If an expected cache entry was evicted, *error is set to 1 so interactive pipelines can perform one targeted provider retry. error may be NULL for export/thumbnail callers.

Referenced by _develop_blend_init_raster_mask(), and write_image().

◆ dt_dev_pixelpipe_cleanup()

◆ dt_dev_pixelpipe_cleanup_nodes()

◆ dt_dev_pixelpipe_create_nodes()

◆ dt_dev_pixelpipe_disable_after()

void dt_dev_pixelpipe_disable_after ( dt_dev_pixelpipe_t pipe,
const char *  op 
)

◆ dt_dev_pixelpipe_disable_before()

void dt_dev_pixelpipe_disable_before ( dt_dev_pixelpipe_t pipe,
const char *  op 
)

◆ dt_dev_pixelpipe_get_cache_request()

static dt_dev_pixelpipe_cache_request_t dt_dev_pixelpipe_get_cache_request ( const dt_dev_pixelpipe_t pipe)
inlinestatic

◆ dt_dev_pixelpipe_get_cache_request_module()

static const struct dt_iop_module_t * dt_dev_pixelpipe_get_cache_request_module ( const dt_dev_pixelpipe_t pipe)
inlinestatic

◆ dt_dev_pixelpipe_get_changed()

static dt_dev_pixelpipe_change_t dt_dev_pixelpipe_get_changed ( const dt_dev_pixelpipe_t pipe)
inlinestatic

Definition at line 557 of file pixelpipe_hb.h.

References dt_dev_pixelpipe_t::changed, and dt_atomic_get_int().

Referenced by _resync_pipe_with_history().

◆ dt_dev_pixelpipe_get_hash()

◆ dt_dev_pixelpipe_get_history_hash()

static uint64_t dt_dev_pixelpipe_get_history_hash ( const dt_dev_pixelpipe_t pipe)
inlinestatic

◆ dt_dev_pixelpipe_get_realtime()

◆ dt_dev_pixelpipe_has_reentry()

gboolean dt_dev_pixelpipe_has_reentry ( dt_dev_pixelpipe_t pipe)

Definition at line 635 of file pixelpipe_hb.c.

References dt_dev_pixelpipe_t::reentry.

Referenced by dt_dev_darkroom_pipeline(), and dt_dev_pixelpipe_process().

◆ dt_dev_pixelpipe_has_shutdown()

static gboolean dt_dev_pixelpipe_has_shutdown ( const dt_dev_pixelpipe_t pipe)
inlinestatic

◆ dt_dev_pixelpipe_init()

◆ dt_dev_pixelpipe_init_cached()

◆ dt_dev_pixelpipe_init_dummy()

int dt_dev_pixelpipe_init_dummy ( dt_dev_pixelpipe_t pipe,
struct dt_develop_t dev 
)

◆ dt_dev_pixelpipe_init_export()

◆ dt_dev_pixelpipe_init_preview()

◆ dt_dev_pixelpipe_init_thumbnail()

int dt_dev_pixelpipe_init_thumbnail ( dt_dev_pixelpipe_t pipe,
struct dt_develop_t dev 
)

◆ dt_dev_pixelpipe_or_changed()

◆ dt_dev_pixelpipe_process()

int dt_dev_pixelpipe_process ( dt_dev_pixelpipe_t pipe,
dt_iop_roi_t  roi 
)

We loop over enabled providers and the mask ids they advertise, looking for dedicated cachelines required by this graph. Acquire the new references before releasing the previous set so an unchanged mask never becomes briefly evictable between consecutive renders.

Invalidate immediately before the raster reconstruction pass, while no other pixelpipe can republish one of these shared hashes. Invalidating when the first pass failed is too early: the preview pipe may run before this retry and recreate the provider image while the dedicated mask cacheline remains absent.

We are looking for the provider output captured in reentry_hash, then collect every enabled cumulative output after it. This forces recursion through the provider while preserving all upstream cache lines.

Definition at line 1475 of file pixelpipe_hb.c.

References _bypass_cache(), _get_requested_piece_node(), _print_opencl_errors(), _update_backbuf_cache_reference(), dt_develop_t::color_picker, dt_dev_pixelpipe_iop_t::data, dt_dev_pixelpipe_t::dev, dt_dev_pixelpipe_t::devid, dt_control_signal_get_global(), DT_DEBUG_CONTROL_SIGNAL_RAISE, DT_DEBUG_DEV, DT_DEBUG_MEMORY, DT_DEBUG_OPENCL, dt_dev_pixelpipe_cache_invalidate_hashes(), dt_dev_pixelpipe_cache_peek(), dt_dev_pixelpipe_cache_print(), dt_dev_pixelpipe_cache_ref_entry_by_hash(), DT_DEV_PIXELPIPE_CACHE_REQUEST_MODULE, DT_DEV_PIXELPIPE_CACHE_REQUEST_NONE, dt_dev_pixelpipe_cache_unref_hash(), DT_DEV_PIXELPIPE_DISPLAY_NONE, DT_DEV_PIXELPIPE_EXPORT, DT_DEV_PIXELPIPE_FULL, dt_dev_pixelpipe_get_cache_request(), dt_dev_pixelpipe_get_cache_request_module(), dt_dev_pixelpipe_get_hash(), dt_dev_pixelpipe_get_history_hash(), dt_dev_pixelpipe_get_roi_in(), dt_dev_pixelpipe_has_reentry(), dt_dev_pixelpipe_has_shutdown(), DT_DEV_PIXELPIPE_PREVIEW, dt_dev_pixelpipe_process_rec(), dt_dev_pixelpipe_raster_mask_hash(), dt_dev_pixelpipe_reset_cache_request(), DT_DEV_PIXELPIPE_THUMBNAIL, dt_free, dt_get_debug_flags(), dt_get_times(), dt_iop_is_raster_mask_used(), dt_masks_form_unref(), dt_masks_snapshot_current_forms(), dt_opencl_check_tuning(), dt_opencl_events_flush(), dt_opencl_events_reset(), dt_opencl_release_device(), dt_opencl_report_pipe_error(), dt_opencl_reserve_device_for_pipe(), dt_opencl_update_settings(), dt_pipeline_threadsafe_mutex(), DT_PIXELPIPE_CACHE_HASH_INVALID, dt_pixelpipe_get_global_hash(), dt_pixelpipe_get_pipe_name(), dt_print(), dt_print_mem_usage(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_sentry_set_processed_image(), dt_show_times(), DT_SIGNAL_CACHELINE_READY, dt_supervisor_node_key(), dt_telemetry_record_file_type(), dt_dev_pixelpipe_iop_t::enabled, FALSE, dt_dev_pixelpipe_t::flush_cache, dt_dev_pixelpipe_t::forms, dt_dev_pixelpipe_iop_t::global_hash, dt_develop_t::gui_attached, dt_iop_roi_t::height, dt_develop_t::image_storage, dt_develop_t::iop, IS_NULL_PTR, k, KILL_SWITCH_PIPE, dt_dev_pixelpipe_t::last_devid, dt_dev_pixelpipe_t::mask_display, mask_id, mask_name, dt_dev_pixelpipe_t::nodes, dt_iop_module_t::op, dt_dev_pixelpipe_t::opencl_enabled, dt_dev_pixelpipe_t::opencl_error, dt_develop_t::pending_module, dt_develop_t::pending_pipe, dt_develop_t::piece_hash, dt_dev_pixelpipe_t::raster_mask_hashes, dt_dev_pixelpipe_t::reentry_hash, dt_dev_pixelpipe_t::store_all_raster_masks, TRUE, dt_dev_pixelpipe_t::type, void(), and dt_iop_roi_t::width.

Referenced by _process_at_roi(), dt_dev_darkroom_pipeline(), and dt_imageio_export_with_flags().

◆ dt_dev_pixelpipe_reset_cache_request()

◆ dt_dev_pixelpipe_reset_reentry()

◆ dt_dev_pixelpipe_set_cache_request()

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 
)
inlinestatic

◆ dt_dev_pixelpipe_set_changed()

static void dt_dev_pixelpipe_set_changed ( dt_dev_pixelpipe_t pipe,
const dt_dev_pixelpipe_change_t  v 
)
inlinestatic

Definition at line 562 of file pixelpipe_hb.h.

References dt_dev_pixelpipe_t::changed, dt_atomic_set_int(), and v.

Referenced by dt_dev_pixelpipe_init_cached().

◆ dt_dev_pixelpipe_set_hash()

static void dt_dev_pixelpipe_set_hash ( dt_dev_pixelpipe_t pipe,
const uint64_t  hash 
)
inlinestatic

◆ dt_dev_pixelpipe_set_history_hash()

static void dt_dev_pixelpipe_set_history_hash ( dt_dev_pixelpipe_t pipe,
const uint64_t  history_hash 
)
inlinestatic

◆ dt_dev_pixelpipe_set_icc()

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 
)

◆ dt_dev_pixelpipe_set_input()

◆ dt_dev_pixelpipe_set_mask_rasterization_step()

void dt_dev_pixelpipe_set_mask_rasterization_step ( dt_dev_pixelpipe_t pipe,
const int  step 
)

Set the drawn-mask rasterisation step for the next frame, in image pixels (clamped to >= 1).

See also
dt_dev_pixelpipe_t::mask_rasterization_step.

Set the drawn-mask rasterisation step for the next frame, in image pixels (clamped to >= 1).

Parameters
stepMaximum distance, in image pixels, between consecutive samples of a mask outline. Clamped to at least 1 (pixel accuracy).

Called by the darkroom, which is the only place that knows both the zoom level and the user's preference. Nothing else raises it, so a pipe that is never told – every headless export, thumbnail and snapshot – keeps the pixel-accurate default it was initialised with.

Definition at line 432 of file pixelpipe_hb.c.

References IS_NULL_PTR, dt_dev_pixelpipe_t::mask_rasterization_step, and MAX.

Referenced by dt_dev_roi_request_publish().

◆ dt_dev_pixelpipe_set_realtime()

◆ dt_dev_pixelpipe_set_reentry()

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 bypass normal exact hits for one processing pass. Raster-mask consumers use this after the dedicated side-band cacheline was evicted while the provider image remained cached: provider and downstream image states are invalidated immediately before the retry, while upstream states and the synchronized node graph remain intact.

It can be used for any case where a full pipeline recompute is needed once, based on runtime module requirements, but a full cache flush would be overkill.

NOTE: in main darkroom pipe, the coordinates of the ROI can change between runs from the same thread.

Parameters
pipe
hashUnique ID of the object attempting capture the re-entry flag. This should stay constant between 2 pipeline runs from the same thread.
Returns
gboolean TRUE if the object could capture the flag

Definition at line 608 of file pixelpipe_hb.c.

References DT_DEBUG_DEV, DT_PIXELPIPE_CACHE_HASH_INVALID, dt_print(), FALSE, dt_dev_pixelpipe_t::reentry, dt_dev_pixelpipe_t::reentry_hash, and TRUE.

Referenced by dt_dev_get_raster_mask().

◆ dt_dev_pixelpipe_synch_all_real()

◆ dt_dev_pixelpipe_synch_top()

◆ dt_dev_pixelpipe_unset_reentry()

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. See dt_dev_pixelpipe_set_reentry.

Parameters
pipe
hashUnique ID of the object attempting capture the re-entry flag. This should stay constant between 2 pipeline runs from the same thread.
Returns
gboolean TRUE if the object could capture the flag

Definition at line 622 of file pixelpipe_hb.c.

References DT_DEBUG_DEV, DT_PIXELPIPE_CACHE_HASH_INVALID, dt_print(), FALSE, dt_dev_pixelpipe_t::reentry, dt_dev_pixelpipe_t::reentry_hash, and TRUE.

Referenced by dt_dev_get_raster_mask().

◆ dt_dev_retrieve_rawdetail_mask()

float * dt_dev_retrieve_rawdetail_mask ( const dt_dev_pixelpipe_t pipe,
const struct dt_iop_module_t target_module 
)

◆ dt_pixelpipe_get_pipe_name()