xref: /aosp_15_r20/frameworks/rs/rsProgram.h (revision e1eccf28f96817838ad6867f7f39d2351ec11f56)
1*e1eccf28SAndroid Build Coastguard Worker /*
2*e1eccf28SAndroid Build Coastguard Worker  * Copyright (C) 2011 The Android Open Source Project
3*e1eccf28SAndroid Build Coastguard Worker  *
4*e1eccf28SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*e1eccf28SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*e1eccf28SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*e1eccf28SAndroid Build Coastguard Worker  *
8*e1eccf28SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*e1eccf28SAndroid Build Coastguard Worker  *
10*e1eccf28SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*e1eccf28SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*e1eccf28SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e1eccf28SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*e1eccf28SAndroid Build Coastguard Worker  * limitations under the License.
15*e1eccf28SAndroid Build Coastguard Worker  */
16*e1eccf28SAndroid Build Coastguard Worker 
17*e1eccf28SAndroid Build Coastguard Worker #ifndef ANDROID_RS_PROGRAM_H
18*e1eccf28SAndroid Build Coastguard Worker #define ANDROID_RS_PROGRAM_H
19*e1eccf28SAndroid Build Coastguard Worker 
20*e1eccf28SAndroid Build Coastguard Worker #include "rsProgramBase.h"
21*e1eccf28SAndroid Build Coastguard Worker #include "rsElement.h"
22*e1eccf28SAndroid Build Coastguard Worker 
23*e1eccf28SAndroid Build Coastguard Worker // ---------------------------------------------------------------------------
24*e1eccf28SAndroid Build Coastguard Worker namespace android {
25*e1eccf28SAndroid Build Coastguard Worker namespace renderscript {
26*e1eccf28SAndroid Build Coastguard Worker 
27*e1eccf28SAndroid Build Coastguard Worker #define RS_SHADER_INTERNAL "//rs_shader_internal\n"
28*e1eccf28SAndroid Build Coastguard Worker #define RS_SHADER_ATTR "ATTRIB_"
29*e1eccf28SAndroid Build Coastguard Worker #define RS_SHADER_UNI "UNI_"
30*e1eccf28SAndroid Build Coastguard Worker 
31*e1eccf28SAndroid Build Coastguard Worker class Program : public ProgramBase {
32*e1eccf28SAndroid Build Coastguard Worker public:
33*e1eccf28SAndroid Build Coastguard Worker     struct Hal {
34*e1eccf28SAndroid Build Coastguard Worker         mutable void *drv;
35*e1eccf28SAndroid Build Coastguard Worker 
36*e1eccf28SAndroid Build Coastguard Worker         struct State {
37*e1eccf28SAndroid Build Coastguard Worker             // The difference between Textures and Constants is how they are accessed
38*e1eccf28SAndroid Build Coastguard Worker             // Texture lookups go though a sampler which in effect converts normalized
39*e1eccf28SAndroid Build Coastguard Worker             // coordinates into type specific.  Multiple samples may also be taken
40*e1eccf28SAndroid Build Coastguard Worker             // and filtered.
41*e1eccf28SAndroid Build Coastguard Worker             //
42*e1eccf28SAndroid Build Coastguard Worker             // Constants are strictly accessed by the shader code
43*e1eccf28SAndroid Build Coastguard Worker             Allocation **textures;
44*e1eccf28SAndroid Build Coastguard Worker             RsTextureTarget *textureTargets;
45*e1eccf28SAndroid Build Coastguard Worker             uint32_t texturesCount;
46*e1eccf28SAndroid Build Coastguard Worker 
47*e1eccf28SAndroid Build Coastguard Worker             Sampler **samplers;
48*e1eccf28SAndroid Build Coastguard Worker             uint32_t samplersCount;
49*e1eccf28SAndroid Build Coastguard Worker 
50*e1eccf28SAndroid Build Coastguard Worker             Allocation **constants;
51*e1eccf28SAndroid Build Coastguard Worker             Type **constantTypes;
52*e1eccf28SAndroid Build Coastguard Worker             uint32_t constantsCount;
53*e1eccf28SAndroid Build Coastguard Worker 
54*e1eccf28SAndroid Build Coastguard Worker             Element **inputElements;
55*e1eccf28SAndroid Build Coastguard Worker             uint32_t inputElementsCount;
56*e1eccf28SAndroid Build Coastguard Worker         };
57*e1eccf28SAndroid Build Coastguard Worker         State state;
58*e1eccf28SAndroid Build Coastguard Worker     };
59*e1eccf28SAndroid Build Coastguard Worker     Hal mHal;
60*e1eccf28SAndroid Build Coastguard Worker 
61*e1eccf28SAndroid Build Coastguard Worker     Program(Context *, const char * shaderText, size_t shaderLength,
62*e1eccf28SAndroid Build Coastguard Worker             const uintptr_t * params, size_t paramLength);
63*e1eccf28SAndroid Build Coastguard Worker     virtual ~Program();
64*e1eccf28SAndroid Build Coastguard Worker     virtual bool freeChildren();
65*e1eccf28SAndroid Build Coastguard Worker 
66*e1eccf28SAndroid Build Coastguard Worker     void bindAllocation(Context *, Allocation *, uint32_t slot);
67*e1eccf28SAndroid Build Coastguard Worker 
isUserProgram()68*e1eccf28SAndroid Build Coastguard Worker     bool isUserProgram() const {return !mIsInternal;}
69*e1eccf28SAndroid Build Coastguard Worker 
70*e1eccf28SAndroid Build Coastguard Worker     void bindTexture(Context *, uint32_t slot, Allocation *);
71*e1eccf28SAndroid Build Coastguard Worker     void bindSampler(Context *, uint32_t slot, Sampler *);
72*e1eccf28SAndroid Build Coastguard Worker 
73*e1eccf28SAndroid Build Coastguard Worker protected:
74*e1eccf28SAndroid Build Coastguard Worker     ObjectBaseRef<Allocation> *mTextures;
75*e1eccf28SAndroid Build Coastguard Worker     ObjectBaseRef<Sampler> *mSamplers;
76*e1eccf28SAndroid Build Coastguard Worker     ObjectBaseRef<Allocation> *mConstants;
77*e1eccf28SAndroid Build Coastguard Worker     ObjectBaseRef<Type> *mConstantTypes;
78*e1eccf28SAndroid Build Coastguard Worker     ObjectBaseRef<Element> *mInputElements;
79*e1eccf28SAndroid Build Coastguard Worker 
80*e1eccf28SAndroid Build Coastguard Worker     bool mIsInternal;
81*e1eccf28SAndroid Build Coastguard Worker     const char *mUserShader;
82*e1eccf28SAndroid Build Coastguard Worker     size_t mUserShaderLen;
83*e1eccf28SAndroid Build Coastguard Worker     void initMemberVars();
84*e1eccf28SAndroid Build Coastguard Worker };
85*e1eccf28SAndroid Build Coastguard Worker 
86*e1eccf28SAndroid Build Coastguard Worker } // namespace renderscript
87*e1eccf28SAndroid Build Coastguard Worker } // namespace android
88*e1eccf28SAndroid Build Coastguard Worker #endif // ANDROID_RS_PROGRAM_H
89*e1eccf28SAndroid Build Coastguard Worker 
90*e1eccf28SAndroid Build Coastguard Worker 
91*e1eccf28SAndroid Build Coastguard Worker 
92