1d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams/*
2ae8b795a673b75bf0aec72620f4530db1415f907Stephen Hines * Copyright (C) 2009-2012 The Android Open Source Project
3d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams *
4d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams * you may not use this file except in compliance with the License.
6d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams * You may obtain a copy of the License at
7d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams *
8d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams *
10d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams * Unless required by applicable law or agreed to in writing, software
11d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams * See the License for the specific language governing permissions and
14d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams * limitations under the License.
15d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams */
16d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
17d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams#include "rsComponent.h"
18d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
19d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsusing namespace android;
20d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsusing namespace android::renderscript;
21d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
22afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukComponent::Component() {
23d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    set(RS_TYPE_NONE, RS_KIND_USER, false, 1);
24d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
25d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
26afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex SakhartchoukComponent::~Component() {
27d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
28d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
29afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::set(RsDataType dt, RsDataKind dk, bool norm, uint32_t vecSize) {
30d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mType = dt;
31d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mKind = dk;
32d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mNormalized = norm;
33d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mVectorSize = vecSize;
34d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    rsAssert(vecSize <= 4);
35d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
36d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mBits = 0;
37d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mTypeBits = 0;
38d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mIsFloat = false;
39d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mIsSigned = false;
40d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mIsPixel = false;
41d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
42afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (mKind) {
43d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_L:
44d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_A:
45d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsPixel = true;
46d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 1);
47d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == true);
48d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
49d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_LA:
50d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsPixel = true;
51d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 2);
52d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == true);
53d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
54d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_RGB:
55d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsPixel = true;
56d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 3);
57d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == true);
58d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
59d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_RGBA:
60d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsPixel = true;
61d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 4);
62d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == true);
63d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
64d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    default:
6525a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk        rsAssert(mKind != RS_KIND_INVALID);
66d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
67d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
68d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
69afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (mType) {
70d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_NONE:
71d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
72d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_6_5:
73d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 3;
74d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
75d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
76d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGB);
77d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
78d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_5_5_1:
79d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 4;
80d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
81d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
82d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGBA);
83d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
84d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_4_4_4_4:
85d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 4;
86d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
87d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
88d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGBA);
89d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
9039cd317d983410055d780d00666f724c5faeaba9Jason Sams
9139cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_4X4:
9239cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 16 * 32;
9339cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
9439cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
9539cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
9639cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
9739cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_3X3:
9839cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 9 * 32;
9939cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
10039cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
10139cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
10239cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
10339cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_2X2:
10439cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 4 * 32;
10539cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
10639cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
10739cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
10839cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
10939cd317d983410055d780d00666f724c5faeaba9Jason Sams
110d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_ELEMENT:
111d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_TYPE:
112d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_ALLOCATION:
113d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SAMPLER:
114d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SCRIPT:
115d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_MESH:
116d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_FRAGMENT:
117d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_VERTEX:
118d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_RASTER:
119d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_STORE:
120ae8b795a673b75bf0aec72620f4530db1415f907Stephen Hines    case RS_TYPE_FONT:
121d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 1);
122d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == false);
123d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_USER);
124d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 32;
125d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
126d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
127d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
128d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_16:
129d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
130d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
131d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
132d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_32:
133d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
134d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
135d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
136d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_64:
137d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
138d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
139d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
140d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_8:
141d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
142d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
143d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
144d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_16:
145d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
146d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
147d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
148d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_32:
149d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
150d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
151d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
152d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_64:
153d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
154d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
155d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
156d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_8:
157d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
158d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
159d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_16:
160d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
161d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
162d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_32:
163d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
164d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
165d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_64:
166d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
167d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
1685e9811f075f5a96925785a95afeda22592a840acJason Sams
1695e9811f075f5a96925785a95afeda22592a840acJason Sams    case RS_TYPE_BOOLEAN:
1705e9811f075f5a96925785a95afeda22592a840acJason Sams        mTypeBits = 8;
1715e9811f075f5a96925785a95afeda22592a840acJason Sams        break;
17225a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk    default:
17325a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk        rsAssert(mType != RS_TYPE_INVALID);
174ae8b795a673b75bf0aec72620f4530db1415f907Stephen Hines        rsAssert(0);
17525a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk        break;
176d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
177d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
1782d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    mBitsUnpadded = mTypeBits * mVectorSize;
1792d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    mBits = mTypeBits * rsHigherPow2(mVectorSize);
180d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
181d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
182afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukbool Component::isReference() const {
183e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams    return (mType >= RS_TYPE_ELEMENT);
184e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams}
185d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
18639cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeBasicStrings[] = {
187d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NONE",
188d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F16",
189d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F32",
190d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F64",
191d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S8",
192d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S16",
193d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S32",
194d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S64",
195d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U8",
196d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U16",
197d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U32",
198d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U64",
1995e9811f075f5a96925785a95afeda22592a840acJason Sams    "BOOLEAN",
200d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_565",
201d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_5551",
202d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_4444",
20339cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_4X4",
20439cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_3X3",
20539cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_2X2",
20639cd317d983410055d780d00666f724c5faeaba9Jason Sams};
20739cd317d983410055d780d00666f724c5faeaba9Jason Sams
20839cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeObjStrings[] = {
209d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ELEMENT",
210d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TYPE",
211d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ALLOCATION",
212d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SAMPLER",
213d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SCRIPT",
214d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "MESH",
215d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_FRAGMENT",
216d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_VERTEX",
217d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_RASTER",
218d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_STORE",
219d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
220d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
221d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsstatic const char * gKindStrings[] = {
222d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "USER",
223d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "COLOR",
224d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POSITION",
225d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TEXTURE",
226d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NORMAL",
227d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "INDEX",
228d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POINT_SIZE",
229d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_L",
230d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_A",
231d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_LA",
232d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGB",
233d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGBA",
234d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
235d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
236afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::dumpLOGV(const char *prefix) const {
23739cd317d983410055d780d00666f724c5faeaba9Jason Sams    if (mType >= RS_TYPE_ELEMENT) {
2386598201f1c4f409defac9a5af789fb53a7cc00f8Steve Block        ALOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
23939cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeObjStrings[mType - RS_TYPE_ELEMENT], gKindStrings[mKind], mVectorSize, mBits);
24039cd317d983410055d780d00666f724c5faeaba9Jason Sams    } else {
2416598201f1c4f409defac9a5af789fb53a7cc00f8Steve Block        ALOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
24239cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeBasicStrings[mType], gKindStrings[mKind], mVectorSize, mBits);
24339cd317d983410055d780d00666f724c5faeaba9Jason Sams    }
244d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
245d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
246afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::serialize(OStream *stream) const {
247fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mType);
248fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mKind);
249fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)(mNormalized ? 1 : 0));
250fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU32(mVectorSize);
251fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
252fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
253afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::loadFromStream(IStream *stream) {
254fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mType = (RsDataType)stream->loadU8();
255fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mKind = (RsDataKind)stream->loadU8();
256fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    uint8_t temp = stream->loadU8();
257fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mNormalized = temp != 0;
258fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mVectorSize = stream->loadU32();
259fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
260fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    set(mType, mKind, mNormalized, mVectorSize);
261fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
262fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
263fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
264fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
265d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
266