Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
opencl.h
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2010-2012, 2016 johannes hanika.
4 Copyright (C) 2010, 2020-2021 Pascal Obry.
5 Copyright (C) 2011 Henrik Andersson.
6 Copyright (C) 2011, 2013-2014, 2016 Tobias Ellinghaus.
7 Copyright (C) 2011-2017 Ulrich Pegelow.
8 Copyright (C) 2012 Michal Babej.
9 Copyright (C) 2012 Richard Wonka.
10 Copyright (C) 2013 Pascal de Bruijn.
11 Copyright (C) 2015, 2019 Dan Torop.
12 Copyright (C) 2016 Roman Lebedev.
13 Copyright (C) 2017-2019 Edgardo Hoszowski.
14 Copyright (C) 2017 luzpaz.
15 Copyright (C) 2019 Heiko Bauke.
16 Copyright (C) 2019 jakubfi.
17 Copyright (C) 2021-2022, 2025-2026 Aurélien PIERRE.
18 Copyright (C) 2021 Hubert Kowalski.
19 Copyright (C) 2022 Hanno Schwalm.
20 Copyright (C) 2022 Martin Bařinka.
21 Copyright (C) 2025 Alynx Zhou.
22 Copyright (C) 2025 Guillaume Stutin.
23
24 darktable is free software: you can redistribute it and/or modify
25 it under the terms of the GNU General Public License as published by
26 the Free Software Foundation, either version 3 of the License, or
27 (at your option) any later version.
28
29 darktable is distributed in the hope that it will be useful,
30 but WITHOUT ANY WARRANTY; without even the implied warranty of
31 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32 GNU General Public License for more details.
33
34 You should have received a copy of the GNU General Public License
35 along with darktable. If not, see <http://www.gnu.org/licenses/>.
36*/
37
38#pragma once
39
40#ifdef HAVE_CONFIG_H
41#include "config.h"
42#endif
43
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
55
56// some pseudo error codes in dt opencl usage
57#define DT_OPENCL_DEFAULT_ERROR -999
58#define DT_OPENCL_SYSMEM_ALLOCATION -998
59
60#include "common/darktable.h"
61
62#ifdef HAVE_OPENCL
63
64#include "common/dlopencl.h"
65#include "common/dtpthread.h"
66#include "common/iop_profile.h"
67#include "control/conf.h"
68
69// #pragma GCC diagnostic push
70// #pragma GCC diagnostic ignored "-Wcomment"
71#include <CL/cl.h>
72// #pragma GCC diagnostic
73
74#ifdef __cplusplus
75extern "C" {
76#endif
77
78#define ROUNDUP(a, n) ((a) % (n) == 0 ? (a) : ((a) / (n)+1) * (n))
79
80// use per device roundups here
81#define ROUNDUPDWD(a, b) dt_opencl_dev_roundup_width(a, b)
82#define ROUNDUPDHT(a, b) dt_opencl_dev_roundup_height(a, b)
83
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))
88
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")
94
100
110
117
122typedef struct dt_opencl_device_t
123{
124 dt_pthread_mutex_t lock;
125 cl_device_id devid;
126 cl_context context;
127 cl_command_queue cmd_queue;
137 cl_event *eventlist;
148 const char *vendor;
149 const char *name;
150 const char *cname;
151 const char *options;
152 const char *options_md5;
153 cl_int summary;
157
158 // flags detected errors
160 // if set to TRUE darktable will not use OpenCL kernels which contain atomic operations (example bilateral).
161 // pixelpipe processing will be done on CPU for the affected modules.
162 // useful (only for very old devices) if your OpenCL implementation freezes/crashes on atomics or if
163 // they are processed with a bad performance.
165
166 // pause OpenCL processing for this number of microseconds from time to time
168
169 // During tiling huge amounts of memory need to be transferred between host and device.
170 // For some OpenCL implementations direct memory transfers give a drastic performance penalty,
171 // this can often be avoided by using indirect transfers via pinned memory,
172 // other devices have more efficient direct memory transfer implementations.
173 // We can't predict on solid grounds if a device belongs to the first or second group,
174 // also pinned mem transfer requires slightly more ram.
175 // this holds a bitmask defined by dt_opencl_pinmode_t
176 // the device specific conf key might hold
177 // 0 -> disabled by default; might be switched on by tune for performance
178 // 1 -> enabled by default
179 // 2 -> disabled under all circumstances. This could/should be used if we give away / ship specific keys for buggy systems
181
182 // in OpenCL processing round width/height of global work groups to a multiple of these values.
183 // reasonable values are powers of 2. this parameter can have high impact on OpenCL performance.
186
187 // A bitfield that identifies the type of OpenCL device required to test for on-CPU and more.
188 unsigned int cltype;
189
190 // This defines how often should dt_opencl_events_get_slot do a dt_opencl_events_flush.
191 // It should definitely le lower than the number of events that can be handled by the device/driver.
192 // FIXME we should be able to test for that with using >= OpenCl 2.0
194
195 // opencl_events enabled for the device, set internally via event_handles
197
198 // a device might be turned off by force by setting this value to 1
199 // also used for blacklisted drivers
201
202 // Some devices are known to be unused by other apps so there is no need to test for available memory at all.
203 // Also some devices might behave badly with the checking code, in this case we could enforce a headroom here.
206
209struct dt_dwt_cl_global_t; // wavelet decompose
210struct dt_heal_cl_global_t; // healing
211struct dt_colorspaces_cl_global_t; // colorspaces transform
213
218typedef struct dt_opencl_t
219{
220 dt_pthread_mutex_t lock;
228 uint32_t crc;
229 int mandatory[5];
236
237 // global kernels for blending operations.
239
240 // global kernels for bilateral filtering, to be reused by a few plugins.
242
243 // global kernels for gaussian filtering, to be reused by a few plugins.
245
246 // global kernels for interpolation resampling.
248
249 // global kernels for local laplacian filter.
251
252 // global kernels for dwt filter.
254
255 // global kernels for heal filter.
257
258 // global kernels for colorspaces filter.
260
261 // global kernels for guided filter.
264
269{
270 const int xoffset;
271 const int xfactor;
272 const int yoffset;
273 const int yfactor;
274 const size_t cellsize;
275 const size_t overhead;
276 int sizex; // initial value and final values after optimization
277 int sizey; // initial value and final values after optimization
279
283int dt_opencl_get_device_info(dt_opencl_t *cl, cl_device_id device, cl_device_info param_name, void **param_value,
284 size_t *param_value_size);
285
287void dt_opencl_init(dt_opencl_t *cl, const gboolean exclude_opencl, const gboolean print_statistics);
288
291
294
297int dt_opencl_finish(const int devid);
298
300int dt_opencl_enqueue_barrier(const int devid);
301
303int dt_opencl_lock_device(const int pipetype);
304
306void dt_opencl_unlock_device(const int dev);
307
309void dt_opencl_md5sum(const char **files, char **md5sums);
310
312int dt_opencl_load_program(const int dev, const int prog, const char *filename, const char *binname,
313 const char *cachedir, char *md5sum, char **includemd5, int *loaded_cached);
314
316int dt_opencl_build_program(const int dev, const int prog, const char *binname, const char *cachedir,
317 char *md5sum, int loaded_cached);
318
320int dt_opencl_create_kernel(const int program, const char *name);
321
323void dt_opencl_free_kernel(const int kernel);
324
326int dt_opencl_get_max_work_item_sizes(const int dev, size_t *sizes);
327
329int dt_opencl_get_work_group_limits(const int dev, size_t *sizes, size_t *workgroupsize,
330 unsigned long *localmemsize);
331
333int dt_opencl_get_kernel_work_group_size(const int dev, const int kernel, size_t *kernelworkgroupsize);
334
336int dt_opencl_set_kernel_arg(const int dev, const int kernel, const int num, const size_t size,
337 const void *arg);
338
340int dt_opencl_enqueue_kernel_2d(const int dev, const int kernel, const size_t *sizes);
341
343int dt_opencl_enqueue_kernel_2d_with_local(const int dev, const int kernel, const size_t *sizes,
344 const size_t *local);
345
347int dt_opencl_is_inited(void);
348
350int dt_opencl_is_enabled(void);
351
353void dt_opencl_disable(void);
354
357
359int dt_opencl_copy_device_to_host(const int devid, void *host, void *device, const int width,
360 const int height, const int bpp);
361
362int dt_opencl_read_host_from_device(const int devid, void *host, void *device, const int width,
363 const int height, const int bpp);
364
365int dt_opencl_read_host_from_device_rowpitch(const int devid, void *host, void *device, const int width,
366 const int height, const int rowpitch);
367
368int dt_opencl_read_host_from_device_non_blocking(const int devid, void *host, void *device, const int width,
369 const int height, const int bpp);
370
371int dt_opencl_read_host_from_device_rowpitch_non_blocking(const int devid, void *host, void *device,
372 const int width, const int height,
373 const int rowpitch);
374
375int dt_opencl_read_host_from_device_raw(const int devid, void *host, void *device, const size_t *origin,
376 const size_t *region, const int rowpitch, const int blocking);
377
378int dt_opencl_write_host_to_device(const int devid, void *host, void *device, const int width,
379 const int height, const int bpp);
380
381int dt_opencl_write_host_to_device_rowpitch(const int devid, void *host, void *device, const int width,
382 const int height, const int rowpitch);
383
384int dt_opencl_write_host_to_device_non_blocking(const int devid, void *host, void *device, const int width,
385 const int height, const int bpp);
386
387int dt_opencl_write_host_to_device_rowpitch_non_blocking(const int devid, void *host, void *device,
388 const int width, const int height,
389 const int rowpitch);
390
391int dt_opencl_write_host_to_device_raw(const int devid, const void *host, void *device, const size_t *origin,
392 const size_t *region, const int rowpitch, const int blocking);
393
394void *dt_opencl_copy_host_to_device(const int devid, void *host, const int width, const int height,
395 const int bpp);
396
397void *dt_opencl_copy_host_to_device_rowpitch(const int devid, void *host, const int width, const int height,
398 const int bpp, const int rowpitch);
399
400void *dt_opencl_copy_host_to_device_constant(const int devid, const size_t size, void *host);
401
402int dt_opencl_enqueue_copy_image(const int devid, cl_mem src, cl_mem dst, size_t *orig_src, size_t *orig_dst,
403 size_t *region);
404
405void *dt_opencl_alloc_device(const int devid, const int width, const int height, const int bpp);
406
407void *dt_opencl_alloc_device_use_host_pointer(const int devid, const int width, const int height,
408 const int bpp, void *host, const int flags);
409
410int dt_opencl_enqueue_copy_image_to_buffer(const int devid, cl_mem src_image, cl_mem dst_buffer,
411 size_t *origin, size_t *region, size_t offset);
412
413int dt_opencl_enqueue_copy_buffer_to_image(const int devid, cl_mem src_buffer, cl_mem dst_image,
414 size_t offset, size_t *origin, size_t *region);
415
416int dt_opencl_enqueue_copy_buffer_to_buffer(const int devid, cl_mem src_buffer, cl_mem dst_buffer,
417 size_t srcoffset, size_t dstoffset, size_t size);
418
419int dt_opencl_read_buffer_from_device(const int devid, void *host, void *device, const size_t offset,
420 const size_t size, const int blocking);
421
422int dt_opencl_write_buffer_to_device(const int devid, void *host, void *device, const size_t offset,
423 const size_t size, const int blocking);
424
425void *dt_opencl_alloc_device_buffer(const int devid, const size_t size);
426
427void *dt_opencl_alloc_device_buffer_with_flags(const int devid, const size_t size, const int flags, void *host_ptr);
428
429void dt_opencl_release_mem_object(cl_mem mem);
430
431void *dt_opencl_map_buffer(const int devid, cl_mem buffer, const int blocking, const int flags, size_t offset,
432 size_t size);
433
434void *dt_opencl_map_image(const int devid, cl_mem buffer, const int blocking, const int flags, size_t width, size_t height, int bpp);
435
436int dt_opencl_unmap_mem_object(const int devid, cl_mem mem_object, void *mapped_ptr);
437
438size_t dt_opencl_get_mem_object_size(cl_mem mem);
439
440int dt_opencl_get_image_width(cl_mem mem);
441
442int dt_opencl_get_image_height(cl_mem mem);
443
445
446int dt_opencl_get_mem_context_id(cl_mem mem);
447cl_mem_flags dt_opencl_get_mem_flags(cl_mem mem);
448
449void dt_opencl_memory_statistics(int devid, cl_mem mem, dt_opencl_memory_t action);
450
452gboolean dt_opencl_image_fits_device(const int devid, const size_t width, const size_t height, const unsigned bpp,
453 const float factor, const size_t overhead);
455cl_ulong dt_opencl_get_device_available(const int devid);
456
458void dt_opencl_check_tuning(const int devid);
459
461cl_ulong dt_opencl_get_device_memalloc(const int devid);
462
464int dt_opencl_dev_roundup_width(int size, const int devid);
465int dt_opencl_dev_roundup_height(int size, const int devid);
466
468cl_event *dt_opencl_events_get_slot(const int devid, const char *tag);
469
471void dt_opencl_events_reset(const int devid);
472
475void dt_opencl_events_wait_for(const int devid);
476
479cl_int dt_opencl_events_flush(const int devid, const int reset);
480
482void dt_opencl_events_profiling(const int devid, const int aggregated);
483
485int dt_opencl_local_buffer_opt(const int devid, const int kernel, dt_opencl_local_buffer_t *factors);
486
488void dt_opencl_write_device_config(const int devid);
489gboolean dt_opencl_read_device_config(const int devid);
490int dt_opencl_avoid_atomics(const int devid);
491int dt_opencl_micro_nap(const int devid);
492gboolean dt_opencl_use_pinned_memory(const int devid);
493gboolean dt_opencl_is_pinned_memory(cl_mem mem);
494
495#ifdef __cplusplus
496}
497#endif
498
499#else
500
501#include "control/conf.h"
502#include <stdlib.h>
503
504#ifdef __cplusplus
505extern "C" {
506#endif
507
508typedef struct dt_opencl_t
509{
510 int inited;
511 int enabled;
512 int stopped;
513 int error_count;
515static inline void dt_opencl_init(dt_opencl_t *cl, const gboolean exclude_opencl, const gboolean print_statistics)
516{
517 cl->inited = 0;
518 cl->enabled = 0;
519 cl->stopped = 0;
520 cl->error_count = 0;
521 dt_conf_set_bool("opencl", FALSE);
522 dt_print(DT_DEBUG_OPENCL, "[opencl_init] this version of darktable was built without opencl support\n");
523}
524static inline void dt_opencl_cleanup(dt_opencl_t *cl)
525{
526}
527static inline gboolean dt_opencl_finish(const int devid)
528{
529 return -1;
530}
531static inline int dt_opencl_enqueue_barrier(const int devid)
532{
533 return -1;
534}
535static inline int dt_opencl_lock_device(const int dev)
536{
537 return -1;
538}
539static inline void dt_opencl_unlock_device(const int dev)
540{
541}
542static inline int dt_opencl_load_program(const int dev, const char *filename)
543{
544 return -1;
545}
546static inline int dt_opencl_build_program(const int dev, const int program)
547{
548 return -1;
549}
550static inline int dt_opencl_create_kernel(const int program, const char *name)
551{
552 return -1;
553}
554static inline void dt_opencl_free_kernel(const int kernel)
555{
556}
557static inline int dt_opencl_get_max_work_item_sizes(const int dev, size_t *sizes)
558{
559 return -1;
560}
561static inline int dt_opencl_get_work_group_limits(const int dev, size_t *sizes, size_t *workgroupsize,
562 unsigned long *localmemsize)
563{
564 return -1;
565}
566static inline int dt_opencl_get_kernel_work_group_size(const int dev, const int kernel,
567 size_t *kernelworkgroupsize)
568{
569 return -1;
570}
571static inline int dt_opencl_set_kernel_arg(const int dev, const int kernel, const size_t size, const void *arg)
572{
573 return -1;
574}
575static inline int dt_opencl_enqueue_kernel_2d(const int dev, const int kernel, const size_t *sizes)
576{
577 return -1;
578}
579static inline int dt_opencl_enqueue_kernel_2d_with_local(const int dev, const int kernel, const size_t *sizes,
580 const size_t *local)
581{
582 return -1;
583}
584static inline int dt_opencl_is_inited(void)
585{
586 return 0;
587}
588static inline int dt_opencl_is_enabled(void)
589{
590 return 0;
591}
592static inline void dt_opencl_disable(void)
593{
594}
595static inline int dt_opencl_update_settings(void)
596{
597 return 0;
598}
599static inline gboolean dt_opencl_image_fits_device(const int devid, const size_t width, const size_t height,
600 const unsigned bpp, const float factor, const size_t overhead)
601{
602 return FALSE;
603}
604static inline size_t dt_opencl_get_device_available(const int devid)
605{
606 return 0;
607}
608static inline void dt_opencl_check_tuning(const int devid)
609{
610 return;
611}
612static inline size_t dt_opencl_get_device_memalloc(const int devid)
613{
614 return 0;
615}
616static inline unsigned long dt_opencl_get_mem_flags(void *mem)
617{
618 return 0;
619}
620static inline void dt_opencl_release_mem_object(void *mem)
621{
622}
623static inline void *dt_opencl_events_get_slot(const int devid, const char *tag)
624{
625 return NULL;
626}
627static inline void dt_opencl_events_reset(const int devid)
628{
629}
630static inline void dt_opencl_events_wait_for(const int devid)
631{
632}
633static inline int dt_opencl_events_flush(const int devid, const int reset)
634{
635 return 0;
636}
637static inline void dt_opencl_events_profiling(const int devid, const int aggregated)
638{
639}
640
641#ifdef __cplusplus
642}
643#endif
644
645#endif
646
647// clang-format off
648// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
649// vim: shiftwidth=2 expandtab tabstop=2 cindent
650// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
651// clang-format on
#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
char * name
Definition common/metadata.c:61
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
int bpp
Definition imageio/format/pdf.c:88
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 blend.h:241
Definition iop_profile.h:165
Definition dlopencl.h:229
Definition dwt.h:110
Definition gaussian.h:68
Definition guided_filter.h:94
Definition heal.h:34
Definition interpolation.h:151
Definition locallaplaciancl.h:25
Definition opencl.h:123
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
Definition opencl.h:105
cl_int retval
Definition opencl.h:106
char tag[64]
Definition opencl.h:108
cl_ulong timelapsed
Definition opencl.h:107
Definition opencl.h:269
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
Definition opencl.h:219
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