Cuda use streams and async to avoid busywaiting
[blender.git] / intern / cycles / subd / subd_patch.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 __SUBD_PATCH_H__
18 #define __SUBD_PATCH_H__
19
20 #include "util_boundbox.h"
21 #include "util_types.h"
22
23 CCL_NAMESPACE_BEGIN
24
25 class Patch {
26 public:
27         virtual ~Patch() {}
28         virtual void eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, float v) = 0;
29         virtual bool is_triangle() { return false; }
30         virtual BoundBox bound() = 0;
31         virtual int ptex_face_id() { return -1; }
32 };
33
34 /* Linear Quad Patch */
35
36 class LinearQuadPatch : public Patch {
37 public:
38         float3 hull[4];
39
40         void eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, float v);
41         bool is_triangle() { return false; }
42         BoundBox bound();
43 };
44
45 /* Linear Triangle Patch */
46
47 class LinearTrianglePatch : public Patch {
48 public:
49         float3 hull[3];
50
51         void eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, float v);
52         bool is_triangle() { return true; }
53         BoundBox bound();
54 };
55
56 /* Bicubic Patch */
57
58 class BicubicPatch : public Patch {
59 public:
60         float3 hull[16];
61
62         void eval(float3 *P, float3 *dPdu, float3 *dPdv, float u, float v);
63         bool is_triangle() { return false; }
64         BoundBox bound();
65 };
66
67 CCL_NAMESPACE_END
68
69 #endif /* __SUBD_PATCH_H__ */
70