Final Fix T41222 Blender gives weird ouput when baking (4096*4096) resolution on GPU
[blender-staging.git] / intern / cycles / render / bake.h
1 /*
2  * Copyright 2011-2014 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 __BAKE_H__
18 #define __BAKE_H__
19
20 #include "device.h"
21 #include "scene.h"
22
23 #include "util_progress.h"
24 #include "util_vector.h"
25
26 CCL_NAMESPACE_BEGIN
27
28 class BakeData {
29 public:
30         BakeData(const int object, const size_t tri_offset, const size_t num_pixels);
31         ~BakeData();
32
33         void set(int i, int prim, float uv[2], float dudx, float dudy, float dvdx, float dvdy);
34         int object();
35         size_t size();
36         uint4 data(int i);
37         uint4 differentials(int i);
38         bool is_valid(int i);
39
40 private:
41         int m_object;
42         size_t m_tri_offset;
43         size_t m_num_pixels;
44         vector<int>m_primitive;
45         vector<float>m_u;
46         vector<float>m_v;
47         vector<float>m_dudx;
48         vector<float>m_dudy;
49         vector<float>m_dvdx;
50         vector<float>m_dvdy;
51 };
52
53 class BakeManager {
54 public:
55         BakeManager();
56         ~BakeManager();
57
58         bool get_baking();
59         void set_baking(const bool value);
60
61         BakeData *init(const int object, const size_t tri_offset, const size_t num_pixels);
62
63         void set_shader_limit(const size_t x, const size_t y);
64
65         bool bake(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress, ShaderEvalType shader_type, BakeData *bake_data, float result[]);
66
67         void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress);
68         void device_free(Device *device, DeviceScene *dscene);
69
70         static bool is_light_pass(ShaderEvalType type);
71         static bool is_aa_pass(ShaderEvalType type);
72
73         bool need_update;
74
75         int num_samples;
76         int num_parts;
77
78 private:
79         BakeData *m_bake_data;
80         bool m_is_baking;
81         size_t m_shader_limit;
82 };
83
84 CCL_NAMESPACE_END
85
86 #endif /* __BAKE_H__ */
87