rsAdapter.cpp revision e3150cfb3edb028407669e4a65e087eae77e718c
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/*
3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project
4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License.
7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at
8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software
12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and
15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License.
16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */
17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h"
194edf030cbb7c6ac08dc563335c2af73c20f6e2e5Alex Sakhartchouk#include "rsAdapter.h"
20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
21326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
22326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
24afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter1D::Adapter1D(Context *rsc) : ObjectBase(rsc) {
25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    reset();
26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
28afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter1D::Adapter1D(Context *rsc, Allocation *a) : ObjectBase(rsc) {
29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    reset();
30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    setAllocation(a);
31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
33afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter1D::reset() {
34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mY = 0;
35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mZ = 0;
36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mLOD = 0;
37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mFace = 0;
38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
40afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid * Adapter1D::getElement(uint32_t x) {
41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation.get());
42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getPtr());
43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getType());
44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uint8_t * ptr = static_cast<uint8_t *>(mAllocation->getPtr());
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ptr += mAllocation->getType()->getLODOffset(mLOD, x, mY);
46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return ptr;
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
49afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter1D::subData(uint32_t xoff, uint32_t count, const void *data) {
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if (mAllocation.get() && mAllocation.get()->getType()) {
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        void *ptr = getElement(xoff);
52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        count *= mAllocation.get()->getType()->getElementSizeBytes();
53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        memcpy(ptr, data, count);
54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
57afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter1D::data(const void *data) {
58d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams    memcpy(getElement(0),
59d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams           data,
60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams           mAllocation.get()->getType()->getSizeBytes());
61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
63e3150cfb3edb028407669e4a65e087eae77e718cJason Samsvoid Adapter1D::serialize(Context *rsc, OStream *stream) const {
64fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
65fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
66afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter1D *Adapter1D::createFromStream(Context *rsc, IStream *stream) {
67fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    return NULL;
68fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
69fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
70326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
71326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
73afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukRsAdapter1D rsi_Adapter1DCreate(Context *rsc) {
74e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams    Adapter1D *a = new Adapter1D(rsc);
759397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams    a->incUserRef();
76d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams    return a;
77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
79afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter1DBindAllocation(Context *rsc, RsAdapter1D va, RsAllocation valloc) {
80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter1D * a = static_cast<Adapter1D *>(va);
81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Allocation * alloc = static_cast<Allocation *>(valloc);
82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->setAllocation(alloc);
83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
85afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter1DSetConstraint(Context *rsc, RsAdapter1D va, RsDimension dim, uint32_t value) {
86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter1D * a = static_cast<Adapter1D *>(va);
87afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (dim) {
88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_X:
89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Cannot contrain X in an 1D adapter");
90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        return;
91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_Y:
92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setY(value);
93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_Z:
95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setZ(value);
96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_LOD:
98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setLOD(value);
99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_FACE:
101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setFace(value);
102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    default:
104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Unimplemented constraint");
105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        return;
106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
109afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter1DSubData(Context *rsc, RsAdapter1D va, uint32_t xoff, uint32_t count, const void *data) {
110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter1D * a = static_cast<Adapter1D *>(va);
111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->subData(xoff, count, data);
112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
114afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter1DData(Context *rsc, RsAdapter1D va, const void *data) {
115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter1D * a = static_cast<Adapter1D *>(va);
116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->data(data);
117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams//////////////////////////
123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
124afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter2D::Adapter2D(Context *rsc) : ObjectBase(rsc) {
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    reset();
126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
128afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter2D::Adapter2D(Context *rsc, Allocation *a) : ObjectBase(rsc) {
129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    reset();
130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    setAllocation(a);
131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
133afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter2D::reset() {
134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mZ = 0;
135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mLOD = 0;
136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mFace = 0;
137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
139afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid * Adapter2D::getElement(uint32_t x, uint32_t y) const {
140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation.get());
141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getPtr());
142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getType());
14384e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk    if (mFace != 0 && !mAllocation->getType()->getDimFaces()) {
144af12ac6a08651464f8d823add667c706f993b587Steve Block        ALOGE("Adapter wants cubemap face, but allocation has none");
14584e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk        return NULL;
14684e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk    }
14784e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk
148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uint8_t * ptr = static_cast<uint8_t *>(mAllocation->getPtr());
149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ptr += mAllocation->getType()->getLODOffset(mLOD, x, y);
15084e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk
15184e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk    if (mFace != 0) {
15284e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk        uint32_t totalSizeBytes = mAllocation->getType()->getSizeBytes();
15384e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk        uint32_t faceOffset = totalSizeBytes / 6;
15484e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk        ptr += faceOffset * mFace;
15584e4027f83b20af59f5b1fc52be6e45f159d3970Alex Sakhartchouk    }
156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return ptr;
157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
159afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter2D::subData(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void *data) {
160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation.get());
161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getPtr());
162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getType());
163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uint32_t eSize = mAllocation.get()->getType()->getElementSizeBytes();
165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uint32_t lineSize = eSize * w;
166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    const uint8_t *src = static_cast<const uint8_t *>(data);
168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    for (uint32_t line=yoff; line < (yoff+h); line++) {
169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        memcpy(getElement(xoff, line), src, lineSize);
170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        src += lineSize;
171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
174afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter2D::data(const void *data) {
175d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams    memcpy(getElement(0,0),
176d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams           data,
177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams           mAllocation.get()->getType()->getSizeBytes());
178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
180e3150cfb3edb028407669e4a65e087eae77e718cJason Samsvoid Adapter2D::serialize(Context *rsc, OStream *stream) const {
181fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
182fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
183afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter2D *Adapter2D::createFromStream(Context *rsc, IStream *stream) {
184fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    return NULL;
185fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
188326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
189326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
191afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukRsAdapter2D rsi_Adapter2DCreate(Context *rsc) {
192e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams    Adapter2D *a = new Adapter2D(rsc);
1939397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams    a->incUserRef();
194d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams    return a;
195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
197afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter2DBindAllocation(Context *rsc, RsAdapter2D va, RsAllocation valloc) {
198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter2D * a = static_cast<Adapter2D *>(va);
199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Allocation * alloc = static_cast<Allocation *>(valloc);
200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->setAllocation(alloc);
201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
203afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter2DSetConstraint(Context *rsc, RsAdapter2D va, RsDimension dim, uint32_t value) {
204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter2D * a = static_cast<Adapter2D *>(va);
205afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (dim) {
206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_X:
207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Cannot contrain X in an 2D adapter");
208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        return;
209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_Y:
210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Cannot contrain Y in an 2D adapter");
211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_Z:
213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setZ(value);
214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_LOD:
216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setLOD(value);
217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_FACE:
219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setFace(value);
220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    default:
222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Unimplemented constraint");
223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        return;
224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
227afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter2DData(Context *rsc, RsAdapter2D va, const void *data) {
228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter2D * a = static_cast<Adapter2D *>(va);
229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->data(data);
230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
232afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter2DSubData(Context *rsc, RsAdapter2D va, uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void *data) {
233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter2D * a = static_cast<Adapter2D *>(va);
234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->subData(xoff, yoff, w, h, data);
235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
239