123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- /*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include "rsovCore.h"
- #include <malloc.h>
- #include <sched.h>
- #include <string.h>
- #include <sys/resource.h>
- #include <sys/syscall.h>
- #include <sys/types.h>
- #include "cpu_ref/rsd_cpu.h"
- #include "rsContext.h"
- #include "rsovAllocation.h"
- #include "rsovContext.h"
- #include "rsovElement.h"
- #include "rsovSampler.h"
- #include "rsovScript.h"
- #include "rsovScriptGroup.h"
- #include "rsovType.h"
- namespace android {
- namespace renderscript {
- namespace {
- void SetPriority(const Context *rsc, int32_t priority) {
- RSoVHal *dc = (RSoVHal *)rsc->mHal.drv;
- dc->mCpuRef->setPriority(priority);
- }
- void Shutdown(Context *rsc) {
- RSoVHal *dc = (RSoVHal *)rsc->mHal.drv;
- delete dc->mCpuRef;
- free(dc);
- rsc->mHal.drv = nullptr;
- }
- void *AllocRuntimeMem(size_t size, uint32_t flags) {
- void* buffer = calloc(size, sizeof(char));
- return buffer;
- }
- void FreeRuntimeMem(void* ptr) {
- free(ptr);
- }
- const RsdCpuReference::CpuSymbol *lookupRuntimeStubs(
- Context *pContext, char const *name) {
- return nullptr;
- }
- } // anonymous namespace
- namespace rsov {
- namespace {
- RsdCpuReference::CpuScript *lookupCpuScript(Context *rsc, const Script *s) {
- if (RSoVScript::isScriptCpuBacked(s)) {
- return reinterpret_cast<RsdCpuReference::CpuScript *>(s->mHal.drv);
- }
- RSoVScript *rsovScript = reinterpret_cast<RSoVScript *>(s->mHal.drv);
- return rsovScript->getCpuScript();
- }
- } // anonymous namespace
- } // namespace rsov
- extern "C" bool rsdHalQueryHal(RsHalInitEnums entry, void **fnPtr) {
- switch (entry) {
- case RS_HAL_ALLOCATION_INIT:
- fnPtr[0] = (void *)rsovAllocationInit;
- break;
- case RS_HAL_ALLOCATION_INIT_OEM:
- fnPtr[0] = (void *)nullptr;
- break;
- case RS_HAL_ALLOCATION_INIT_ADAPTER:
- fnPtr[0] = (void *)rsovAllocationAdapterInit;
- break;
- case RS_HAL_ALLOCATION_DESTROY:
- fnPtr[0] = (void *)rsovAllocationDestroy;
- break;
- case RS_HAL_ALLOCATION_GET_GRALLOC_BITS:
- fnPtr[0] = (void *)rsovAllocationGrallocBits;
- break;
- case RS_HAL_ALLOCATION_DATA_1D:
- fnPtr[0] = (void *)rsovAllocationData1D;
- break;
- case RS_HAL_ALLOCATION_DATA_2D:
- fnPtr[0] = (void *)rsovAllocationData2D;
- break;
- case RS_HAL_ALLOCATION_DATA_3D:
- fnPtr[0] = (void *)rsovAllocationData3D;
- break;
- case RS_HAL_ALLOCATION_READ_1D:
- fnPtr[0] = (void *)rsovAllocationRead1D;
- break;
- case RS_HAL_ALLOCATION_READ_2D:
- fnPtr[0] = (void *)rsovAllocationRead2D;
- break;
- case RS_HAL_ALLOCATION_READ_3D:
- fnPtr[0] = (void *)rsovAllocationRead3D;
- break;
- case RS_HAL_ALLOCATION_LOCK_1D:
- fnPtr[0] = (void *)rsovAllocationLock1D;
- break;
- case RS_HAL_ALLOCATION_UNLOCK_1D:
- fnPtr[0] = (void *)rsovAllocationUnlock1D;
- break;
- case RS_HAL_ALLOCATION_COPY_1D:
- fnPtr[0] = (void *)rsovAllocationData1D_alloc;
- break;
- case RS_HAL_ALLOCATION_COPY_2D:
- fnPtr[0] = (void *)rsovAllocationData2D_alloc;
- break;
- case RS_HAL_ALLOCATION_COPY_3D:
- fnPtr[0] = (void *)rsovAllocationData3D_alloc;
- break;
- case RS_HAL_ALLOCATION_ADAPTER_OFFSET:
- fnPtr[0] = (void *)rsovAllocationAdapterOffset;
- break;
- case RS_HAL_ALLOCATION_RESIZE:
- fnPtr[0] = (void *)rsovAllocationResize;
- break;
- case RS_HAL_ALLOCATION_SYNC_ALL:
- fnPtr[0] = (void *)rsovAllocationSyncAll;
- break;
- case RS_HAL_ALLOCATION_MARK_DIRTY:
- fnPtr[0] = (void *)rsovAllocationMarkDirty;
- break;
- case RS_HAL_ALLOCATION_GENERATE_MIPMAPS:
- fnPtr[0] = (void *)rsovAllocationGenerateMipmaps;
- break;
- case RS_HAL_ALLOCATION_UPDATE_CACHED_OBJECT:
- fnPtr[0] = (void *)rsovAllocationUpdateCachedObject;
- break;
- case RS_HAL_ALLOCATION_GET_POINTER:
- fnPtr[0] = (void *)nullptr;
- break;
- case RS_HAL_ALLOCATION_SET_SURFACE:
- fnPtr[0] = (void *)rsovAllocationSetSurface;
- break;
- case RS_HAL_ALLOCATION_IO_SEND:
- fnPtr[0] = (void *)rsovAllocationIoSend;
- break;
- case RS_HAL_ALLOCATION_IO_RECEIVE:
- fnPtr[0] = (void *)rsovAllocationIoReceive;
- break;
- case RS_HAL_ALLOCATION_ELEMENT_DATA:
- fnPtr[0] = (void *)rsovAllocationElementData;
- break;
- case RS_HAL_ALLOCATION_ELEMENT_READ:
- fnPtr[0] = (void *)rsovAllocationElementRead;
- break;
- case RS_HAL_CORE_SHUTDOWN:
- fnPtr[0] = (void *)Shutdown;
- break;
- case RS_HAL_CORE_SET_PRIORITY:
- fnPtr[0] = (void *)SetPriority;
- break;
- case RS_HAL_CORE_ALLOC_RUNTIME_MEM:
- fnPtr[0] = (void *)AllocRuntimeMem;
- break;
- case RS_HAL_CORE_FREE_RUNTIME_MEM:
- fnPtr[0] = (void *)FreeRuntimeMem;
- break;
- case RS_HAL_CORE_FINISH:
- fnPtr[0] = (void *)nullptr;
- break;
- case RS_HAL_SCRIPT_INIT:
- fnPtr[0] = (void *)rsovScriptInit;
- break;
- case RS_HAL_SCRIPT_INIT_INTRINSIC:
- fnPtr[0] = (void *)rsovInitIntrinsic;
- break;
- case RS_HAL_SCRIPT_INVOKE_FUNCTION:
- fnPtr[0] = (void *)rsovScriptInvokeFunction;
- break;
- case RS_HAL_SCRIPT_INVOKE_ROOT:
- fnPtr[0] = (void *)rsovScriptInvokeRoot;
- break;
- case RS_HAL_SCRIPT_INVOKE_FOR_EACH:
- fnPtr[0] = (void *)rsovScriptInvokeForEach;
- break;
- case RS_HAL_SCRIPT_INVOKE_INIT:
- fnPtr[0] = (void *)rsovScriptInvokeInit;
- break;
- case RS_HAL_SCRIPT_INVOKE_FREE_CHILDREN:
- fnPtr[0] = (void *)rsovScriptInvokeFreeChildren;
- break;
- case RS_HAL_SCRIPT_DESTROY:
- fnPtr[0] = (void *)rsovScriptDestroy;
- break;
- case RS_HAL_SCRIPT_SET_GLOBAL_VAR:
- fnPtr[0] = (void *)rsovScriptSetGlobalVar;
- break;
- case RS_HAL_SCRIPT_GET_GLOBAL_VAR:
- fnPtr[0] = (void *)rsovScriptGetGlobalVar;
- break;
- case RS_HAL_SCRIPT_SET_GLOBAL_VAR_WITH_ELEMENT_DIM:
- fnPtr[0] = (void *)rsovScriptSetGlobalVarWithElemDims;
- break;
- case RS_HAL_SCRIPT_SET_GLOBAL_BIND:
- fnPtr[0] = (void *)rsovScriptSetGlobalBind;
- break;
- case RS_HAL_SCRIPT_SET_GLOBAL_OBJECT:
- fnPtr[0] = (void *)rsovScriptSetGlobalObj;
- break;
- case RS_HAL_SCRIPT_INVOKE_FOR_EACH_MULTI:
- fnPtr[0] = (void *)rsovScriptInvokeForEachMulti;
- break;
- case RS_HAL_SCRIPT_UPDATE_CACHED_OBJECT:
- fnPtr[0] = (void *)rsovScriptUpdateCachedObject;
- break;
- case RS_HAL_SCRIPT_INVOKE_REDUCE:
- fnPtr[0] = (void *)rsovScriptInvokeReduce;
- break;
- case RS_HAL_SAMPLER_INIT:
- fnPtr[0] = (void *)rsovSamplerInit;
- break;
- case RS_HAL_SAMPLER_DESTROY:
- fnPtr[0] = (void *)rsovSamplerDestroy;
- break;
- case RS_HAL_SAMPLER_UPDATE_CACHED_OBJECT:
- fnPtr[0] = (void *)rsovSamplerUpdateCachedObject;
- break;
- case RS_HAL_TYPE_INIT:
- fnPtr[0] = (void *)rsovTypeInit;
- break;
- case RS_HAL_TYPE_DESTROY:
- fnPtr[0] = (void *)rsovTypeDestroy;
- break;
- case RS_HAL_TYPE_UPDATE_CACHED_OBJECT:
- fnPtr[0] = (void *)rsovTypeUpdateCachedObject;
- break;
- case RS_HAL_ELEMENT_INIT:
- fnPtr[0] = (void *)rsovElementInit;
- break;
- case RS_HAL_ELEMENT_DESTROY:
- fnPtr[0] = (void *)rsovElementDestroy;
- break;
- case RS_HAL_ELEMENT_UPDATE_CACHED_OBJECT:
- fnPtr[0] = (void *)rsovElementUpdateCachedObject;
- break;
- case RS_HAL_SCRIPT_GROUP_INIT:
- fnPtr[0] = (void *)rsovScriptGroupInit;
- break;
- case RS_HAL_SCRIPT_GROUP_DESTROY:
- fnPtr[0] = (void *)rsovScriptGroupDestroy;
- break;
- case RS_HAL_SCRIPT_GROUP_UPDATE_CACHED_OBJECT:
- fnPtr[0] = (void *)nullptr;
- break;
- case RS_HAL_SCRIPT_GROUP_SET_INPUT:
- fnPtr[0] = (void *)rsovScriptGroupSetInput;
- break;
- case RS_HAL_SCRIPT_GROUP_SET_OUTPUT:
- fnPtr[0] = (void *)rsovScriptGroupSetOutput;
- break;
- case RS_HAL_SCRIPT_GROUP_EXECUTE:
- fnPtr[0] = (void *)rsovScriptGroupExecute;
- break;
- // Ignore entries for the legacy graphics api,
- default:
- ALOGE("ERROR: unknown RenderScript HAL API query, %i", entry);
- return false;
- }
- return true;
- }
- extern "C" void rsdHalAbort(RsContext) {}
- extern "C" bool rsdHalQueryVersion(uint32_t *major, uint32_t *minor) {
- *major = RS_HAL_VERSION;
- *minor = 0;
- return true;
- }
- extern "C" bool rsdHalInit(RsContext c, uint32_t version_major,
- uint32_t version_minor) {
- Context *rsc = (Context *)c;
- std::unique_ptr<RSoVHal> hal(new RSoVHal());
- if (!hal) {
- ALOGE("Failed creating RSoV driver hal.");
- return false;
- }
- std::unique_ptr<rsov::RSoVContext> rsov(rsov::RSoVContext::create());
- if (!rsov) {
- ALOGE("RSoVContext::create for driver hal failed.");
- return false;
- }
- std::unique_ptr<RsdCpuReference> cpuref(RsdCpuReference::create(rsc, version_major, version_minor,
- &lookupRuntimeStubs,
- &rsov::lookupCpuScript));
- if (!cpuref) {
- ALOGE("RsdCpuReference::create for driver hal failed.");
- return false;
- }
- hal->mRSoV = rsov.release();
- hal->mCpuRef = cpuref.release();
- rsc->mHal.drv = hal.release();
- return true;
- }
- } // namespace renderscript
- } // namespace android
|