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