ProgramFragment.java revision b4d7bb6872f523b4318144202e119766ed9054ed
122534176fb5c1257130ef4ee589739ca42766a32Jason Sams/*
222534176fb5c1257130ef4ee589739ca42766a32Jason Sams * Copyright (C) 2008 The Android Open Source Project
322534176fb5c1257130ef4ee589739ca42766a32Jason Sams *
422534176fb5c1257130ef4ee589739ca42766a32Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
522534176fb5c1257130ef4ee589739ca42766a32Jason Sams * you may not use this file except in compliance with the License.
622534176fb5c1257130ef4ee589739ca42766a32Jason Sams * You may obtain a copy of the License at
722534176fb5c1257130ef4ee589739ca42766a32Jason Sams *
822534176fb5c1257130ef4ee589739ca42766a32Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
922534176fb5c1257130ef4ee589739ca42766a32Jason Sams *
1022534176fb5c1257130ef4ee589739ca42766a32Jason Sams * Unless required by applicable law or agreed to in writing, software
1122534176fb5c1257130ef4ee589739ca42766a32Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1222534176fb5c1257130ef4ee589739ca42766a32Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1322534176fb5c1257130ef4ee589739ca42766a32Jason Sams * See the License for the specific language governing permissions and
1422534176fb5c1257130ef4ee589739ca42766a32Jason Sams * limitations under the License.
1522534176fb5c1257130ef4ee589739ca42766a32Jason Sams */
1622534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1722534176fb5c1257130ef4ee589739ca42766a32Jason Samspackage android.renderscript;
1822534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
2022534176fb5c1257130ef4ee589739ca42766a32Jason Samsimport android.util.Config;
2122534176fb5c1257130ef4ee589739ca42766a32Jason Samsimport android.util.Log;
2222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
2322534176fb5c1257130ef4ee589739ca42766a32Jason Sams
2422534176fb5c1257130ef4ee589739ca42766a32Jason Sams/**
2522534176fb5c1257130ef4ee589739ca42766a32Jason Sams * @hide
2622534176fb5c1257130ef4ee589739ca42766a32Jason Sams *
2722534176fb5c1257130ef4ee589739ca42766a32Jason Sams **/
287e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Samspublic class ProgramFragment extends Program {
2922534176fb5c1257130ef4ee589739ca42766a32Jason Sams    ProgramFragment(int id, RenderScript rs) {
307e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams        super(id, rs);
3122534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
3222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
33b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk    public static class Builder extends BaseProgramBuilder {
34b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public Builder(RenderScript rs) {
357e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            super(rs);
367e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams        }
377e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
387e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams        public ProgramFragment create() {
397e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            mRS.validate();
4067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            int[] tmp = new int[(mInputCount + mOutputCount + mConstantCount + mTextureCount) * 2];
417e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            int idx = 0;
427e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
437e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            for (int i=0; i < mInputCount; i++) {
4467f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk                tmp[idx++] = ProgramParam.INPUT.mID;
4506d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams                tmp[idx++] = mInputs[i].getID();
467e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            }
477e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            for (int i=0; i < mOutputCount; i++) {
4867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk                tmp[idx++] = ProgramParam.OUTPUT.mID;
4906d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams                tmp[idx++] = mOutputs[i].getID();
507e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            }
517e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            for (int i=0; i < mConstantCount; i++) {
5267f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk                tmp[idx++] = ProgramParam.CONSTANT.mID;
5306d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams                tmp[idx++] = mConstants[i].getID();
547e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            }
5567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            for (int i=0; i < mTextureCount; i++) {
5667f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk                tmp[idx++] = ProgramParam.TEXTURE_TYPE.mID;
5767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk                tmp[idx++] = mTextureTypes[i].mID;
5867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk            }
597e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams
60b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk            int id = mRS.nProgramFragmentCreate(mShader, tmp);
617e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            ProgramFragment pf = new ProgramFragment(id, mRS);
627e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            initProgram(pf);
637e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams            return pf;
647e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams        }
657e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    }
6622534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
6722534176fb5c1257130ef4ee589739ca42766a32Jason Sams
6822534176fb5c1257130ef4ee589739ca42766a32Jason Sams
6922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
70