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