ScriptIntrinsics.cpp revision 9eb7f4b90120ebe4be74343856e86b46495f72df
17f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray/*
27f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * Copyright (C) 2008-2012 The Android Open Source Project
37f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray *
47f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * Licensed under the Apache License, Version 2.0 (the "License");
57f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * you may not use this file except in compliance with the License.
67f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * You may obtain a copy of the License at
77f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray *
87f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray *      http://www.apache.org/licenses/LICENSE-2.0
97f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray *
107f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * Unless required by applicable law or agreed to in writing, software
117f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * distributed under the License is distributed on an "AS IS" BASIS,
127f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * See the License for the specific language governing permissions and
147f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * limitations under the License.
157f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray */
167f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
177f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray#include <utils/Log.h>
187f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray#include <malloc.h>
197f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
207f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray#include "RenderScript.h"
217f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray#include "rsDefines.h"
227f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
237f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayusing namespace android;
249eb7f4b90120ebe4be74343856e86b46495f72dfTim Murrayusing namespace RSC;
257f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
263cd44af22622898d3000b2b3c4c408cede294152Tim MurrayScriptIntrinsic::ScriptIntrinsic(sp<RS> rs, int id, sp<const Element> e)
277f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    : Script(NULL, rs) {
283cd44af22622898d3000b2b3c4c408cede294152Tim Murray    mID = rsScriptIntrinsicCreate(rs->getContext(), id, e->getID());
297f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
307f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
313cd44af22622898d3000b2b3c4c408cede294152Tim MurrayScriptIntrinsicBlend::ScriptIntrinsicBlend(sp<RS> rs, sp<const Element> e)
327f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_BLEND, e) {
337f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
347f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
357f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
367f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendClear(sp<Allocation> in, sp<Allocation> out) {
377f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(0, in, out, NULL, 0);
387f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
397f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
407f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendSrc(sp<Allocation> in, sp<Allocation> out) {
417f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(1, in, out, NULL, 0);
427f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
437f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
447f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendDst(sp<Allocation> in, sp<Allocation> out) {
457f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(2, in, out, NULL, 0);
467f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
477f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
487f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendSrcOver(sp<Allocation> in, sp<Allocation> out) {
497f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(3, in, out, NULL, 0);
507f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
517f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
527f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendDstOver(sp<Allocation> in, sp<Allocation> out) {
537f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(4, in, out, NULL, 0);
547f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
557f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
567f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendSrcIn(sp<Allocation> in, sp<Allocation> out) {
577f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(5, in, out, NULL, 0);
587f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
597f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
607f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendDstIn(sp<Allocation> in, sp<Allocation> out) {
617f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(6, in, out, NULL, 0);
627f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
637f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
647f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendSrcOut(sp<Allocation> in, sp<Allocation> out) {
657f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(7, in, out, NULL, 0);
667f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
677f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
687f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendDstOut(sp<Allocation> in, sp<Allocation> out) {
697f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(8, in, out, NULL, 0);
707f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
717f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
727f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendSrcAtop(sp<Allocation> in, sp<Allocation> out) {
737f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(9, in, out, NULL, 0);
747f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
757f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
767f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendDstAtop(sp<Allocation> in, sp<Allocation> out) {
777f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(10, in, out, NULL, 0);
787f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
797f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
807f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendXor(sp<Allocation> in, sp<Allocation> out) {
817f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(11, in, out, NULL, 0);
827f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
837f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
847f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray// Numbering jumps here
857f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendMultiply(sp<Allocation> in, sp<Allocation> out) {
867f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(14, in, out, NULL, 0);
877f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
887f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
897f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray// Numbering jumps here
907f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendAdd(sp<Allocation> in, sp<Allocation> out) {
917f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(34, in, out, NULL, 0);
927f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
937f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
947f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayvoid ScriptIntrinsicBlend::blendSubtract(sp<Allocation> in, sp<Allocation> out) {
957f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray    Script::forEach(35, in, out, NULL, 0);
967f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray}
977f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
983cd44af22622898d3000b2b3c4c408cede294152Tim MurrayScriptIntrinsicBlur::ScriptIntrinsicBlur(sp<RS> rs, sp<const Element> e)
998f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray    : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_BLUR, e) {
1007f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
1018f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray}
1027f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
1038f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murrayvoid ScriptIntrinsicBlur::blur(sp<Allocation> in, sp<Allocation> out) {
1048f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray    Script::setVar(1, in);
1058f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray    Script::forEach(0, NULL, out, NULL, 0);
1068f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray}
1077f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray
1088f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murrayvoid ScriptIntrinsicBlur::setRadius(float radius) {
1098f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray    Script::setVar(0, &radius, sizeof(float));
1108f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray}
111