OLD | NEW |
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "main.h" | 5 #include "main.h" |
6 #include "testbase.h" | 6 #include "testbase.h" |
7 #include "utils.h" | 7 #include "utils.h" |
8 | 8 |
9 | 9 |
10 namespace glbench { | 10 namespace glbench { |
11 | 11 |
12 | 12 |
13 class VaryingsAndDdxyShaderTest : public DrawElementsTestFunc { | 13 class VaryingsAndDdxyShaderTest : public DrawElementsTestFunc { |
14 public: | 14 public: |
15 VaryingsAndDdxyShaderTest() {} | 15 VaryingsAndDdxyShaderTest() {} |
16 virtual ~VaryingsAndDdxyShaderTest() {} | 16 virtual ~VaryingsAndDdxyShaderTest() {} |
17 virtual bool Run(); | 17 virtual bool Run(); |
18 | 18 |
19 private: | 19 private: |
20 DISALLOW_COPY_AND_ASSIGN(VaryingsAndDdxyShaderTest); | 20 DISALLOW_COPY_AND_ASSIGN(VaryingsAndDdxyShaderTest); |
21 }; | 21 }; |
22 | 22 |
23 #if I915_WORKAROUND | 23 #if defined(I915_WORKAROUND) |
24 #define V1 "gl_TexCoord[0]" | 24 #define V1 "gl_TexCoord[0]" |
25 #define V2 "gl_TexCoord[1]" | 25 #define V2 "gl_TexCoord[1]" |
26 #define V3 "gl_TexCoord[2]" | 26 #define V3 "gl_TexCoord[2]" |
27 #define V4 "gl_TexCoord[3]" | 27 #define V4 "gl_TexCoord[3]" |
28 #define V5 "gl_TexCoord[4]" | 28 #define V5 "gl_TexCoord[4]" |
29 #define V6 "gl_TexCoord[5]" | 29 #define V6 "gl_TexCoord[5]" |
30 #define V7 "gl_TexCoord[6]" | 30 #define V7 "gl_TexCoord[6]" |
31 #define V8 "gl_TexCoord[7]" | 31 #define V8 "gl_TexCoord[7]" |
32 #define DDX "dFdx" | |
33 #define DDY "dFdy" | |
34 #else | 32 #else |
35 #define V1 "v1" | 33 #define V1 "v1" |
36 #define V2 "v2" | 34 #define V2 "v2" |
37 #define V3 "v3" | 35 #define V3 "v3" |
38 #define V4 "v4" | 36 #define V4 "v4" |
39 #define V5 "v5" | 37 #define V5 "v5" |
40 #define V6 "v6" | 38 #define V6 "v6" |
41 #define V7 "v7" | 39 #define V7 "v7" |
42 #define V8 "v8" | 40 #define V8 "v8" |
43 #define DDX "ddx" | |
44 #define DDY "ddy" | |
45 #endif | 41 #endif |
46 | 42 |
47 | 43 |
48 const char *vertex_shader_1_varying = | 44 const char *vertex_shader_1_varying = |
49 "attribute vec4 c;" | 45 "attribute vec4 c;" |
50 "varying vec4 v1;" | 46 "varying vec4 v1;" |
51 "void main() {" | 47 "void main() {" |
52 " gl_Position = c;" | 48 " gl_Position = c;" |
53 V1 "= c;" | 49 V1 "= c;" |
54 "}"; | 50 "}"; |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 int attribute_index = glGetAttribLocation(program, "c"); | 147 int attribute_index = glGetAttribLocation(program, "c"); |
152 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); | 148 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); |
153 glVertexAttribPointer(attribute_index, 2, GL_FLOAT, GL_FALSE, 0, NULL); | 149 glVertexAttribPointer(attribute_index, 2, GL_FLOAT, GL_FALSE, 0, NULL); |
154 glEnableVertexAttribArray(attribute_index); | 150 glEnableVertexAttribArray(attribute_index); |
155 | 151 |
156 return program; | 152 return program; |
157 } | 153 } |
158 | 154 |
159 | 155 |
160 const char *fragment_shader_ddx = | 156 const char *fragment_shader_ddx = |
| 157 "#extension GL_OES_standard_derivatives : enable\n" |
161 "varying vec4 v1;" | 158 "varying vec4 v1;" |
162 "void main() {" | 159 "void main() {" |
163 " gl_FragColor = vec4(" DDX "(" V1 ".x), 0., 0., 1.);" | 160 " gl_FragColor = vec4(dFdx(" V1 ".x), 0., 0., 1.);" |
164 "}"; | 161 "}"; |
165 | 162 |
166 const char *fragment_shader_ddy = | 163 const char *fragment_shader_ddy = |
| 164 "#extension GL_OES_standard_derivatives : enable\n" |
167 "varying vec4 v1;" | 165 "varying vec4 v1;" |
168 "void main() {" | 166 "void main() {" |
169 " gl_FragColor = vec4(" DDY "(" V1 ".y), 0., 0., 1.);" | 167 " gl_FragColor = vec4(dFdy(" V1 ".y), 0., 0., 1.);" |
170 "}"; | 168 "}"; |
171 | 169 |
172 GLuint DdxDdyShaderProgram(bool ddx, GLuint vertex_buffer) { | 170 GLuint DdxDdyShaderProgram(bool ddx, GLuint vertex_buffer) { |
173 GLuint program = | 171 GLuint program = |
174 InitShaderProgram(vertex_shader_1_varying, | 172 InitShaderProgram(vertex_shader_1_varying, |
175 ddx ? fragment_shader_ddx : fragment_shader_ddy); | 173 ddx ? fragment_shader_ddx : fragment_shader_ddy); |
176 | 174 |
177 int attribute_index = glGetAttribLocation(program, "c"); | 175 int attribute_index = glGetAttribLocation(program, "c"); |
178 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); | 176 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); |
179 glVertexAttribPointer(attribute_index, 2, GL_FLOAT, GL_FALSE, 0, NULL); | 177 glVertexAttribPointer(attribute_index, 2, GL_FLOAT, GL_FALSE, 0, NULL); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 return true; | 238 return true; |
241 } | 239 } |
242 | 240 |
243 | 241 |
244 TestBase* GetVaryingsAndDdxyShaderTest() { | 242 TestBase* GetVaryingsAndDdxyShaderTest() { |
245 return new VaryingsAndDdxyShaderTest; | 243 return new VaryingsAndDdxyShaderTest; |
246 } | 244 } |
247 | 245 |
248 | 246 |
249 } // namespace glbench | 247 } // namespace glbench |
OLD | NEW |