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