10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/* 30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2009 The Android Open Source Project 40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License. 70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at 80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * 110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software 120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and 150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License. 160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */ 170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsContext.h" 190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsAdapter.h" 200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android; 220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesusing namespace android::renderscript; 230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesAdapter1D::Adapter1D(Context *rsc) : ObjectBase(rsc) { 250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines reset(); 260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesAdapter1D::Adapter1D(Context *rsc, Allocation *a) : ObjectBase(rsc) { 290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines reset(); 300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines setAllocation(a); 310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Adapter1D::reset() { 340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mY = 0; 350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mZ = 0; 360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mLOD = 0; 370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mFace = RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X; 380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Adapter1D::data(Context *rsc, uint32_t x, uint32_t count, const void *data, size_t sizeBytes) { 410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mAllocation->data(rsc, x, mY, mLOD, mFace, count, 1, data, sizeBytes); 420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Adapter1D::serialize(Context *rsc, OStream *stream) const { 450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesAdapter1D *Adapter1D::createFromStream(Context *rsc, IStream *stream) { 480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return NULL; 490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android { 520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript { 530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesRsAdapter1D rsi_Adapter1DCreate(Context *rsc) { 550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Adapter1D *a = new Adapter1D(rsc); 560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->incUserRef(); 570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return a; 580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_Adapter1DBindAllocation(Context *rsc, RsAdapter1D va, RsAllocation valloc) { 610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Adapter1D * a = static_cast<Adapter1D *>(va); 620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation * alloc = static_cast<Allocation *>(valloc); 630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->setAllocation(alloc); 640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_Adapter1DSetConstraint(Context *rsc, RsAdapter1D va, RsDimension dim, uint32_t value) { 670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Adapter1D * a = static_cast<Adapter1D *>(va); 680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines switch (dim) { 690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_X: 700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines rsAssert(!"Cannot contrain X in an 1D adapter"); 710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return; 720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_Y: 730f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->setY(value); 740f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 750f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_Z: 760f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->setZ(value); 770f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 780f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_LOD: 790f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->setLOD(value); 800f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 810f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_FACE: 820f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->setFace((RsAllocationCubemapFace)value); 830f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 840f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines default: 850f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines rsAssert(!"Unimplemented constraint"); 860f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return; 870f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 880f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 890f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 900f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 910f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 920f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 930f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines////////////////////////// 940f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 950f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesAdapter2D::Adapter2D(Context *rsc) : ObjectBase(rsc) { 960f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines reset(); 970f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 980f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 990f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesAdapter2D::Adapter2D(Context *rsc, Allocation *a) : ObjectBase(rsc) { 1000f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines reset(); 1010f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines setAllocation(a); 1020f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1030f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1040f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Adapter2D::reset() { 1050f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mZ = 0; 1060f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mLOD = 0; 1070f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mFace = RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X; 1080f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1090f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Adapter2D::data(Context *rsc, uint32_t x, uint32_t y, uint32_t w, uint32_t h, 1120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines const void *data, size_t sizeBytes) { 1130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines mAllocation->data(rsc, x, y, mLOD, mFace, w, h, data, sizeBytes); 1140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid Adapter2D::serialize(Context *rsc, OStream *stream) const { 1180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesAdapter2D *Adapter2D::createFromStream(Context *rsc, IStream *stream) { 1210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return NULL; 1220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android { 1260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript { 1270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen HinesRsAdapter2D rsi_Adapter2DCreate(Context *rsc) { 1290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Adapter2D *a = new Adapter2D(rsc); 1300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->incUserRef(); 1310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return a; 1320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_Adapter2DBindAllocation(Context *rsc, RsAdapter2D va, RsAllocation valloc) { 1350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Adapter2D * a = static_cast<Adapter2D *>(va); 1360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Allocation * alloc = static_cast<Allocation *>(valloc); 1370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->setAllocation(alloc); 1380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesvoid rsi_Adapter2DSetConstraint(Context *rsc, RsAdapter2D va, RsDimension dim, uint32_t value) { 1410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines Adapter2D * a = static_cast<Adapter2D *>(va); 1420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines switch (dim) { 1430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_X: 1440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines rsAssert(!"Cannot contrain X in an 2D adapter"); 1450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return; 1460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_Y: 1470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines rsAssert(!"Cannot contrain Y in an 2D adapter"); 1480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 1490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_Z: 1500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->setZ(value); 1510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 1520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_LOD: 1530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->setLOD(value); 1540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 1550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines case RS_DIMENSION_FACE: 1560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines a->setFace((RsAllocationCubemapFace)value); 1570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines break; 1580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines default: 1590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines rsAssert(!"Unimplemented constraint"); 1600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines return; 1610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines } 1620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines 1650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 1660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines} 167