rsProgramStore.cpp revision 326e0ddf89e8df2837752fbfd7a014814b32082c
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"
18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsProgramFragmentStore.h"
19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
20326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
21326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
24326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsProgramFragmentStore::ProgramFragmentStore(Element *in, Element *out) :
25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Program(in, out)
26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDitherEnable = true;
28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendEnable = false;
29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorRWriteEnable = true;
30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorGWriteEnable = true;
31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorBWriteEnable = true;
32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorAWriteEnable = true;
33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendSrc = GL_ONE;
34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendDst = GL_ZERO;
35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthTestEnable = false;
38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthWriteEnable = true;
39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthFunc = GL_LESS;
40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
44326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsProgramFragmentStore::~ProgramFragmentStore()
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ProgramFragmentStore::setupGL()
49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glColorMask(mColorRWriteEnable,
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                mColorGWriteEnable,
52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                mColorBWriteEnable,
53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                mColorAWriteEnable);
54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if (mBlendEnable) {
55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glEnable(GL_BLEND);
56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glBlendFunc(mBlendSrc, mBlendDst);
57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    } else {
58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glDisable(GL_BLEND);
59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDepthMask(mDepthWriteEnable);
62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if(mDepthTestEnable) {
63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glEnable(GL_DEPTH_TEST);
64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glDepthFunc(mDepthFunc);
65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    } else {
66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glDisable(GL_DEPTH_TEST);
67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if (mDitherEnable) {
70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glEnable(GL_DITHER);
71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    } else {
72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        glDisable(GL_DITHER);
73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
78326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ProgramFragmentStore::setDitherEnable(bool enable)
79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDitherEnable = enable;
81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
83326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ProgramFragmentStore::setDepthFunc(RsDepthFunc func)
84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthTestEnable = true;
86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    switch(func) {
88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_ALWAYS:
89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthTestEnable = false;
90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_ALWAYS;
91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_LESS:
93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_LESS;
94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_LEQUAL:
96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_LEQUAL;
97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_GREATER:
99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_GREATER;
100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_GEQUAL:
102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_GEQUAL;
103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_EQUAL:
105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_EQUAL;
106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DEPTH_FUNC_NOTEQUAL:
108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mDepthFunc = GL_NOTEQUAL;
109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
113326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ProgramFragmentStore::setDepthMask(bool mask)
114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mDepthWriteEnable = mask;
116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
118326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ProgramFragmentStore::setBlendFunc(RsBlendSrcFunc src, RsBlendDstFunc dst)
119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mBlendEnable = true;
121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if ((src == RS_BLEND_SRC_ONE) &&
122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        (dst == RS_BLEND_DST_ZERO)) {
123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendEnable = false;
124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    switch(src) {
127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ZERO:
128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ZERO;
129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE:
131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE;
132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_DST_COLOR:
134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_DST_COLOR;
135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_DST_COLOR:
137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_DST_COLOR;
138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_SRC_ALPHA:
140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_SRC_ALPHA;
141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_SRC_ALPHA:
143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_SRC_ALPHA;
144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_DST_ALPHA:
146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_DST_ALPHA;
147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_ONE_MINUS_DST_ALPHA:
149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_ONE_MINUS_DST_ALPHA;
150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_SRC_SRC_ALPHA_SATURATE:
152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendSrc = GL_SRC_ALPHA_SATURATE;
153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    switch(dst) {
157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ZERO:
158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ZERO;
159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE:
161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE;
162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_SRC_COLOR:
164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_SRC_COLOR;
165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_SRC_COLOR:
167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_SRC_COLOR;
168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_SRC_ALPHA:
170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_SRC_ALPHA;
171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_SRC_ALPHA:
173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_SRC_ALPHA;
174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_DST_ALPHA:
176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_DST_ALPHA;
177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_BLEND_DST_ONE_MINUS_DST_ALPHA:
179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        mBlendDst = GL_ONE_MINUS_DST_ALPHA;
180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
184326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ProgramFragmentStore::setColorMask(bool r, bool g, bool b, bool a)
185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorRWriteEnable = r;
187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorGWriteEnable = g;
188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorBWriteEnable = b;
189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mColorAWriteEnable = a;
190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
193326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsProgramFragmentStoreState::ProgramFragmentStoreState()
194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mPFS = NULL;
196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
198326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsProgramFragmentStoreState::~ProgramFragmentStoreState()
199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    delete mPFS;
201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
206326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
207326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
209326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramFragmentStoreBegin(Context * rsc, RsElement in, RsElement out)
210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    delete rsc->mStateFragmentStore.mPFS;
212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS = new ProgramFragmentStore((Element *)in, (Element *)out);
213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
216326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramFragmentStoreDepthFunc(Context *rsc, RsDepthFunc func)
217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDepthFunc(func);
219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
221326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramFragmentStoreDepthMask(Context *rsc, bool mask)
222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDepthMask(mask);
224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
226326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramFragmentStoreColorMask(Context *rsc, bool r, bool g, bool b, bool a)
227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setColorMask(r, g, b, a);
229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
231326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramFragmentStoreBlendFunc(Context *rsc, RsBlendSrcFunc src, RsBlendDstFunc dst)
232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setBlendFunc(src, dst);
234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
236326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsProgramFragmentStore rsi_ProgramFragmentStoreCreate(Context *rsc)
237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ProgramFragmentStore *pfs = rsc->mStateFragmentStore.mPFS;
239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    pfs->incRef();
240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS = 0;
241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return pfs;
243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
245326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ProgramFragmentStoreDither(Context *rsc, bool enable)
246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsc->mStateFragmentStore.mPFS->setDitherEnable(enable);
248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
251326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
253