blob: 087414a703403d6381e8f00ab1758b734e0df198 [file] [log] [blame]
Jason Samsd19f10d2009-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 Sakhartchoukaa7d2882010-05-21 12:53:13 -070018#include "rsProgramStore.h"
Jason Sams4b962e52009-06-22 17:15:15 -070019
Jason Samsd19f10d2009-05-22 14:03:28 -070020using namespace android;
21using namespace android::renderscript;
22
23
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080024ProgramStore::ProgramStore(Context *rsc) : Program(rsc) {
Jason Sams48f50562011-03-18 15:03:25 -070025 memset(&mHal, 0, sizeof(mHal));
Jason Samsd19f10d2009-05-22 14:03:28 -070026
Jason Sams48f50562011-03-18 15:03:25 -070027 mHal.state.ditherEnable = true;
28
29 mHal.state.colorRWriteEnable = true;
30 mHal.state.colorGWriteEnable = true;
31 mHal.state.colorBWriteEnable = true;
32 mHal.state.colorAWriteEnable = true;
33 mHal.state.blendSrc = RS_BLEND_SRC_ONE;
34 mHal.state.blendDst = RS_BLEND_DST_ZERO;
35
36 mHal.state.depthWriteEnable = true;
37 mHal.state.depthFunc = RS_DEPTH_FUNC_LESS;
Jason Samsd19f10d2009-05-22 14:03:28 -070038}
39
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080040ProgramStore::~ProgramStore() {
Jason Sams48f50562011-03-18 15:03:25 -070041 mRSC->mHal.funcs.store.destroy(mRSC, this);
Jason Samsd19f10d2009-05-22 14:03:28 -070042}
43
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080044void ProgramStore::setupGL2(const Context *rsc, ProgramStoreState *state) {
Jason Samsbb51c402009-11-25 13:22:07 -080045 if (state->mLast.get() == this) {
46 return;
47 }
48 state->mLast.set(this);
49
Jason Sams48f50562011-03-18 15:03:25 -070050 rsc->mHal.funcs.store.setActive(rsc, this);
Jason Samsbb51c402009-11-25 13:22:07 -080051}
52
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080053void ProgramStore::setDitherEnable(bool enable) {
Jason Sams48f50562011-03-18 15:03:25 -070054 mHal.state.ditherEnable = enable;
Jason Samsd19f10d2009-05-22 14:03:28 -070055}
56
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080057void ProgramStore::serialize(OStream *stream) const {
Alex Sakhartchoukaa7d2882010-05-21 12:53:13 -070058}
59
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080060ProgramStore *ProgramStore::createFromStream(Context *rsc, IStream *stream) {
Alex Sakhartchoukaa7d2882010-05-21 12:53:13 -070061 return NULL;
62}
63
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080064void ProgramStore::setDepthFunc(RsDepthFunc func) {
Jason Sams48f50562011-03-18 15:03:25 -070065 mHal.state.depthFunc = func;
Jason Samsd19f10d2009-05-22 14:03:28 -070066}
67
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080068void ProgramStore::setDepthMask(bool mask) {
Jason Sams48f50562011-03-18 15:03:25 -070069 mHal.state.depthWriteEnable = mask;
Jason Samsd19f10d2009-05-22 14:03:28 -070070}
71
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080072void ProgramStore::setBlendFunc(RsBlendSrcFunc src, RsBlendDstFunc dst) {
Jason Sams48f50562011-03-18 15:03:25 -070073 mHal.state.blendSrc = src;
74 mHal.state.blendDst = dst;
Jason Samsd19f10d2009-05-22 14:03:28 -070075}
76
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080077void ProgramStore::setColorMask(bool r, bool g, bool b, bool a) {
Jason Sams48f50562011-03-18 15:03:25 -070078 mHal.state.colorRWriteEnable = r;
79 mHal.state.colorGWriteEnable = g;
80 mHal.state.colorBWriteEnable = b;
81 mHal.state.colorAWriteEnable = a;
82}
83
84void ProgramStore::init() {
85 mRSC->mHal.funcs.store.init(mRSC, this);
Jason Samsd19f10d2009-05-22 14:03:28 -070086}
87
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080088ProgramStoreState::ProgramStoreState() {
Jason Samsd19f10d2009-05-22 14:03:28 -070089 mPFS = NULL;
90}
91
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080092ProgramStoreState::~ProgramStoreState() {
Jason Samsb38d5342010-10-21 14:06:55 -070093 ObjectBase::checkDelete(mPFS);
94 mPFS = NULL;
Jason Samsd19f10d2009-05-22 14:03:28 -070095}
96
Alex Sakhartchouked9f2102010-11-09 17:00:54 -080097void ProgramStoreState::init(Context *rsc) {
Jason Sams54db59c2010-05-13 18:30:11 -070098 ProgramStore *pfs = new ProgramStore(rsc);
Jason Sams48f50562011-03-18 15:03:25 -070099 pfs->init();
Jason Sams9c54bdb2009-06-17 16:52:59 -0700100 mDefault.set(pfs);
101}
102
Alex Sakhartchouked9f2102010-11-09 17:00:54 -0800103void ProgramStoreState::deinit(Context *rsc) {
Jason Sams61f08d62009-09-25 16:37:33 -0700104 mDefault.clear();
105 mLast.clear();
106}
107
Jason Sams48f50562011-03-18 15:03:25 -0700108
Jason Samsd19f10d2009-05-22 14:03:28 -0700109namespace android {
110namespace renderscript {
111
Alex Sakhartchouked9f2102010-11-09 17:00:54 -0800112void rsi_ProgramStoreBegin(Context * rsc, RsElement in, RsElement out) {
Jason Samsb38d5342010-10-21 14:06:55 -0700113 ObjectBase::checkDelete(rsc->mStateFragmentStore.mPFS);
Jason Sams54db59c2010-05-13 18:30:11 -0700114 rsc->mStateFragmentStore.mPFS = new ProgramStore(rsc);
Jason Samsd19f10d2009-05-22 14:03:28 -0700115}
116
Alex Sakhartchouked9f2102010-11-09 17:00:54 -0800117void rsi_ProgramStoreDepthFunc(Context *rsc, RsDepthFunc func) {
Jason Samsd19f10d2009-05-22 14:03:28 -0700118 rsc->mStateFragmentStore.mPFS->setDepthFunc(func);
119}
120
Alex Sakhartchouked9f2102010-11-09 17:00:54 -0800121void rsi_ProgramStoreDepthMask(Context *rsc, bool mask) {
Jason Samsd19f10d2009-05-22 14:03:28 -0700122 rsc->mStateFragmentStore.mPFS->setDepthMask(mask);
123}
124
Alex Sakhartchouked9f2102010-11-09 17:00:54 -0800125void rsi_ProgramStoreColorMask(Context *rsc, bool r, bool g, bool b, bool a) {
Jason Samsd19f10d2009-05-22 14:03:28 -0700126 rsc->mStateFragmentStore.mPFS->setColorMask(r, g, b, a);
127}
128
Alex Sakhartchouked9f2102010-11-09 17:00:54 -0800129void rsi_ProgramStoreBlendFunc(Context *rsc, RsBlendSrcFunc src, RsBlendDstFunc dst) {
Jason Samsd19f10d2009-05-22 14:03:28 -0700130 rsc->mStateFragmentStore.mPFS->setBlendFunc(src, dst);
131}
132
Alex Sakhartchouked9f2102010-11-09 17:00:54 -0800133RsProgramStore rsi_ProgramStoreCreate(Context *rsc) {
Jason Sams54db59c2010-05-13 18:30:11 -0700134 ProgramStore *pfs = rsc->mStateFragmentStore.mPFS;
Jason Sams48f50562011-03-18 15:03:25 -0700135 pfs->init();
Jason Sams07ae4062009-08-27 20:23:34 -0700136 pfs->incUserRef();
Jason Samsd19f10d2009-05-22 14:03:28 -0700137 rsc->mStateFragmentStore.mPFS = 0;
Jason Samsd19f10d2009-05-22 14:03:28 -0700138 return pfs;
139}
140
Alex Sakhartchouked9f2102010-11-09 17:00:54 -0800141void rsi_ProgramStoreDither(Context *rsc, bool enable) {
Jason Samsd19f10d2009-05-22 14:03:28 -0700142 rsc->mStateFragmentStore.mPFS->setDitherEnable(enable);
143}
144
Jason Samsd19f10d2009-05-22 14:03:28 -0700145}
146}