ClangFormat: apply to source, most of intern
[blender.git] / intern / cycles / device / device_task.h
1 /*
2  * Copyright 2011-2013 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __DEVICE_TASK_H__
18 #define __DEVICE_TASK_H__
19
20 #include "device/device_memory.h"
21
22 #include "util/util_function.h"
23 #include "util/util_list.h"
24 #include "util/util_task.h"
25
26 CCL_NAMESPACE_BEGIN
27
28 /* Device Task */
29
30 class Device;
31 class RenderBuffers;
32 class RenderTile;
33 class Tile;
34
35 class DenoiseParams {
36  public:
37   /* Pixel radius for neighbouring pixels to take into account. */
38   int radius;
39   /* Controls neighbor pixel weighting for the denoising filter. */
40   float strength;
41   /* Preserve more or less detail based on feature passes. */
42   float feature_strength;
43   /* When removing pixels that don't carry information, use a relative threshold instead of an absolute one. */
44   bool relative_pca;
45   /* How many frames before and after the current center frame are included. */
46   int neighbor_frames;
47   /* Clamp the input to the range of +-1e8. Should be enough for any legitimate data. */
48   bool clamp_input;
49
50   DenoiseParams()
51   {
52     radius = 8;
53     strength = 0.5f;
54     feature_strength = 0.5f;
55     relative_pca = false;
56     neighbor_frames = 2;
57     clamp_input = true;
58   }
59 };
60
61 class DeviceTask : public Task {
62  public:
63   typedef enum { RENDER, FILM_CONVERT, SHADER } Type;
64   Type type;
65
66   int x, y, w, h;
67   device_ptr rgba_byte;
68   device_ptr rgba_half;
69   device_ptr buffer;
70   int sample;
71   int num_samples;
72   int offset, stride;
73
74   device_ptr shader_input;
75   device_ptr shader_output;
76   int shader_eval_type;
77   int shader_filter;
78   int shader_x, shader_w;
79
80   int passes_size;
81
82   explicit DeviceTask(Type type = RENDER);
83
84   int get_subtask_count(int num, int max_size = 0);
85   void split(list<DeviceTask> &tasks, int num, int max_size = 0);
86
87   void update_progress(RenderTile *rtile, int pixel_samples = -1);
88
89   function<bool(Device *device, RenderTile &)> acquire_tile;
90   function<void(long, int)> update_progress_sample;
91   function<void(RenderTile &)> update_tile_sample;
92   function<void(RenderTile &)> release_tile;
93   function<bool()> get_cancel;
94   function<void(RenderTile *, Device *)> map_neighbor_tiles;
95   function<void(RenderTile *, Device *)> unmap_neighbor_tiles;
96
97   DenoiseParams denoising;
98   bool denoising_from_render;
99   vector<int> denoising_frames;
100
101   bool denoising_do_filter;
102   bool denoising_write_passes;
103
104   int pass_stride;
105   int frame_stride;
106   int target_pass_stride;
107   int pass_denoising_data;
108   int pass_denoising_clean;
109
110   bool need_finish_queue;
111   bool integrator_branched;
112   int2 requested_tile_size;
113
114  protected:
115   double last_update_time;
116 };
117
118 CCL_NAMESPACE_END
119
120 #endif /* __DEVICE_TASK_H__ */