blob: ef69b750a3de6b1a340dc202f2d21ee0f6656f60 [file] [log] [blame]
Jason Sams326e0dd2009-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 Sakhartchoukfb6b6142010-05-21 12:53:13 -070018#ifndef ANDROID_RS_BUILD_FOR_HOST
Jason Sams326e0dd2009-05-22 14:03:28 -070019#include "rsContext.h"
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070020#else
21#include "rsContextHostStub.h"
22#endif
Jason Sams326e0dd2009-05-22 14:03:28 -070023
24using namespace android;
25using namespace android::renderscript;
26
27
Jason Samse514b452009-09-25 14:51:22 -070028Adapter1D::Adapter1D(Context *rsc) : ObjectBase(rsc)
Jason Sams326e0dd2009-05-22 14:03:28 -070029{
Jason Samsf2649a92009-09-25 16:37:33 -070030 mAllocFile = __FILE__;
31 mAllocLine = __LINE__;
Jason Sams326e0dd2009-05-22 14:03:28 -070032 reset();
33}
34
Jason Samse514b452009-09-25 14:51:22 -070035Adapter1D::Adapter1D(Context *rsc, Allocation *a) : ObjectBase(rsc)
Jason Sams326e0dd2009-05-22 14:03:28 -070036{
Jason Samsf2649a92009-09-25 16:37:33 -070037 mAllocFile = __FILE__;
38 mAllocLine = __LINE__;
Jason Sams326e0dd2009-05-22 14:03:28 -070039 reset();
40 setAllocation(a);
41}
42
43void Adapter1D::reset()
44{
45 mY = 0;
46 mZ = 0;
47 mLOD = 0;
48 mFace = 0;
49}
50
51void * Adapter1D::getElement(uint32_t x)
52{
53 rsAssert(mAllocation.get());
54 rsAssert(mAllocation->getPtr());
55 rsAssert(mAllocation->getType());
56 uint8_t * ptr = static_cast<uint8_t *>(mAllocation->getPtr());
57 ptr += mAllocation->getType()->getLODOffset(mLOD, x, mY);
58 return ptr;
59}
60
61void Adapter1D::subData(uint32_t xoff, uint32_t count, const void *data)
62{
63 if (mAllocation.get() && mAllocation.get()->getType()) {
64 void *ptr = getElement(xoff);
65 count *= mAllocation.get()->getType()->getElementSizeBytes();
66 memcpy(ptr, data, count);
67 }
68}
69
70void Adapter1D::data(const void *data)
71{
Jason Samsd3c8de22009-08-03 16:03:08 -070072 memcpy(getElement(0),
73 data,
Jason Sams326e0dd2009-05-22 14:03:28 -070074 mAllocation.get()->getType()->getSizeBytes());
75}
76
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -070077void Adapter1D::serialize(OStream *stream) const
78{
79
80}
81
82Adapter1D *Adapter1D::createFromStream(Context *rsc, IStream *stream)
83{
84 return NULL;
85}
86
Jason Sams326e0dd2009-05-22 14:03:28 -070087namespace android {
88namespace renderscript {
89
90RsAdapter1D rsi_Adapter1DCreate(Context *rsc)
91{
Jason Samse514b452009-09-25 14:51:22 -070092 Adapter1D *a = new Adapter1D(rsc);
Jason Sams9397e302009-08-27 20:23:34 -070093 a->incUserRef();
Jason Samsd3c8de22009-08-03 16:03:08 -070094 return a;
Jason Sams326e0dd2009-05-22 14:03:28 -070095}
96
Jason Sams326e0dd2009-05-22 14:03:28 -070097void rsi_Adapter1DBindAllocation(Context *rsc, RsAdapter1D va, RsAllocation valloc)
98{
99 Adapter1D * a = static_cast<Adapter1D *>(va);
100 Allocation * alloc = static_cast<Allocation *>(valloc);
101 a->setAllocation(alloc);
102}
103
104void rsi_Adapter1DSetConstraint(Context *rsc, RsAdapter1D va, RsDimension dim, uint32_t value)
105{
106 Adapter1D * a = static_cast<Adapter1D *>(va);
107 switch(dim) {
108 case RS_DIMENSION_X:
109 rsAssert(!"Cannot contrain X in an 1D adapter");
110 return;
111 case RS_DIMENSION_Y:
112 a->setY(value);
113 break;
114 case RS_DIMENSION_Z:
115 a->setZ(value);
116 break;
117 case RS_DIMENSION_LOD:
118 a->setLOD(value);
119 break;
120 case RS_DIMENSION_FACE:
121 a->setFace(value);
122 break;
123 default:
124 rsAssert(!"Unimplemented constraint");
125 return;
126 }
127}
128
129void rsi_Adapter1DSubData(Context *rsc, RsAdapter1D va, uint32_t xoff, uint32_t count, const void *data)
130{
131 Adapter1D * a = static_cast<Adapter1D *>(va);
132 a->subData(xoff, count, data);
133}
134
135void rsi_Adapter1DData(Context *rsc, RsAdapter1D va, const void *data)
136{
137 Adapter1D * a = static_cast<Adapter1D *>(va);
138 a->data(data);
139}
140
141}
142}
143
144//////////////////////////
145
Jason Samse514b452009-09-25 14:51:22 -0700146Adapter2D::Adapter2D(Context *rsc) : ObjectBase(rsc)
Jason Sams326e0dd2009-05-22 14:03:28 -0700147{
Jason Samsf2649a92009-09-25 16:37:33 -0700148 mAllocFile = __FILE__;
149 mAllocLine = __LINE__;
Jason Sams326e0dd2009-05-22 14:03:28 -0700150 reset();
151}
152
Jason Samse514b452009-09-25 14:51:22 -0700153Adapter2D::Adapter2D(Context *rsc, Allocation *a) : ObjectBase(rsc)
Jason Sams326e0dd2009-05-22 14:03:28 -0700154{
Jason Samsf2649a92009-09-25 16:37:33 -0700155 mAllocFile = __FILE__;
156 mAllocLine = __LINE__;
Jason Sams326e0dd2009-05-22 14:03:28 -0700157 reset();
158 setAllocation(a);
159}
160
161void Adapter2D::reset()
162{
163 mZ = 0;
164 mLOD = 0;
165 mFace = 0;
166}
167
168void * Adapter2D::getElement(uint32_t x, uint32_t y) const
169{
170 rsAssert(mAllocation.get());
171 rsAssert(mAllocation->getPtr());
172 rsAssert(mAllocation->getType());
173 uint8_t * ptr = static_cast<uint8_t *>(mAllocation->getPtr());
174 ptr += mAllocation->getType()->getLODOffset(mLOD, x, y);
175 return ptr;
176}
177
178void Adapter2D::subData(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void *data)
179{
180 rsAssert(mAllocation.get());
181 rsAssert(mAllocation->getPtr());
182 rsAssert(mAllocation->getType());
183
184 uint32_t eSize = mAllocation.get()->getType()->getElementSizeBytes();
185 uint32_t lineSize = eSize * w;
Jason Sams326e0dd2009-05-22 14:03:28 -0700186
187 const uint8_t *src = static_cast<const uint8_t *>(data);
188 for (uint32_t line=yoff; line < (yoff+h); line++) {
189 memcpy(getElement(xoff, line), src, lineSize);
190 src += lineSize;
191 }
192}
193
194void Adapter2D::data(const void *data)
195{
Jason Samsd3c8de22009-08-03 16:03:08 -0700196 memcpy(getElement(0,0),
197 data,
Jason Sams326e0dd2009-05-22 14:03:28 -0700198 mAllocation.get()->getType()->getSizeBytes());
199}
200
Alex Sakhartchoukfb6b6142010-05-21 12:53:13 -0700201void Adapter2D::serialize(OStream *stream) const
202{
203
204}
205
206Adapter2D *Adapter2D::createFromStream(Context *rsc, IStream *stream)
207{
208 return NULL;
209}
Jason Sams326e0dd2009-05-22 14:03:28 -0700210
211
212namespace android {
213namespace renderscript {
214
215RsAdapter2D rsi_Adapter2DCreate(Context *rsc)
216{
Jason Samse514b452009-09-25 14:51:22 -0700217 Adapter2D *a = new Adapter2D(rsc);
Jason Sams9397e302009-08-27 20:23:34 -0700218 a->incUserRef();
Jason Samsd3c8de22009-08-03 16:03:08 -0700219 return a;
Jason Sams326e0dd2009-05-22 14:03:28 -0700220}
221
Jason Sams326e0dd2009-05-22 14:03:28 -0700222void rsi_Adapter2DBindAllocation(Context *rsc, RsAdapter2D va, RsAllocation valloc)
223{
224 Adapter2D * a = static_cast<Adapter2D *>(va);
225 Allocation * alloc = static_cast<Allocation *>(valloc);
226 a->setAllocation(alloc);
227}
228
229void rsi_Adapter2DSetConstraint(Context *rsc, RsAdapter2D va, RsDimension dim, uint32_t value)
230{
231 Adapter2D * a = static_cast<Adapter2D *>(va);
232 switch(dim) {
233 case RS_DIMENSION_X:
234 rsAssert(!"Cannot contrain X in an 2D adapter");
235 return;
236 case RS_DIMENSION_Y:
237 rsAssert(!"Cannot contrain Y in an 2D adapter");
238 break;
239 case RS_DIMENSION_Z:
240 a->setZ(value);
241 break;
242 case RS_DIMENSION_LOD:
243 a->setLOD(value);
244 break;
245 case RS_DIMENSION_FACE:
246 a->setFace(value);
247 break;
248 default:
249 rsAssert(!"Unimplemented constraint");
250 return;
251 }
252}
253
254void rsi_Adapter2DData(Context *rsc, RsAdapter2D va, const void *data)
255{
256 Adapter2D * a = static_cast<Adapter2D *>(va);
257 a->data(data);
258}
259
260void rsi_Adapter2DSubData(Context *rsc, RsAdapter2D va, uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void *data)
261{
262 Adapter2D * a = static_cast<Adapter2D *>(va);
263 a->subData(xoff, yoff, w, h, data);
264}
265
266}
267}