rsProgramStore.cpp revision 6b8552a4f6a44848255d77222e66aa92dd21b1b5
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/*
2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project
3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License.
6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at
7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software
11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and
14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License.
15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */
16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
17fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#ifndef ANDROID_RS_BUILD_FOR_HOST
18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h"
191aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/gl.h>
201aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/glext.h>
21fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#else
22fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include "rsContextHostStub.h"
23fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include <OpenGL/gl.h>
24fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include <OpenGl/glext.h>
25fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#endif //ANDROID_RS_BUILD_FOR_HOST
26fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
27fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include "rsProgramStore.h"
281aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams
29326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
30326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
33ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStore::ProgramStore(Context *rsc) :
344815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams    Program(rsc)
35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
36f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mAllocFile = __FILE__;
37f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mAllocLine = __LINE__;
38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDitherEnable = true;
39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendEnable = false;
40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorRWriteEnable = true;
41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorGWriteEnable = true;
42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorBWriteEnable = true;
43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorAWriteEnable = true;
44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendSrc = GL_ONE;
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendDst = GL_ZERO;
46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthTestEnable = false;
49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthWriteEnable = true;
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthFunc = GL_LESS;
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
55ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStore::~ProgramStore()
56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
59ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setupGL2(const Context *rsc, ProgramStoreState *state)
60c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams{
61c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if (state->mLast.get() == this) {
62c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        return;
63c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
64c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    state->mLast.set(this);
65c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
66c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    glColorMask(mColorRWriteEnable,
67c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams                mColorGWriteEnable,
68c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams                mColorBWriteEnable,
69c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams                mColorAWriteEnable);
70c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if (mBlendEnable) {
71c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glEnable(GL_BLEND);
72c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glBlendFunc(mBlendSrc, mBlendDst);
73c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    } else {
74c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDisable(GL_BLEND);
75c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
77c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    //LOGE("pfs  %i, %i, %x", mDepthWriteEnable, mDepthTestEnable, mDepthFunc);
78c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
796b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams    if (rsc->mUserSurfaceConfig.depthMin > 0) {
806b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        glDepthMask(mDepthWriteEnable);
816b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        if(mDepthTestEnable || mDepthWriteEnable) {
826b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams            glEnable(GL_DEPTH_TEST);
836b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams            glDepthFunc(mDepthFunc);
846b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        } else {
856b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams            glDisable(GL_DEPTH_TEST);
866b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        }
87c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    } else {
886b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        glDepthMask(false);
89c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDisable(GL_DEPTH_TEST);
90c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
91c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
926b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams    if (rsc->mUserSurfaceConfig.stencilMin > 0) {
936b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams    } else {
946b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        glStencilMask(0);
956b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        glDisable(GL_STENCIL_TEST);
966b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams    }
976b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams
98c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if (mDitherEnable) {
99c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glEnable(GL_DITHER);
100c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    } else {
101c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDisable(GL_DITHER);
102c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
105c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
106ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setDitherEnable(bool enable)
107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDitherEnable = enable;
109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
111fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchoukvoid ProgramStore::serialize(OStream *stream) const
112fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk{
113fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
114fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
115fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
116fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex SakhartchoukProgramStore *ProgramStore::createFromStream(Context *rsc, IStream *stream)
117fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk{
118fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    return NULL;
119fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
120fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
121fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
122ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setDepthFunc(RsDepthFunc func)
123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthTestEnable = true;
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    switch(func) {
127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_ALWAYS:
128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthTestEnable = false;
129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_ALWAYS;
130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_LESS:
132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_LESS;
133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_LEQUAL:
135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_LEQUAL;
136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_GREATER:
138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_GREATER;
139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_GEQUAL:
141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_GEQUAL;
142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_EQUAL:
144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_EQUAL;
145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_NOTEQUAL:
147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_NOTEQUAL;
148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
152ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setDepthMask(bool mask)
153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthWriteEnable = mask;
155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
157ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setBlendFunc(RsBlendSrcFunc src, RsBlendDstFunc dst)
158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendEnable = true;
160cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams    if ((src == RS_BLEND_SRC_ONE) &&
161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        (dst == RS_BLEND_DST_ZERO)) {
162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendEnable = false;
163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    switch(src) {
166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ZERO:
167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ZERO;
168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE:
170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE;
171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_DST_COLOR:
173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_DST_COLOR;
174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_DST_COLOR:
176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_DST_COLOR;
177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_SRC_ALPHA:
179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_SRC_ALPHA;
180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA:
182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_SRC_ALPHA;
183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_DST_ALPHA:
185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_DST_ALPHA;
186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_DST_ALPHA:
188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_DST_ALPHA;
189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_SRC_ALPHA_SATURATE:
191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_SRC_ALPHA_SATURATE;
192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    switch(dst) {
196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ZERO:
197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ZERO;
198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE:
200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE;
201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_SRC_COLOR:
203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_SRC_COLOR;
204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_SRC_COLOR:
206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_SRC_COLOR;
207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_SRC_ALPHA:
209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_SRC_ALPHA;
210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_SRC_ALPHA:
212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_SRC_ALPHA;
213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_DST_ALPHA:
215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_DST_ALPHA;
216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_DST_ALPHA:
218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_DST_ALPHA;
219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
223ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setColorMask(bool r, bool g, bool b, bool a)
224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorRWriteEnable = r;
226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorGWriteEnable = g;
227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorBWriteEnable = b;
228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorAWriteEnable = a;
229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
232ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStoreState::ProgramStoreState()
233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mPFS = NULL;
235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
237ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStoreState::~ProgramStoreState()
238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    delete mPFS;
240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
243771565f47fc44608444c00aa8fa3bda769ceaeceJason Samsvoid ProgramStoreState::init(Context *rsc)
2448ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams{
245ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams    ProgramStore *pfs = new ProgramStore(rsc);
2468ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    mDefault.set(pfs);
2478ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams}
2488ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams
249ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStoreState::deinit(Context *rsc)
250f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams{
251f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mDefault.clear();
252f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mLast.clear();
253f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams}
254f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams
255326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
256326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
257326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
259ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreBegin(Context * rsc, RsElement in, RsElement out)
260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    delete rsc->mStateFragmentStore.mPFS;
262ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams    rsc->mStateFragmentStore.mPFS = new ProgramStore(rsc);
263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
266ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreDepthFunc(Context *rsc, RsDepthFunc func)
267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDepthFunc(func);
269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
271ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreDepthMask(Context *rsc, bool mask)
272326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
273326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDepthMask(mask);
274326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
275326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
276ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreColorMask(Context *rsc, bool r, bool g, bool b, bool a)
277326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
278326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setColorMask(r, g, b, a);
279326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
280326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
281ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreBlendFunc(Context *rsc, RsBlendSrcFunc src, RsBlendDstFunc dst)
282326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
283326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setBlendFunc(src, dst);
284326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
285326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
286ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsRsProgramStore rsi_ProgramStoreCreate(Context *rsc)
287326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
288ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams    ProgramStore *pfs = rsc->mStateFragmentStore.mPFS;
2899397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams    pfs->incUserRef();
290326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS = 0;
291326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return pfs;
292326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
293326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
294ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreDither(Context *rsc, bool enable)
295326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
296326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDitherEnable(enable);
297326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
298326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
299326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
300326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
301326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
302