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