| /* | |
| * Copyright (C) 2011 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. | |
| */ | |
| #ifndef ANDROID_RS_PROGRAM_H | |
| #define ANDROID_RS_PROGRAM_H | |
| #include "rsProgramBase.h" | |
| #include "rsElement.h" | |
| // --------------------------------------------------------------------------- | |
| namespace android { | |
| namespace renderscript { | |
| #define RS_SHADER_INTERNAL "//rs_shader_internal\n" | |
| #define RS_SHADER_ATTR "ATTRIB_" | |
| #define RS_SHADER_UNI "UNI_" | |
| class Program : public ProgramBase { | |
| public: | |
| struct Hal { | |
| mutable void *drv; | |
| struct State { | |
| // The difference between Textures and Constants is how they are accessed | |
| // Texture lookups go though a sampler which in effect converts normalized | |
| // coordinates into type specific. Multiple samples may also be taken | |
| // and filtered. | |
| // | |
| // Constants are strictly accessed by the shader code | |
| Allocation **textures; | |
| RsTextureTarget *textureTargets; | |
| uint32_t texturesCount; | |
| Sampler **samplers; | |
| uint32_t samplersCount; | |
| Allocation **constants; | |
| Type **constantTypes; | |
| uint32_t constantsCount; | |
| Element **inputElements; | |
| uint32_t inputElementsCount; | |
| }; | |
| State state; | |
| }; | |
| Hal mHal; | |
| Program(Context *, const char * shaderText, size_t shaderLength, | |
| const uintptr_t * params, size_t paramLength); | |
| virtual ~Program(); | |
| virtual bool freeChildren(); | |
| void bindAllocation(Context *, Allocation *, uint32_t slot); | |
| bool isUserProgram() const {return !mIsInternal;} | |
| void bindTexture(Context *, uint32_t slot, Allocation *); | |
| void bindSampler(Context *, uint32_t slot, Sampler *); | |
| protected: | |
| ObjectBaseRef<Allocation> *mTextures; | |
| ObjectBaseRef<Sampler> *mSamplers; | |
| ObjectBaseRef<Allocation> *mConstants; | |
| ObjectBaseRef<Type> *mConstantTypes; | |
| ObjectBaseRef<Element> *mInputElements; | |
| bool mIsInternal; | |
| const char *mUserShader; | |
| size_t mUserShaderLen; | |
| void initMemberVars(); | |
| }; | |
| } | |
| } | |
| #endif // ANDROID_RS_PROGRAM_H | |