rsComponent.cpp revision 2d1220c27ae91f0b307f283fe66cb767b63dfe38
1d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams/*
2d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams * Copyright (C) 2009 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:
65d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
66d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
67d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
68afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (mType) {
69d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_NONE:
70d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
71d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_6_5:
72d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 3;
73d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
74d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
75d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGB);
76d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
77d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_5_5_1:
78d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 4;
79d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
80d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
81d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGBA);
82d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
83d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_4_4_4_4:
84d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 4;
85d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
86d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
87d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGBA);
88d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
8939cd317d983410055d780d00666f724c5faeaba9Jason Sams
9039cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_4X4:
9139cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 16 * 32;
9239cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
9339cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
9439cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
9539cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
9639cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_3X3:
9739cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 9 * 32;
9839cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
9939cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
10039cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
10139cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
10239cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_2X2:
10339cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 4 * 32;
10439cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
10539cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
10639cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
10739cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
10839cd317d983410055d780d00666f724c5faeaba9Jason Sams
109d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_ELEMENT:
110d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_TYPE:
111d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_ALLOCATION:
112d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SAMPLER:
113d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SCRIPT:
114d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_MESH:
115d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_FRAGMENT:
116d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_VERTEX:
117d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_RASTER:
118d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_STORE:
119d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 1);
120d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == false);
121d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_USER);
122d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 32;
123d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
124d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
125d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
126d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_16:
127d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
128d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
129d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
130d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_32:
131d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
132d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
133d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
134d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_64:
135d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
136d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
137d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
138d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_8:
139d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
140d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
141d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
142d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_16:
143d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
144d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
145d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
146d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_32:
147d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
148d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
149d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
150d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_64:
151d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
152d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
153d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
154d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_8:
155d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
156d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
157d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_16:
158d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
159d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
160d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_32:
161d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
162d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
163d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_64:
164d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
165d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
1665e9811f075f5a96925785a95afeda22592a840acJason Sams
1675e9811f075f5a96925785a95afeda22592a840acJason Sams    case RS_TYPE_BOOLEAN:
1685e9811f075f5a96925785a95afeda22592a840acJason Sams        mTypeBits = 8;
1695e9811f075f5a96925785a95afeda22592a840acJason Sams        break;
170d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
171d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
1722d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    mBitsUnpadded = mTypeBits * mVectorSize;
1732d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    mBits = mTypeBits * rsHigherPow2(mVectorSize);
174d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
175d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
176afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukbool Component::isReference() const {
177e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams    return (mType >= RS_TYPE_ELEMENT);
178e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams}
179d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
18039cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeBasicStrings[] = {
181d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NONE",
182d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F16",
183d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F32",
184d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F64",
185d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S8",
186d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S16",
187d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S32",
188d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S64",
189d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U8",
190d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U16",
191d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U32",
192d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U64",
1935e9811f075f5a96925785a95afeda22592a840acJason Sams    "BOOLEAN",
194d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_565",
195d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_5551",
196d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_4444",
19739cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_4X4",
19839cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_3X3",
19939cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_2X2",
20039cd317d983410055d780d00666f724c5faeaba9Jason Sams};
20139cd317d983410055d780d00666f724c5faeaba9Jason Sams
20239cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeObjStrings[] = {
203d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ELEMENT",
204d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TYPE",
205d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ALLOCATION",
206d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SAMPLER",
207d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SCRIPT",
208d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "MESH",
209d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_FRAGMENT",
210d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_VERTEX",
211d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_RASTER",
212d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_STORE",
213d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
214d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
215d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsstatic const char * gKindStrings[] = {
216d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "USER",
217d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "COLOR",
218d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POSITION",
219d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TEXTURE",
220d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NORMAL",
221d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "INDEX",
222d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POINT_SIZE",
223d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_L",
224d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_A",
225d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_LA",
226d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGB",
227d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGBA",
228d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
229d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
230afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::dumpLOGV(const char *prefix) const {
23139cd317d983410055d780d00666f724c5faeaba9Jason Sams    if (mType >= RS_TYPE_ELEMENT) {
2326598201f1c4f409defac9a5af789fb53a7cc00f8Steve Block        ALOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
23339cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeObjStrings[mType - RS_TYPE_ELEMENT], gKindStrings[mKind], mVectorSize, mBits);
23439cd317d983410055d780d00666f724c5faeaba9Jason Sams    } else {
2356598201f1c4f409defac9a5af789fb53a7cc00f8Steve Block        ALOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
23639cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeBasicStrings[mType], gKindStrings[mKind], mVectorSize, mBits);
23739cd317d983410055d780d00666f724c5faeaba9Jason Sams    }
238d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
239d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
240afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::serialize(OStream *stream) const {
241fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mType);
242fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mKind);
243fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)(mNormalized ? 1 : 0));
244fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU32(mVectorSize);
245fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
246fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
247afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::loadFromStream(IStream *stream) {
248fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mType = (RsDataType)stream->loadU8();
249fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mKind = (RsDataKind)stream->loadU8();
250fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    uint8_t temp = stream->loadU8();
251fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mNormalized = temp != 0;
252fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mVectorSize = stream->loadU32();
253fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
254fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    set(mType, mKind, mNormalized, mVectorSize);
255fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
256fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
257fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
258fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
259d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
260