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