rsAdapter.cpp revision afb743aca56c18beb7ab924e75cb6e070ef3e55a
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
18fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#ifndef ANDROID_RS_BUILD_FOR_HOST
19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h"
20fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#else
21fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include "rsContextHostStub.h"
22fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#endif
23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
25326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
27afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter1D::Adapter1D(Context *rsc) : ObjectBase(rsc) {
28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    reset();
29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
31afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter1D::Adapter1D(Context *rsc, Allocation *a) : ObjectBase(rsc) {
32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    reset();
33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    setAllocation(a);
34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
36afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter1D::reset() {
37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mY = 0;
38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mZ = 0;
39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mLOD = 0;
40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mFace = 0;
41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
43afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid * Adapter1D::getElement(uint32_t x) {
44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation.get());
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getPtr());
46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getType());
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uint8_t * ptr = static_cast<uint8_t *>(mAllocation->getPtr());
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ptr += mAllocation->getType()->getLODOffset(mLOD, x, mY);
49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return ptr;
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
52afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter1D::subData(uint32_t xoff, uint32_t count, const void *data) {
53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    if (mAllocation.get() && mAllocation.get()->getType()) {
54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        void *ptr = getElement(xoff);
55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        count *= mAllocation.get()->getType()->getElementSizeBytes();
56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        memcpy(ptr, data, count);
57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
60afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter1D::data(const void *data) {
61d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams    memcpy(getElement(0),
62d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams           data,
63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams           mAllocation.get()->getType()->getSizeBytes());
64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
66afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter1D::serialize(OStream *stream) const {
67fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
68fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
69afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter1D *Adapter1D::createFromStream(Context *rsc, IStream *stream) {
70fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    return NULL;
71fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
72fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
73326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
74326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
76afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukRsAdapter1D rsi_Adapter1DCreate(Context *rsc) {
77e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams    Adapter1D *a = new Adapter1D(rsc);
789397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams    a->incUserRef();
79d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams    return a;
80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
82afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter1DBindAllocation(Context *rsc, RsAdapter1D va, RsAllocation valloc) {
83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter1D * a = static_cast<Adapter1D *>(va);
84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Allocation * alloc = static_cast<Allocation *>(valloc);
85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->setAllocation(alloc);
86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
88afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter1DSetConstraint(Context *rsc, RsAdapter1D va, RsDimension dim, uint32_t value) {
89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter1D * a = static_cast<Adapter1D *>(va);
90afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (dim) {
91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_X:
92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Cannot contrain X in an 1D adapter");
93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        return;
94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_Y:
95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setY(value);
96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_Z:
98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setZ(value);
99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_LOD:
101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setLOD(value);
102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_FACE:
104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setFace(value);
105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    default:
107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Unimplemented constraint");
108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        return;
109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
112afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter1DSubData(Context *rsc, RsAdapter1D va, uint32_t xoff, uint32_t count, const void *data) {
113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter1D * a = static_cast<Adapter1D *>(va);
114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->subData(xoff, count, data);
115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
117afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter1DData(Context *rsc, RsAdapter1D va, const void *data) {
118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter1D * a = static_cast<Adapter1D *>(va);
119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->data(data);
120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams//////////////////////////
126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
127afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter2D::Adapter2D(Context *rsc) : ObjectBase(rsc) {
128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    reset();
129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
131afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter2D::Adapter2D(Context *rsc, Allocation *a) : ObjectBase(rsc) {
132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    reset();
133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    setAllocation(a);
134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
136afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter2D::reset() {
137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mZ = 0;
138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mLOD = 0;
139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mFace = 0;
140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
142afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid * Adapter2D::getElement(uint32_t x, uint32_t y) const {
143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation.get());
144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getPtr());
145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getType());
146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uint8_t * ptr = static_cast<uint8_t *>(mAllocation->getPtr());
147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ptr += mAllocation->getType()->getLODOffset(mLOD, x, y);
148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return ptr;
149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
151afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter2D::subData(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void *data) {
152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation.get());
153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getPtr());
154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsAssert(mAllocation->getType());
155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uint32_t eSize = mAllocation.get()->getType()->getElementSizeBytes();
157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uint32_t lineSize = eSize * w;
158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    const uint8_t *src = static_cast<const uint8_t *>(data);
160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    for (uint32_t line=yoff; line < (yoff+h); line++) {
161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        memcpy(getElement(xoff, line), src, lineSize);
162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        src += lineSize;
163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
166afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter2D::data(const void *data) {
167d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams    memcpy(getElement(0,0),
168d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams           data,
169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams           mAllocation.get()->getType()->getSizeBytes());
170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
172afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Adapter2D::serialize(OStream *stream) const {
173fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
174fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
175afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukAdapter2D *Adapter2D::createFromStream(Context *rsc, IStream *stream) {
176fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    return NULL;
177fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
180326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
181326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
183afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukRsAdapter2D rsi_Adapter2DCreate(Context *rsc) {
184e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams    Adapter2D *a = new Adapter2D(rsc);
1859397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams    a->incUserRef();
186d3c8de2efc8f4f9287e0a8dfdeefb03ba6aaec98Jason Sams    return a;
187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
189afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter2DBindAllocation(Context *rsc, RsAdapter2D va, RsAllocation valloc) {
190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter2D * a = static_cast<Adapter2D *>(va);
191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Allocation * alloc = static_cast<Allocation *>(valloc);
192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->setAllocation(alloc);
193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
195afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter2DSetConstraint(Context *rsc, RsAdapter2D va, RsDimension dim, uint32_t value) {
196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter2D * a = static_cast<Adapter2D *>(va);
197afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (dim) {
198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_X:
199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Cannot contrain X in an 2D adapter");
200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        return;
201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_Y:
202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Cannot contrain Y in an 2D adapter");
203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_Z:
205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setZ(value);
206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_LOD:
208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setLOD(value);
209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    case RS_DIMENSION_FACE:
211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        a->setFace(value);
212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        break;
213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    default:
214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        rsAssert(!"Unimplemented constraint");
215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams        return;
216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    }
217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
219afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter2DData(Context *rsc, RsAdapter2D va, const void *data) {
220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter2D * a = static_cast<Adapter2D *>(va);
221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->data(data);
222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
224afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid rsi_Adapter2DSubData(Context *rsc, RsAdapter2D va, uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void *data) {
225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Adapter2D * a = static_cast<Adapter2D *>(va);
226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    a->subData(xoff, yoff, w, h, data);
227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
231