gl_code.cpp revision a19954ab377b46dbcb9cbe8a6ab6d458f2e32bca
1eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich// OpenGL ES 2.0 code 2eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 3eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <nativehelper/jni.h> 4eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#define LOG_TAG "GLPerf gl_code.cpp" 5eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <utils/Log.h> 6eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 7eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <EGL/egl.h> 8eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <GLES2/gl2.h> 9eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <GLES2/gl2ext.h> 10eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <utils/Timers.h> 11eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 12eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <stdio.h> 13eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <stdlib.h> 14eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <math.h> 15eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 167920987182de225959a3bf40f36fd5ee23204caeJason Sams#include "../../gl_perf/fill_common.cpp" 1763bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich 18eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 19eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich////////////////////////// 20eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 2163bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich// Width and height of the screen 22eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 23eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichuint32_t w; 24eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichuint32_t h; 25eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 26eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich// The stateClock starts at zero and increments by 1 every time we draw a frame. It is used to control which phase of the test we are in. 27eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 28eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichint stateClock; 29eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichconst int doLoopStates = 2; 30eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichconst int doSingleTestStates = 2; 31eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichbool done; 32eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 3363bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich// Saves the parameters of the test (so we can print them out when we finish the timing.) 3463bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich 357920987182de225959a3bf40f36fd5ee23204caeJason Sams 367920987182de225959a3bf40f36fd5ee23204caeJason Samsint pgm; 377920987182de225959a3bf40f36fd5ee23204caeJason Sams 387920987182de225959a3bf40f36fd5ee23204caeJason Samsvoid ptSwap() { 39eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 40eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 4174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsvoid doTest() { 4274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams uint32_t testNum = stateClock >> 2; 4374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams int texSize = ((stateClock >> 1) & 0x1) + 1; 443e9eb868b3ad6a93adcb6e8874779f1f57c6ca16Jack Palevich 4574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams if (testNum >= gFragmentTestCount) { 46a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("done\n"); 477920987182de225959a3bf40f36fd5ee23204caeJason Sams if (fOut) { 487920987182de225959a3bf40f36fd5ee23204caeJason Sams fclose(fOut); 497920987182de225959a3bf40f36fd5ee23204caeJason Sams fOut = NULL; 5063bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich } 51eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich done = true; 52eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return; 53eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 54eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 55a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block // ALOGI("doTest %d %d %d\n", texCount, extraMath, testSubState); 56965b95468d8325388557003eec24bd70fd22640aJack Palevich 5774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams// for (uint32_t num = 0; num < gFragmentTestCount; num++) { 5874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams doSingleTest(testNum, texSize); 59eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 60eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 61eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichextern "C" { 62eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich JNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_init(JNIEnv * env, jobject obj, jint width, jint height); 63eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich JNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_step(JNIEnv * env, jobject obj); 64eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich}; 65eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 66eb69d2ae19c89553c142a7b716fe2ac72e32080aJack PalevichJNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_init(JNIEnv * env, jobject obj, jint width, jint height) 67eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich{ 6874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams gWidth = width; 6974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams gHeight = height; 7092a9ae4a02682a9e195f3e3a68d2c7293c018173Jack Palevich if (!done) { 7174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams stateClock = 0; 7274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams done = false; 7374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams setupVA(); 7474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams genTextures(); 7574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams const char* fileName = "/sdcard/glperf.csv"; 767920987182de225959a3bf40f36fd5ee23204caeJason Sams if (fOut != NULL) { 77a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("Closing partially written output.n"); 787920987182de225959a3bf40f36fd5ee23204caeJason Sams fclose(fOut); 797920987182de225959a3bf40f36fd5ee23204caeJason Sams fOut = NULL; 8092a9ae4a02682a9e195f3e3a68d2c7293c018173Jack Palevich } 81a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("Writing to: %s\n",fileName); 8274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams fOut = fopen(fileName, "w"); 8374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams if (fOut == NULL) { 8474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams LOGE("Could not open: %s\n", fileName); 8574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams } 8674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams 87a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("\nvarColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\n"); 8874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams if (fOut) fprintf(fOut,"varColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\r\n"); 8992a9ae4a02682a9e195f3e3a68d2c7293c018173Jack Palevich } 90eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 91eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 92eb69d2ae19c89553c142a7b716fe2ac72e32080aJack PalevichJNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_step(JNIEnv * env, jobject obj) 93eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich{ 94eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (! done) { 95965b95468d8325388557003eec24bd70fd22640aJack Palevich if (stateClock > 0 && ((stateClock & 1) == 0)) { 9674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams //endTimer(100); 97eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 9874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams doTest(); 99eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich stateClock++; 100965b95468d8325388557003eec24bd70fd22640aJack Palevich } else { 10174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 102eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 103eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 104