rsProgramStore.cpp revision 771565f47fc44608444c00aa8fa3bda769ceaece
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
17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h"
18ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams#include "rsProgramStore.h"
19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
201aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/gl.h>
211aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams#include <GLES/glext.h>
221aa5a4eb81b8b88aeb5d2b6f4c47356fd0a62923Jason Sams
23326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
27ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStore::ProgramStore(Context *rsc) :
284815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams    Program(rsc)
29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
30f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mAllocFile = __FILE__;
31f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mAllocLine = __LINE__;
32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDitherEnable = true;
33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendEnable = false;
34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorRWriteEnable = true;
35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorGWriteEnable = true;
36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorBWriteEnable = true;
37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorAWriteEnable = true;
38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendSrc = GL_ONE;
39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendDst = GL_ZERO;
40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthTestEnable = false;
43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthWriteEnable = true;
44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthFunc = GL_LESS;
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
49ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStore::~ProgramStore()
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
53ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setupGL(const Context *rsc, ProgramStoreState *state)
54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
55cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams    if (state->mLast.get() == this) {
56cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams        return;
57cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams    }
58cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams    state->mLast.set(this);
59cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams
60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glColorMask(mColorRWriteEnable,
61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                mColorGWriteEnable,
62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                mColorBWriteEnable,
63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                mColorAWriteEnable);
64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if (mBlendEnable) {
65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glEnable(GL_BLEND);
66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glBlendFunc(mBlendSrc, mBlendDst);
67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    } else {
68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glDisable(GL_BLEND);
69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
71fd10b71b33b7340c00c11c8684ca940e83b5aacaJason Sams    //LOGE("pfs  %i, %i, %x", mDepthWriteEnable, mDepthTestEnable, mDepthFunc);
72fd10b71b33b7340c00c11c8684ca940e83b5aacaJason Sams
73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDepthMask(mDepthWriteEnable);
74fd10b71b33b7340c00c11c8684ca940e83b5aacaJason Sams    if(mDepthTestEnable || mDepthWriteEnable) {
75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glEnable(GL_DEPTH_TEST);
76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glDepthFunc(mDepthFunc);
77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    } else {
78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glDisable(GL_DEPTH_TEST);
79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if (mDitherEnable) {
82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glEnable(GL_DITHER);
83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    } else {
84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glDisable(GL_DITHER);
85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
86c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams}
87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
88ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setupGL2(const Context *rsc, ProgramStoreState *state)
89c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams{
90c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if (state->mLast.get() == this) {
91c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        return;
92c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
93c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    state->mLast.set(this);
94c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
95c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    glColorMask(mColorRWriteEnable,
96c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams                mColorGWriteEnable,
97c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams                mColorBWriteEnable,
98c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams                mColorAWriteEnable);
99c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if (mBlendEnable) {
100c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glEnable(GL_BLEND);
101c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glBlendFunc(mBlendSrc, mBlendDst);
102c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    } else {
103c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDisable(GL_BLEND);
104c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
106c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    //LOGE("pfs  %i, %i, %x", mDepthWriteEnable, mDepthTestEnable, mDepthFunc);
107c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
108c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    glDepthMask(mDepthWriteEnable);
109c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if(mDepthTestEnable || mDepthWriteEnable) {
110c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glEnable(GL_DEPTH_TEST);
111c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDepthFunc(mDepthFunc);
112c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    } else {
113c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDisable(GL_DEPTH_TEST);
114c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
115c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
116c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    if (mDitherEnable) {
117c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glEnable(GL_DITHER);
118c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    } else {
119c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        glDisable(GL_DITHER);
120c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    }
121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
123c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
124ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setDitherEnable(bool enable)
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDitherEnable = enable;
127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
129ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setDepthFunc(RsDepthFunc func)
130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthTestEnable = true;
132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    switch(func) {
134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_ALWAYS:
135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthTestEnable = false;
136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_ALWAYS;
137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_LESS:
139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_LESS;
140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_LEQUAL:
142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_LEQUAL;
143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_GREATER:
145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_GREATER;
146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_GEQUAL:
148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_GEQUAL;
149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_EQUAL:
151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_EQUAL;
152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_NOTEQUAL:
154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_NOTEQUAL;
155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
159ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setDepthMask(bool mask)
160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthWriteEnable = mask;
162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
164ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setBlendFunc(RsBlendSrcFunc src, RsBlendDstFunc dst)
165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendEnable = true;
167cfb1d11ce6826fce7241d316d8b7dcab661f63a6Jason Sams    if ((src == RS_BLEND_SRC_ONE) &&
168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        (dst == RS_BLEND_DST_ZERO)) {
169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendEnable = false;
170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    switch(src) {
173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ZERO:
174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ZERO;
175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE:
177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE;
178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_DST_COLOR:
180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_DST_COLOR;
181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_DST_COLOR:
183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_DST_COLOR;
184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_SRC_ALPHA:
186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_SRC_ALPHA;
187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA:
189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_SRC_ALPHA;
190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_DST_ALPHA:
192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_DST_ALPHA;
193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_DST_ALPHA:
195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_DST_ALPHA;
196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_SRC_ALPHA_SATURATE:
198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_SRC_ALPHA_SATURATE;
199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    switch(dst) {
203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ZERO:
204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ZERO;
205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE:
207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE;
208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_SRC_COLOR:
210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_SRC_COLOR;
211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_SRC_COLOR:
213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_SRC_COLOR;
214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_SRC_ALPHA:
216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_SRC_ALPHA;
217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_SRC_ALPHA:
219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_SRC_ALPHA;
220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_DST_ALPHA:
222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_DST_ALPHA;
223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_DST_ALPHA:
225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_DST_ALPHA;
226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
230ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStore::setColorMask(bool r, bool g, bool b, bool a)
231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorRWriteEnable = r;
233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorGWriteEnable = g;
234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorBWriteEnable = b;
235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorAWriteEnable = a;
236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
239ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStoreState::ProgramStoreState()
240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mPFS = NULL;
242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
244ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsProgramStoreState::~ProgramStoreState()
245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    delete mPFS;
247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
250771565f47fc44608444c00aa8fa3bda769ceaeceJason Samsvoid ProgramStoreState::init(Context *rsc)
2518ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams{
252ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams    ProgramStore *pfs = new ProgramStore(rsc);
2538ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams    mDefault.set(pfs);
2548ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams}
2558ce125be69531dbf3a7e856d5e59d1b8e2789db0Jason Sams
256ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid ProgramStoreState::deinit(Context *rsc)
257f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams{
258f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mDefault.clear();
259f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    mLast.clear();
260f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams}
261f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams
262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
263326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
264326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
266ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreBegin(Context * rsc, RsElement in, RsElement out)
267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    delete rsc->mStateFragmentStore.mPFS;
269ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams    rsc->mStateFragmentStore.mPFS = new ProgramStore(rsc);
270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
271326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
272326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
273ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreDepthFunc(Context *rsc, RsDepthFunc func)
274326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
275326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDepthFunc(func);
276326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
277326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
278ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreDepthMask(Context *rsc, bool mask)
279326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
280326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDepthMask(mask);
281326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
282326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
283ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreColorMask(Context *rsc, bool r, bool g, bool b, bool a)
284326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
285326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setColorMask(r, g, b, a);
286326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
287326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
288ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreBlendFunc(Context *rsc, RsBlendSrcFunc src, RsBlendDstFunc dst)
289326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
290326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setBlendFunc(src, dst);
291326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
292326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
293ccc010bb7c0f89e162bf60033968a20be90a903aJason SamsRsProgramStore rsi_ProgramStoreCreate(Context *rsc)
294326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
295ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams    ProgramStore *pfs = rsc->mStateFragmentStore.mPFS;
2969397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams    pfs->incUserRef();
297326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS = 0;
298326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return pfs;
299326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
300326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
301ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsvoid rsi_ProgramStoreDither(Context *rsc, bool enable)
302326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
303326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDitherEnable(enable);
304326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
305326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
306326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
307326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
308326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
309