1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project
3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License.
6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at
7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software
11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and
14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License.
15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */
16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#ifndef ANDROID_RS_PROGRAM_FRAGMENT_H
18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define ANDROID_RS_PROGRAM_FRAGMENT_H
19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgram.h"
21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
23d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android {
24d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript {
25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
269bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Samsclass ProgramFragmentState;
27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
28d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsclass ProgramFragment : public Program
29d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
30d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic:
31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    const static uint32_t MAX_TEXTURE = 2;
32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
35a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    ProgramFragment(Context *, Element *in, Element *out, bool pointSpriteEnable);
36d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    virtual ~ProgramFragment();
37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
38b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams    virtual void setupGL(const Context *, ProgramFragmentState *);
39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void bindTexture(uint32_t slot, Allocation *);
43d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void bindSampler(uint32_t slot, Sampler *);
44d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void setType(uint32_t slot, const Element *, uint32_t dim);
45d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void setEnvMode(uint32_t slot, RsTexEnvMode);
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    void setTexEnable(uint32_t slot, bool);
48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprotected:
52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    // The difference between Textures and Constants is how they are accessed
53d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    // Texture lookups go though a sampler which in effect converts normalized
54d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    // coordinates into type specific.  Multiple samples may also be taken
55d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    // and filtered.
569bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Sams    //
57d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    // Constants are strictly accessed by programetic loads.
58d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ObjectBaseRef<Allocation> mTextures[MAX_TEXTURE];
59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ObjectBaseRef<Sampler> mSamplers[MAX_TEXTURE];
60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ObjectBaseRef<const Element> mTextureFormats[MAX_TEXTURE];
61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    uint32_t mTextureDimensions[MAX_TEXTURE];
62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    // Hacks to create a program for now
65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    RsTexEnvMode mEnvModes[MAX_TEXTURE];
66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    uint32_t mTextureEnableMask;
6725ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams    bool mPointSpriteEnable;
68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
709bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Samsclass ProgramFragmentState
71d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{
72d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic:
73d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ProgramFragmentState();
74d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ~ProgramFragmentState();
75d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
76d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ProgramFragment *mPF;
779c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams    void init(Context *rsc, int32_t w, int32_t h);
7861f08d6fa7c7657e9fbcd17e9a1c5b9114bb3844Jason Sams    void deinit(Context *rsc);
79d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
80d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ObjectBaseRef<Type> mTextureTypes[ProgramFragment::MAX_TEXTURE];
819c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams    ObjectBaseRef<ProgramFragment> mDefault;
823eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    Vector<ProgramFragment *> mPrograms;
839bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Sams
849bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Sams    ObjectBaseRef<ProgramFragment> mLast;
85d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
87d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
88d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
89d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
90d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif
91d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
92d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
93d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
95