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 <fcntl.h> | 5 #include <fcntl.h> |
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <string.h> | 8 #include <string.h> |
9 #include <sys/mman.h> | 9 #include <sys/mman.h> |
10 | 10 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
61 if (Bench(f, &slope, &bias)) { | 61 if (Bench(f, &slope, &bias)) { |
62 printf("%s: %g\n", name, coefficient * (inverse ? 1.f / slope : slope)); | 62 printf("%s: %g\n", name, coefficient * (inverse ? 1.f / slope : slope)); |
63 } else { | 63 } else { |
64 printf("# %s is too slow, returning zero.\n", name); | 64 printf("# %s is too slow, returning zero.\n", name); |
65 printf("%s: 0\n", name); | 65 printf("%s: 0\n", name); |
66 } | 66 } |
67 } | 67 } |
68 } | 68 } |
69 | 69 |
70 static int arg1 = 0; | 70 static int arg1 = 0; |
71 static void *arg2 = NULL; | |
72 | 71 |
73 void SwapTestFunc(int iter) { | 72 void SwapTestFunc(int iter) { |
74 for (int i = 0 ; i < iter; ++i) { | 73 for (int i = 0 ; i < iter; ++i) { |
75 SwapBuffers(); | 74 SwapBuffers(); |
76 } | 75 } |
77 } | 76 } |
78 | 77 |
79 void SwapTest() { | 78 void SwapTest() { |
80 RunTest(SwapTestFunc, "us_swap_swap", 1.f, false); | 79 RunTest(SwapTestFunc, "us_swap_swap", 1.f, false); |
81 } | 80 } |
(...skipping 27 matching lines...) Expand all Loading... | |
109 RunTest(ClearTestFunc, "mpixels_sec_clear_colordepthstencil", | 108 RunTest(ClearTestFunc, "mpixels_sec_clear_colordepthstencil", |
110 g_width * g_height, true); | 109 g_width * g_height, true); |
111 } | 110 } |
112 | 111 |
113 | 112 |
114 GLuint SetupVBO(GLenum target, GLsizeiptr size, const GLvoid *data) { | 113 GLuint SetupVBO(GLenum target, GLsizeiptr size, const GLvoid *data) { |
115 GLuint buf = ~0; | 114 GLuint buf = ~0; |
116 glGenBuffers(1, &buf); | 115 glGenBuffers(1, &buf); |
117 glBindBuffer(target, buf); | 116 glBindBuffer(target, buf); |
118 glBufferData(target, size, data, GL_STATIC_DRAW); | 117 glBufferData(target, size, data, GL_STATIC_DRAW); |
119 | 118 CHECK(!glGetError()); |
Alexey Marinichev
2010/03/25 21:01:57
I personally prefer explicit comparisons for ints
| |
120 return glGetError() == 0 ? buf : 0; | 119 return buf; |
121 } | 120 } |
122 | 121 |
123 | 122 |
124 GLuint SetupTexture(GLsizei size_log2) { | 123 GLuint SetupTexture(GLsizei size_log2) { |
125 GLsizei size = 1 << size_log2; | 124 GLsizei size = 1 << size_log2; |
126 GLuint name = ~0; | 125 GLuint name = ~0; |
127 glGenTextures(1, &name); | 126 glGenTextures(1, &name); |
128 glBindTexture(GL_TEXTURE_2D, name); | 127 glBindTexture(GL_TEXTURE_2D, name); |
129 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | 128 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); |
130 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 129 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
176 GLfloat buffer_texture[8] = { | 175 GLfloat buffer_texture[8] = { |
177 0.f, 0.f, | 176 0.f, 0.f, |
178 1.f, 0.f, | 177 1.f, 0.f, |
179 0.f, 1.f, | 178 0.f, 1.f, |
180 1.f, 1.f, | 179 1.f, 1.f, |
181 }; | 180 }; |
182 glEnableClientState(GL_VERTEX_ARRAY); | 181 glEnableClientState(GL_VERTEX_ARRAY); |
183 | 182 |
184 GLuint vbo_vertex = SetupVBO(GL_ARRAY_BUFFER, | 183 GLuint vbo_vertex = SetupVBO(GL_ARRAY_BUFFER, |
185 sizeof(buffer_vertex), buffer_vertex); | 184 sizeof(buffer_vertex), buffer_vertex); |
186 if (!vbo_vertex) | 185 glVertexPointer(2, GL_FLOAT, 0, 0); |
187 printf("# Not Using VBO!\n"); | |
188 glVertexPointer(2, GL_FLOAT, 0, vbo_vertex ? 0 : buffer_vertex); | |
189 | 186 |
190 GLuint vbo_texture = SetupVBO(GL_ARRAY_BUFFER, | 187 GLuint vbo_texture = SetupVBO(GL_ARRAY_BUFFER, |
191 sizeof(buffer_texture), buffer_texture); | 188 sizeof(buffer_texture), buffer_texture); |
192 glTexCoordPointer(2, GL_FLOAT, 0, vbo_texture ? 0 : buffer_texture); | 189 glTexCoordPointer(2, GL_FLOAT, 0, 0); |
193 | 190 |
194 glColor4f(1.f, 0.f, 0.f, 1.f); | 191 glColor4f(1.f, 0.f, 0.f, 1.f); |
195 FillRateTestNormal("fill_solid"); | 192 FillRateTestNormal("fill_solid"); |
196 FillRateTestBlendDepth("fill_solid"); | 193 FillRateTestBlendDepth("fill_solid"); |
197 | 194 |
198 glColor4f(1.f, 1.f, 1.f, 1.f); | 195 glColor4f(1.f, 1.f, 1.f, 1.f); |
199 glEnableClientState(GL_TEXTURE_COORD_ARRAY); | 196 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
200 glEnable(GL_TEXTURE_2D); | 197 glEnable(GL_TEXTURE_2D); |
201 | 198 |
202 GLuint texture = SetupTexture(9); | 199 GLuint texture = SetupTexture(9); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
267 static void DrawArraysTestFunc(int iter) { | 264 static void DrawArraysTestFunc(int iter) { |
268 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | 265 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); |
269 glFlush(); | 266 glFlush(); |
270 for (int i = 0; i < iter-1; ++i) { | 267 for (int i = 0; i < iter-1; ++i) { |
271 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | 268 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); |
272 } | 269 } |
273 } | 270 } |
274 | 271 |
275 | 272 |
276 static void DrawElementsTestFunc(int iter) { | 273 static void DrawElementsTestFunc(int iter) { |
277 glDrawElements(GL_TRIANGLES, arg1, GL_UNSIGNED_INT, arg2); | 274 glDrawElements(GL_TRIANGLES, arg1, GL_UNSIGNED_INT, 0); |
278 glFlush(); | 275 glFlush(); |
279 for (int i = 0 ; i < iter-1; ++i) { | 276 for (int i = 0 ; i < iter-1; ++i) { |
280 glDrawElements(GL_TRIANGLES, arg1, GL_UNSIGNED_INT, arg2); | 277 glDrawElements(GL_TRIANGLES, arg1, GL_UNSIGNED_INT, 0); |
281 } | 278 } |
282 } | 279 } |
283 | 280 |
284 // Generates a tautological lattice. | 281 // Generates a tautological lattice. |
285 static void CreateLattice(GLfloat **vertices, GLsizeiptr *size, | 282 static void CreateLattice(GLfloat **vertices, GLsizeiptr *size, |
286 GLfloat size_x, GLfloat size_y, | 283 GLfloat size_x, GLfloat size_y, |
287 int width, int height) | 284 int width, int height) |
288 { | 285 { |
289 GLfloat *vptr = *vertices = new GLfloat[2 * (width + 1) * (height + 1)]; | 286 GLfloat *vptr = *vertices = new GLfloat[2 * (width + 1) * (height + 1)]; |
290 for (int j = 0; j <= height; j++) { | 287 for (int j = 0; j <= height; j++) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
338 // Larger meshes make this test too slow for devices that do 1 mtri/sec. | 335 // Larger meshes make this test too slow for devices that do 1 mtri/sec. |
339 GLint width = 64; | 336 GLint width = 64; |
340 GLint height = 64; | 337 GLint height = 64; |
341 | 338 |
342 GLfloat *vertices = NULL; | 339 GLfloat *vertices = NULL; |
343 GLsizeiptr vertex_buffer_size = 0; | 340 GLsizeiptr vertex_buffer_size = 0; |
344 CreateLattice(&vertices, &vertex_buffer_size, 1.f / g_width, 1.f / g_height, | 341 CreateLattice(&vertices, &vertex_buffer_size, 1.f / g_width, 1.f / g_height, |
345 width, height); | 342 width, height); |
346 GLuint vertex_buffer = SetupVBO(GL_ARRAY_BUFFER, | 343 GLuint vertex_buffer = SetupVBO(GL_ARRAY_BUFFER, |
347 vertex_buffer_size, vertices); | 344 vertex_buffer_size, vertices); |
348 glVertexPointer(2, GL_FLOAT, 0, vertex_buffer != 0 ? 0 : vertices); | 345 glVertexPointer(2, GL_FLOAT, 0, 0); |
349 glEnableClientState(GL_VERTEX_ARRAY); | 346 glEnableClientState(GL_VERTEX_ARRAY); |
350 | 347 |
351 GLuint *indices = NULL; | 348 GLuint *indices = NULL; |
352 GLuint index_buffer = 0; | 349 GLuint index_buffer = 0; |
353 GLsizeiptr index_buffer_size = 0; | 350 GLsizeiptr index_buffer_size = 0; |
354 | 351 |
355 { | 352 { |
356 arg1 = CreateMesh(&indices, &index_buffer_size, width, height, 0); | 353 arg1 = CreateMesh(&indices, &index_buffer_size, width, height, 0); |
357 | 354 |
358 index_buffer = SetupVBO(GL_ELEMENT_ARRAY_BUFFER, | 355 index_buffer = SetupVBO(GL_ELEMENT_ARRAY_BUFFER, |
359 index_buffer_size, indices); | 356 index_buffer_size, indices); |
360 arg2 = index_buffer ? 0 : indices; | |
361 | |
362 RunTest(DrawElementsTestFunc, "mtri_sec_triangle_setup", arg1 / 3, true); | 357 RunTest(DrawElementsTestFunc, "mtri_sec_triangle_setup", arg1 / 3, true); |
363 glEnable(GL_CULL_FACE); | 358 glEnable(GL_CULL_FACE); |
364 RunTest(DrawElementsTestFunc, "mtri_sec_triangle_setup_all_culled", | 359 RunTest(DrawElementsTestFunc, "mtri_sec_triangle_setup_all_culled", |
365 arg1 / 3, true); | 360 arg1 / 3, true); |
366 glDisable(GL_CULL_FACE); | 361 glDisable(GL_CULL_FACE); |
367 | 362 |
368 glDeleteBuffers(1, &index_buffer); | 363 glDeleteBuffers(1, &index_buffer); |
369 delete[] indices; | 364 delete[] indices; |
370 } | 365 } |
371 | 366 |
372 { | 367 { |
373 glColor4f(0.f, 1.f, 1.f, 1.f); | 368 glColor4f(0.f, 1.f, 1.f, 1.f); |
374 arg1 = CreateMesh(&indices, &index_buffer_size, width, height, | 369 arg1 = CreateMesh(&indices, &index_buffer_size, width, height, |
375 RAND_MAX / 2); | 370 RAND_MAX / 2); |
376 | 371 |
377 index_buffer = SetupVBO(GL_ELEMENT_ARRAY_BUFFER, | 372 index_buffer = SetupVBO(GL_ELEMENT_ARRAY_BUFFER, |
378 index_buffer_size, indices); | 373 index_buffer_size, indices); |
379 arg2 = index_buffer ? 0 : indices; | |
380 | |
381 glEnable(GL_CULL_FACE); | 374 glEnable(GL_CULL_FACE); |
382 RunTest(DrawElementsTestFunc, "mtri_sec_triangle_setup_half_culled", | 375 RunTest(DrawElementsTestFunc, "mtri_sec_triangle_setup_half_culled", |
383 arg1 / 3, true); | 376 arg1 / 3, true); |
384 | 377 |
385 glDeleteBuffers(1, &index_buffer); | 378 glDeleteBuffers(1, &index_buffer); |
386 delete[] indices; | 379 delete[] indices; |
387 } | 380 } |
388 | 381 |
389 glDeleteBuffers(1, &vertex_buffer); | 382 glDeleteBuffers(1, &vertex_buffer); |
390 delete[] vertices; | 383 delete[] vertices; |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
698 // Set up the vertex arrays for drawing textured quads later on. | 691 // Set up the vertex arrays for drawing textured quads later on. |
699 glEnableClientState(GL_VERTEX_ARRAY); | 692 glEnableClientState(GL_VERTEX_ARRAY); |
700 GLfloat buffer_vertex[8] = { | 693 GLfloat buffer_vertex[8] = { |
701 -1.f, -1.f, | 694 -1.f, -1.f, |
702 1.f, -1.f, | 695 1.f, -1.f, |
703 -1.f, 1.f, | 696 -1.f, 1.f, |
704 1.f, 1.f, | 697 1.f, 1.f, |
705 }; | 698 }; |
706 GLuint vbo_vertex = SetupVBO(GL_ARRAY_BUFFER, | 699 GLuint vbo_vertex = SetupVBO(GL_ARRAY_BUFFER, |
707 sizeof(buffer_vertex), buffer_vertex); | 700 sizeof(buffer_vertex), buffer_vertex); |
708 if (!vbo_vertex) | 701 glVertexPointer(2, GL_FLOAT, 0, 0); |
709 printf("# Not Using VBO!\n"); | |
710 glVertexPointer(2, GL_FLOAT, 0, vbo_vertex ? 0 : buffer_vertex); | |
711 | 702 |
712 GLfloat buffer_texture[8] = { | 703 GLfloat buffer_texture[8] = { |
713 0.f, 0.f, | 704 0.f, 0.f, |
714 1.f, 0.f, | 705 1.f, 0.f, |
715 0.f, 1.f, | 706 0.f, 1.f, |
716 1.f, 1.f, | 707 1.f, 1.f, |
717 }; | 708 }; |
718 GLuint vbo_texture = SetupVBO(GL_ARRAY_BUFFER, | 709 GLuint vbo_texture = SetupVBO(GL_ARRAY_BUFFER, |
719 sizeof(buffer_texture), buffer_texture); | 710 sizeof(buffer_texture), buffer_texture); |
720 for (int i = 0; i < 3; i++) { | 711 for (int i = 0; i < 3; i++) { |
721 glClientActiveTexture(GL_TEXTURE0 + i); | 712 glClientActiveTexture(GL_TEXTURE0 + i); |
722 glTexCoordPointer(2, GL_FLOAT, 0, vbo_texture ? 0 : buffer_texture); | 713 glTexCoordPointer(2, GL_FLOAT, 0, 0); |
723 glEnableClientState(GL_TEXTURE_COORD_ARRAY); | 714 glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
724 } | 715 } |
725 | 716 |
726 // Set up the static background textures. | 717 // Set up the static background textures. |
727 UpdateTexture(); | 718 UpdateTexture(); |
728 UpdateTexture(); | 719 UpdateTexture(); |
729 UpdateTexture(); | 720 UpdateTexture(); |
730 // Load these textures into bound texture ids and keep using them | 721 // Load these textures into bound texture ids and keep using them |
731 // from there to avoid having to reload this texture every frame | 722 // from there to avoid having to reload this texture every frame |
732 glActiveTexture(GL_TEXTURE0); | 723 glActiveTexture(GL_TEXTURE0); |
(...skipping 20 matching lines...) Expand all Loading... | |
753 compositing_background_program = | 744 compositing_background_program = |
754 TripleTextureBlendShaderProgram(vbo_vertex, | 745 TripleTextureBlendShaderProgram(vbo_vertex, |
755 vbo_texture, vbo_texture, vbo_texture); | 746 vbo_texture, vbo_texture, vbo_texture); |
756 compositing_foreground_program = | 747 compositing_foreground_program = |
757 BasicTextureShaderProgram(vbo_vertex, vbo_texture); | 748 BasicTextureShaderProgram(vbo_vertex, vbo_texture); |
758 if ((!compositing_background_program) || | 749 if ((!compositing_background_program) || |
759 (!compositing_foreground_program)) { | 750 (!compositing_foreground_program)) { |
760 printf("# Could not set up compositing shader.\n"); | 751 printf("# Could not set up compositing shader.\n"); |
761 } | 752 } |
762 | 753 |
763 if (!vbo_vertex) | 754 glVertexPointer(2, GL_FLOAT, 0, 0); |
764 printf("# Not Using VBO!\n"); | |
765 glVertexPointer(2, GL_FLOAT, 0, vbo_vertex ? 0 : buffer_vertex); | |
766 } | 755 } |
767 | 756 |
768 void TeardownCompositing() { | 757 void TeardownCompositing() { |
769 glDeleteProgram(compositing_background_program); | 758 glDeleteProgram(compositing_background_program); |
770 glDeleteProgram(compositing_foreground_program); | 759 glDeleteProgram(compositing_foreground_program); |
771 } | 760 } |
772 | 761 |
773 // Notes on the window manager compositing test: | 762 // Notes on the window manager compositing test: |
774 // Depth | 763 // Depth |
775 // Depth complexity = 3: background, active window, static window | 764 // Depth complexity = 3: background, active window, static window |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
853 test[i](); | 842 test[i](); |
854 GLenum err = glGetError(); | 843 GLenum err = glGetError(); |
855 if (err != 0) | 844 if (err != 0) |
856 printf("# glGetError returned non-zero: 0x%x\n", err); | 845 printf("# glGetError returned non-zero: 0x%x\n", err); |
857 DestroyContext(); | 846 DestroyContext(); |
858 } | 847 } |
859 } while (GetUTime() < done); | 848 } while (GetUTime() < done); |
860 | 849 |
861 return 0; | 850 return 0; |
862 } | 851 } |
OLD | NEW |