1eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich// OpenGL ES 2.0 code 2eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 323bfa224ebeb60bfa39a6f3cc55c87bcd651b36aSteven Moreland#include <jni.h> 4eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#define LOG_TAG "GLPerf gl_code.cpp" 5f4fd7b22141161f82619c62d56f6775aea622959Inseob Kim#include <android/log.h> 6f4fd7b22141161f82619c62d56f6775aea622959Inseob Kim 7f4fd7b22141161f82619c62d56f6775aea622959Inseob Kim#define ALOG(priority, tag, ...) ((void)__android_log_print(ANDROID_##priority, tag, __VA_ARGS__)) 8f4fd7b22141161f82619c62d56f6775aea622959Inseob Kim 9f4fd7b22141161f82619c62d56f6775aea622959Inseob Kim#define ALOGI(...) ALOG(LOG_INFO, LOG_TAG, __VA_ARGS__) 10f4fd7b22141161f82619c62d56f6775aea622959Inseob Kim#define ALOGE(...) ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__) 11eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 12eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <EGL/egl.h> 13eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <GLES2/gl2.h> 14eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <GLES2/gl2ext.h> 15eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 16eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <stdio.h> 17eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <stdlib.h> 18eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich#include <math.h> 19f4fd7b22141161f82619c62d56f6775aea622959Inseob Kim#include <time.h> 20eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 217920987182de225959a3bf40f36fd5ee23204caeJason Sams#include "../../gl_perf/fill_common.cpp" 2263bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich 23eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 24eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich////////////////////////// 25eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 2663bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich// Width and height of the screen 27eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 28eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichuint32_t w; 29eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichuint32_t h; 30eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 31eb69d2ae19c89553c142a7b716fe2ac72e32080aJack 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. 32eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 33eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichint stateClock; 34eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichbool done; 35eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 3663bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich// Saves the parameters of the test (so we can print them out when we finish the timing.) 3763bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich 387920987182de225959a3bf40f36fd5ee23204caeJason Sams 397920987182de225959a3bf40f36fd5ee23204caeJason Samsint pgm; 407920987182de225959a3bf40f36fd5ee23204caeJason Sams 417920987182de225959a3bf40f36fd5ee23204caeJason Samsvoid ptSwap() { 42eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 43eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 4474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsvoid doTest() { 4574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams uint32_t testNum = stateClock >> 2; 4674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams int texSize = ((stateClock >> 1) & 0x1) + 1; 473e9eb868b3ad6a93adcb6e8874779f1f57c6ca16Jack Palevich 4874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams if (testNum >= gFragmentTestCount) { 49a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("done\n"); 507920987182de225959a3bf40f36fd5ee23204caeJason Sams if (fOut) { 517920987182de225959a3bf40f36fd5ee23204caeJason Sams fclose(fOut); 527920987182de225959a3bf40f36fd5ee23204caeJason Sams fOut = NULL; 5363bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich } 54eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich done = true; 55eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return; 56eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 57eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 58a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block // ALOGI("doTest %d %d %d\n", texCount, extraMath, testSubState); 59965b95468d8325388557003eec24bd70fd22640aJack Palevich 6074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams// for (uint32_t num = 0; num < gFragmentTestCount; num++) { 6174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams doSingleTest(testNum, texSize); 62eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 63eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 64eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichextern "C" { 65eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich JNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_init(JNIEnv * env, jobject obj, jint width, jint height); 66eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich JNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_step(JNIEnv * env, jobject obj); 67eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich}; 68eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 699c938487732de50adb46a2699ce930195c873ea1Kalle RaitaJNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_init(JNIEnv * /*env*/, jobject /*obj*/, jint width, jint height) 70eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich{ 7174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams gWidth = width; 7274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams gHeight = height; 7392a9ae4a02682a9e195f3e3a68d2c7293c018173Jack Palevich if (!done) { 7474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams stateClock = 0; 7574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams done = false; 7674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams setupVA(); 7774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams genTextures(); 7874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams const char* fileName = "/sdcard/glperf.csv"; 797920987182de225959a3bf40f36fd5ee23204caeJason Sams if (fOut != NULL) { 80a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("Closing partially written output.n"); 817920987182de225959a3bf40f36fd5ee23204caeJason Sams fclose(fOut); 827920987182de225959a3bf40f36fd5ee23204caeJason Sams fOut = NULL; 8392a9ae4a02682a9e195f3e3a68d2c7293c018173Jack Palevich } 84a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("Writing to: %s\n",fileName); 8574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams fOut = fopen(fileName, "w"); 8674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams if (fOut == NULL) { 87e6f43ddce78d6846af12550ff9193c5c6fe5844bSteve Block ALOGE("Could not open: %s\n", fileName); 8874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams } 8974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams 90a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("\nvarColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\n"); 9174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams if (fOut) fprintf(fOut,"varColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\r\n"); 9292a9ae4a02682a9e195f3e3a68d2c7293c018173Jack Palevich } 93eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 94eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 959c938487732de50adb46a2699ce930195c873ea1Kalle RaitaJNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_step(JNIEnv * /*env*/, jobject /*obj*/) 96eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich{ 97eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (! done) { 98965b95468d8325388557003eec24bd70fd22640aJack Palevich if (stateClock > 0 && ((stateClock & 1) == 0)) { 9974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams //endTimer(100); 100eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 10174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams doTest(); 102eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich stateClock++; 103965b95468d8325388557003eec24bd70fd22640aJack Palevich } else { 10474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 105eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 106eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 107