44#define DT_OPENCL_MAX_PLATFORMS 5
45#define DT_OPENCL_MAX_PROGRAMS 256
46#define DT_OPENCL_MAX_KERNELS 512
47#define DT_OPENCL_EVENTLISTSIZE 256
48#define DT_OPENCL_EVENTNAMELENGTH 64
49#define DT_OPENCL_MAX_ERRORS 5
50#define DT_OPENCL_MAX_INCLUDES 7
51#define DT_OPENCL_VENDOR_AMD 4098
52#define DT_OPENCL_VENDOR_NVIDIA 4318
53#define DT_OPENCL_VENDOR_INTEL 0x8086u
54#define DT_OPENCL_CBUFFSIZE 1024
57#define DT_OPENCL_DEFAULT_ERROR -999
58#define DT_OPENCL_SYSMEM_ALLOCATION -998
78#define ROUNDUP(a, n) ((a) % (n) == 0 ? (a) : ((a) / (n)+1) * (n))
81#define ROUNDUPDWD(a, b) dt_opencl_dev_roundup_width(a, b)
82#define ROUNDUPDHT(a, b) dt_opencl_dev_roundup_height(a, b)
84#define DT_OPENCL_BPP_TAG_RGBA8 (1u << 30)
85#define DT_OPENCL_BPP_ENCODE_RGBA8(bpp) ((int)((unsigned int)(bpp) | DT_OPENCL_BPP_TAG_RGBA8))
86#define DT_OPENCL_BPP_IS_RGBA8(bpp) ((((unsigned int)(bpp)) & DT_OPENCL_BPP_TAG_RGBA8) != 0u)
87#define DT_OPENCL_BPP_DECODE(bpp) ((int)(((unsigned int)(bpp)) & ~DT_OPENCL_BPP_TAG_RGBA8))
89#define DT_OPENCL_DEFAULT_COMPILE_INTEL ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations")
90#define DT_OPENCL_DEFAULT_COMPILE_AMD ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations")
91#define DT_OPENCL_DEFAULT_COMPILE_NVIDIA ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations")
92#define DT_OPENCL_DEFAULT_COMPILE ("-cl-fast-relaxed-math -cl-no-signed-zeros -cl-unsafe-math-optimizations")
93#define DT_CLDEVICE_HEAD ("cldevice_v4")
284 size_t *param_value_size);
313 const char *cachedir,
char *md5sum,
char **includemd5,
int *loaded_cached);
317 char *md5sum,
int loaded_cached);
330 unsigned long *localmemsize);
344 const size_t *local);
366 const int height,
const int rowpitch);
376 const size_t *region,
const int rowpitch,
const int blocking);
382 const int height,
const int rowpitch);
392 const size_t *region,
const int rowpitch,
const int blocking);
398 const int bpp,
const int rowpitch);
408 const int bpp,
void *host,
const int flags);
411 size_t *origin,
size_t *region,
size_t offset);
414 size_t offset,
size_t *origin,
size_t *region);
417 size_t srcoffset,
size_t dstoffset,
size_t size);
420 const size_t size,
const int blocking);
423 const size_t size,
const int blocking);
453 const float factor,
const size_t overhead);
562 unsigned long *localmemsize)
567 size_t *kernelworkgroupsize)
600 const unsigned bpp,
const float factor,
const size_t overhead)
#define FALSE
Definition ashift_lsd.c:158
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
static float kernel(const float *x, const float *y)
Definition colorchecker.c:469
const float i
Definition colorspaces_inline_conversions.h:440
void dt_conf_set_bool(const char *name, int val)
Definition control/conf.c:158
void reset(dt_view_t *self)
Definition darkroom.c:1123
void dt_print(dt_debug_thread_t thread, const char *msg,...)
Definition darktable.c:1448
@ DT_DEBUG_OPENCL
Definition darktable.h:721
size_t size
Definition mipmap_cache.c:3
dt_mipmap_buffer_dsc_flags flags
Definition mipmap_cache.c:4
cl_ulong dt_opencl_get_device_available(const int devid)
Definition opencl.c:2478
int dt_opencl_get_kernel_work_group_size(const int dev, const int kernel, size_t *kernelworkgroupsize)
Definition opencl.c:1930
cl_event * dt_opencl_events_get_slot(const int devid, const char *tag)
Definition opencl.c:2607
int dt_opencl_local_buffer_opt(const int devid, const int kernel, dt_opencl_local_buffer_t *factors)
Definition opencl.c:2970
void dt_opencl_unlock_device(const int dev)
Definition opencl.c:1463
int dt_opencl_enqueue_kernel_2d(const int dev, const int kernel, const size_t *sizes)
Definition opencl.c:1951
void * dt_opencl_alloc_device_buffer(const int devid, const size_t size)
Definition opencl.c:2359
dt_opencl_memory_t
Definition opencl.h:96
@ OPENCL_MEMORY_ADD
Definition opencl.h:97
@ OPENCL_MEMORY_SUB
Definition opencl.h:98
int dt_opencl_read_host_from_device_rowpitch(const int devid, void *host, void *device, const int width, const int height, const int rowpitch)
Definition opencl.c:1990
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)
Definition opencl.c:2308
size_t dt_opencl_get_mem_object_size(cl_mem mem)
Definition opencl.c:2365
gboolean dt_opencl_is_pinned_memory(cl_mem mem)
Definition opencl.c:190
void dt_opencl_cleanup_device(dt_opencl_t *cl, int i)
Definition opencl.c:1070
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)
Definition opencl.c:2099
void dt_opencl_init(dt_opencl_t *cl, const gboolean exclude_opencl, const gboolean print_statistics)
Definition opencl.c:832
void dt_opencl_events_reset(const int devid)
Definition opencl.c:2705
cl_int dt_opencl_events_flush(const int devid, const int reset)
Definition opencl.c:2782
int dt_opencl_finish(const int devid)
Definition opencl.c:1172
int dt_opencl_copy_device_to_host(const int devid, void *host, void *device, const int width, const int height, const int bpp)
Definition opencl.c:1978
int dt_opencl_lock_device(const int pipetype)
Definition opencl.c:1378
gboolean dt_opencl_read_device_config(const int devid)
Definition opencl.c:246
void dt_opencl_check_tuning(const int devid)
Definition opencl.c:2462
void * dt_opencl_alloc_device(const int devid, const int width, const int height, const int bpp)
Definition opencl.c:2286
int dt_opencl_is_inited(void)
Definition opencl.c:2544
void * dt_opencl_copy_host_to_device_constant(const int devid, const size_t size, void *host)
Definition opencl.c:2147
dt_opencl_pinmode_t
Definition opencl.h:112
@ DT_OPENCL_PINNING_DISABLED
Definition opencl.h:115
@ DT_OPENCL_PINNING_OFF
Definition opencl.h:113
@ DT_OPENCL_PINNING_ON
Definition opencl.h:114
int dt_opencl_dev_roundup_height(int size, const int devid)
Definition opencl.c:2537
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)
Definition opencl.c:2168
int dt_opencl_write_host_to_device_rowpitch(const int devid, void *host, void *device, const int width, const int height, const int rowpitch)
Definition opencl.c:2037
int dt_opencl_dev_roundup_width(int size, const int devid)
Definition opencl.c:2532
void dt_opencl_write_device_config(const int devid)
Definition opencl.c:196
int dt_opencl_get_mem_context_id(cl_mem mem)
Definition opencl.c:2375
int dt_opencl_create_kernel(const int program, const char *name)
Definition opencl.c:1845
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)
Definition opencl.c:2047
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)
Definition opencl.c:1543
void * dt_opencl_map_buffer(const int devid, cl_mem buffer, const int blocking, const int flags, size_t offset, size_t size)
Definition opencl.c:2211
int dt_opencl_get_image_height(cl_mem mem)
Definition opencl.c:2413
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)
Definition opencl.c:2007
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)
Definition opencl.c:2135
int dt_opencl_micro_nap(const int devid)
Definition opencl.c:177
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)
Definition opencl.c:2076
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)
Definition opencl.c:2124
int dt_opencl_build_program(const int dev, const int prog, const char *binname, const char *cachedir, char *md5sum, int loaded_cached)
Definition opencl.c:1717
int dt_opencl_get_max_work_item_sizes(const int dev, size_t *sizes)
Definition opencl.c:1902
int dt_opencl_enqueue_barrier(const int devid)
Definition opencl.c:1186
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)
Definition opencl.c:2497
int dt_opencl_unmap_mem_object(const int devid, cl_mem mem_object, void *mapped_ptr)
Definition opencl.c:2245
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)
Definition opencl.c:2019
int dt_opencl_is_enabled(void)
Definition opencl.c:2551
void dt_opencl_md5sum(const char **files, char **md5sums)
Definition opencl.c:1489
void dt_opencl_free_kernel(const int kernel)
Definition opencl.c:1888
gboolean dt_opencl_use_pinned_memory(const int devid)
Definition opencl.c:183
void dt_opencl_cleanup(dt_opencl_t *cl)
Definition opencl.c:1117
int dt_opencl_get_image_width(cl_mem mem)
Definition opencl.c:2402
cl_ulong dt_opencl_get_device_memalloc(const int devid)
Definition opencl.c:2491
#define DT_OPENCL_EVENTNAMELENGTH
Definition opencl.h:48
void dt_opencl_memory_statistics(int devid, cl_mem mem, dt_opencl_memory_t action)
Definition opencl.c:2436
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)
Definition opencl.c:2000
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)
Definition opencl.c:2225
#define DT_OPENCL_MAX_PROGRAMS
Definition opencl.h:45
void * dt_opencl_alloc_device_buffer_with_flags(const int devid, const size_t size, const int flags, void *host_ptr)
Definition opencl.c:2329
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)
Definition opencl.c:2053
int dt_opencl_set_kernel_arg(const int dev, const int kernel, const int num, const size_t size, const void *arg)
Definition opencl.c:1942
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)
Definition opencl.c:2087
int dt_opencl_update_settings(void)
Definition opencl.c:2568
void dt_opencl_events_wait_for(const int devid)
Definition opencl.c:2738
int dt_opencl_read_host_from_device(const int devid, void *host, void *device, const int width, const int height, const int bpp)
Definition opencl.c:1984
void dt_opencl_events_profiling(const int devid, const int aggregated)
Definition opencl.c:2871
int dt_opencl_get_work_group_limits(const int dev, size_t *sizes, size_t *workgroupsize, unsigned long *localmemsize)
Definition opencl.c:1910
int dt_opencl_enqueue_kernel_2d_with_local(const int dev, const int kernel, const size_t *sizes, const size_t *local)
Definition opencl.c:1957
cl_mem_flags dt_opencl_get_mem_flags(cl_mem mem)
Definition opencl.c:2393
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)
Definition opencl.c:2111
void * dt_opencl_copy_host_to_device(const int devid, void *host, const int width, const int height, const int bpp)
Definition opencl.c:2162
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)
Definition opencl.c:2064
#define DT_OPENCL_MAX_KERNELS
Definition opencl.h:46
void dt_opencl_release_mem_object(cl_mem mem)
Definition opencl.c:2198
int dt_opencl_get_image_element_size(cl_mem mem)
Definition opencl.c:2424
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)
Definition opencl.c:114
int dt_opencl_avoid_atomics(const int devid)
Definition opencl.c:171
int dt_opencl_write_host_to_device(const int devid, void *host, void *device, const int width, const int height, const int bpp)
Definition opencl.c:2031
void dt_opencl_disable(void)
Definition opencl.c:2559
const float factor
Definition pdf.h:90
Definition bilateralcl.h:36
Definition iop_profile.h:165
Definition dlopencl.h:229
Definition guided_filter.h:94
Definition interpolation.h:151
Definition locallaplaciancl.h:25
size_t forced_headroom
Definition opencl.h:204
int totallost
Definition opencl.h:145
unsigned int cltype
Definition opencl.h:188
int use_events
Definition opencl.h:196
int totalevents
Definition opencl.h:143
const char * name
Definition opencl.h:149
size_t used_available
Definition opencl.h:156
cl_event * eventlist
Definition opencl.h:137
int numevents
Definition opencl.h:139
cl_command_queue cmd_queue
Definition opencl.h:127
cl_context context
Definition opencl.h:126
int disabled
Definition opencl.h:200
int lostevents
Definition opencl.h:142
int avoid_atomics
Definition opencl.h:164
int clroundup_ht
Definition opencl.h:185
int totalsuccess
Definition opencl.h:144
const char * options_md5
Definition opencl.h:152
int micro_nap
Definition opencl.h:167
int event_handles
Definition opencl.h:193
cl_ulong max_mem_alloc
Definition opencl.h:130
cl_ulong max_global_mem
Definition opencl.h:131
int runtime_error
Definition opencl.h:159
int pinned_memory
Definition opencl.h:180
size_t max_image_width
Definition opencl.h:128
cl_ulong used_global_mem
Definition opencl.h:132
cl_device_id devid
Definition opencl.h:125
int program_used[256]
Definition opencl.h:135
dt_pthread_mutex_t lock
Definition opencl.h:124
int clroundup_wd
Definition opencl.h:184
int eventsconsolidated
Definition opencl.h:140
size_t peak_memory
Definition opencl.h:155
cl_kernel kernel[512]
Definition opencl.h:134
int kernel_used[512]
Definition opencl.h:136
size_t max_image_height
Definition opencl.h:129
cl_program program[256]
Definition opencl.h:133
int nvidia_sm_20
Definition opencl.h:147
size_t memory_in_use
Definition opencl.h:154
const char * vendor
Definition opencl.h:148
dt_opencl_eventtag_t * eventtags
Definition opencl.h:138
const char * options
Definition opencl.h:151
int maxevents
Definition opencl.h:141
int maxeventslot
Definition opencl.h:146
cl_int summary
Definition opencl.h:153
const char * cname
Definition opencl.h:150
cl_int retval
Definition opencl.h:106
char tag[64]
Definition opencl.h:108
cl_ulong timelapsed
Definition opencl.h:107
const int xoffset
Definition opencl.h:270
int sizey
Definition opencl.h:277
int sizex
Definition opencl.h:276
const size_t cellsize
Definition opencl.h:274
const int xfactor
Definition opencl.h:271
const int yfactor
Definition opencl.h:273
const int yoffset
Definition opencl.h:272
const size_t overhead
Definition opencl.h:275
int num_devs
Definition opencl.h:225
int print_statistics
Definition opencl.h:222
struct dt_gaussian_cl_global_t * gaussian
Definition opencl.h:244
int * dev_priority_image
Definition opencl.h:230
int error_count
Definition opencl.h:226
int opencl_synchronization_timeout
Definition opencl.h:227
int * dev_priority_preview
Definition opencl.h:231
dt_opencl_device_t * dev
Definition opencl.h:234
struct dt_bilateral_cl_global_t * bilateral
Definition opencl.h:241
int stopped
Definition opencl.h:224
struct dt_colorspaces_cl_global_t * colorspaces
Definition opencl.h:259
struct dt_guided_filter_cl_global_t * guided_filter
Definition opencl.h:262
int enabled
Definition opencl.h:223
struct dt_interpolation_cl_global_t * interpolation
Definition opencl.h:247
struct dt_local_laplacian_cl_global_t * local_laplacian
Definition opencl.h:250
int mandatory[5]
Definition opencl.h:229
dt_pthread_mutex_t lock
Definition opencl.h:220
struct dt_blendop_cl_global_t * blendop
Definition opencl.h:238
struct dt_dwt_cl_global_t * dwt
Definition opencl.h:253
int * dev_priority_export
Definition opencl.h:232
int inited
Definition opencl.h:221
dt_dlopencl_t * dlocl
Definition opencl.h:235
int * dev_priority_thumbnail
Definition opencl.h:233
uint32_t crc
Definition opencl.h:228
struct dt_heal_cl_global_t * heal
Definition opencl.h:256