1394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk/* 2394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 3394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * 4394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 5394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * you may not use this file except in compliance with the License. 6394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * You may obtain a copy of the License at 7394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * 8394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 9394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * 10394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 11394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 12394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * See the License for the specific language governing permissions and 14394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk * limitations under the License. 15394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk */ 16394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 17394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukpackage com.android.perftest; 18394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 19394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.os.Environment; 20394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.content.res.Resources; 21394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.renderscript.*; 22394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.graphics.Bitmap; 23394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.graphics.BitmapFactory; 24394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 25394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 26394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukimport android.util.Log; 27394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 28394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 29394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchoukpublic class FillTest implements RsBenchBaseTest{ 30394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 31394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private static final String TAG = "FillTest"; 32394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private RenderScriptGL mRS; 33394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Resources mRes; 34394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 35394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk // Custom shaders 36394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramFragment mProgFragmentMultitex; 37394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ProgramFragment mProgFragmentSingletex; 38c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams private ProgramFragment mProgFragmentSingletexModulate; 39394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private final BitmapFactory.Options mOptionsARGB = new BitmapFactory.Options(); 40394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk int mBenchmarkDimX; 41394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk int mBenchmarkDimY; 42394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 43394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private ScriptC_fill_test mFillScript; 44394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_TestScripts_s.Item[] mTests; 45c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams ScriptField_FillTestFragData_s mFragData; 46394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 47394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private final String[] mNames = { 48394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Fill screen 10x singletexture", 49394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Fill screen 10x 3tex multitexture", 50394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk "Fill screen 10x blended singletexture", 51c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams "Fill screen 10x blended 3tex multitexture", 52c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams "Fill screen 3x modulate blended singletexture", 53c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams "Fill screen 1x modulate blended singletexture", 54394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk }; 55394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 56394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public FillTest() { 57394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mOptionsARGB.inScaled = false; 58394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mOptionsARGB.inPreferredConfig = Bitmap.Config.ARGB_8888; 59394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mBenchmarkDimX = 1280; 60394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mBenchmarkDimY = 720; 61394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 62394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 63394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk void addTest(int index, int testId, int blend, int quadCount) { 64394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index] = new ScriptField_TestScripts_s.Item(); 65394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index].testScript = mFillScript; 66394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index].testName = Allocation.createFromString(mRS, 67394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mNames[index], 68394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.USAGE_SCRIPT); 695de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk mTests[index].debugName = RsBenchRS.createZeroTerminatedAlloc(mRS, 705de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk mNames[index], 715de7657ac2aea7ae671e2cadb05dcb6207a51404Alex Sakhartchouk Allocation.USAGE_SCRIPT); 72394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 73394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_FillTestData_s.Item dataItem = new ScriptField_FillTestData_s.Item(); 74394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.testId = testId; 75394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.blend = blend; 76394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk dataItem.quadCount = quadCount; 77394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ScriptField_FillTestData_s testData = new ScriptField_FillTestData_s(mRS, 1); 78394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk testData.set(dataItem, 0, true); 79394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests[index].testData = testData.getAllocation(); 80394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 81394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 82394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public boolean init(RenderScriptGL rs, Resources res) { 83394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mRS = rs; 84394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mRes = res; 85394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk initCustomShaders(); 86394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk initFillScript(); 87394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mTests = new ScriptField_TestScripts_s.Item[mNames.length]; 88394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 89394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk int index = 0; 90394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 91394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 1 /*testId*/, 0 /*blend*/, 10 /*quadCount*/); 92394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0 /*testId*/, 0 /*blend*/, 10 /*quadCount*/); 93394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 1 /*testId*/, 1 /*blend*/, 10 /*quadCount*/); 94394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk addTest(index++, 0 /*testId*/, 1 /*blend*/, 10 /*quadCount*/); 95c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams addTest(index++, 2 /*testId*/, 1 /*blend*/, 3 /*quadCount*/); 96c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams addTest(index++, 2 /*testId*/, 1 /*blend*/, 1 /*quadCount*/); 97394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 98394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return true; 99394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 100394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 101394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public ScriptField_TestScripts_s.Item[] getTests() { 102394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return mTests; 103394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 104394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 105394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk public String[] getTestNames() { 106394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return mNames; 107394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 108394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 109394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private void initCustomShaders() { 110394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramFragment.Builder pfbCustom = new ProgramFragment.Builder(mRS); 111394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.setShader(mRes, R.raw.multitexf); 112394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk for (int texCount = 0; texCount < 3; texCount ++) { 113394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); 114394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 115394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgFragmentMultitex = pfbCustom.create(); 116394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 117394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom = new ProgramFragment.Builder(mRS); 118394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.setShader(mRes, R.raw.singletexf); 119394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); 120394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mProgFragmentSingletex = pfbCustom.create(); 121c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams 122c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams pfbCustom = new ProgramFragment.Builder(mRS); 123c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams pfbCustom.setShader(mRes, R.raw.singletexfm); 124c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams pfbCustom.addTexture(Program.TextureType.TEXTURE_2D); 125c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams mFragData = new ScriptField_FillTestFragData_s(mRS, 1); 126c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams pfbCustom.addConstant(mFragData.getType()); 127c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams mProgFragmentSingletexModulate = pfbCustom.create(); 128c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams mProgFragmentSingletexModulate.bindConstants(mFragData.getAllocation(), 0); 129394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 130394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 131394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Allocation loadTextureARGB(int id) { 132394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Bitmap b = BitmapFactory.decodeResource(mRes, id, mOptionsARGB); 133394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return Allocation.createFromBitmap(mRS, b, 134394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 135394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE); 136394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 137394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 138394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk private Allocation loadTextureRGB(int id) { 139394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk return Allocation.createFromBitmapResource(mRS, mRes, id, 140394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 141394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Allocation.USAGE_GRAPHICS_TEXTURE); 142394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 143394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 144394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk void initFillScript() { 145394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript = new ScriptC_fill_test(mRS, mRes, R.raw.fill_test); 146394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 147394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS); 148394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertexFixedFunction progVertex = pvb.create(); 149394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ProgramVertexFixedFunction.Constants PVA = new ProgramVertexFixedFunction.Constants(mRS); 150394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk ((ProgramVertexFixedFunction)progVertex).bindConstants(PVA); 151394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk Matrix4f proj = new Matrix4f(); 152394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk proj.loadOrthoWindow(mBenchmarkDimX, mBenchmarkDimY); 153394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk PVA.setProjection(proj); 154394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gProgVertex(progVertex); 155394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 156394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gProgFragmentTexture(mProgFragmentSingletex); 157c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams mFillScript.set_gProgFragmentTextureModulate(mProgFragmentSingletexModulate); 158394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gProgFragmentMultitex(mProgFragmentMultitex); 159394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gProgStoreBlendNone(ProgramStore.BLEND_NONE_DEPTH_NONE(mRS)); 160394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gProgStoreBlendAlpha(ProgramStore.BLEND_ALPHA_DEPTH_NONE(mRS)); 161394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk 162394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gLinearClamp(Sampler.CLAMP_LINEAR(mRS)); 163394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gLinearWrap(Sampler.WRAP_LINEAR(mRS)); 164394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gTexTorus(loadTextureRGB(R.drawable.torusmap)); 165394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gTexOpaque(loadTextureRGB(R.drawable.data)); 166394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gTexTransparent(loadTextureARGB(R.drawable.leaf)); 167394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk mFillScript.set_gTexChecker(loadTextureRGB(R.drawable.checker)); 168c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams 169c3cff15b90e191b9d96ba383e65300e1f0807107Jason Sams mFillScript.bind_gFragData(mFragData); 170394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk } 171394956bf229c438a680ab87d4118ae06efda7a90Alex Sakhartchouk} 172