blob: 8fe890becb72c8627405f9c372ef2da6e54c0379 [file] [log] [blame]
Jason Sams326e0dd2009-05-22 14:03:28 -07001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "rsContext.h"
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070018#include "rsProgramStore.h"
Jason Sams1aa5a4e2009-06-22 17:15:15 -070019
Jason Sams326e0dd2009-05-22 14:03:28 -070020using namespace android;
21using namespace android::renderscript;
22
23
Jason Sams721acc42011-04-06 11:23:54 -070024ProgramStore::ProgramStore(Context *rsc,
25 bool colorMaskR, bool colorMaskG, bool colorMaskB, bool colorMaskA,
26 bool depthMask, bool ditherEnable,
27 RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc,
Alex Sakhartchouk7f126c72011-05-05 16:56:27 -070028 RsDepthFunc depthFunc) : ProgramBase(rsc) {
Jason Sams8feea4e2011-03-18 15:03:25 -070029 memset(&mHal, 0, sizeof(mHal));
Jason Sams326e0dd2009-05-22 14:03:28 -070030
Jason Sams721acc42011-04-06 11:23:54 -070031 mHal.state.ditherEnable = ditherEnable;
Jason Sams8feea4e2011-03-18 15:03:25 -070032
Jason Sams721acc42011-04-06 11:23:54 -070033 mHal.state.colorRWriteEnable = colorMaskR;
34 mHal.state.colorGWriteEnable = colorMaskG;
35 mHal.state.colorBWriteEnable = colorMaskB;
36 mHal.state.colorAWriteEnable = colorMaskA;
37 mHal.state.blendSrc = srcFunc;
38 mHal.state.blendDst = destFunc;
Jason Sams8feea4e2011-03-18 15:03:25 -070039
Jason Sams721acc42011-04-06 11:23:54 -070040 mHal.state.depthWriteEnable = depthMask;
41 mHal.state.depthFunc = depthFunc;
Jason Sams326e0dd2009-05-22 14:03:28 -070042}
43
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080044ProgramStore::~ProgramStore() {
Jason Sams8feea4e2011-03-18 15:03:25 -070045 mRSC->mHal.funcs.store.destroy(mRSC, this);
Jason Sams326e0dd2009-05-22 14:03:28 -070046}
47
Jason Sams721acc42011-04-06 11:23:54 -070048void ProgramStore::setup(const Context *rsc, ProgramStoreState *state) {
Jason Samsc460e552009-11-25 13:22:07 -080049 if (state->mLast.get() == this) {
50 return;
51 }
52 state->mLast.set(this);
53
Jason Sams8feea4e2011-03-18 15:03:25 -070054 rsc->mHal.funcs.store.setActive(rsc, this);
Jason Samsc460e552009-11-25 13:22:07 -080055}
56
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080057void ProgramStore::serialize(OStream *stream) const {
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070058}
59
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080060ProgramStore *ProgramStore::createFromStream(Context *rsc, IStream *stream) {
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070061 return NULL;
62}
63
Jason Sams8feea4e2011-03-18 15:03:25 -070064void ProgramStore::init() {
65 mRSC->mHal.funcs.store.init(mRSC, this);
Jason Sams326e0dd2009-05-22 14:03:28 -070066}
67
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080068ProgramStoreState::ProgramStoreState() {
Jason Sams326e0dd2009-05-22 14:03:28 -070069}
70
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080071ProgramStoreState::~ProgramStoreState() {
Jason Sams326e0dd2009-05-22 14:03:28 -070072}
73
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080074void ProgramStoreState::init(Context *rsc) {
Jason Sams721acc42011-04-06 11:23:54 -070075 ProgramStore *ps = new ProgramStore(rsc,
76 true, true, true, true,
77 true, true,
78 RS_BLEND_SRC_ONE, RS_BLEND_DST_ZERO,
79 RS_DEPTH_FUNC_LESS);
80 ps->init();
81 mDefault.set(ps);
Jason Sams8ce125b2009-06-17 16:52:59 -070082}
83
Alex Sakhartchoukafb743a2010-11-09 17:00:54 -080084void ProgramStoreState::deinit(Context *rsc) {
Jason Samsf2649a92009-09-25 16:37:33 -070085 mDefault.clear();
86 mLast.clear();
87}
88
Jason Sams8feea4e2011-03-18 15:03:25 -070089
Jason Sams326e0dd2009-05-22 14:03:28 -070090namespace android {
91namespace renderscript {
92
Jason Sams721acc42011-04-06 11:23:54 -070093RsProgramStore rsi_ProgramStoreCreate(Context *rsc,
94 bool colorMaskR, bool colorMaskG, bool colorMaskB, bool colorMaskA,
95 bool depthMask, bool ditherEnable,
96 RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc,
97 RsDepthFunc depthFunc) {
Jason Sams326e0dd2009-05-22 14:03:28 -070098
Jason Sams721acc42011-04-06 11:23:54 -070099 ProgramStore *pfs = new ProgramStore(rsc,
100 colorMaskR, colorMaskG, colorMaskB, colorMaskA,
101 depthMask, ditherEnable,
102 srcFunc, destFunc, depthFunc);
Jason Sams8feea4e2011-03-18 15:03:25 -0700103 pfs->init();
Jason Sams9397e302009-08-27 20:23:34 -0700104 pfs->incUserRef();
Jason Sams326e0dd2009-05-22 14:03:28 -0700105 return pfs;
106}
107
Jason Sams326e0dd2009-05-22 14:03:28 -0700108}
109}