blob: 1d1425c276cb20bfbc6a04155feee01a8e7ef05a [file] [log] [blame]
Jason Samsd19f10d2009-05-22 14:03:28 -07001
2/*
3 * Copyright (C) 2009 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
Alex Sakhartchoukaa7d2882010-05-21 12:53:13 -070018#ifndef ANDROID_RS_BUILD_FOR_HOST
Jason Samsd19f10d2009-05-22 14:03:28 -070019#include "rsContext.h"
Alex Sakhartchoukaa7d2882010-05-21 12:53:13 -070020#else
21#include "rsContextHostStub.h"
22#endif
Jason Samsd19f10d2009-05-22 14:03:28 -070023
24using namespace android;
25using namespace android::renderscript;
26
27
Jason Samsa9e7a052009-09-25 14:51:22 -070028Adapter1D::Adapter1D(Context *rsc) : ObjectBase(rsc)
Jason Samsd19f10d2009-05-22 14:03:28 -070029{
30 reset();
31}
32
Jason Samsa9e7a052009-09-25 14:51:22 -070033Adapter1D::Adapter1D(Context *rsc, Allocation *a) : ObjectBase(rsc)
Jason Samsd19f10d2009-05-22 14:03:28 -070034{
35 reset();
36 setAllocation(a);
37}
38
39void Adapter1D::reset()
40{
41 mY = 0;
42 mZ = 0;
43 mLOD = 0;
44 mFace = 0;
45}
46
47void * Adapter1D::getElement(uint32_t x)
48{
49 rsAssert(mAllocation.get());
50 rsAssert(mAllocation->getPtr());
51 rsAssert(mAllocation->getType());
52 uint8_t * ptr = static_cast<uint8_t *>(mAllocation->getPtr());
53 ptr += mAllocation->getType()->getLODOffset(mLOD, x, mY);
54 return ptr;
55}
56
57void Adapter1D::subData(uint32_t xoff, uint32_t count, const void *data)
58{
59 if (mAllocation.get() && mAllocation.get()->getType()) {
60 void *ptr = getElement(xoff);
61 count *= mAllocation.get()->getType()->getElementSizeBytes();
62 memcpy(ptr, data, count);
63 }
64}
65
66void Adapter1D::data(const void *data)
67{
Jason Samsbd1c3ad2009-08-03 16:03:08 -070068 memcpy(getElement(0),
69 data,
Jason Samsd19f10d2009-05-22 14:03:28 -070070 mAllocation.get()->getType()->getSizeBytes());
71}
72
Alex Sakhartchoukaa7d2882010-05-21 12:53:13 -070073void Adapter1D::serialize(OStream *stream) const
74{
Jason Samsb38d5342010-10-21 14:06:55 -070075
Alex Sakhartchoukaa7d2882010-05-21 12:53:13 -070076}
77
78Adapter1D *Adapter1D::createFromStream(Context *rsc, IStream *stream)
79{
80 return NULL;
81}
82
Jason Samsd19f10d2009-05-22 14:03:28 -070083namespace android {
84namespace renderscript {
85
86RsAdapter1D rsi_Adapter1DCreate(Context *rsc)
87{
Jason Samsa9e7a052009-09-25 14:51:22 -070088 Adapter1D *a = new Adapter1D(rsc);
Jason Sams07ae4062009-08-27 20:23:34 -070089 a->incUserRef();
Jason Samsbd1c3ad2009-08-03 16:03:08 -070090 return a;
Jason Samsd19f10d2009-05-22 14:03:28 -070091}
92
Jason Samsd19f10d2009-05-22 14:03:28 -070093void rsi_Adapter1DBindAllocation(Context *rsc, RsAdapter1D va, RsAllocation valloc)
94{
95 Adapter1D * a = static_cast<Adapter1D *>(va);
96 Allocation * alloc = static_cast<Allocation *>(valloc);
97 a->setAllocation(alloc);
98}
99
100void rsi_Adapter1DSetConstraint(Context *rsc, RsAdapter1D va, RsDimension dim, uint32_t value)
101{
102 Adapter1D * a = static_cast<Adapter1D *>(va);
103 switch(dim) {
104 case RS_DIMENSION_X:
105 rsAssert(!"Cannot contrain X in an 1D adapter");
106 return;
107 case RS_DIMENSION_Y:
108 a->setY(value);
109 break;
110 case RS_DIMENSION_Z:
111 a->setZ(value);
112 break;
113 case RS_DIMENSION_LOD:
114 a->setLOD(value);
115 break;
116 case RS_DIMENSION_FACE:
117 a->setFace(value);
118 break;
119 default:
120 rsAssert(!"Unimplemented constraint");
121 return;
122 }
123}
124
125void rsi_Adapter1DSubData(Context *rsc, RsAdapter1D va, uint32_t xoff, uint32_t count, const void *data)
126{
127 Adapter1D * a = static_cast<Adapter1D *>(va);
128 a->subData(xoff, count, data);
129}
130
131void rsi_Adapter1DData(Context *rsc, RsAdapter1D va, const void *data)
132{
133 Adapter1D * a = static_cast<Adapter1D *>(va);
134 a->data(data);
135}
136
137}
138}
139
140//////////////////////////
141
Jason Samsa9e7a052009-09-25 14:51:22 -0700142Adapter2D::Adapter2D(Context *rsc) : ObjectBase(rsc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700143{
144 reset();
145}
146
Jason Samsa9e7a052009-09-25 14:51:22 -0700147Adapter2D::Adapter2D(Context *rsc, Allocation *a) : ObjectBase(rsc)
Jason Samsd19f10d2009-05-22 14:03:28 -0700148{
149 reset();
150 setAllocation(a);
151}
152
153void Adapter2D::reset()
154{
155 mZ = 0;
156 mLOD = 0;
157 mFace = 0;
158}
159
160void * Adapter2D::getElement(uint32_t x, uint32_t y) const
161{
162 rsAssert(mAllocation.get());
163 rsAssert(mAllocation->getPtr());
164 rsAssert(mAllocation->getType());
165 uint8_t * ptr = static_cast<uint8_t *>(mAllocation->getPtr());
166 ptr += mAllocation->getType()->getLODOffset(mLOD, x, y);
167 return ptr;
168}
169
170void Adapter2D::subData(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void *data)
171{
172 rsAssert(mAllocation.get());
173 rsAssert(mAllocation->getPtr());
174 rsAssert(mAllocation->getType());
175
176 uint32_t eSize = mAllocation.get()->getType()->getElementSizeBytes();
177 uint32_t lineSize = eSize * w;
Jason Samsd19f10d2009-05-22 14:03:28 -0700178
179 const uint8_t *src = static_cast<const uint8_t *>(data);
180 for (uint32_t line=yoff; line < (yoff+h); line++) {
181 memcpy(getElement(xoff, line), src, lineSize);
182 src += lineSize;
183 }
184}
185
186void Adapter2D::data(const void *data)
187{
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700188 memcpy(getElement(0,0),
189 data,
Jason Samsd19f10d2009-05-22 14:03:28 -0700190 mAllocation.get()->getType()->getSizeBytes());
191}
192
Alex Sakhartchoukaa7d2882010-05-21 12:53:13 -0700193void Adapter2D::serialize(OStream *stream) const
194{
Jason Samsb38d5342010-10-21 14:06:55 -0700195
Alex Sakhartchoukaa7d2882010-05-21 12:53:13 -0700196}
197
198Adapter2D *Adapter2D::createFromStream(Context *rsc, IStream *stream)
199{
200 return NULL;
201}
Jason Samsd19f10d2009-05-22 14:03:28 -0700202
203
204namespace android {
205namespace renderscript {
206
207RsAdapter2D rsi_Adapter2DCreate(Context *rsc)
208{
Jason Samsa9e7a052009-09-25 14:51:22 -0700209 Adapter2D *a = new Adapter2D(rsc);
Jason Sams07ae4062009-08-27 20:23:34 -0700210 a->incUserRef();
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700211 return a;
Jason Samsd19f10d2009-05-22 14:03:28 -0700212}
213
Jason Samsd19f10d2009-05-22 14:03:28 -0700214void rsi_Adapter2DBindAllocation(Context *rsc, RsAdapter2D va, RsAllocation valloc)
215{
216 Adapter2D * a = static_cast<Adapter2D *>(va);
217 Allocation * alloc = static_cast<Allocation *>(valloc);
218 a->setAllocation(alloc);
219}
220
221void rsi_Adapter2DSetConstraint(Context *rsc, RsAdapter2D va, RsDimension dim, uint32_t value)
222{
223 Adapter2D * a = static_cast<Adapter2D *>(va);
224 switch(dim) {
225 case RS_DIMENSION_X:
226 rsAssert(!"Cannot contrain X in an 2D adapter");
227 return;
228 case RS_DIMENSION_Y:
229 rsAssert(!"Cannot contrain Y in an 2D adapter");
230 break;
231 case RS_DIMENSION_Z:
232 a->setZ(value);
233 break;
234 case RS_DIMENSION_LOD:
235 a->setLOD(value);
236 break;
237 case RS_DIMENSION_FACE:
238 a->setFace(value);
239 break;
240 default:
241 rsAssert(!"Unimplemented constraint");
242 return;
243 }
244}
245
246void rsi_Adapter2DData(Context *rsc, RsAdapter2D va, const void *data)
247{
248 Adapter2D * a = static_cast<Adapter2D *>(va);
249 a->data(data);
250}
251
252void rsi_Adapter2DSubData(Context *rsc, RsAdapter2D va, uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void *data)
253{
254 Adapter2D * a = static_cast<Adapter2D *>(va);
255 a->subData(xoff, yoff, w, h, data);
256}
257
258}
259}