1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdlib.h>
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdio.h>
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <time.h>
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sched.h>
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/resource.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <EGL/egl.h>
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <GLES/gl.h>
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <GLES/glext.h>
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
27653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian#include <utils/Timers.h>
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
296ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden#include <WindowSurface.h>
306ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden#include <EGLUtils.h>
31653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian
32653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopianusing namespace android;
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectint main(int argc, char** argv)
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
36653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian    EGLint configAttribs[] = {
37653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian         EGL_DEPTH_SIZE, 0,
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         EGL_NONE
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     };
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLint majorVersion;
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLint minorVersion;
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLContext context;
44653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     EGLConfig config;
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLSurface surface;
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLint w, h;
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     EGLDisplay dpy;
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
496ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden     WindowSurface windowSurface;
506ef57d7b368ebbac5f2b27c36a9032fee1cda8b1Andy McFadden     EGLNativeWindowType window = windowSurface.getSurface();
511d3bcd6e217e7ef177287d06f6fdf6149f453830Mathias Agopian
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglInitialize(dpy, &majorVersion, &minorVersion);
54653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian
55653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     status_t err = EGLUtils::selectConfigForNativeWindow(
56653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian             dpy, configAttribs, window, &config);
57653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     if (err) {
58653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian         fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n");
59653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian         return 0;
60653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     }
61653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian
62653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     surface = eglCreateWindowSurface(dpy, config, window, NULL);
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     context = eglCreateContext(dpy, config, NULL, NULL);
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglMakeCurrent(dpy, surface, surface, context);
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglQuerySurface(dpy, surface, EGL_WIDTH, &w);
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglQuerySurface(dpy, surface, EGL_HEIGHT, &h);
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     GLint dim = w<h ? w : h;
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glBindTexture(GL_TEXTURE_2D, 0);
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glEnable(GL_TEXTURE_2D);
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glColor4f(1,1,1,1);
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glDisable(GL_DITHER);
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glShadeModel(GL_FLAT);
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     long long now, t;
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     int i;
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
81653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     char* texels = (char*)malloc(512*512*2);
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     memset(texels,0xFF,512*512*2);
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             512, 512, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, texels);
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
87653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     char* dst = (char*)malloc(320*480*2);
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     memset(dst, 0, 320*480*2);
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("307200 bytes memcpy\n");
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         memcpy(dst, texels, 320*480*2);
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("memcpy() time = %llu us\n", (t-now)/1000);
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     free(dst);
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     free(texels);
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     setpriority(PRIO_PROCESS, 0, -20);
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 unmodified texture, 512x512 blit:\n");
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 512, 512, -512 };
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 unmodified texture, 1x1 blit:\n");
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 unmodified texture, 512x512 blit (x2):\n");
132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 512, 512, -512 };
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 unmodified texture, 1x1 blit (x2):\n");
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 (1x1 texel MODIFIED texture), 512x512 blit:\n");
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         uint16_t green = 0x7E0;
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 512, 512, -512 };
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, &green);
169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     int16_t texel = 0xF800;
180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, &texel);
182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("1x1 unmodified texture, 1x1 blit:\n");
184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("1x1 unmodified texture, 512x512 blit:\n");
197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
203edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
204edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
205edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
206edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
207edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
210edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("1x1 (1x1 texel MODIFIED texture), 512x512 blit:\n");
211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
212edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
213edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         uint16_t green = 0x7E0;
214edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
215edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
216edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, &green);
217edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
218edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
219edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
220edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
223edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
225edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
226edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     return 0;
227edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
228