Blender  V3.3
COM_OpenCLDevice.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2011 Blender Foundation. */
3 
4 class OpenCLDevice;
5 
6 #pragma once
7 
8 #include <list>
9 
10 #include "COM_Device.h"
11 
12 #include "clew.h"
13 
14 namespace blender::compositor {
15 
16 class NodeOperation;
17 class MemoryBuffer;
18 class ReadBufferOperation;
19 
20 typedef NodeOperation SocketReader;
21 
26 class OpenCLDevice : public Device {
27  private:
31  cl_context context_;
32 
36  cl_device_id device_;
37 
41  cl_program program_;
42 
46  cl_command_queue queue_;
47 
51  cl_int vendor_id_;
52 
53  public:
61  OpenCLDevice(cl_context context, cl_device_id device, cl_program program, cl_int vendor_id);
62 
63  OpenCLDevice(OpenCLDevice &&other) noexcept;
64 
65  ~OpenCLDevice();
66 
71  void execute(WorkPackage *work) override;
72 
77  static const cl_image_format *determine_image_format(MemoryBuffer *memory_buffer);
78 
79  cl_context get_context()
80  {
81  return context_;
82  }
83 
84  cl_command_queue get_queue()
85  {
86  return queue_;
87  }
88 
90  int parameter_index,
91  int offset_index,
92  std::list<cl_mem> *cleanup,
93  MemoryBuffer **input_memory_buffers,
94  SocketReader *reader);
96  int parameter_index,
97  int offset_index,
98  std::list<cl_mem> *cleanup,
99  MemoryBuffer **input_memory_buffers,
100  ReadBufferOperation *reader);
102  int offset_index,
103  MemoryBuffer *memory_buffers);
105  int parameter_index,
106  cl_mem cl_output_memory_buffer);
108  int offset_index,
109  NodeOperation *operation);
110  void COM_cl_enqueue_range(cl_kernel kernel, MemoryBuffer *output_memory_buffer);
111  void COM_cl_enqueue_range(cl_kernel kernel,
112  MemoryBuffer *output_memory_buffer,
113  int offset_index,
114  NodeOperation *operation);
115  cl_kernel COM_cl_create_kernel(const char *kernelname,
116  std::list<cl_kernel> *cl_kernels_to_clean_up);
117 };
118 
119 } // namespace blender::compositor
Abstract class for device implementations to be used by the Compositor. devices are queried,...
Definition: COM_Device.h:19
a MemoryBuffer contains access to the data of a chunk
NodeOperation contains calculation logic.
device representing an GPU OpenCL device. an instance of this class represents a single cl_device
void COM_cl_attach_size_to_kernel_parameter(cl_kernel kernel, int offset_index, NodeOperation *operation)
cl_mem COM_cl_attach_memory_buffer_to_kernel_parameter(cl_kernel kernel, int parameter_index, int offset_index, std::list< cl_mem > *cleanup, MemoryBuffer **input_memory_buffers, SocketReader *reader)
void COM_cl_attach_output_memory_buffer_to_kernel_parameter(cl_kernel kernel, int parameter_index, cl_mem cl_output_memory_buffer)
void COM_cl_enqueue_range(cl_kernel kernel, MemoryBuffer *output_memory_buffer)
cl_kernel COM_cl_create_kernel(const char *kernelname, std::list< cl_kernel > *cl_kernels_to_clean_up)
static const cl_image_format * determine_image_format(MemoryBuffer *memory_buffer)
determine an image format
void COM_cl_attach_memory_buffer_offset_to_kernel_parameter(cl_kernel kernel, int offset_index, MemoryBuffer *memory_buffers)
OpenCLDevice(cl_context context, cl_device_id device, cl_program program, cl_int vendor_id)
constructor with opencl device
void execute(WorkPackage *work) override
execute a WorkPackage
SyclQueue void void size_t num_bytes SyclQueue void const char void *memory_device_pointer KernelContext int kernel
NodeOperation SocketReader
contains data about work that can be scheduled