18eaba4fee0c7b5325742c87187622fdff51d5effJason Sams/*
28eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * Copyright (C) 2012 The Android Open Source Project
38eaba4fee0c7b5325742c87187622fdff51d5effJason Sams *
48eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
58eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * you may not use this file except in compliance with the License.
68eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * You may obtain a copy of the License at
78eaba4fee0c7b5325742c87187622fdff51d5effJason Sams *
88eaba4fee0c7b5325742c87187622fdff51d5effJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
98eaba4fee0c7b5325742c87187622fdff51d5effJason Sams *
108eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * Unless required by applicable law or agreed to in writing, software
118eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
128eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * See the License for the specific language governing permissions and
148eaba4fee0c7b5325742c87187622fdff51d5effJason Sams * limitations under the License.
158eaba4fee0c7b5325742c87187622fdff51d5effJason Sams */
168eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
178eaba4fee0c7b5325742c87187622fdff51d5effJason Sams#ifndef ANDROID_RS_SCRIPT_INTRINSIC_H
188eaba4fee0c7b5325742c87187622fdff51d5effJason Sams#define ANDROID_RS_SCRIPT_INTRINSIC_H
198eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
208eaba4fee0c7b5325742c87187622fdff51d5effJason Sams#include "rsScript.h"
218eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
228eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
238eaba4fee0c7b5325742c87187622fdff51d5effJason Sams// ---------------------------------------------------------------------------
248eaba4fee0c7b5325742c87187622fdff51d5effJason Samsnamespace android {
258eaba4fee0c7b5325742c87187622fdff51d5effJason Samsnamespace renderscript {
268eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
278eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
288eaba4fee0c7b5325742c87187622fdff51d5effJason Samsclass ScriptIntrinsic : public Script {
298eaba4fee0c7b5325742c87187622fdff51d5effJason Samspublic:
308eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
318eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    ObjectBaseRef<const Element> mElement;
328eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
3310ab8bb0fa510bdb577adce5e67b6bf35882a9ddChih-Hung Hsieh    explicit ScriptIntrinsic(Context *);
3414ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala    ~ScriptIntrinsic() override;
358eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
3641d6c769f5fa21da3cbc116af95d88949a4a5c76Stephen Hines    bool init(Context *rsc, RsScriptIntrinsicID iid, Element *e);
378eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
388eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
3914ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala    void serialize(Context *rsc, OStream *stream) const override;
4014ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala    RsA3DClassID getClassId() const override;
4114ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala    bool freeChildren() override;
428eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
4314ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala    void runForEach(Context* rsc,
4414ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala                    uint32_t slot,
4514ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala                    const Allocation ** ains,
4614ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala                    size_t inLen,
4714ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala                    Allocation* aout,
4814ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala                    const void* usr,
4914ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala                    size_t usrBytes,
5014ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala                    const RsScriptCall* sc = nullptr) override;
514b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes
52fc7ab793ea2db91f330272d9470433bbb1a505ceDavid Gross    void runReduce(Context *rsc, uint32_t slot,
53fc7ab793ea2db91f330272d9470433bbb1a505ceDavid Gross                   const Allocation ** ains, size_t inLen,
5414ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala                   Allocation *aout, const RsScriptCall *sc) override;
5514ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala
5614ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala    void Invoke(Context *rsc, uint32_t slot, const void *data, size_t len) override;
5714ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala    void setupScript(Context *rsc) override;
5814ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala    uint32_t run(Context *) override;
5914ce007a633b10e3b9a3fae29d8f53a7e8c9b59fMatt Wala    bool isIntrinsic() const override { return true; }
608eaba4fee0c7b5325742c87187622fdff51d5effJason Samsprotected:
618eaba4fee0c7b5325742c87187622fdff51d5effJason Sams    uint32_t mIntrinsicID;
628eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
638eaba4fee0c7b5325742c87187622fdff51d5effJason Sams};
648eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
658eaba4fee0c7b5325742c87187622fdff51d5effJason Sams
667974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace renderscript
677974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace android
688eaba4fee0c7b5325742c87187622fdff51d5effJason Sams#endif
69