| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.renderscript; |
| |
| |
| import android.util.Config; |
| import android.util.Log; |
| |
| |
| /** |
| * @hide |
| * |
| **/ |
| public class Program extends BaseObj { |
| public static final int MAX_INPUT = 8; |
| public static final int MAX_OUTPUT = 8; |
| public static final int MAX_CONSTANT = 8; |
| public static final int MAX_TEXTURE = 8; |
| |
| Element mInputs[]; |
| Element mOutputs[]; |
| Type mConstants[]; |
| int mTextureCount; |
| String mShader; |
| |
| Program(int id, RenderScript rs) { |
| super(rs); |
| mID = id; |
| } |
| |
| public void bindConstants(Allocation a, int slot) { |
| mRS.nProgramBindConstants(mID, slot, a.mID); |
| } |
| |
| public void bindTexture(Allocation va, int slot) |
| throws IllegalArgumentException { |
| mRS.validate(); |
| if((slot < 0) || (slot >= mTextureCount)) { |
| throw new IllegalArgumentException("Slot ID out of range."); |
| } |
| |
| mRS.nProgramBindTexture(mID, slot, va.mID); |
| } |
| |
| public void bindSampler(Sampler vs, int slot) |
| throws IllegalArgumentException { |
| mRS.validate(); |
| if((slot < 0) || (slot >= mTextureCount)) { |
| throw new IllegalArgumentException("Slot ID out of range."); |
| } |
| |
| mRS.nProgramBindSampler(mID, slot, vs.mID); |
| } |
| |
| |
| public static class BaseProgramBuilder { |
| RenderScript mRS; |
| Element mInputs[]; |
| Element mOutputs[]; |
| Type mConstants[]; |
| Type mTextures[]; |
| int mInputCount; |
| int mOutputCount; |
| int mConstantCount; |
| int mTextureCount; |
| String mShader; |
| |
| |
| protected BaseProgramBuilder(RenderScript rs) { |
| mRS = rs; |
| mInputs = new Element[MAX_INPUT]; |
| mOutputs = new Element[MAX_OUTPUT]; |
| mConstants = new Type[MAX_CONSTANT]; |
| mInputCount = 0; |
| mOutputCount = 0; |
| mConstantCount = 0; |
| mTextureCount = 0; |
| } |
| |
| public void setShader(String s) { |
| mShader = s; |
| } |
| |
| public void addInput(Element e) throws IllegalStateException { |
| // Should check for consistant and non-conflicting names... |
| if(mInputCount >= MAX_INPUT) { |
| throw new IllegalArgumentException("Max input count exceeded."); |
| } |
| mInputs[mInputCount++] = e; |
| } |
| |
| public void addOutput(Element e) throws IllegalStateException { |
| // Should check for consistant and non-conflicting names... |
| if(mOutputCount >= MAX_OUTPUT) { |
| throw new IllegalArgumentException("Max output count exceeded."); |
| } |
| mOutputs[mOutputCount++] = e; |
| } |
| |
| public int addConstant(Type t) throws IllegalStateException { |
| // Should check for consistant and non-conflicting names... |
| if(mConstantCount >= MAX_CONSTANT) { |
| throw new IllegalArgumentException("Max input count exceeded."); |
| } |
| mConstants[mConstantCount] = t; |
| return mConstantCount++; |
| } |
| |
| public void setTextureCount(int count) throws IllegalArgumentException { |
| // Should check for consistant and non-conflicting names... |
| if(count >= MAX_CONSTANT) { |
| throw new IllegalArgumentException("Max texture count exceeded."); |
| } |
| mTextureCount = count; |
| } |
| |
| protected void initProgram(Program p) { |
| p.mInputs = new Element[mInputCount]; |
| System.arraycopy(mInputs, 0, p.mInputs, 0, mInputCount); |
| p.mOutputs = new Element[mOutputCount]; |
| System.arraycopy(mOutputs, 0, p.mOutputs, 0, mOutputCount); |
| p.mConstants = new Type[mConstantCount]; |
| System.arraycopy(mConstants, 0, p.mConstants, 0, mConstantCount); |
| p.mTextureCount = mTextureCount; |
| } |
| } |
| |
| } |
| |
| |