Merge lp:~jammy-zhou/glcompbench/glcompbench into lp:glcompbench

Proposed by Jammy Zhou
Status: Rejected
Rejected by: Jesse Barker
Proposed branch: lp:~jammy-zhou/glcompbench/glcompbench
Merge into: lp:glcompbench
Diff against target: 155 lines (+42/-41)
3 files modified
src/libmatrix/mat.cc (+24/-24)
src/libmatrix/mat.h (+17/-16)
src/program.cc (+1/-1)
To merge this branch: bzr merge lp:~jammy-zhou/glcompbench/glcompbench
Reviewer Review Type Date Requested Status
Jesse Barker Disapprove
Alexandros Frantzis Pending
Review via email: mp+57419@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jesse Barker (jesse-barker) wrote :

As discussed previously, I'm concerned that the actual and advertised behavior of libmatrix in these changes are consistent (and that cases apart from the ones being exercised in the current state of glcompbench are satisfied). I've pushed a new version of libmatrix that provides column-major data to the API, but a row-major interface to the programmer (IMHO, much more intuitive). The result is that rebranching the instance of libmatrix in glcompbench would require only changing the transpose parameter to glUniformMatrix4fv().

cheers,
jesse

review: Disapprove

Unmerged revisions

14. By Jammy Zhou

The transpose parameter of glUniformMatrix4fv must be GL_FALSE for GLES2

If GL_TRUE is set, GL_ERROR_INVALID_VALUE will be returned. So use column
major order for matrix transformations.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/libmatrix/mat.cc'
2--- src/libmatrix/mat.cc 2011-01-17 18:15:21 +0000
3+++ src/libmatrix/mat.cc 2011-04-13 01:40:50 +0000
4@@ -21,9 +21,9 @@
5 translate(float x, float y, float z)
6 {
7 mat4 t;
8- t[0][3] = x;
9- t[1][3] = y;
10- t[2][3] = z;
11+ t[3][0] = x;
12+ t[3][1] = y;
13+ t[3][2] = z;
14 return t;
15 }
16
17@@ -61,13 +61,13 @@
18 mat3 uuT = outer(u, u);
19 mat3 s;
20 s[0][0] = 0;
21- s[0][1] = -u.z();
22- s[0][2] = u.y();
23- s[1][0] = u.z();
24+ s[1][0] = -u.z();
25+ s[2][0] = u.y();
26+ s[0][1] = u.z();
27 s[1][1] = 0;
28- s[1][2] = -u.x();
29- s[2][0] = -u.y();
30- s[2][1] = u.x();
31+ s[2][1] = -u.x();
32+ s[0][2] = -u.y();
33+ s[1][2] = u.x();
34 s[2][2] = 0;
35 mat3 i;
36 i -= uuT;
37@@ -99,12 +99,12 @@
38 float depth(far - near);
39 mat4 f;
40 f[0][0] = twiceNear / width;
41- f[0][2] = (right + left) / width;
42+ f[2][0] = (right + left) / width;
43 f[1][1] = twiceNear / height;
44- f[1][2] = (top + bottom) / height;
45+ f[2][1] = (top + bottom) / height;
46 f[2][2] = -(far + near) / depth;
47- f[2][3] = -(twiceNear * far) / depth;
48- f[3][2] = -1;
49+ f[3][2] = -(twiceNear * far) / depth;
50+ f[2][3] = -1;
51 f[3][3] = 0;
52 return f;
53 }
54@@ -117,11 +117,11 @@
55 float depth(far - near);
56 mat4 o;
57 o[0][0] = 2 / width;
58- o[0][3] = (right + left) / width;
59+ o[3][0] = (right + left) / width;
60 o[1][1] = 2 / height;
61- o[1][3] = (top + bottom) / height;
62+ o[3][1] = (top + bottom) / height;
63 o[2][2] = -2 / depth;
64- o[2][3] = (far + near) / depth;
65+ o[3][2] = (far + near) / depth;
66 return o;
67 }
68
69@@ -137,8 +137,8 @@
70 p[0][0] = f / aspect;
71 p[1][1] = f;
72 p[2][2] = (zFar + zNear) / depth;
73- p[2][3] = (2 * zFar * zNear) / depth;
74- p[3][2] = -1;
75+ p[3][2] = (2 * zFar * zNear) / depth;
76+ p[2][3] = -1;
77 p[3][3] = 0;
78 return p;
79 }
80@@ -156,13 +156,13 @@
81 u.normalize();
82 mat4 la;
83 la[0][0] = s.x();
84- la[0][1] = s.y();
85- la[0][2] = s.z();
86- la[1][0] = u.x();
87+ la[1][0] = s.y();
88+ la[2][0] = s.z();
89+ la[0][1] = u.x();
90 la[1][1] = u.y();
91- la[1][2] = u.z();
92- la[2][0] = -f.x();
93- la[2][1] = -f.y();
94+ la[2][1] = u.z();
95+ la[0][2] = -f.x();
96+ la[1][2] = -f.y();
97 la[2][2] = -f.z();
98 la *= translate(-eyeX, -eyeY, -eyeZ);
99 return la;
100
101=== modified file 'src/libmatrix/mat.h'
102--- src/libmatrix/mat.h 2011-01-17 18:15:21 +0000
103+++ src/libmatrix/mat.h 2011-04-13 01:40:50 +0000
104@@ -601,22 +601,23 @@
105
106 tmat4& operator*=(const tmat4& rhs)
107 {
108- T r0c0((m_[0] * rhs.m_[0]) + (m_[1] * rhs.m_[4]) + (m_[2] * rhs.m_[8]) + (m_[3] * rhs.m_[12]));
109- T r0c1((m_[0] * rhs.m_[1]) + (m_[1] * rhs.m_[5]) + (m_[2] * rhs.m_[9]) + (m_[3] * rhs.m_[13]));
110- T r0c2((m_[0] * rhs.m_[2]) + (m_[1] * rhs.m_[6]) + (m_[2] * rhs.m_[10]) + (m_[3] * rhs.m_[14]));
111- T r0c3((m_[0] * rhs.m_[3]) + (m_[1] * rhs.m_[7]) + (m_[2] * rhs.m_[11]) + (m_[3] * rhs.m_[15]));
112- T r1c0((m_[4] * rhs.m_[0]) + (m_[5] * rhs.m_[4]) + (m_[6] * rhs.m_[8]) + (m_[7] * rhs.m_[12]));
113- T r1c1((m_[4] * rhs.m_[1]) + (m_[5] * rhs.m_[5]) + (m_[6] * rhs.m_[9]) + (m_[7] * rhs.m_[13]));
114- T r1c2((m_[4] * rhs.m_[2]) + (m_[5] * rhs.m_[6]) + (m_[6] * rhs.m_[10]) + (m_[7] * rhs.m_[14]));
115- T r1c3((m_[4] * rhs.m_[3]) + (m_[5] * rhs.m_[7]) + (m_[6] * rhs.m_[11]) + (m_[7] * rhs.m_[15]));
116- T r2c0((m_[8] * rhs.m_[0]) + (m_[9] * rhs.m_[4]) + (m_[10] * rhs.m_[8]) + (m_[11] * rhs.m_[12]));
117- T r2c1((m_[8] * rhs.m_[1]) + (m_[9] * rhs.m_[5]) + (m_[10] * rhs.m_[9]) + (m_[11] * rhs.m_[13]));
118- T r2c2((m_[8] * rhs.m_[2]) + (m_[9] * rhs.m_[6]) + (m_[10] * rhs.m_[10]) + (m_[11] * rhs.m_[14]));
119- T r2c3((m_[8] * rhs.m_[3]) + (m_[9] * rhs.m_[7]) + (m_[10] * rhs.m_[11]) + (m_[11] * rhs.m_[15]));
120- T r3c0((m_[12] * rhs.m_[0]) + (m_[13] * rhs.m_[4]) + (m_[14] * rhs.m_[8]) + (m_[15] * rhs.m_[12]));
121- T r3c1((m_[12] * rhs.m_[1]) + (m_[13] * rhs.m_[5]) + (m_[14] * rhs.m_[9]) + (m_[15] * rhs.m_[13]));
122- T r3c2((m_[12] * rhs.m_[2]) + (m_[13] * rhs.m_[6]) + (m_[14] * rhs.m_[10]) + (m_[15] * rhs.m_[14]));
123- T r3c3((m_[12] * rhs.m_[3]) + (m_[13] * rhs.m_[7]) + (m_[14] * rhs.m_[11]) + (m_[15] * rhs.m_[15]));
124+ T r0c0((rhs.m_[0] * m_[0]) + (rhs.m_[1] * m_[4]) + (rhs.m_[2] * m_[8]) + (rhs.m_[3] * m_[12]));
125+ T r0c1((rhs.m_[0] * m_[1]) + (rhs.m_[1] * m_[5]) + (rhs.m_[2] * m_[9]) + (rhs.m_[3] * m_[13]));
126+ T r0c2((rhs.m_[0] * m_[2]) + (rhs.m_[1] * m_[6]) + (rhs.m_[2] * m_[10]) + (rhs.m_[3] * m_[14]));
127+ T r0c3((rhs.m_[0] * m_[3]) + (rhs.m_[1] * m_[7]) + (rhs.m_[2] * m_[11]) + (rhs.m_[3] * m_[15]));
128+ T r1c0((rhs.m_[4] * m_[0]) + (rhs.m_[5] * m_[4]) + (rhs.m_[6] * m_[8]) + (rhs.m_[7] * m_[12]));
129+ T r1c1((rhs.m_[4] * m_[1]) + (rhs.m_[5] * m_[5]) + (rhs.m_[6] * m_[9]) + (rhs.m_[7] * m_[13]));
130+ T r1c2((rhs.m_[4] * m_[2]) + (rhs.m_[5] * m_[6]) + (rhs.m_[6] * m_[10]) + (rhs.m_[7] * m_[14]));
131+ T r1c3((rhs.m_[4] * m_[3]) + (rhs.m_[5] * m_[7]) + (rhs.m_[6] * m_[11]) + (rhs.m_[7] * m_[15]));
132+ T r2c0((rhs.m_[8] * m_[0]) + (rhs.m_[9] * m_[4]) + (rhs.m_[10] * m_[8]) + (rhs.m_[11] * m_[12]));
133+ T r2c1((rhs.m_[8] * m_[1]) + (rhs.m_[9] * m_[5]) + (rhs.m_[10] * m_[9]) + (rhs.m_[11] * m_[13]));
134+ T r2c2((rhs.m_[8] * m_[2]) + (rhs.m_[9] * m_[6]) + (rhs.m_[10] * m_[10]) + (rhs.m_[11] * m_[14]));
135+ T r2c3((rhs.m_[8] * m_[3]) + (rhs.m_[9] * m_[7]) + (rhs.m_[10] * m_[11]) + (rhs.m_[11] * m_[15]));
136+ T r3c0((rhs.m_[12] * m_[0]) + (rhs.m_[13] * m_[4]) + (rhs.m_[14] * m_[8]) + (rhs.m_[15] * m_[12]));
137+ T r3c1((rhs.m_[12] * m_[1]) + (rhs.m_[13] * m_[5]) + (rhs.m_[14] * m_[9]) + (rhs.m_[15] * m_[13]));
138+ T r3c2((rhs.m_[12] * m_[2]) + (rhs.m_[13] * m_[6]) + (rhs.m_[14] * m_[10]) + (rhs.m_[15] * m_[14]));
139+ T r3c3((rhs.m_[12] * m_[3]) + (rhs.m_[13] * m_[7]) + (rhs.m_[14] * m_[11]) + (rhs.m_[15] * m_[15]));
140+
141 m_[0] = r0c0;
142 m_[1] = r0c1;
143 m_[2] = r0c2;
144
145=== modified file 'src/program.cc'
146--- src/program.cc 2011-03-11 21:44:11 +0000
147+++ src/program.cc 2011-04-13 01:40:50 +0000
148@@ -262,7 +262,7 @@
149 }
150
151 // Our matrix representation is row-major, so transpose is true here.
152- glUniformMatrix4fv(location, 1, GL_TRUE, m);
153+ glUniformMatrix4fv(location, 1, GL_FALSE, m);
154 ready_ = true;
155 }
156

Subscribers

People subscribed via source and target branches