rsProgramStore.cpp revision afb743aca56c18beb7ab924e75cb6e070ef3e55a
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
33afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukProgramStore::ProgramStore(Context *rsc) : Program(rsc) {
34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDitherEnable = true;
35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendEnable = false;
36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorRWriteEnable = true;
37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorGWriteEnable = true;
38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorBWriteEnable = true;
39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorAWriteEnable = true;
40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendSrc = GL_ONE;
41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendDst = GL_ZERO;
42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthTestEnable = false;
44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthWriteEnable = true;
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthFunc = GL_LESS;
46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
48afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukProgramStore::~ProgramStore() {
49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
51afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid ProgramStore::setupGL2(const Context *rsc, ProgramStoreState *state) {
52c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if (state->mLast.get() == this) {
53c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        return;
54c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
55c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    state->mLast.set(this);
56c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
57c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    glColorMask(mColorRWriteEnable,
58c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams                mColorGWriteEnable,
59c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams                mColorBWriteEnable,
60c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams                mColorAWriteEnable);
61c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if (mBlendEnable) {
62c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glEnable(GL_BLEND);
63c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glBlendFunc(mBlendSrc, mBlendDst);
64c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    } else {
65c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDisable(GL_BLEND);
66c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
68c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    //LOGE("pfs  %i, %i, %x", mDepthWriteEnable, mDepthTestEnable, mDepthFunc);
69c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
706b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams    if (rsc->mUserSurfaceConfig.depthMin > 0) {
716b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        glDepthMask(mDepthWriteEnable);
72afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk        if (mDepthTestEnable || mDepthWriteEnable) {
736b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams            glEnable(GL_DEPTH_TEST);
746b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams            glDepthFunc(mDepthFunc);
756b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        } else {
766b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams            glDisable(GL_DEPTH_TEST);
776b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        }
78c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    } else {
796b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        glDepthMask(false);
80c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDisable(GL_DEPTH_TEST);
81c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
82c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
836b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams    if (rsc->mUserSurfaceConfig.stencilMin > 0) {
846b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams    } else {
856b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        glStencilMask(0);
866b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams        glDisable(GL_STENCIL_TEST);
876b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams    }
886b8552a4f6a44848255d77222e66aa92dd21b1b5Jason Sams
89c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if (mDitherEnable) {
90c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glEnable(GL_DITHER);
91c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    } else {
92c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDisable(GL_DITHER);
93c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
96afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid ProgramStore::setDitherEnable(bool enable) {
97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDitherEnable = enable;
98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
100afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid ProgramStore::serialize(OStream *stream) const {
101fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
102fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
103afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukProgramStore *ProgramStore::createFromStream(Context *rsc, IStream *stream) {
104fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    return NULL;
105fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
106fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
107afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid ProgramStore::setDepthFunc(RsDepthFunc func) {
108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthTestEnable = true;
109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
110afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (func) {
111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_ALWAYS:
112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthTestEnable = false;
113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_ALWAYS;
114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_LESS:
116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_LESS;
117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_LEQUAL:
119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_LEQUAL;
120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_GREATER:
122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_GREATER;
123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_GEQUAL:
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_GEQUAL;
126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_EQUAL:
128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_EQUAL;
129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_NOTEQUAL:
131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_NOTEQUAL;
132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
136afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid ProgramStore::setDepthMask(bool mask) {
137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthWriteEnable = mask;
138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
140afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid ProgramStore::setBlendFunc(RsBlendSrcFunc src, RsBlendDstFunc dst) {
141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendEnable = true;
142cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams    if ((src == RS_BLEND_SRC_ONE) &&
143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        (dst == RS_BLEND_DST_ZERO)) {
144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendEnable = false;
145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
147afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (src) {
148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ZERO:
149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ZERO;
150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE:
152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE;
153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_DST_COLOR:
155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_DST_COLOR;
156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_DST_COLOR:
158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_DST_COLOR;
159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_SRC_ALPHA:
161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_SRC_ALPHA;
162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA:
164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_SRC_ALPHA;
165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_DST_ALPHA:
167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_DST_ALPHA;
168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_DST_ALPHA:
170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_DST_ALPHA;
171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_SRC_ALPHA_SATURATE:
173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_SRC_ALPHA_SATURATE;
174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
177afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (dst) {
178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ZERO:
179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ZERO;
180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE:
182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE;
183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_SRC_COLOR:
185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_SRC_COLOR;
186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_SRC_COLOR:
188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_SRC_COLOR;
189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_SRC_ALPHA:
191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_SRC_ALPHA;
192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_SRC_ALPHA:
194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_SRC_ALPHA;
195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_DST_ALPHA:
197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_DST_ALPHA;
198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_DST_ALPHA:
200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_DST_ALPHA;
201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
205afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid ProgramStore::setColorMask(bool r, bool g, bool b, bool a) {
206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorRWriteEnable = r;
207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorGWriteEnable = g;
208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorBWriteEnable = b;
209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorAWriteEnable = a;
210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
212afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukProgramStoreState::ProgramStoreState() {
213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mPFS = NULL;
214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
216afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukProgramStoreState::~ProgramStoreState() {
217225afd317e101a7be5fe02c0a86361146ea89f05Jason Sams    ObjectBase::checkDelete(mPFS);
218225afd317e101a7be5fe02c0a86361146ea89f05Jason Sams    mPFS = NULL;
219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
221afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid ProgramStoreState::init(Context *rsc) {
222ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams    ProgramStore *pfs = new ProgramStore(rsc);
2238ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    mDefault.set(pfs);
2248ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams}
2258ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams
226afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid ProgramStoreState::deinit(Context *rsc) {
227f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mDefault.clear();
228f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mLast.clear();
229f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams}
230f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams
231326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
232326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
234afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_ProgramStoreBegin(Context * rsc, RsElement in, RsElement out) {
235225afd317e101a7be5fe02c0a86361146ea89f05Jason Sams    ObjectBase::checkDelete(rsc->mStateFragmentStore.mPFS);
236ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams    rsc->mStateFragmentStore.mPFS = new ProgramStore(rsc);
237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
239afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_ProgramStoreDepthFunc(Context *rsc, RsDepthFunc func) {
240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDepthFunc(func);
241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
243afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_ProgramStoreDepthMask(Context *rsc, bool mask) {
244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDepthMask(mask);
245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
247afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_ProgramStoreColorMask(Context *rsc, bool r, bool g, bool b, bool a) {
248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setColorMask(r, g, b, a);
249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
251afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_ProgramStoreBlendFunc(Context *rsc, RsBlendSrcFunc src, RsBlendDstFunc dst) {
252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setBlendFunc(src, dst);
253326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
255afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukRsProgramStore rsi_ProgramStoreCreate(Context *rsc) {
256ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams    ProgramStore *pfs = rsc->mStateFragmentStore.mPFS;
2579397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams    pfs->incUserRef();
258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS = 0;
259326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return pfs;
260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
262afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_ProgramStoreDither(Context *rsc, bool enable) {
263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDitherEnable(enable);
264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
268