17b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk/* 27b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 37b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * 47b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 57b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * you may not use this file except in compliance with the License. 67b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * You may obtain a copy of the License at 77b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * 87b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 97b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * 107b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 117b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 127b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * See the License for the specific language governing permissions and 147b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk * limitations under the License. 157b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk */ 167b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 177b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchoukpackage com.android.rs.test; 187b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 197b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchoukimport android.content.Context; 207b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchoukimport android.content.res.Resources; 217b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchoukimport android.renderscript.*; 227b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchoukimport android.renderscript.ProgramStore.BlendDstFunc; 237b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchoukimport android.renderscript.ProgramStore.BlendSrcFunc; 247b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchoukimport android.renderscript.ProgramStore.Builder; 257b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchoukimport android.renderscript.ProgramStore.DepthFunc; 267b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 277b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchoukpublic class UT_program_store extends UnitTest { 287b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk private Resources mRes; 297b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 307b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore ditherEnable; 317b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore colorRWriteEnable; 327b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore colorGWriteEnable; 337b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore colorBWriteEnable; 347b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore colorAWriteEnable; 357b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore blendSrc; 367b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore blendDst; 377b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore depthWriteEnable; 387b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore depthFunc; 397b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 407b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk protected UT_program_store(RSTestCore rstc, Resources res, Context ctx) { 417b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk super(rstc, "ProgramStore", ctx); 427b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk mRes = res; 437b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 447b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 457b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk private ProgramStore.Builder getDefaultBuilder(RenderScript RS) { 467b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore.Builder b = new ProgramStore.Builder(RS); 477b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b.setBlendFunc(ProgramStore.BlendSrcFunc.ZERO, ProgramStore.BlendDstFunc.ZERO); 487b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b.setColorMaskEnabled(false, false, false, false); 497b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b.setDepthFunc(ProgramStore.DepthFunc.ALWAYS); 507b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b.setDepthMaskEnabled(false); 517b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b.setDitherEnabled(false); 527b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk return b; 537b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 547b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 557b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk private void initializeGlobals(RenderScript RS, ScriptC_program_store s) { 567b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore.Builder b = getDefaultBuilder(RS); 577b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ditherEnable = b.setDitherEnabled(true).create(); 587b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 597b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b = getDefaultBuilder(RS); 607b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk colorRWriteEnable = b.setColorMaskEnabled(true, false, false, false).create(); 617b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 627b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b = getDefaultBuilder(RS); 637b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk colorGWriteEnable = b.setColorMaskEnabled(false, true, false, false).create(); 647b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 657b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b = getDefaultBuilder(RS); 667b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk colorBWriteEnable = b.setColorMaskEnabled(false, false, true, false).create(); 677b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 687b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b = getDefaultBuilder(RS); 697b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk colorAWriteEnable = b.setColorMaskEnabled(false, false, false, true).create(); 707b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 717b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b = getDefaultBuilder(RS); 727b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk blendSrc = b.setBlendFunc(ProgramStore.BlendSrcFunc.DST_COLOR, 737b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore.BlendDstFunc.ZERO).create(); 747b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 757b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b = getDefaultBuilder(RS); 767b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk blendDst = b.setBlendFunc(ProgramStore.BlendSrcFunc.ZERO, 777b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore.BlendDstFunc.DST_ALPHA).create(); 787b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 797b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b = getDefaultBuilder(RS); 807b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk depthWriteEnable = b.setDepthMaskEnabled(true).create(); 817b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 827b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b = getDefaultBuilder(RS); 837b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk depthFunc = b.setDepthFunc(ProgramStore.DepthFunc.GREATER).create(); 847b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 857b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.set_ditherEnable(ditherEnable); 867b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.set_colorRWriteEnable(colorRWriteEnable); 877b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.set_colorGWriteEnable(colorGWriteEnable); 887b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.set_colorBWriteEnable(colorBWriteEnable); 897b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.set_colorAWriteEnable(colorAWriteEnable); 907b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.set_blendSrc(blendSrc); 917b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.set_blendDst(blendDst); 927b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.set_depthWriteEnable(depthWriteEnable); 937b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.set_depthFunc(depthFunc); 947b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 957b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 967b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk private void testScriptSide(RenderScript pRS) { 9758b2b2412864891686bf0e2c9940ad2b58808822Stephen Hines ScriptC_program_store s = new ScriptC_program_store(pRS); 987b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk pRS.setMessageHandler(mRsMessage); 997b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk initializeGlobals(pRS, s); 1007b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk s.invoke_program_store_test(); 1017b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk pRS.finish(); 1027b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk waitForMessage(); 1037b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1047b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 1057b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk void checkObject(ProgramStore ps, 1067b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean depthMask, 1077b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk DepthFunc df, 1087b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk BlendSrcFunc bsf, 1097b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk BlendDstFunc bdf, 1107b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean R, 1117b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean G, 1127b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean B, 1137b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean A, 1147b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean dither) { 115918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk _RS_ASSERT("ps.isDepthMaskEnabled() == depthMask", ps.isDepthMaskEnabled() == depthMask); 1167b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk _RS_ASSERT("ps.getDepthFunc() == df", ps.getDepthFunc() == df); 1177b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk _RS_ASSERT("ps.getBlendSrcFunc() == bsf", ps.getBlendSrcFunc() == bsf); 1187b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk _RS_ASSERT("ps.getBlendDstFunc() == bdf", ps.getBlendDstFunc() == bdf); 119918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk _RS_ASSERT("ps.isColorMaskRedEnabled() == R", ps.isColorMaskRedEnabled() == R); 120918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk _RS_ASSERT("ps.isColorMaskGreenEnabled() == G", ps.isColorMaskGreenEnabled() == G); 121918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk _RS_ASSERT("ps.isColorMaskBlueEnabled () == B", ps.isColorMaskBlueEnabled () == B); 122918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk _RS_ASSERT("ps.isColorMaskAlphaEnabled() == A", ps.isColorMaskAlphaEnabled() == A); 123918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk _RS_ASSERT("ps.isDitherEnabled() == dither", ps.isDitherEnabled() == dither); 1247b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1257b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 1267b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk void varyBuilderColorAndDither(ProgramStore.Builder pb, 1277b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean depthMask, 1287b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk DepthFunc df, 1297b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk BlendSrcFunc bsf, 1307b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk BlendDstFunc bdf) { 1317b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk for (int r = 0; r <= 1; r++) { 1327b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean isR = (r == 1); 1337b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk for (int g = 0; g <= 1; g++) { 1347b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean isG = (g == 1); 1357b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk for (int b = 0; b <= 1; b++) { 1367b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean isB = (b == 1); 1377b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk for (int a = 0; a <= 1; a++) { 1387b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean isA = (a == 1); 1397b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk for (int dither = 0; dither <= 1; dither++) { 1407b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean isDither = (dither == 1); 1417b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk pb.setDitherEnabled(isDither); 1427b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk pb.setColorMaskEnabled(isR, isG, isB, isA); 1437b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore ps = pb.create(); 1447b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk checkObject(ps, depthMask, df, bsf, bdf, isR, isG, isB, isA, isDither); 1457b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1467b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1477b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1487b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1497b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1507b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1517b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 1527b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk public void testJavaSide(RenderScript RS) { 1537b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk for (int depth = 0; depth <= 1; depth++) { 1547b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk boolean depthMask = (depth == 1); 1557b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk for (DepthFunc df : DepthFunc.values()) { 1567b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk for (BlendSrcFunc bsf : BlendSrcFunc.values()) { 1577b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk for (BlendDstFunc bdf : BlendDstFunc.values()) { 1587b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk ProgramStore.Builder b = new ProgramStore.Builder(RS); 1597b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b.setDepthFunc(df); 1607b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b.setDepthMaskEnabled(depthMask); 1617b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk b.setBlendFunc(bsf, bdf); 1627b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk varyBuilderColorAndDither(b, depthMask, df, bsf, bdf); 1637b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1647b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1657b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1667b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1677b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1687b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk 1697b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk public void run() { 1707b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk RenderScript pRS = RenderScript.create(mCtx); 1717b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk testJavaSide(pRS); 1727b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk testScriptSide(pRS); 1737b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk pRS.destroy(); 1747b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk } 1757b78d1a57a6602a5861092015b8a5708ec75aef8Alex Sakhartchouk} 176