1ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang/* 2ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * Copyright 2012, The Android Open Source Project 3ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * 4ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * you may not use this file except in compliance with the License. 6ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * You may obtain a copy of the License at 7ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * 8ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * http://www.apache.org/licenses/LICENSE-2.0 9ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * 10ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * Unless required by applicable law or agreed to in writing, software 11ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 12ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * See the License for the specific language governing permissions and 14ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang * limitations under the License. 15ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang */ 16ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 17e198abec6c5e3eab380ccf6897b0a0b9c2dd92ddStephen Hines#include "bcc/Renderscript/RSScript.h" 18ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 19c5e607adff80a66bc5420baffd299862abdf368dJean-Luc Brouillet#include "bcc/Assert.h" 202665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao#include "bcc/Source.h" 21ef73a242762bcd8113b9b65ceccbe7d909b5acbcZonr Chang#include "bcc/Support/Log.h" 22ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 23ade92778b99382413ff9c556c724dd3f447e5dfbZonr Changusing namespace bcc; 24ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 25c5e607adff80a66bc5420baffd299862abdf368dJean-Luc Brouilletbool RSScript::LinkRuntime(RSScript &pScript, const char *core_lib) { 26900c6c1f08f7c572125d7d39abe0f0f9eafbfa14Chris Wailes bccAssert(core_lib != nullptr); 27c5e607adff80a66bc5420baffd299862abdf368dJean-Luc Brouillet 282665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao // Using the same context with the source in pScript. 292665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao BCCContext &context = pScript.getSource().getContext(); 30331310e1f3f86a795f78e42b3f03558a43829f09Stephen Hines 31b8f9fb12f2d879f8f83e8dda1f302741a124513dShih-wei Liao Source *libclcore_source = Source::CreateFromFile(context, core_lib); 32900c6c1f08f7c572125d7d39abe0f0f9eafbfa14Chris Wailes if (libclcore_source == nullptr) { 33b8f9fb12f2d879f8f83e8dda1f302741a124513dShih-wei Liao ALOGE("Failed to load Renderscript library '%s' to link!", core_lib); 342665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao return false; 352665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao } 362665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao 37900c6c1f08f7c572125d7d39abe0f0f9eafbfa14Chris Wailes if (pScript.mLinkRuntimeCallback != nullptr) { 3806731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines pScript.mLinkRuntimeCallback(&pScript, 3906731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines &pScript.getSource().getModule(), &libclcore_source->getModule()); 4006731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines } 4106731a6150ae8014d37258d5f32ef8bc14a3db63Stephen Hines 42579361346abc6696c805e3904a18178ebce4e4a3Stephen Hines if (!pScript.getSource().merge(*libclcore_source)) { 43e198abec6c5e3eab380ccf6897b0a0b9c2dd92ddStephen Hines ALOGE("Failed to link Renderscript library '%s'!", core_lib); 442665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao delete libclcore_source; 452665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao return false; 462665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao } 472665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao 482665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao return true; 492665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao} 502665c2f94ed14c1d15925d83b47aa519a11dafe5Shih-wei Liao 51ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr ChangRSScript::RSScript(Source &pSource) 52a65fba6fd15b14d930809e64c84fb976a893d038Pirama Arumuga Nainar : Script(pSource), mCompilerVersion(0), 53900c6c1f08f7c572125d7d39abe0f0f9eafbfa14Chris Wailes mOptimizationLevel(kOptLvl3), mLinkRuntimeCallback(nullptr), 54e67dab471c82c8df1cf73b2fe464792c78082616Stephen Hines mEmbedInfo(false), mEmbedGlobalInfo(false), 55e67dab471c82c8df1cf73b2fe464792c78082616Stephen Hines mEmbedGlobalInfoSkipConstant(false) { } 56ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang 57ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Changbool RSScript::doReset() { 58ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang mCompilerVersion = 0; 59ade92778b99382413ff9c556c724dd3f447e5dfbZonr Chang mOptimizationLevel = kOptLvl3; 60ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang return true; 61ccc39a8f412edaec2d231ed1ec70ff25fa83af37Zonr Chang} 62