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
29653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian#include <ui/FramebufferNativeWindow.h>
30870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian#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
491d3bcd6e217e7ef177287d06f6fdf6149f453830Mathias Agopian     EGLNativeWindowType window = android_createDisplaySurface();
501d3bcd6e217e7ef177287d06f6fdf6149f453830Mathias Agopian
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglInitialize(dpy, &majorVersion, &minorVersion);
53653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian
54653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     status_t err = EGLUtils::selectConfigForNativeWindow(
55653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian             dpy, configAttribs, window, &config);
56653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     if (err) {
57653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian         fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n");
58653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian         return 0;
59653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     }
60653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian
61653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     surface = eglCreateWindowSurface(dpy, config, window, NULL);
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     context = eglCreateContext(dpy, config, NULL, NULL);
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglMakeCurrent(dpy, surface, surface, context);
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglQuerySurface(dpy, surface, EGL_WIDTH, &w);
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     eglQuerySurface(dpy, surface, EGL_HEIGHT, &h);
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     GLint dim = w<h ? w : h;
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glBindTexture(GL_TEXTURE_2D, 0);
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glEnable(GL_TEXTURE_2D);
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glColor4f(1,1,1,1);
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glDisable(GL_DITHER);
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glShadeModel(GL_FLAT);
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     long long now, t;
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     int i;
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
80653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     char* texels = (char*)malloc(512*512*2);
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     memset(texels,0xFF,512*512*2);
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             512, 512, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, texels);
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
86653870d5e945ff94ff8136c97db0a016fc119683Mathias Agopian     char* dst = (char*)malloc(320*480*2);
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     memset(dst, 0, 320*480*2);
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("307200 bytes memcpy\n");
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         memcpy(dst, texels, 320*480*2);
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("memcpy() time = %llu us\n", (t-now)/1000);
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     free(dst);
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     free(texels);
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     setpriority(PRIO_PROCESS, 0, -20);
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 unmodified texture, 512x512 blit:\n");
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 512, 512, -512 };
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 unmodified texture, 1x1 blit:\n");
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 unmodified texture, 512x512 blit (x2):\n");
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 512, 512, -512 };
134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 unmodified texture, 1x1 blit (x2):\n");
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("512x512 (1x1 texel MODIFIED texture), 512x512 blit:\n");
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         uint16_t green = 0x7E0;
165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 512, 512, -512 };
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, &green);
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     int16_t texel = 0xF800;
179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             1, 1, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, &texel);
181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("1x1 unmodified texture, 1x1 blit:\n");
183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("1x1 unmodified texture, 512x512 blit:\n");
196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 512, 512);
202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
203edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
204edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
205edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
206edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
207edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     printf("1x1 (1x1 texel MODIFIED texture), 512x512 blit:\n");
210edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     glClear(GL_COLOR_BUFFER_BIT);
211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     for (i=0 ; i<4 ; i++) {
212edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         uint16_t green = 0x7E0;
213edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         GLint crop[4] = { 0, 1, 1, -1 };
214edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
215edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, &green);
216edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         now = systemTime();
217edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glDrawTexiOES(0, 0, 0, 1, 1);
218edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         glFinish();
219edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         t = systemTime();
220edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         printf("glFinish() time = %llu us\n", (t-now)/1000);
221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         fflush(stdout);
222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project         eglSwapBuffers(dpy, surface);
223edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     }
224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
225edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     return 0;
226edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
227