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