Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /branches/vis12-cl/src/include/Diderot/cl-inline-matrix.h
ViewVC logotype

Annotation of /branches/vis12-cl/src/include/Diderot/cl-inline-matrix.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3349 - (view) (download) (as text)

1 : jhr 1671 /*! \file inline-matrix.h
2 :     *
3 :     * \author John Reppy & Lamont Samuels
4 :     */
5 :    
6 :     /*
7 : jhr 3349 * This code is part of the Diderot Project (http://diderot-language.cs.uchicago.edu)
8 :     *
9 :     * COPYRIGHT (c) 2015 The University of Chicago
10 : jhr 1671 * All rights reserved.
11 :     */
12 :    
13 :     #ifndef _DIDEROT_CL_INLINE_MATRIX_H_
14 :     #define _DIDEROT_CL_INLINE_MATRIX_H_
15 :    
16 :     #ifndef _DIDEROT_CL_TYPES_H_
17 :     #include "cl-types.h"
18 :     #endif
19 :    
20 :     /********** 2x2 matrix functions **********/
21 :    
22 :    
23 : jhr 3164 inline void zero2x2 (Diderot_Mat2x2_t dst)
24 : jhr 1671 {
25 : jhr 3164 dst[0] = (Diderot_vec2_t)(0.0, 0.0);
26 :     dst[1] = (Diderot_vec2_t)(0.0, 0.0);
27 : jhr 1671 }
28 :    
29 : jhr 3164 inline void identity2x2 (Diderot_Mat2x2_t dst)
30 : jhr 1671 {
31 : jhr 3164 dst[0] = (Diderot_vec2_t)(1.0, 0.0);
32 :     dst[1] = (Diderot_vec2_t)(0.0, 1.0);
33 : jhr 1671 }
34 :    
35 : jhr 3164 inline void copy2x2 (Diderot_Mat2x2_t dst, Diderot_Mat2x2_t src)
36 : jhr 1671 {
37 :     dst[0] = src[0];
38 :     dst[1] = src[1];
39 :     }
40 :    
41 : jhr 3164 inline void scale2x2 (Diderot_Mat2x2_t dst, float s, Diderot_Mat2x2_t src)
42 : jhr 1671 {
43 : jhr 3164 Diderot_vec2_t scale = (Diderot_vec2_t)(s, s);
44 : jhr 1671 dst[0] = scale * src[0];
45 :     dst[1] = scale * src[1];
46 :     }
47 :    
48 : jhr 3164 inline void add2x2 (Diderot_Mat2x2_t dst, Diderot_Mat2x2_t a, Diderot_Mat2x2_t b)
49 : jhr 1671 {
50 :     dst[0] = a[0] + b[0];
51 :     dst[1] = a[1] + b[1];
52 :     }
53 :    
54 : jhr 3164 inline void sub2x2 (Diderot_Mat2x2_t dst, Diderot_Mat2x2_t a, Diderot_Mat2x2_t b)
55 : jhr 1671 {
56 :     dst[0] = a[0] - b[0];
57 :     dst[1] = a[1] - b[1];
58 :     }
59 :    
60 : jhr 3164 inline Diderot_vec2_t mulVec3Mat2x2 (Diderot_vec2_t v, Diderot_Mat2x2_t m)
61 : jhr 1671 {
62 : jhr 3164 return (Diderot_vec2_t)(
63 :     dot(v, (Diderot_vec2_t)(m[0].s0, m[1].s0)),
64 :     dot(v, (Diderot_vec2_t)(m[0].s1, m[1].s1)));
65 : jhr 1671 }
66 :    
67 : jhr 3164 inline Diderot_vec2_t mulMat2x2Vec2 (Diderot_Mat2x2_t m, Diderot_vec2_t v)
68 : jhr 1671 {
69 : jhr 3164 return (Diderot_vec2_t)(dot(m[0], v), dot(m[1], v));
70 : jhr 1671 }
71 :    
72 : jhr 3164 inline void mulMat2x2Mat2x2 (Diderot_Mat2x2_t dst, Diderot_Mat2x2_t m1, Diderot_Mat2x2_t m2)
73 : jhr 1671 {
74 : jhr 3164 dst[0] = (Diderot_vec2_t)(
75 :     dot(m1[0], (Diderot_vec2_t)(m2[0].s0, m2[1].s0)),
76 :     dot(m1[0], (Diderot_vec2_t)(m2[0].s1, m2[1].s1)));
77 :     dst[1] = (Diderot_vec2_t)(
78 :     dot(m1[1], (Diderot_vec2_t)(m2[0].s0, m2[1].s0)),
79 :     dot(m1[1], (Diderot_vec2_t)(m2[0].s1, m2[1].s1)));
80 : jhr 1671 }
81 :    
82 : jhr 3164 inline void transpose2x2 (Diderot_Mat2x2_t dst, Diderot_Mat2x2_t src)
83 : jhr 1671 {
84 : jhr 3164 dst[0] = (Diderot_vec2_t)(src[0].s0, src[1].s0);
85 :     dst[1] = (Diderot_vec2_t)(src[0].s1, src[1].s1);
86 : jhr 1671 }
87 :    
88 :     // The Frobenius norm of a matrix is the sqrt of the sum of the squares of the elements
89 : jhr 3164 inline float norm2x2 (Diderot_Mat2x2_t m)
90 : jhr 1671 {
91 :     return sqrt(dot(m[0],m[0]) + dot(m[1],m[1]));
92 :     }
93 :    
94 :    
95 :     /********** 3x3 matrix functions **********/
96 :    
97 : jhr 3164 inline void zero3x3 (Diderot_Mat3x3_t dst)
98 : jhr 1671 {
99 :     dst[0] = VEC3(0.0, 0.0, 0.0);
100 :     dst[1] = VEC3(0.0, 0.0, 0.0);
101 :     dst[2] = VEC3(0.0, 0.0, 0.0);
102 :     }
103 :    
104 : jhr 3164 inline void identity3x3 (Diderot_Mat3x3_t dst)
105 : jhr 1671 {
106 :     dst[0] = VEC3(1.0, 0.0, 0.0);
107 :     dst[1] = VEC3(0.0, 1.0, 0.0);
108 :     dst[2] = VEC3(0.0, 0.0, 1.0);
109 :     }
110 :    
111 : jhr 3164 inline void copy3x3 (Diderot_Mat3x3_t dst, Diderot_Mat3x3_t src)
112 : jhr 1671 {
113 :     dst[0] = src[0];
114 :     dst[1] = src[1];
115 :     dst[2] = src[2];
116 :     }
117 :    
118 : jhr 3164 inline void scale3x3 (Diderot_Mat3x3_t dst, float s, Diderot_Mat3x3_t src)
119 : jhr 1671 {
120 : jhr 3164 Diderot_vec3_t scale = VEC3(s, s, s);
121 : jhr 1671 dst[0] = scale * src[0];
122 :     dst[1] = scale * src[1];
123 :     dst[2] = scale * src[2];
124 :     }
125 :    
126 : jhr 3164 inline void add3x3 (Diderot_Mat3x3_t dst, Diderot_Mat3x3_t a, Diderot_Mat3x3_t b)
127 : jhr 1671 {
128 :     dst[0] = a[0] + b[0];
129 :     dst[1] = a[1] + b[1];
130 :     dst[2] = a[2] + b[2];
131 :     }
132 :    
133 : jhr 3164 inline void sub3x3 (Diderot_Mat3x3_t dst, Diderot_Mat3x3_t a, Diderot_Mat3x3_t b)
134 : jhr 1671 {
135 :     dst[0] = a[0] - b[0];
136 :     dst[1] = a[1] - b[1];
137 :     dst[2] = a[2] - b[2];
138 :     }
139 :    
140 : jhr 3164 inline Diderot_vec3_t mulVec3Mat3x3 (Diderot_vec3_t v, Diderot_Mat3x3_t m)
141 : jhr 1671 {
142 :     return VEC3(
143 :     dot(v, VEC3(m[0].s0, m[1].s0, m[2].s0)),
144 :     dot(v, VEC3(m[0].s1, m[1].s1, m[2].s1)),
145 :     dot(v, VEC3(m[0].s2, m[1].s2, m[2].s2)));
146 :     }
147 :    
148 : jhr 3164 inline Diderot_vec3_t mulMat3x3Vec3 (Diderot_Mat3x3_t m, Diderot_vec3_t v)
149 : jhr 1671 {
150 : jhr 1940 return VEC3(dot(m[0], v), dot(m[1], v), dot(m[2], v));
151 : jhr 1671 }
152 :    
153 : jhr 3164 inline void mulMat3x3Mat3x3 (Diderot_Mat3x3_t dst, Diderot_Mat3x3_t m1, Diderot_Mat3x3_t m2)
154 : jhr 1671 {
155 :     dst[0] = VEC3(
156 :     dot(m1[0], VEC3(m2[0].s0, m2[1].s0, m2[2].s0)),
157 :     dot(m1[0], VEC3(m2[0].s1, m2[1].s1, m2[2].s1)),
158 :     dot(m1[0], VEC3(m2[0].s2, m2[1].s2, m2[2].s2)));
159 :     dst[1] = VEC3(
160 :     dot(m1[1], VEC3(m2[0].s0, m2[1].s0, m2[2].s0)),
161 :     dot(m1[1], VEC3(m2[0].s1, m2[1].s1, m2[2].s1)),
162 :     dot(m1[1], VEC3(m2[0].s2, m2[1].s2, m2[2].s2)));
163 :     dst[2] = VEC3(
164 :     dot(m1[2], VEC3(m2[0].s0, m2[1].s0, m2[2].s0)),
165 :     dot(m1[2], VEC3(m2[0].s1, m2[1].s1, m2[2].s1)),
166 :     dot(m1[2], VEC3(m2[0].s2, m2[1].s2, m2[2].s2)));
167 :     }
168 : jhr 3164 inline void transpose3x3 (Diderot_Mat3x3_t dst, Diderot_Mat3x3_t src)
169 : jhr 1671 {
170 :     dst[0] = VEC3(src[0].s0, src[1].s0, src[2].s0);
171 :     dst[1] = VEC3(src[0].s1, src[1].s1, src[2].s1);
172 :     dst[2] = VEC3(src[0].s2, src[1].s2, src[2].s2);
173 :     }
174 :    
175 :     // The Frobenius norm of a matrix is the sqrt of the sum of the squares of the elements
176 : jhr 3164 inline float norm3x3 (Diderot_Mat3x3_t m)
177 : jhr 1671 {
178 :     return sqrt(dot(m[0],m[0]) + dot(m[1],m[1]) + dot(m[2],m[2]));
179 :     }
180 :    
181 :    
182 :     /********** 4x4 matrix functions **********/
183 :    
184 : jhr 3164 inline void copy4x4 (Diderot_Mat4x4_t dst, Diderot_Mat4x4_t src)
185 : jhr 1671 {
186 :     dst[0] = src[0];
187 :     dst[1] = src[1];
188 :     dst[2] = src[2];
189 :     dst[3] = src[3];
190 :     }
191 :    
192 : jhr 3164 inline void transpose4x4 (Diderot_Mat4x4_t dst, Diderot_Mat4x4_t src)
193 : jhr 1671 {
194 : jhr 3164 dst[0] = (Diderot_vec4_t)(src[0].s0, src[1].s0, src[2].s0, src[3].s0);
195 :     dst[1] = (Diderot_vec4_t)(src[0].s1, src[1].s1, src[2].s1, src[3].s1);
196 :     dst[2] = (Diderot_vec4_t)(src[0].s2, src[1].s2, src[2].s2, src[3].s2);
197 :     dst[3] = (Diderot_vec4_t)(src[0].s3, src[1].s3, src[2].s3, src[3].s3);
198 : jhr 1671 }
199 :    
200 :     // The Frobenius norm of a matrix is the sqrt of the sum of the squares of the elements
201 : jhr 3164 inline float norm4x4 (Diderot_Mat4x4_t m)
202 : jhr 1671 {
203 :     return sqrt(dot(m[0],m[0]) + dot(m[1],m[1]) + dot(m[2],m[2]) + dot(m[3],m[3]));
204 :     }
205 :    
206 :     #endif /* !_DIDEROT_CL_INLINE_MATRIX_H_ */

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0