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 Palevichbool done; 30eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 3163bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich// Saves the parameters of the test (so we can print them out when we finish the timing.) 3263bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich 337920987182de225959a3bf40f36fd5ee23204caeJason Sams 347920987182de225959a3bf40f36fd5ee23204caeJason Samsint pgm; 357920987182de225959a3bf40f36fd5ee23204caeJason Sams 367920987182de225959a3bf40f36fd5ee23204caeJason Samsvoid ptSwap() { 37eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 38eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 3974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsvoid doTest() { 4074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams uint32_t testNum = stateClock >> 2; 4174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams int texSize = ((stateClock >> 1) & 0x1) + 1; 423e9eb868b3ad6a93adcb6e8874779f1f57c6ca16Jack Palevich 4374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams if (testNum >= gFragmentTestCount) { 44a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("done\n"); 457920987182de225959a3bf40f36fd5ee23204caeJason Sams if (fOut) { 467920987182de225959a3bf40f36fd5ee23204caeJason Sams fclose(fOut); 477920987182de225959a3bf40f36fd5ee23204caeJason Sams fOut = NULL; 4863bcb5f8e2d2c1d054b09a5ab9f989644cfeb9b1Jack Palevich } 49eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich done = true; 50eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich return; 51eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 52eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 53a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block // ALOGI("doTest %d %d %d\n", texCount, extraMath, testSubState); 54965b95468d8325388557003eec24bd70fd22640aJack Palevich 5574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams// for (uint32_t num = 0; num < gFragmentTestCount; num++) { 5674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams doSingleTest(testNum, texSize); 57eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 58eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 59eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevichextern "C" { 60eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich JNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_init(JNIEnv * env, jobject obj, jint width, jint height); 61eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich JNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_step(JNIEnv * env, jobject obj); 62eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich}; 63eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 64eb69d2ae19c89553c142a7b716fe2ac72e32080aJack PalevichJNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_init(JNIEnv * env, jobject obj, jint width, jint height) 65eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich{ 6674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams gWidth = width; 6774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams gHeight = height; 6892a9ae4a02682a9e195f3e3a68d2c7293c018173Jack Palevich if (!done) { 6974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams stateClock = 0; 7074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams done = false; 7174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams setupVA(); 7274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams genTextures(); 7374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams const char* fileName = "/sdcard/glperf.csv"; 747920987182de225959a3bf40f36fd5ee23204caeJason Sams if (fOut != NULL) { 75a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("Closing partially written output.n"); 767920987182de225959a3bf40f36fd5ee23204caeJason Sams fclose(fOut); 777920987182de225959a3bf40f36fd5ee23204caeJason Sams fOut = NULL; 7892a9ae4a02682a9e195f3e3a68d2c7293c018173Jack Palevich } 79a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("Writing to: %s\n",fileName); 8074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams fOut = fopen(fileName, "w"); 8174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams if (fOut == NULL) { 82e6f43ddce78d6846af12550ff9193c5c6fe5844bSteve Block ALOGE("Could not open: %s\n", fileName); 8374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams } 8474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams 85a19954ab377b46dbcb9cbe8a6ab6d458f2e32bcaSteve Block ALOGI("\nvarColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\n"); 8674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams if (fOut) fprintf(fOut,"varColor, texCount, modulate, extraMath, texSize, blend, Mpps, DC60\r\n"); 8792a9ae4a02682a9e195f3e3a68d2c7293c018173Jack Palevich } 88eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 89eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich 90eb69d2ae19c89553c142a7b716fe2ac72e32080aJack PalevichJNIEXPORT void JNICALL Java_com_android_glperf_GLPerfLib_step(JNIEnv * env, jobject obj) 91eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich{ 92eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich if (! done) { 93965b95468d8325388557003eec24bd70fd22640aJack Palevich if (stateClock > 0 && ((stateClock & 1) == 0)) { 9474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams //endTimer(100); 95eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 9674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams doTest(); 97eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich stateClock++; 98965b95468d8325388557003eec24bd70fd22640aJack Palevich } else { 9974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 100eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich } 101eb69d2ae19c89553c142a7b716fe2ac72e32080aJack Palevich} 102