1d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams/*
2bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams * Copyright (C) 2013 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;
64bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams    case RS_KIND_PIXEL_YUV:
65bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams        mIsPixel = true;
66bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams        rsAssert(mVectorSize == 1);
67bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams        rsAssert(mNormalized == true);
68bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams        break;
69bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams
70d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    default:
7125a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk        rsAssert(mKind != RS_KIND_INVALID);
72d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
73d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
74d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
75afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk    switch (mType) {
76d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_NONE:
77d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
78d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_6_5:
79d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 3;
80d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
81d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
82d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGB);
83d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
84d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_5_5_1:
85d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 4;
86d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
87d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
88d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGBA);
89d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
90d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_4_4_4_4:
91d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 4;
92d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
93d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
94d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGBA);
95d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
9639cd317d983410055d780d00666f724c5faeaba9Jason Sams
9739cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_4X4:
9839cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 16 * 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_3X3:
10439cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 9 * 32;
10539cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
10639cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
10739cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
10839cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
10939cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_2X2:
11039cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 4 * 32;
11139cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
11239cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
11339cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
11439cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
11539cd317d983410055d780d00666f724c5faeaba9Jason Sams
116d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_ELEMENT:
117d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_TYPE:
118d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_ALLOCATION:
119d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SAMPLER:
120d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SCRIPT:
121d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_MESH:
122d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_FRAGMENT:
123d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_VERTEX:
124d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_RASTER:
125d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_STORE:
126ae8b795a673b75bf0aec72620f4530db1415f907Stephen Hines    case RS_TYPE_FONT:
127d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 1);
128d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == false);
129d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_USER);
1307202c92865348d20eeb9d7816f6b8245dd97605fStephen Hines#ifdef __LP64__
1317202c92865348d20eeb9d7816f6b8245dd97605fStephen Hines        // Large object pointers on 64-bit targets.
1327202c92865348d20eeb9d7816f6b8245dd97605fStephen Hines        mBits = 256;
1337202c92865348d20eeb9d7816f6b8245dd97605fStephen Hines        mTypeBits = 256;
1347202c92865348d20eeb9d7816f6b8245dd97605fStephen Hines#else
1357202c92865348d20eeb9d7816f6b8245dd97605fStephen Hines        // Single pointer objects on 32-bit targets.
136d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 32;
137d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
1387202c92865348d20eeb9d7816f6b8245dd97605fStephen Hines#endif  // __LP64__
139d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
140d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
141d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_16:
142d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
143d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
144d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
145d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_32:
146d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
147d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
148d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
149d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_64:
150d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
151d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
152d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
153d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_8:
154d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
155d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
156d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
157d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_16:
158d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
159d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
160d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
161d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_32:
162d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
163d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
164d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
165d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_64:
166d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
167d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
168d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
169d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_8:
170d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
171d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
172d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_16:
173d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
174d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
175d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_32:
176d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
177d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
178d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_64:
179d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
180d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
1815e9811f075f5a96925785a95afeda22592a840acJason Sams
1825e9811f075f5a96925785a95afeda22592a840acJason Sams    case RS_TYPE_BOOLEAN:
1835e9811f075f5a96925785a95afeda22592a840acJason Sams        mTypeBits = 8;
1845e9811f075f5a96925785a95afeda22592a840acJason Sams        break;
18525a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk    default:
18625a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk        rsAssert(mType != RS_TYPE_INVALID);
187ae8b795a673b75bf0aec72620f4530db1415f907Stephen Hines        rsAssert(0);
18825a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk        break;
189d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
190d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
1912d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    mBitsUnpadded = mTypeBits * mVectorSize;
1922d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    mBits = mTypeBits * rsHigherPow2(mVectorSize);
193d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
194d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
195afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukbool Component::isReference() const {
196e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams    return (mType >= RS_TYPE_ELEMENT);
197e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams}
198d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
19939cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeBasicStrings[] = {
200d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NONE",
201d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F16",
202d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F32",
203d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F64",
204d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S8",
205d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S16",
206d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S32",
207d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S64",
208d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U8",
209d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U16",
210d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U32",
211d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U64",
2125e9811f075f5a96925785a95afeda22592a840acJason Sams    "BOOLEAN",
213d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_565",
214d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_5551",
215d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_4444",
21639cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_4X4",
21739cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_3X3",
21839cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_2X2",
21939cd317d983410055d780d00666f724c5faeaba9Jason Sams};
22039cd317d983410055d780d00666f724c5faeaba9Jason Sams
22139cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeObjStrings[] = {
222d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ELEMENT",
223d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TYPE",
224d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ALLOCATION",
225d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SAMPLER",
226d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SCRIPT",
227d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "MESH",
228d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_FRAGMENT",
229d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_VERTEX",
230d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_RASTER",
231d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_STORE",
232d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
233d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
234d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsstatic const char * gKindStrings[] = {
235d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "USER",
236d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "COLOR",
237d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POSITION",
238d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TEXTURE",
239d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NORMAL",
240d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "INDEX",
241d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POINT_SIZE",
242d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_L",
243d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_A",
244d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_LA",
245d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGB",
246d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGBA",
247d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
248d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
249afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::dumpLOGV(const char *prefix) const {
25039cd317d983410055d780d00666f724c5faeaba9Jason Sams    if (mType >= RS_TYPE_ELEMENT) {
2516598201f1c4f409defac9a5af789fb53a7cc00f8Steve Block        ALOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
25239cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeObjStrings[mType - RS_TYPE_ELEMENT], gKindStrings[mKind], mVectorSize, mBits);
25339cd317d983410055d780d00666f724c5faeaba9Jason Sams    } else {
2546598201f1c4f409defac9a5af789fb53a7cc00f8Steve Block        ALOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
25539cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeBasicStrings[mType], gKindStrings[mKind], mVectorSize, mBits);
25639cd317d983410055d780d00666f724c5faeaba9Jason Sams    }
257d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
258d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
259afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::serialize(OStream *stream) const {
260fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mType);
261fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mKind);
262fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)(mNormalized ? 1 : 0));
263fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU32(mVectorSize);
264fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
265fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
266afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::loadFromStream(IStream *stream) {
267fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mType = (RsDataType)stream->loadU8();
268fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mKind = (RsDataKind)stream->loadU8();
269fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    uint8_t temp = stream->loadU8();
270fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mNormalized = temp != 0;
271fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mVectorSize = stream->loadU32();
272fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
273fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    set(mType, mKind, mNormalized, mVectorSize);
274fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
275fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
276fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
277fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
278d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
279