![]() |
Ansel 0.0
A darktable fork - bloat + design vision
|
#include "common/darktable.h"#include "common/dlopencl.h"#include "common/dtpthread.h"#include "common/iop_profile.h"#include "control/conf.h"#include <CL/cl.h>
Include dependency graph for opencl.h:
This graph shows which files directly or indirectly include this file:Go to the source code of this file.
Data Structures | |
| struct | dt_opencl_eventtag_t |
| struct | dt_opencl_device_t |
| struct | dt_opencl_t |
| struct | dt_opencl_local_buffer_t |
Macros | |
| #define | DT_OPENCL_MAX_PLATFORMS 5 |
| #define | DT_OPENCL_MAX_PROGRAMS 256 |
| #define | DT_OPENCL_MAX_KERNELS 512 |
| #define | DT_OPENCL_EVENTLISTSIZE 256 |
| #define | DT_OPENCL_EVENTNAMELENGTH 64 |
| #define | DT_OPENCL_MAX_ERRORS 5 |
| #define | DT_OPENCL_MAX_INCLUDES 7 |
| #define | DT_OPENCL_VENDOR_AMD 4098 |
| #define | DT_OPENCL_VENDOR_NVIDIA 4318 |
| #define | DT_OPENCL_VENDOR_INTEL 0x8086u |
| #define | DT_OPENCL_CBUFFSIZE 1024 |
| #define | DT_OPENCL_DEFAULT_ERROR -999 |
| #define | DT_OPENCL_SYSMEM_ALLOCATION -998 |
| #define | ROUNDUP(a, n) ((a) % (n) == 0 ? (a) : ((a) / (n)+1) * (n)) |
| #define | ROUNDUPDWD(a, b) dt_opencl_dev_roundup_width(a, b) |
| #define | ROUNDUPDHT(a, b) dt_opencl_dev_roundup_height(a, b) |
| #define | DT_OPENCL_BPP_TAG_RGBA8 (1u << 30) |
| #define | DT_OPENCL_BPP_ENCODE_RGBA8(bpp) ((int)((unsigned int)(bpp) | DT_OPENCL_BPP_TAG_RGBA8)) |
| #define | DT_OPENCL_BPP_IS_RGBA8(bpp) ((((unsigned int)(bpp)) & DT_OPENCL_BPP_TAG_RGBA8) != 0u) |
| #define | DT_OPENCL_BPP_DECODE(bpp) ((int)(((unsigned int)(bpp)) & ~DT_OPENCL_BPP_TAG_RGBA8)) |
| #define | DT_OPENCL_DEFAULT_COMPILE_INTEL ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations") |
| #define | DT_OPENCL_DEFAULT_COMPILE_AMD ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations") |
| #define | DT_OPENCL_DEFAULT_COMPILE_NVIDIA ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations") |
| #define | DT_OPENCL_DEFAULT_COMPILE ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations") |
| #define | DT_CLDEVICE_HEAD ("cldevice_v4") |
Typedefs | |
| typedef enum dt_opencl_memory_t | dt_opencl_memory_t |
| typedef struct dt_opencl_eventtag_t | dt_opencl_eventtag_t |
| typedef enum dt_opencl_pinmode_t | dt_opencl_pinmode_t |
| typedef struct dt_opencl_device_t | dt_opencl_device_t |
| typedef struct dt_opencl_t | dt_opencl_t |
| typedef struct dt_opencl_local_buffer_t | dt_opencl_local_buffer_t |
Enumerations | |
| enum | dt_opencl_memory_t { OPENCL_MEMORY_ADD , OPENCL_MEMORY_SUB } |
| enum | dt_opencl_pinmode_t { DT_OPENCL_PINNING_OFF = 0 , DT_OPENCL_PINNING_ON = 1 , DT_OPENCL_PINNING_DISABLED = 2 } |
Functions | |
| int | dt_opencl_get_device_info (dt_opencl_t *cl, cl_device_id device, cl_device_info param_name, void **param_value, size_t *param_value_size) |
| void | dt_opencl_init (dt_opencl_t *cl, const gboolean exclude_opencl, const gboolean print_statistics) |
| void | dt_opencl_cleanup (dt_opencl_t *cl) |
| void | dt_opencl_cleanup_device (dt_opencl_t *cl, int i) |
| int | dt_opencl_finish (const int devid) |
| int | dt_opencl_enqueue_barrier (const int devid) |
| int | dt_opencl_lock_device (const int pipetype) |
| void | dt_opencl_unlock_device (const int dev) |
| void | dt_opencl_md5sum (const char **files, char **md5sums) |
| int | dt_opencl_load_program (const int dev, const int prog, const char *filename, const char *binname, const char *cachedir, char *md5sum, char **includemd5, int *loaded_cached) |
| int | dt_opencl_build_program (const int dev, const int prog, const char *binname, const char *cachedir, char *md5sum, int loaded_cached) |
| int | dt_opencl_create_kernel (const int program, const char *name) |
| void | dt_opencl_free_kernel (const int kernel) |
| int | dt_opencl_get_max_work_item_sizes (const int dev, size_t *sizes) |
| int | dt_opencl_get_work_group_limits (const int dev, size_t *sizes, size_t *workgroupsize, unsigned long *localmemsize) |
| int | dt_opencl_get_kernel_work_group_size (const int dev, const int kernel, size_t *kernelworkgroupsize) |
| int | dt_opencl_set_kernel_arg (const int dev, const int kernel, const int num, const size_t size, const void *arg) |
| int | dt_opencl_enqueue_kernel_2d (const int dev, const int kernel, const size_t *sizes) |
| int | dt_opencl_enqueue_kernel_2d_with_local (const int dev, const int kernel, const size_t *sizes, const size_t *local) |
| int | dt_opencl_is_inited (void) |
| int | dt_opencl_is_enabled (void) |
| void | dt_opencl_disable (void) |
| int | dt_opencl_update_settings (void) |
| int | dt_opencl_copy_device_to_host (const int devid, void *host, void *device, const int width, const int height, const int bpp) |
| int | dt_opencl_read_host_from_device (const int devid, void *host, void *device, const int width, const int height, const int bpp) |
| int | dt_opencl_read_host_from_device_rowpitch (const int devid, void *host, void *device, const int width, const int height, const int rowpitch) |
| int | dt_opencl_read_host_from_device_non_blocking (const int devid, void *host, void *device, const int width, const int height, const int bpp) |
| int | dt_opencl_read_host_from_device_rowpitch_non_blocking (const int devid, void *host, void *device, const int width, const int height, const int rowpitch) |
| int | dt_opencl_read_host_from_device_raw (const int devid, void *host, void *device, const size_t *origin, const size_t *region, const int rowpitch, const int blocking) |
| int | dt_opencl_write_host_to_device (const int devid, void *host, void *device, const int width, const int height, const int bpp) |
| int | dt_opencl_write_host_to_device_rowpitch (const int devid, void *host, void *device, const int width, const int height, const int rowpitch) |
| int | dt_opencl_write_host_to_device_non_blocking (const int devid, void *host, void *device, const int width, const int height, const int bpp) |
| int | dt_opencl_write_host_to_device_rowpitch_non_blocking (const int devid, void *host, void *device, const int width, const int height, const int rowpitch) |
| int | dt_opencl_write_host_to_device_raw (const int devid, const void *host, void *device, const size_t *origin, const size_t *region, const int rowpitch, const int blocking) |
| void * | dt_opencl_copy_host_to_device (const int devid, void *host, const int width, const int height, const int bpp) |
| void * | dt_opencl_copy_host_to_device_rowpitch (const int devid, void *host, const int width, const int height, const int bpp, const int rowpitch) |
| void * | dt_opencl_copy_host_to_device_constant (const int devid, const size_t size, void *host) |
| int | dt_opencl_enqueue_copy_image (const int devid, cl_mem src, cl_mem dst, size_t *orig_src, size_t *orig_dst, size_t *region) |
| void * | dt_opencl_alloc_device (const int devid, const int width, const int height, const int bpp) |
| void * | dt_opencl_alloc_device_use_host_pointer (const int devid, const int width, const int height, const int bpp, void *host, const int flags) |
| int | dt_opencl_enqueue_copy_image_to_buffer (const int devid, cl_mem src_image, cl_mem dst_buffer, size_t *origin, size_t *region, size_t offset) |
| int | dt_opencl_enqueue_copy_buffer_to_image (const int devid, cl_mem src_buffer, cl_mem dst_image, size_t offset, size_t *origin, size_t *region) |
| int | dt_opencl_enqueue_copy_buffer_to_buffer (const int devid, cl_mem src_buffer, cl_mem dst_buffer, size_t srcoffset, size_t dstoffset, size_t size) |
| int | dt_opencl_read_buffer_from_device (const int devid, void *host, void *device, const size_t offset, const size_t size, const int blocking) |
| int | dt_opencl_write_buffer_to_device (const int devid, void *host, void *device, const size_t offset, const size_t size, const int blocking) |
| void * | dt_opencl_alloc_device_buffer (const int devid, const size_t size) |
| void * | dt_opencl_alloc_device_buffer_with_flags (const int devid, const size_t size, const int flags, void *host_ptr) |
| void | dt_opencl_release_mem_object (cl_mem mem) |
| void * | dt_opencl_map_buffer (const int devid, cl_mem buffer, const int blocking, const int flags, size_t offset, size_t size) |
| void * | dt_opencl_map_image (const int devid, cl_mem buffer, const int blocking, const int flags, size_t width, size_t height, int bpp) |
| int | dt_opencl_unmap_mem_object (const int devid, cl_mem mem_object, void *mapped_ptr) |
| size_t | dt_opencl_get_mem_object_size (cl_mem mem) |
| int | dt_opencl_get_image_width (cl_mem mem) |
| int | dt_opencl_get_image_height (cl_mem mem) |
| int | dt_opencl_get_image_element_size (cl_mem mem) |
| int | dt_opencl_get_mem_context_id (cl_mem mem) |
| cl_mem_flags | dt_opencl_get_mem_flags (cl_mem mem) |
| void | dt_opencl_memory_statistics (int devid, cl_mem mem, dt_opencl_memory_t action) |
| gboolean | dt_opencl_image_fits_device (const int devid, const size_t width, const size_t height, const unsigned bpp, const float factor, const size_t overhead) |
| cl_ulong | dt_opencl_get_device_available (const int devid) |
| void | dt_opencl_check_tuning (const int devid) |
| cl_ulong | dt_opencl_get_device_memalloc (const int devid) |
| int | dt_opencl_dev_roundup_width (int size, const int devid) |
| int | dt_opencl_dev_roundup_height (int size, const int devid) |
| cl_event * | dt_opencl_events_get_slot (const int devid, const char *tag) |
| void | dt_opencl_events_reset (const int devid) |
| void | dt_opencl_events_wait_for (const int devid) |
| cl_int | dt_opencl_events_flush (const int devid, const int reset) |
| void | dt_opencl_events_profiling (const int devid, const int aggregated) |
| int | dt_opencl_local_buffer_opt (const int devid, const int kernel, dt_opencl_local_buffer_t *factors) |
| void | dt_opencl_write_device_config (const int devid) |
| gboolean | dt_opencl_read_device_config (const int devid) |
| int | dt_opencl_avoid_atomics (const int devid) |
| int | dt_opencl_micro_nap (const int devid) |
| gboolean | dt_opencl_use_pinned_memory (const int devid) |
| gboolean | dt_opencl_is_pinned_memory (cl_mem mem) |
| #define DT_CLDEVICE_HEAD ("cldevice_v4") |
| #define DT_OPENCL_BPP_DECODE | ( | bpp | ) | ((int)(((unsigned int)(bpp)) & ~DT_OPENCL_BPP_TAG_RGBA8)) |
| #define DT_OPENCL_BPP_ENCODE_RGBA8 | ( | bpp | ) | ((int)((unsigned int)(bpp) | DT_OPENCL_BPP_TAG_RGBA8)) |
| #define DT_OPENCL_BPP_IS_RGBA8 | ( | bpp | ) | ((((unsigned int)(bpp)) & DT_OPENCL_BPP_TAG_RGBA8) != 0u) |
| #define DT_OPENCL_BPP_TAG_RGBA8 (1u << 30) |
| #define DT_OPENCL_CBUFFSIZE 1024 |
| #define DT_OPENCL_DEFAULT_COMPILE ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations") |
| #define DT_OPENCL_DEFAULT_COMPILE_AMD ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations") |
| #define DT_OPENCL_DEFAULT_COMPILE_INTEL ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations") |
| #define DT_OPENCL_DEFAULT_COMPILE_NVIDIA ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations") |
| #define DT_OPENCL_DEFAULT_ERROR -999 |
| #define DT_OPENCL_EVENTLISTSIZE 256 |
| #define DT_OPENCL_EVENTNAMELENGTH 64 |
| #define DT_OPENCL_MAX_ERRORS 5 |
| #define DT_OPENCL_MAX_INCLUDES 7 |
| #define DT_OPENCL_MAX_KERNELS 512 |
| #define DT_OPENCL_MAX_PLATFORMS 5 |
| #define DT_OPENCL_MAX_PROGRAMS 256 |
| #define DT_OPENCL_SYSMEM_ALLOCATION -998 |
| #define DT_OPENCL_VENDOR_AMD 4098 |
| #define DT_OPENCL_VENDOR_INTEL 0x8086u |
| #define DT_OPENCL_VENDOR_NVIDIA 4318 |
| #define ROUNDUPDHT | ( | a, | |
| b | |||
| ) | dt_opencl_dev_roundup_height(a, b) |
| #define ROUNDUPDWD | ( | a, | |
| b | |||
| ) | dt_opencl_dev_roundup_width(a, b) |
| typedef struct dt_opencl_device_t dt_opencl_device_t |
to support multi-gpu and mixed systems with cpu support, we encapsulate devices and use separate command queues.
| typedef struct dt_opencl_eventtag_t dt_opencl_eventtag_t |
Accounting information used for OpenCL events.
| typedef struct dt_opencl_local_buffer_t dt_opencl_local_buffer_t |
description of memory requirements of local buffer local buffer size will be calculated as: (xoffset + xfactor * x) * (yoffset + yfactor * y) * cellsize + overhead;
| typedef enum dt_opencl_memory_t dt_opencl_memory_t |
| typedef enum dt_opencl_pinmode_t dt_opencl_pinmode_t |
| typedef struct dt_opencl_t dt_opencl_t |
main struct, stored in darktable.opencl. holds pointers to all
| enum dt_opencl_memory_t |
| enum dt_opencl_pinmode_t |
| void * dt_opencl_alloc_device | ( | const int | devid, |
| const int | width, | ||
| const int | height, | ||
| const int | bpp | ||
| ) |
References _dt_opencl_alloc_image2d(), bpp, DT_OPENCL_BPP_DECODE, DT_OPENCL_BPP_IS_RGBA8, height, and width.
Referenced by _default_process_tiling_cl_ptp(), _default_process_tiling_cl_roi(), _downsample_guided_laplacian_postfilter_cl(), _drawlayer_acquire_layer_image(), _refine_with_detail_mask_cl(), _retouch_blur_cl(), box_max_cl(), box_min_cl(), color_smoothing_cl(), dt_bilateral_slice_to_output_cl(), dt_dev_pixelpipe_cache_alloc_cl_device_buffer(), dt_develop_blend_process_cl(), dt_ioppr_transform_image_colorspace_rgb_cl(), dt_local_laplacian_init_cl(), green_equilibration_cl(), guided_filter_cl_impl(), process_cl(), process_cl(), process_cl(), process_default_cl(), process_laplacian_bayer_cl(), process_laplacian_xtrans_cl(), process_markesteijn_cl(), process_nlmeans_cl(), process_rcd_cl(), process_vng_cl(), process_wavelets_cl(), and reconstruct_highlights_cl().
| void * dt_opencl_alloc_device_buffer | ( | const int | devid, |
| const size_t | size | ||
| ) |
References dt_opencl_alloc_device_buffer_with_flags(), and size.
Referenced by _refine_with_detail_mask_cl(), _retouch_clone_cl(), _retouch_heal_cl(), dt_bilateral_init_cl(), dt_gaussian_init_cl(), dt_iop_colorreconstruct_bilateral_init_cl(), dwt_wavelet_decompose_cl(), green_equilibration_cl(), nlmeans_denoise_cl(), nlmeans_denoiseprofile_cl(), process_cl(), process_laplacian_bayer_cl(), process_laplacian_xtrans_cl(), process_markesteijn_cl(), process_nlmeans_cl(), process_rcd_cl(), process_wavelets_cl(), and rt_build_scaled_mask_cl().
| void * dt_opencl_alloc_device_buffer_with_flags | ( | const int | devid, |
| const size_t | size, | ||
| const int | flags, | ||
| void * | host_ptr | ||
| ) |
References dt_opencl_device_t::context, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clCreateBuffer, DT_DEBUG_OPENCL, dt_dev_pixelpipe_cache_flush_clmem(), dt_opencl_memory_statistics(), dt_print(), flags, dt_opencl_t::inited, darktable_t::opencl, OPENCL_MEMORY_ADD, darktable_t::pixelpipe_cache, size, and dt_dlopencl_t::symbols.
Referenced by dt_opencl_alloc_device_buffer().
| void * dt_opencl_alloc_device_use_host_pointer | ( | const int | devid, |
| const int | width, | ||
| const int | height, | ||
| const int | bpp, | ||
| void * | host, | ||
| const int | flags | ||
| ) |
References _dt_opencl_alloc_image2d(), bpp, DT_OPENCL_BPP_DECODE, DT_OPENCL_BPP_IS_RGBA8, flags, height, and width.
Referenced by _drawlayer_acquire_source_image(), dt_dev_pixelpipe_cache_get_cl_buffer(), and dt_dev_pixelpipe_cache_get_pinned_image().
| int dt_opencl_avoid_atomics | ( | const int | devid | ) |
References dt_opencl_device_t::avoid_atomics, darktable, dt_opencl_t::dev, dt_opencl_t::inited, and darktable_t::opencl.
Referenced by commit_params().
| int dt_opencl_build_program | ( | const int | dev, |
| const int | prog, | ||
| const char * | binname, | ||
| const char * | cachedir, | ||
| char * | md5sum, | ||
| int | loaded_cached | ||
| ) |
builds the given program.
defined(_WIN32)
References darktable, dt_opencl_t::dev, dt_opencl_device_t::devid, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clBuildProgram, dt_dlopencl_symbols_t::dt_clGetProgramBuildInfo, dt_dlopencl_symbols_t::dt_clGetProgramInfo, DT_DEBUG_OPENCL, dt_free, DT_OPENCL_MAX_PROGRAMS, dt_print(), dt_vprint(), f, i, IS_NULL_PTR, darktable_t::opencl, dt_opencl_device_t::options, PATH_MAX, dt_opencl_device_t::program, and dt_dlopencl_t::symbols.
Referenced by dt_opencl_device_init().
| void dt_opencl_check_tuning | ( | const int | devid | ) |
check tuning settings and available memory for the device
References darktable, dt_opencl_t::dev, dt_conf_get_int64(), DT_DEBUG_MEMORY, DT_DEBUG_OPENCL, dt_print(), dt_opencl_device_t::forced_headroom, dt_opencl_t::inited, MAX, dt_opencl_device_t::max_global_mem, dt_opencl_device_t::name, darktable_t::opencl, and dt_opencl_device_t::used_available.
Referenced by dt_dev_pixelpipe_process().
| void dt_opencl_cleanup | ( | dt_opencl_t * | cl | ) |
cleans up the opencl subsystem.
References dt_opencl_t::bilateral, dt_opencl_t::blendop, dt_opencl_t::colorspaces, dt_opencl_t::dev, dt_opencl_t::dev_priority_export, dt_opencl_t::dev_priority_image, dt_opencl_t::dev_priority_preview, dt_opencl_t::dev_priority_thumbnail, dt_opencl_t::dlocl, dt_bilateral_free_cl_global(), dt_colorspaces_free_cl_global(), dt_develop_blend_free_cl_global(), dt_dwt_free_cl_global(), dt_free, dt_gaussian_free_cl_global(), dt_guided_filter_free_cl_global(), dt_heal_free_cl_global(), dt_interpolation_free_cl_global(), dt_opencl_cleanup_device(), dt_pthread_mutex_destroy(), dt_opencl_t::dwt, dt_opencl_t::gaussian, dt_opencl_t::guided_filter, dt_opencl_t::heal, i, dt_opencl_t::inited, dt_opencl_t::interpolation, dt_dlopencl_t::library, dt_opencl_t::lock, dt_opencl_t::num_devs, and dt_dlopencl_t::symbols.
Referenced by dt_cleanup().
| void dt_opencl_cleanup_device | ( | dt_opencl_t * | cl, |
| int | i | ||
| ) |
cleans up the i-th device in the cl->dev list
References dt_opencl_device_t::cmd_queue, dt_opencl_device_t::cname, dt_opencl_device_t::context, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clReleaseCommandQueue, dt_dlopencl_symbols_t::dt_clReleaseContext, dt_dlopencl_symbols_t::dt_clReleaseKernel, dt_dlopencl_symbols_t::dt_clReleaseProgram, DT_DEBUG_MEMORY, DT_DEBUG_OPENCL, dt_free, dt_opencl_events_reset(), DT_OPENCL_MAX_KERNELS, DT_OPENCL_MAX_PROGRAMS, dt_print_nts(), dt_pthread_mutex_destroy(), dt_opencl_device_t::eventlist, dt_opencl_device_t::eventtags, i, k, dt_opencl_device_t::kernel, dt_opencl_device_t::kernel_used, dt_opencl_device_t::lock, dt_opencl_device_t::maxeventslot, dt_opencl_device_t::name, dt_opencl_device_t::options, dt_opencl_device_t::options_md5, dt_opencl_device_t::peak_memory, dt_opencl_t::print_statistics, dt_opencl_device_t::program, dt_opencl_device_t::program_used, dt_dlopencl_t::symbols, dt_opencl_device_t::totalevents, dt_opencl_device_t::totallost, dt_opencl_device_t::totalsuccess, darktable_t::unmuted, dt_opencl_device_t::use_events, and dt_opencl_device_t::vendor.
Referenced by dt_opencl_cleanup(), and dt_opencl_init().
| int dt_opencl_copy_device_to_host | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const int | width, | ||
| const int | height, | ||
| const int | bpp | ||
| ) |
HAVE_OPENCL mode only: copy and alloc buffers.
References bpp, dt_opencl_read_host_from_device(), height, and width.
Referenced by dt_develop_blend_process_cl(), dt_ioppr_transform_image_colorspace_cl(), dt_ioppr_transform_image_colorspace_rgb_cl(), and process_cl().
References dt_opencl_device_t::context, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clCreateBuffer, DT_DEBUG_OPENCL, dt_opencl_memory_statistics(), dt_print(), dt_opencl_t::inited, darktable_t::opencl, OPENCL_MEMORY_ADD, size, and dt_dlopencl_t::symbols.
Referenced by _refine_with_detail_mask_cl(), _retouch_fill_cl(), _simulate_channel_cl(), apply_global_distortion_map_cl(), dt_develop_blend_process_cl(), dt_interpolation_resample_cl(), dt_ioppr_build_iccprofile_params_cl(), dt_ioppr_transform_image_colorspace_cl(), dt_ioppr_transform_image_colorspace_rgb_cl(), dual_demosaic_cl(), process_cl(), process_cl(), process_laplacian_bayer_cl(), process_laplacian_xtrans_cl(), process_markesteijn_cl(), process_vng_cl(), process_wavelets_cl(), rt_copy_image_masked_cl(), rt_copy_in_to_out_cl(), and rt_copy_mask_to_alpha_cl().
| void * dt_opencl_copy_host_to_device_rowpitch | ( | const int | devid, |
| void * | host, | ||
| const int | width, | ||
| const int | height, | ||
| const int | bpp, | ||
| const int | rowpitch | ||
| ) |
References bpp, dt_opencl_device_t::context, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clCreateImage2D, DT_DEBUG_OPENCL, dt_opencl_memory_statistics(), dt_print(), height, dt_opencl_t::inited, darktable_t::opencl, OPENCL_MEMORY_ADD, dt_dlopencl_t::symbols, and width.
Referenced by dt_opencl_copy_host_to_device().
| int dt_opencl_create_kernel | ( | const int | program, |
| const char * | name | ||
| ) |
inits a kernel. returns the index or -1 if fail.
References darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clCreateKernel, DT_DEBUG_OPENCL, DT_OPENCL_MAX_KERNELS, DT_OPENCL_MAX_PROGRAMS, dt_print(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_vprint(), error(), dt_opencl_t::inited, k, dt_opencl_device_t::kernel, dt_opencl_device_t::kernel_used, dt_opencl_t::lock, name, dt_opencl_t::num_devs, darktable_t::opencl, dt_opencl_device_t::program, and dt_dlopencl_t::symbols.
Referenced by dt_bilateral_init_cl_global(), dt_colorspaces_init_cl_global(), dt_develop_blend_init_cl_global(), dt_dwt_init_cl_global(), dt_gaussian_init_cl_global(), dt_guided_filter_init_cl_global(), dt_interpolation_init_cl_global(), dt_local_laplacian_init_cl_global(), init_global(), and init_global().
| int dt_opencl_dev_roundup_height | ( | int | size, |
| const int | devid | ||
| ) |
References dt_opencl_device_t::clroundup_ht, darktable, dt_opencl_t::dev, darktable_t::opencl, and size.
| int dt_opencl_dev_roundup_width | ( | int | size, |
| const int | devid | ||
| ) |
round size to a multiple of the value given in the device specifig config parameter for opencl_size_roundup
round size to a multiple of the value given in the device specifig config parameter clroundup_wd/ht
References dt_opencl_device_t::clroundup_wd, darktable, dt_opencl_t::dev, darktable_t::opencl, and size.
disable opencl
References darktable, dt_conf_set_bool(), dt_opencl_t::enabled, FALSE, dt_opencl_t::inited, and darktable_t::opencl.
| int dt_opencl_enqueue_barrier | ( | const int | devid | ) |
enqueues a synchronization point.
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueBarrier, dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
| int dt_opencl_enqueue_copy_buffer_to_buffer | ( | const int | devid, |
| cl_mem | src_buffer, | ||
| cl_mem | dst_buffer, | ||
| size_t | srcoffset, | ||
| size_t | dstoffset, | ||
| size_t | size | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueCopyBuffer, DT_DEBUG_OPENCL, dt_opencl_events_get_slot(), dt_print(), dt_opencl_t::inited, darktable_t::opencl, size, and dt_dlopencl_t::symbols.
Referenced by _simulate_channel_cl(), dt_bilateral_blur_cl(), dt_iop_colorreconstruct_bilateral_blur_cl(), dwt_get_image_layer_cl(), process_cl(), and process_markesteijn_cl().
| int dt_opencl_enqueue_copy_buffer_to_image | ( | const int | devid, |
| cl_mem | src_buffer, | ||
| cl_mem | dst_image, | ||
| size_t | offset, | ||
| size_t * | origin, | ||
| size_t * | region | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueCopyBufferToImage, DT_DEBUG_OPENCL, dt_opencl_events_get_slot(), dt_print(), dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by dt_gaussian_blur_cl().
| int dt_opencl_enqueue_copy_image | ( | const int | devid, |
| cl_mem | src, | ||
| cl_mem | dst, | ||
| size_t * | orig_src, | ||
| size_t * | orig_dst, | ||
| size_t * | region | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueCopyImage, DT_DEBUG_OPENCL, dt_opencl_events_get_slot(), dt_print(), dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by _drawlayer_copy_or_resample_layer_roi(), color_smoothing_cl(), dt_bilateral_slice_to_output_cl(), dt_develop_blend_process_cl(), dt_interpolation_resample_cl(), dt_ioppr_transform_image_colorspace_rgb_cl(), pixelpipe_process_on_GPU(), process_cl(), process_cl(), process_markesteijn_cl(), process_vng_cl(), process_wavelets_cl(), and reconstruct_highlights_cl().
| int dt_opencl_enqueue_copy_image_to_buffer | ( | const int | devid, |
| cl_mem | src_image, | ||
| cl_mem | dst_buffer, | ||
| size_t * | origin, | ||
| size_t * | region, | ||
| size_t | offset | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueCopyImageToBuffer, DT_DEBUG_OPENCL, dt_opencl_events_get_slot(), dt_print(), dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by dt_gaussian_blur_cl(), and process_cl().
| int dt_opencl_enqueue_kernel_2d | ( | const int | dev, |
| const int | kernel, | ||
| const size_t * | sizes | ||
| ) |
launch kernel!
References dt_opencl_enqueue_kernel_2d_with_local(), and kernel().
Referenced by _downsample_guided_laplacian_postfilter_cl(), _drawlayer_run_premult_over_kernel(), _refine_with_detail_mask_cl(), _retouch_blur_cl(), _retouch_fill_cl(), _simulate_channel_cl(), apply_global_distortion_map_cl(), box_max_cl(), box_min_cl(), cl_box_mean(), cl_covariances(), cl_generate_result(), cl_solve(), cl_split_rgb(), cl_update_covariance(), cl_variances(), dehaze_cl(), dt_bilateral_blur_cl(), dt_bilateral_init_cl(), dt_bilateral_slice_cl(), dt_bilateral_slice_to_output_cl(), dt_develop_blend_process_cl(), dt_gaussian_blur_cl(), dt_iop_colorreconstruct_bilateral_blur_cl(), dt_iop_colorreconstruct_bilateral_init_cl(), dt_iop_colorreconstruct_bilateral_slice_cl(), dt_ioppr_transform_image_colorspace_cl(), dt_ioppr_transform_image_colorspace_rgb_cl(), dt_local_laplacian_cl(), dual_demosaic_cl(), dwt_add_layer_cl(), dwt_subtract_layer_cl(), dwt_wavelet_decompose_cl(), green_equilibration_cl(), nlmeans_cl_accu(), nlmeans_cl_init(), nlmeans_denoise_cl(), nlmeans_denoiseprofile_cl(), process_cl(), process_cl(), process_cl(), process_default_cl(), process_laplacian_bayer_cl(), process_laplacian_xtrans_cl(), process_markesteijn_cl(), process_nlmeans_cl(), process_rcd_cl(), process_vng_cl(), process_wavelets_cl(), reconstruct_highlights_cl(), rt_copy_image_masked_cl(), rt_copy_in_to_out_cl(), rt_copy_mask_to_alpha_cl(), transition_map_cl(), wavelets_process_cl(), and wavelets_process_cl().
| int dt_opencl_enqueue_kernel_2d_with_local | ( | const int | dev, |
| const int | kernel, | ||
| const size_t * | sizes, | ||
| const size_t * | local | ||
| ) |
launch kernel with defined local size!
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueNDRangeKernel, dt_dlopencl_symbols_t::dt_clGetKernelInfo, DT_DEBUG_OPENCL, dt_opencl_events_get_slot(), DT_OPENCL_MAX_KERNELS, dt_print(), dt_opencl_t::inited, kernel(), dt_opencl_device_t::kernel, darktable_t::opencl, dt_dlopencl_t::symbols, and darktable_t::unmuted.
Referenced by _downsample_guided_laplacian_postfilter_cl(), color_smoothing_cl(), dt_bilateral_splat_cl(), dt_gaussian_blur_cl(), dt_interpolation_resample_cl(), dt_iop_colorreconstruct_bilateral_splat_cl(), dt_opencl_enqueue_kernel_2d(), green_equilibration_cl(), nlmeans_cl_horiz(), nlmeans_denoise_cl(), nlmeans_denoiseprofile_cl(), process_cl(), process_default_cl(), process_laplacian_bayer_cl(), process_laplacian_xtrans_cl(), process_markesteijn_cl(), process_nlmeans_cl(), process_rcd_cl(), process_vng_cl(), process_wavelets_cl(), reconstruct_highlights_cl(), wavelets_process_cl(), and wavelets_process_cl().
| cl_int dt_opencl_events_flush | ( | const int | devid, |
| const int | reset | ||
| ) |
Wait for events in eventlist to terminate, check for return status of events and report summary success info (CL_COMPLETE or last error code)
Wait for events in eventlist to terminate, check for return status and profiling info of events. If "reset" is TRUE report summary info (would be CL_COMPLETE or last error code) and print profiling info if needed. If "reset" is FALSE just store info (success value, profiling) from terminated events and release events for re-use by OpenCL driver.
References darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetEventInfo, dt_dlopencl_symbols_t::dt_clGetEventProfilingInfo, dt_dlopencl_symbols_t::dt_clReleaseEvent, DT_DEBUG_OPENCL, DT_DEBUG_PERF, dt_opencl_events_profiling(), dt_opencl_events_reset(), dt_opencl_events_wait_for(), dt_print(), dt_opencl_device_t::eventlist, dt_opencl_device_t::eventsconsolidated, dt_opencl_device_t::eventtags, FALSE, dt_opencl_t::inited, IS_NULL_PTR, k, dt_opencl_device_t::lostevents, dt_opencl_device_t::numevents, darktable_t::opencl, reset(), dt_opencl_device_t::summary, dt_dlopencl_t::symbols, dt_opencl_device_t::totalsuccess, darktable_t::unmuted, and dt_opencl_device_t::use_events.
Referenced by dt_dev_pixelpipe_process(), dt_opencl_events_get_slot(), and dt_opencl_finish().
| cl_event * dt_opencl_events_get_slot | ( | const int | devid, |
| const char * | tag | ||
| ) |
get next free slot in eventlist and manage size of eventlist
the following eventlist functions assume that affected structures are locked upstream get next free slot in eventlist (and manage size of eventlist)
References darktable, dt_opencl_t::dev, DT_DEBUG_OPENCL, dt_free, DT_OPENCL_EVENTLISTSIZE, DT_OPENCL_EVENTNAMELENGTH, dt_opencl_events_flush(), dt_print(), dt_opencl_device_t::event_handles, dt_opencl_device_t::eventlist, dt_opencl_device_t::eventsconsolidated, dt_opencl_device_t::eventtags, dt_opencl_t::inited, IS_NULL_PTR, dt_opencl_device_t::lostevents, MAX, dt_opencl_device_t::maxevents, dt_opencl_device_t::maxeventslot, dt_opencl_device_t::numevents, darktable_t::opencl, dt_opencl_device_t::totalevents, dt_opencl_device_t::totallost, dt_opencl_device_t::use_events, and void().
Referenced by dt_opencl_enqueue_copy_buffer_to_buffer(), dt_opencl_enqueue_copy_buffer_to_image(), dt_opencl_enqueue_copy_image(), dt_opencl_enqueue_copy_image_to_buffer(), dt_opencl_enqueue_kernel_2d_with_local(), dt_opencl_map_buffer(), dt_opencl_map_image(), dt_opencl_read_buffer_from_device(), dt_opencl_read_host_from_device_raw(), dt_opencl_unmap_mem_object(), dt_opencl_write_buffer_to_device(), and dt_opencl_write_host_to_device_raw().
| void dt_opencl_events_profiling | ( | const int | devid, |
| const int | aggregated | ||
| ) |
display OpenCL profiling information. If summary is not 0, try to generate summarized info for kernels
display OpenCL profiling information. If "aggregated" is TRUE, try to generate summarized info for each kernel
References darktable, dt_opencl_t::dev, DT_DEBUG_OPENCL, dt_free, DT_OPENCL_EVENTNAMELENGTH, dt_print(), dt_opencl_device_t::eventlist, dt_opencl_device_t::eventsconsolidated, dt_opencl_device_t::eventtags, i, dt_opencl_t::inited, IS_NULL_PTR, items, k, dt_opencl_device_t::lostevents, dt_opencl_device_t::name, dt_opencl_device_t::numevents, darktable_t::opencl, and dt_opencl_device_t::use_events.
Referenced by dt_opencl_events_flush().
| void dt_opencl_events_reset | ( | const int | devid | ) |
reset eventlist to empty state
References darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clReleaseEvent, dt_opencl_device_t::eventlist, dt_opencl_device_t::eventsconsolidated, dt_opencl_device_t::eventtags, dt_opencl_t::inited, IS_NULL_PTR, k, dt_opencl_device_t::lostevents, dt_opencl_device_t::maxevents, dt_opencl_device_t::numevents, darktable_t::opencl, dt_opencl_device_t::summary, dt_dlopencl_t::symbols, and dt_opencl_device_t::use_events.
Referenced by dt_dev_pixelpipe_process(), dt_opencl_cleanup_device(), and dt_opencl_events_flush().
| void dt_opencl_events_wait_for | ( | const int | devid | ) |
Wait for events in eventlist to terminate -> this is a blocking synchronization point Does not flush eventlist
Wait for events in eventlist to terminate -> this is a blocking synchronization point! Does not flush eventlist. Side effect: might adjust numevents.
References darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clWaitForEvents, DT_DEBUG_OPENCL, dt_vprint(), dt_opencl_device_t::eventlist, dt_opencl_device_t::eventsconsolidated, dt_opencl_t::inited, IS_NULL_PTR, dt_opencl_device_t::lostevents, dt_opencl_device_t::numevents, darktable_t::opencl, dt_dlopencl_t::symbols, dt_opencl_device_t::totallost, and dt_opencl_device_t::use_events.
Referenced by dt_dev_pixelpipe_cache_flush_clmem(), dt_dev_pixelpipe_cache_flush_host_pinned_image(), dt_dev_pixelpipe_cache_prepare_cl_input(), and dt_opencl_events_flush().
| int dt_opencl_finish | ( | const int | devid | ) |
both finish functions return TRUE in case of success cleans up command queue.
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clFinish, dt_opencl_events_flush(), FALSE, dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by _blend_layer_over_input_cl(), _default_process_tiling_cl_ptp(), _default_process_tiling_cl_roi(), _free_cache_entry(), dt_cleanup(), and pixelpipe_process_on_GPU().
| void dt_opencl_free_kernel | ( | const int | kernel | ) |
releases kernel resources again.
References darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clReleaseKernel, DT_OPENCL_MAX_KERNELS, dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_opencl_t::inited, kernel(), dt_opencl_device_t::kernel, dt_opencl_device_t::kernel_used, dt_opencl_t::lock, dt_opencl_t::num_devs, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by cleanup_global(), cleanup_global(), dt_bilateral_free_cl_global(), dt_colorspaces_free_cl_global(), dt_develop_blend_free_cl_global(), dt_dwt_free_cl_global(), dt_gaussian_free_cl_global(), dt_guided_filter_free_cl_global(), and dt_interpolation_free_cl_global().
| cl_ulong dt_opencl_get_device_available | ( | const int | devid | ) |
get available memory for the device
References darktable, dt_opencl_t::dev, dt_opencl_t::inited, dt_opencl_device_t::memory_in_use, darktable_t::opencl, and dt_opencl_device_t::used_available.
Referenced by _default_process_tiling_cl_ptp(), _default_process_tiling_cl_roi(), dt_opencl_image_fits_device(), and pixelpipe_process_on_GPU().
| int dt_opencl_get_device_info | ( | dt_opencl_t * | cl, |
| cl_device_id | device, | ||
| cl_device_info | param_name, | ||
| void ** | param_value, | ||
| size_t * | param_value_size | ||
| ) |
internally calls dt_clGetDeviceInfo, and takes care of memory allocation afterwards, *param_value will point to memory block of size at least *param_value which needs to be g_free()'d manually
References dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetDeviceInfo, DT_DEBUG_OPENCL, dt_free, dt_print(), error(), IS_NULL_PTR, and dt_dlopencl_t::symbols.
Referenced by dt_opencl_device_init().
| cl_ulong dt_opencl_get_device_memalloc | ( | const int | devid | ) |
get size of allocatable single buffer
References _opencl_get_device_memalloc(), darktable, dt_opencl_t::inited, and darktable_t::opencl.
Referenced by _default_process_tiling_cl_ptp(), and _default_process_tiling_cl_roi().
| int dt_opencl_get_image_element_size | ( | cl_mem | mem | ) |
References darktable, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetImageInfo, IS_NULL_PTR, darktable_t::opencl, size, and dt_dlopencl_t::symbols.
Referenced by _cache_entry_materialize_host_data_locked(), _pixel_cache_clmem_get(), ambient_light_cl(), and dt_dev_pixelpipe_cache_borrow_cl_payload().
| int dt_opencl_get_image_height | ( | cl_mem | mem | ) |
References darktable, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetImageInfo, IS_NULL_PTR, darktable_t::opencl, size, and dt_dlopencl_t::symbols.
Referenced by _cache_entry_materialize_host_data_locked(), _pixel_cache_clmem_get(), ambient_light_cl(), box_max_cl(), box_min_cl(), dehaze_cl(), dt_dev_pixelpipe_cache_borrow_cl_payload(), and transition_map_cl().
| int dt_opencl_get_image_width | ( | cl_mem | mem | ) |
References darktable, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetImageInfo, IS_NULL_PTR, darktable_t::opencl, size, and dt_dlopencl_t::symbols.
Referenced by _cache_entry_materialize_host_data_locked(), _pixel_cache_clmem_get(), ambient_light_cl(), box_max_cl(), box_min_cl(), dehaze_cl(), dt_dev_pixelpipe_cache_borrow_cl_payload(), and transition_map_cl().
| int dt_opencl_get_kernel_work_group_size | ( | const int | dev, |
| const int | kernel, | ||
| size_t * | kernelworkgroupsize | ||
| ) |
return max workgroup size for a specific kernel
References darktable, dt_opencl_t::dev, dt_opencl_device_t::devid, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetKernelWorkGroupInfo, DT_OPENCL_MAX_KERNELS, dt_opencl_t::inited, kernel(), dt_opencl_device_t::kernel, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by dt_opencl_local_buffer_opt().
| int dt_opencl_get_max_work_item_sizes | ( | const int | dev, |
| size_t * | sizes | ||
| ) |
return max size in sizes[3].
References darktable, dt_opencl_t::dev, dt_opencl_device_t::devid, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetDeviceInfo, dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by dt_opencl_get_work_group_limits().
| int dt_opencl_get_mem_context_id | ( | cl_mem | mem | ) |
References dt_opencl_device_t::context, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetMemObjectInfo, IS_NULL_PTR, dt_opencl_t::num_devs, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by _cache_entry_clmem_flush_device(), _cache_entry_clmem_flush_host_pinned_locked(), _cache_entry_clmem_has_host_pinned_locked(), _cache_entry_materialize_host_data_locked(), _cache_try_restore_device_payload(), _free_cache_entry(), _pixel_cache_clmem_get(), _pixel_cache_clmem_put(), dt_dev_pixelpipe_cache_borrow_cl_payload(), and dt_opencl_memory_statistics().
| cl_mem_flags dt_opencl_get_mem_flags | ( | cl_mem | mem | ) |
References darktable, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetMemObjectInfo, flags, dt_opencl_t::inited, IS_NULL_PTR, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by dt_opencl_is_pinned_memory().
| size_t dt_opencl_get_mem_object_size | ( | cl_mem | mem | ) |
References darktable, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetMemObjectInfo, IS_NULL_PTR, darktable_t::opencl, size, and dt_dlopencl_t::symbols.
Referenced by dt_opencl_memory_statistics().
| int dt_opencl_get_work_group_limits | ( | const int | dev, |
| size_t * | sizes, | ||
| size_t * | workgroupsize, | ||
| unsigned long * | localmemsize | ||
| ) |
return max size per dimension in sizes[3] and max total size in workgroupsize
References darktable, dt_opencl_t::dev, dt_opencl_device_t::devid, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clGetDeviceInfo, dt_opencl_get_max_work_item_sizes(), dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by dt_opencl_local_buffer_opt().
| gboolean dt_opencl_image_fits_device | ( | const int | devid, |
| const size_t | width, | ||
| const size_t | height, | ||
| const unsigned | bpp, | ||
| const float | factor, | ||
| const size_t | overhead | ||
| ) |
check if image size fit into limits given by OpenCL runtime
References _opencl_get_device_memalloc(), bpp, darktable, dt_opencl_t::dev, DT_DEBUG_OPENCL, dt_opencl_get_device_available(), dt_print(), factor, FALSE, height, dt_opencl_t::inited, dt_opencl_device_t::max_image_height, dt_opencl_device_t::max_image_width, darktable_t::opencl, TRUE, and width.
Referenced by guided_filter_cl(), and pixelpipe_process_on_GPU().
| void dt_opencl_init | ( | dt_opencl_t * | cl, |
| const gboolean | exclude_opencl, | ||
| const gboolean | print_statistics | ||
| ) |
inits the opencl subsystem.
References _opencl_splash_active, dt_opencl_t::bilateral, dt_opencl_t::blendop, dt_opencl_t::colorspaces, dt_opencl_t::crc, dt_opencl_t::dev, dt_opencl_t::dev_priority_export, dt_opencl_t::dev_priority_image, dt_opencl_t::dev_priority_preview, dt_opencl_t::dev_priority_thumbnail, dt_opencl_t::dlocl, dt_bilateral_init_cl_global(), dt_capabilities_add(), dt_dlopencl_symbols_t::dt_clGetDeviceIDs, dt_dlopencl_symbols_t::dt_clGetPlatformIDs, dt_dlopencl_symbols_t::dt_clGetPlatformInfo, dt_colorspaces_init_cl_global(), dt_conf_get_bool(), dt_conf_get_int(), dt_conf_get_string_const(), DT_DEBUG_OPENCL, dt_develop_blend_init_cl_global(), dt_dlopencl_init(), dt_dwt_init_cl_global(), dt_free, dt_gaussian_init_cl_global(), dt_guided_filter_init_cl_global(), dt_heal_init_cl_global(), dt_interpolation_init_cl_global(), dt_local_laplacian_init_cl_global(), dt_opencl_apply_scheduling_profile(), DT_OPENCL_CBUFFSIZE, dt_opencl_cleanup_device(), dt_opencl_device_init(), DT_OPENCL_MAX_PLATFORMS, dt_print_nts(), dt_pthread_mutex_init(), dt_opencl_t::dwt, dt_opencl_t::enabled, dt_opencl_t::error_count, FALSE, dt_opencl_t::gaussian, dt_opencl_t::guided_filter, dt_opencl_t::heal, i, dt_opencl_t::inited, dt_opencl_t::interpolation, IS_NULL_PTR, k, dt_dlopencl_t::library, dt_opencl_t::local_laplacian, dt_opencl_t::lock, dt_opencl_t::mandatory, n, dt_opencl_device_t::name, dt_opencl_t::num_devs, dt_opencl_t::print_statistics, dt_opencl_t::stopped, and dt_dlopencl_t::symbols.
Referenced by dt_init().
| int dt_opencl_is_enabled | ( | void | ) |
check if opencl is enabled
References darktable, dt_opencl_t::enabled, FALSE, dt_opencl_t::inited, and darktable_t::opencl.
Referenced by _get_base_value().
| int dt_opencl_is_inited | ( | void | ) |
check if opencl is inited
References darktable, dt_opencl_t::inited, and darktable_t::opencl.
Referenced by _is_opencl_supported(), and _seal_opencl_cache_policy().
| gboolean dt_opencl_is_pinned_memory | ( | cl_mem | mem | ) |
| int dt_opencl_load_program | ( | const int | dev, |
| const int | prog, | ||
| const char * | filename, | ||
| const char * | binname, | ||
| const char * | cachedir, | ||
| char * | md5sum, | ||
| char ** | includemd5, | ||
| int * | loaded_cached | ||
| ) |
loads the given .cl file and returns a reference to an internal program.
defined(_WIN32)
References dt_opencl_device_t::context, darktable, dt_opencl_t::dev, dt_opencl_device_t::devid, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clCreateProgramWithBinary, dt_dlopencl_symbols_t::dt_clCreateProgramWithSource, dt_dlopencl_symbols_t::dt_clGetDeviceInfo, dt_dlopencl_symbols_t::dt_clGetPlatformInfo, dt_concat_path_file(), DT_DEBUG_OPENCL, dt_free, DT_OPENCL_MAX_INCLUDES, DT_OPENCL_MAX_PROGRAMS, dt_print(), dt_vprint(), f, fopen_stat(), IS_NULL_PTR, n, darktable_t::opencl, dt_opencl_device_t::options, dt_opencl_device_t::options_md5, PATH_MAX, dt_opencl_device_t::program, dt_opencl_device_t::program_used, and dt_dlopencl_t::symbols.
Referenced by dt_opencl_device_init().
| int dt_opencl_local_buffer_opt | ( | const int | devid, |
| const int | kernel, | ||
| dt_opencl_local_buffer_t * | factors | ||
| ) |
utility function to calculate optimal work group dimensions for a given kernel
References dt_opencl_local_buffer_t::cellsize, darktable, DT_DEBUG_OPENCL, dt_opencl_get_kernel_work_group_size(), dt_opencl_get_work_group_limits(), dt_print(), FALSE, dt_opencl_t::inited, kernel(), nextpow2(), darktable_t::opencl, dt_opencl_local_buffer_t::overhead, dt_opencl_local_buffer_t::sizex, dt_opencl_local_buffer_t::sizey, TRUE, dt_opencl_local_buffer_t::xfactor, dt_opencl_local_buffer_t::xoffset, dt_opencl_local_buffer_t::yfactor, and dt_opencl_local_buffer_t::yoffset.
Referenced by _downsample_guided_laplacian_postfilter_cl(), color_smoothing_cl(), dt_bilateral_init_cl(), dt_gaussian_init_cl(), dt_interpolation_resample_cl(), dt_iop_colorreconstruct_bilateral_init_cl(), get_blocksizes(), green_equilibration_cl(), process_cl(), process_default_cl(), process_laplacian_bayer_cl(), process_laplacian_xtrans_cl(), process_markesteijn_cl(), process_nlmeans_cl(), process_rcd_cl(), process_vng_cl(), process_wavelets_cl(), reconstruct_highlights_cl(), wavelets_process_cl(), and wavelets_process_cl().
| int dt_opencl_lock_device | ( | const int | pipetype | ) |
locks a device for your thread's exclusive use
References darktable, dt_opencl_t::dev, dt_opencl_t::dev_priority_export, dt_opencl_t::dev_priority_image, dt_opencl_t::dev_priority_preview, dt_opencl_t::dev_priority_thumbnail, dt_conf_get_int(), DT_DEBUG_OPENCL, DT_DEV_PIXELPIPE_EXPORT, DT_DEV_PIXELPIPE_FULL, DT_DEV_PIXELPIPE_PREVIEW, DT_DEV_PIXELPIPE_THUMBNAIL, dt_free, dt_iop_nap(), dt_print(), dt_pthread_mutex_BAD_trylock(), dt_pthread_mutex_lock(), dt_pthread_mutex_unlock(), dt_opencl_t::inited, dt_opencl_device_t::lock, dt_opencl_t::lock, dt_opencl_t::mandatory, MAX, n, dt_opencl_t::num_devs, and darktable_t::opencl.
Referenced by dt_dev_pixelpipe_process().
| void * dt_opencl_map_buffer | ( | const int | devid, |
| cl_mem | buffer, | ||
| const int | blocking, | ||
| const int | flags, | ||
| size_t | offset, | ||
| size_t | size | ||
| ) |
| void * dt_opencl_map_image | ( | const int | devid, |
| cl_mem | buffer, | ||
| const int | blocking, | ||
| const int | flags, | ||
| size_t | width, | ||
| size_t | height, | ||
| int | bpp | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueMapImage, DT_DEBUG_OPENCL, dt_opencl_events_get_slot(), dt_print(), flags, height, dt_opencl_t::inited, darktable_t::opencl, dt_dlopencl_t::symbols, and width.
Referenced by _cache_entry_materialize_host_data_locked(), _drawlayer_sync_host_image_to_device(), dt_dev_pixelpipe_cache_get_pinned_image(), and dt_dev_pixelpipe_cache_sync_cl_buffer().
| void dt_opencl_md5sum | ( | const char ** | files, |
| char ** | md5sums | ||
| ) |
calculates md5sums for a list of CL include files.
References dt_concat_path_file(), DT_DEBUG_OPENCL, dt_free, dt_loc_get_kerneldir(), DT_OPENCL_MAX_INCLUDES, dt_print(), f, fopen_stat(), IS_NULL_PTR, n, and PATH_MAX.
Referenced by dt_opencl_device_init().
| void dt_opencl_memory_statistics | ( | int | devid, |
| cl_mem | mem, | ||
| dt_opencl_memory_t | action | ||
| ) |
References darktable, dt_opencl_t::dev, DT_DEBUG_MEMORY, DT_DEBUG_OPENCL, dt_opencl_get_mem_context_id(), dt_opencl_get_mem_object_size(), dt_print(), MAX, dt_opencl_device_t::memory_in_use, darktable_t::opencl, OPENCL_MEMORY_ADD, dt_opencl_device_t::peak_memory, size, and darktable_t::unmuted.
Referenced by _dt_opencl_alloc_image2d(), dt_opencl_alloc_device_buffer_with_flags(), dt_opencl_copy_host_to_device_constant(), dt_opencl_copy_host_to_device_rowpitch(), and dt_opencl_release_mem_object().
| int dt_opencl_micro_nap | ( | const int | devid | ) |
References darktable, dt_opencl_t::dev, dt_opencl_t::inited, dt_opencl_device_t::micro_nap, and darktable_t::opencl.
Referenced by nlmeans_denoise_cl().
| int dt_opencl_read_buffer_from_device | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const size_t | offset, | ||
| const size_t | size, | ||
| const int | blocking | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueReadBuffer, dt_opencl_events_get_slot(), dt_opencl_t::inited, darktable_t::opencl, size, and dt_dlopencl_t::symbols.
Referenced by dt_heal_cl(), dt_iop_colorreconstruct_bilateral_freeze_cl(), green_equilibration_cl(), process_cl(), process_wavelets_cl(), rt_adjust_levels_cl(), and rt_process_stats_cl().
| gboolean dt_opencl_read_device_config | ( | const int | devid | ) |
References _dt_opencl_get_conf_int(), dt_opencl_device_t::avoid_atomics, dt_opencl_device_t::clroundup_ht, dt_opencl_device_t::clroundup_wd, dt_opencl_device_t::cname, darktable, dt_opencl_t::dev, dt_opencl_device_t::disabled, DT_CLDEVICE_HEAD, dt_conf_get_int(), dt_conf_get_int64(), dt_conf_key_not_empty(), DT_DEBUG_OPENCL, DT_OPENCL_PINNING_DISABLED, DT_OPENCL_PINNING_ON, dt_opencl_write_device_config(), dt_print(), dt_opencl_device_t::event_handles, FALSE, dt_opencl_device_t::forced_headroom, dt_opencl_device_t::micro_nap, darktable_t::opencl, dt_opencl_device_t::pinned_memory, TRUE, and dt_opencl_device_t::use_events.
Referenced by dt_opencl_device_init().
| int dt_opencl_read_host_from_device_non_blocking | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const int | width, | ||
| const int | height, | ||
| const int | bpp | ||
| ) |
References bpp, dt_opencl_read_host_from_device_rowpitch_non_blocking(), height, and width.
| int dt_opencl_read_host_from_device_raw | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const size_t * | origin, | ||
| const size_t * | region, | ||
| const int | rowpitch, | ||
| const int | blocking | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueReadImage, dt_opencl_events_get_slot(), dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by _default_process_tiling_cl_ptp(), _default_process_tiling_cl_roi(), dt_opencl_read_host_from_device_rowpitch(), and dt_opencl_read_host_from_device_rowpitch_non_blocking().
| int dt_opencl_read_host_from_device_rowpitch | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const int | width, | ||
| const int | height, | ||
| const int | rowpitch | ||
| ) |
References darktable, dt_opencl_read_host_from_device_raw(), height, dt_opencl_t::inited, darktable_t::opencl, and width.
Referenced by dt_opencl_read_host_from_device().
| int dt_opencl_read_host_from_device_rowpitch_non_blocking | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const int | width, | ||
| const int | height, | ||
| const int | rowpitch | ||
| ) |
References darktable, dt_opencl_read_host_from_device_raw(), height, dt_opencl_t::inited, darktable_t::opencl, and width.
Referenced by dt_opencl_read_host_from_device_non_blocking().
| void dt_opencl_release_mem_object | ( | cl_mem | mem | ) |
References darktable, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clReleaseMemObject, dt_opencl_memory_statistics(), dt_opencl_t::inited, IS_NULL_PTR, darktable_t::opencl, OPENCL_MEMORY_SUB, and dt_dlopencl_t::symbols.
Referenced by _blend_layer_over_input_cl(), _cache_entry_clmem_flush_device(), _cache_entry_clmem_flush_host_pinned_locked(), _default_process_tiling_cl_ptp(), _default_process_tiling_cl_roi(), _downsample_guided_laplacian_postfilter_cl(), _drawlayer_acquire_source_image(), _pixel_cache_clmem_put(), _refine_with_detail_mask_cl(), _retouch_blur_cl(), _retouch_clone_cl(), _retouch_fill_cl(), _retouch_heal_cl(), _simulate_channel_cl(), apply_global_distortion_map_cl(), box_max_cl(), box_min_cl(), color_smoothing_cl(), dt_bilateral_free_cl(), dt_bilateral_slice_to_output_cl(), dt_dev_pixelpipe_cache_flush_entry_clmem(), dt_dev_pixelpipe_cache_get_pinned_image(), dt_dev_pixelpipe_cache_release_cl_buffer(), dt_develop_blend_process_cl(), dt_gaussian_free_cl(), dt_gaussian_init_cl(), dt_interpolation_resample_cl(), dt_iop_colorreconstruct_bilateral_free_cl(), dt_ioppr_free_iccprofile_params_cl(), dt_ioppr_transform_image_colorspace_cl(), dt_ioppr_transform_image_colorspace_rgb_cl(), dt_local_laplacian_free_cl(), dual_demosaic_cl(), dwt_wavelet_decompose_cl(), green_equilibration_cl(), guided_filter_cl_impl(), nlmeans_denoise_cl(), nlmeans_denoiseprofile_cl(), process_cl(), process_cl(), process_cl(), process_default_cl(), process_laplacian_bayer_cl(), process_laplacian_xtrans_cl(), process_markesteijn_cl(), process_nlmeans_cl(), process_rcd_cl(), process_vng_cl(), process_wavelets_cl(), reconstruct_highlights_cl(), rt_copy_image_masked_cl(), rt_copy_in_to_out_cl(), rt_copy_mask_to_alpha_cl(), and rt_process_forms_cl().
| int dt_opencl_set_kernel_arg | ( | const int | dev, |
| const int | kernel, | ||
| const int | num, | ||
| const size_t | size, | ||
| const void * | arg | ||
| ) |
attach arg.
References darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clSetKernelArg, DT_OPENCL_MAX_KERNELS, dt_opencl_t::inited, kernel(), dt_opencl_device_t::kernel, darktable_t::opencl, size, and dt_dlopencl_t::symbols.
Referenced by _downsample_guided_laplacian_postfilter_cl(), _drawlayer_run_premult_over_kernel(), _refine_with_detail_mask_cl(), _retouch_blur_cl(), _retouch_fill_cl(), _simulate_channel_cl(), apply_global_distortion_map_cl(), box_max_cl(), box_min_cl(), cl_box_mean(), cl_covariances(), cl_generate_result(), cl_solve(), cl_split_rgb(), cl_update_covariance(), cl_variances(), color_smoothing_cl(), dehaze_cl(), dt_bilateral_blur_cl(), dt_bilateral_init_cl(), dt_bilateral_slice_cl(), dt_bilateral_slice_to_output_cl(), dt_bilateral_splat_cl(), dt_develop_blend_process_cl(), dt_gaussian_blur_cl(), dt_interpolation_resample_cl(), dt_iop_colorreconstruct_bilateral_blur_cl(), dt_iop_colorreconstruct_bilateral_init_cl(), dt_iop_colorreconstruct_bilateral_slice_cl(), dt_iop_colorreconstruct_bilateral_splat_cl(), dt_ioppr_transform_image_colorspace_cl(), dt_ioppr_transform_image_colorspace_rgb_cl(), dt_local_laplacian_cl(), dual_demosaic_cl(), dwt_add_layer_cl(), dwt_subtract_layer_cl(), dwt_wavelet_decompose_cl(), green_equilibration_cl(), nlmeans_cl_accu(), nlmeans_cl_horiz(), nlmeans_cl_init(), nlmeans_denoise_cl(), nlmeans_denoiseprofile_cl(), process_cl(), process_cl(), process_cl(), process_default_cl(), process_laplacian_bayer_cl(), process_laplacian_xtrans_cl(), process_markesteijn_cl(), process_nlmeans_cl(), process_rcd_cl(), process_vng_cl(), process_wavelets_cl(), reconstruct_highlights_cl(), rt_copy_image_masked_cl(), rt_copy_in_to_out_cl(), rt_copy_mask_to_alpha_cl(), transition_map_cl(), wavelets_process_cl(), and wavelets_process_cl().
| void dt_opencl_unlock_device | ( | const int | dev | ) |
done with your command queue.
References darktable, dt_opencl_t::dev, dt_pthread_mutex_BAD_unlock(), dt_opencl_t::inited, dt_opencl_device_t::lock, dt_opencl_t::num_devs, and darktable_t::opencl.
Referenced by dt_dev_pixelpipe_process().
| int dt_opencl_unmap_mem_object | ( | const int | devid, |
| cl_mem | mem_object, | ||
| void * | mapped_ptr | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueUnmapMemObject, DT_DEBUG_OPENCL, dt_opencl_events_get_slot(), dt_print(), dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by _cache_entry_materialize_host_data_locked(), _drawlayer_sync_host_image_to_device(), dt_dev_pixelpipe_cache_get_pinned_image(), and dt_dev_pixelpipe_cache_sync_cl_buffer().
| int dt_opencl_update_settings | ( | void | ) |
update enabled flag and profile with value from preferences, returns enabled flag
References darktable, dt_conf_get_bool(), DT_DEBUG_OPENCL, dt_print(), dt_opencl_t::enabled, dt_opencl_t::error_count, FALSE, dt_opencl_t::inited, darktable_t::opencl, and dt_opencl_t::stopped.
Referenced by dt_dev_pixelpipe_process().
| gboolean dt_opencl_use_pinned_memory | ( | const int | devid | ) |
References darktable, dt_opencl_t::dev, FALSE, dt_opencl_t::inited, darktable_t::opencl, and dt_opencl_device_t::pinned_memory.
Referenced by dt_dev_pixelpipe_cache_get_cl_buffer(), and dt_dev_pixelpipe_cache_get_pinned_image().
| int dt_opencl_write_buffer_to_device | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const size_t | offset, | ||
| const size_t | size, | ||
| const int | blocking | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueWriteBuffer, dt_opencl_events_get_slot(), dt_opencl_t::inited, darktable_t::opencl, size, and dt_dlopencl_t::symbols.
Referenced by dt_heal_cl(), process_cl(), rt_adjust_levels_cl(), rt_build_scaled_mask_cl(), and rt_process_stats_cl().
| void dt_opencl_write_device_config | ( | const int | devid | ) |
utility functions handling device specific properties
References dt_opencl_device_t::avoid_atomics, dt_opencl_device_t::clroundup_ht, dt_opencl_device_t::clroundup_wd, dt_opencl_device_t::cname, darktable, dt_opencl_t::dev, dt_opencl_device_t::disabled, DT_CLDEVICE_HEAD, dt_conf_set_int(), DT_OPENCL_PINNING_DISABLED, DT_OPENCL_PINNING_ON, dt_opencl_device_t::event_handles, dt_opencl_device_t::forced_headroom, dt_opencl_device_t::micro_nap, darktable_t::opencl, and dt_opencl_device_t::pinned_memory.
Referenced by dt_opencl_device_init(), and dt_opencl_read_device_config().
| int dt_opencl_write_host_to_device | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const int | width, | ||
| const int | height, | ||
| const int | bpp | ||
| ) |
References bpp, dt_opencl_write_host_to_device_rowpitch(), height, and width.
Referenced by _drawlayer_sync_host_image_to_device(), _refine_with_detail_mask_cl(), dt_dev_pixelpipe_cache_get_pinned_image(), dt_dev_pixelpipe_cache_prepare_cl_input(), dt_dev_pixelpipe_cache_sync_cl_buffer(), dt_develop_blend_process_cl(), dt_ioppr_transform_image_colorspace_cl(), dt_ioppr_transform_image_colorspace_rgb_cl(), guided_filter_cl_fallback(), and process_cl().
| int dt_opencl_write_host_to_device_non_blocking | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const int | width, | ||
| const int | height, | ||
| const int | bpp | ||
| ) |
References bpp, dt_opencl_write_host_to_device_rowpitch_non_blocking(), height, and width.
| int dt_opencl_write_host_to_device_raw | ( | const int | devid, |
| const void * | host, | ||
| void * | device, | ||
| const size_t * | origin, | ||
| const size_t * | region, | ||
| const int | rowpitch, | ||
| const int | blocking | ||
| ) |
References dt_opencl_device_t::cmd_queue, darktable, dt_opencl_t::dev, dt_opencl_t::dlocl, dt_dlopencl_symbols_t::dt_clEnqueueWriteImage, dt_opencl_events_get_slot(), dt_opencl_t::inited, darktable_t::opencl, and dt_dlopencl_t::symbols.
Referenced by _default_process_tiling_cl_ptp(), _default_process_tiling_cl_roi(), _drawlayer_sync_host_image_to_device(), dt_opencl_write_host_to_device_rowpitch(), dt_opencl_write_host_to_device_rowpitch_non_blocking(), and process_cl().
| int dt_opencl_write_host_to_device_rowpitch | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const int | width, | ||
| const int | height, | ||
| const int | rowpitch | ||
| ) |
References darktable, dt_opencl_write_host_to_device_raw(), height, dt_opencl_t::inited, darktable_t::opencl, and width.
Referenced by dt_opencl_write_host_to_device().
| int dt_opencl_write_host_to_device_rowpitch_non_blocking | ( | const int | devid, |
| void * | host, | ||
| void * | device, | ||
| const int | width, | ||
| const int | height, | ||
| const int | rowpitch | ||
| ) |
References darktable, dt_opencl_write_host_to_device_raw(), height, dt_opencl_t::inited, darktable_t::opencl, and width.
Referenced by dt_opencl_write_host_to_device_non_blocking().