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);
130d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 32;
131d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
132d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
133d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
134d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_16:
135d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
136d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
137d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
138d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_32:
139d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
140d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
141d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
142d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_64:
143d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
144d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
145d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
146d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_8:
147d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
148d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
149d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
150d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_16:
151d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
152d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
153d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
154d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_32:
155d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
156d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
157d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
158d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_64:
159d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
160d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
161d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
162d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_8:
163d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
164d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
165d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_16:
166d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
167d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
168d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_32:
169d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
170d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
171d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_64:
172d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
173d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
1745e9811f075f5a96925785a95afeda22592a840acJason Sams
1755e9811f075f5a96925785a95afeda22592a840acJason Sams    case RS_TYPE_BOOLEAN:
1765e9811f075f5a96925785a95afeda22592a840acJason Sams        mTypeBits = 8;
1775e9811f075f5a96925785a95afeda22592a840acJason Sams        break;
17825a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk    default:
17925a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk        rsAssert(mType != RS_TYPE_INVALID);
180ae8b795a673b75bf0aec72620f4530db1415f907Stephen Hines        rsAssert(0);
18125a59d051a218bd608b005a149509464b3e6d4f0Alex Sakhartchouk        break;
182d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
183d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
1842d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    mBitsUnpadded = mTypeBits * mVectorSize;
1852d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    mBits = mTypeBits * rsHigherPow2(mVectorSize);
186d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
187d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
188afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukbool Component::isReference() const {
189e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams    return (mType >= RS_TYPE_ELEMENT);
190e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams}
191d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
19239cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeBasicStrings[] = {
193d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NONE",
194d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F16",
195d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F32",
196d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F64",
197d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S8",
198d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S16",
199d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S32",
200d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S64",
201d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U8",
202d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U16",
203d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U32",
204d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U64",
2055e9811f075f5a96925785a95afeda22592a840acJason Sams    "BOOLEAN",
206d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_565",
207d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_5551",
208d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_4444",
20939cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_4X4",
21039cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_3X3",
21139cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_2X2",
21239cd317d983410055d780d00666f724c5faeaba9Jason Sams};
21339cd317d983410055d780d00666f724c5faeaba9Jason Sams
21439cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeObjStrings[] = {
215d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ELEMENT",
216d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TYPE",
217d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ALLOCATION",
218d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SAMPLER",
219d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SCRIPT",
220d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "MESH",
221d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_FRAGMENT",
222d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_VERTEX",
223d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_RASTER",
224d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_STORE",
225d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
226d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
227d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsstatic const char * gKindStrings[] = {
228d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "USER",
229d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "COLOR",
230d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POSITION",
231d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TEXTURE",
232d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NORMAL",
233d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "INDEX",
234d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POINT_SIZE",
235d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_L",
236d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_A",
237d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_LA",
238d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGB",
239d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGBA",
240d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
241d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
242afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::dumpLOGV(const char *prefix) const {
24339cd317d983410055d780d00666f724c5faeaba9Jason Sams    if (mType >= RS_TYPE_ELEMENT) {
2446598201f1c4f409defac9a5af789fb53a7cc00f8Steve Block        ALOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
24539cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeObjStrings[mType - RS_TYPE_ELEMENT], gKindStrings[mKind], mVectorSize, mBits);
24639cd317d983410055d780d00666f724c5faeaba9Jason Sams    } else {
2476598201f1c4f409defac9a5af789fb53a7cc00f8Steve Block        ALOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
24839cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeBasicStrings[mType], gKindStrings[mKind], mVectorSize, mBits);
24939cd317d983410055d780d00666f724c5faeaba9Jason Sams    }
250d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
251d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
252afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::serialize(OStream *stream) const {
253fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mType);
254fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mKind);
255fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)(mNormalized ? 1 : 0));
256fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU32(mVectorSize);
257fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
258fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
259afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukvoid Component::loadFromStream(IStream *stream) {
260fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mType = (RsDataType)stream->loadU8();
261fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mKind = (RsDataKind)stream->loadU8();
262fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    uint8_t temp = stream->loadU8();
263fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mNormalized = temp != 0;
264fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mVectorSize = stream->loadU32();
265fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
266fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    set(mType, mKind, mNormalized, mVectorSize);
267fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
268fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
269fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
270fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
271d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
272