rsComponent.cpp revision 39cd317d983410055d780d00666f724c5faeaba9
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
19fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#ifndef ANDROID_RS_BUILD_FOR_HOST
20d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams#include <GLES/gl.h>
21fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#else
22fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include <OpenGL/gl.h>
23fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#endif
24d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
25d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsusing namespace android;
26d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsusing namespace android::renderscript;
27d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
28d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason SamsComponent::Component()
29d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams{
30d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    set(RS_TYPE_NONE, RS_KIND_USER, false, 1);
31d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
32d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
33d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason SamsComponent::~Component()
34d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams{
35d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
36d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
37d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsvoid Component::set(RsDataType dt, RsDataKind dk, bool norm, uint32_t vecSize)
38d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams{
39d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mType = dt;
40d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mKind = dk;
41d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mNormalized = norm;
42d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mVectorSize = vecSize;
43d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    rsAssert(vecSize <= 4);
44d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
45d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mBits = 0;
46d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mTypeBits = 0;
47d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mIsFloat = false;
48d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mIsSigned = false;
49d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mIsPixel = false;
50d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
51d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    switch(mKind) {
52d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_L:
53d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_A:
54d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsPixel = true;
55d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 1);
56d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == true);
57d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
58d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_LA:
59d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsPixel = true;
60d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 2);
61d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == true);
62d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
63d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_RGB:
64d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsPixel = true;
65d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 3);
66d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == true);
67d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
68d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_RGBA:
69d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsPixel = true;
70d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 4);
71d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == true);
72d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
73d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    default:
74d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
75d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
76d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
77d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    switch(mType) {
78d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_NONE:
79d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
80d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_6_5:
81d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 3;
82d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
83d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
84d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGB);
85d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
86d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_5_5_1:
87d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 4;
88d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
89d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
90d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGBA);
91d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
92d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_4_4_4_4:
93d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mVectorSize = 4;
94d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 16;
95d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mNormalized = true;
96d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_PIXEL_RGBA);
97d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
9839cd317d983410055d780d00666f724c5faeaba9Jason Sams
9939cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_4X4:
10039cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 16 * 32;
10139cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
10239cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
10339cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
10439cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
10539cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_3X3:
10639cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 9 * 32;
10739cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
10839cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
10939cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
11039cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
11139cd317d983410055d780d00666f724c5faeaba9Jason Sams    case RS_TYPE_MATRIX_2X2:
11239cd317d983410055d780d00666f724c5faeaba9Jason Sams        mTypeBits = 4 * 32;
11339cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mVectorSize == 1);
11439cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mNormalized == false);
11539cd317d983410055d780d00666f724c5faeaba9Jason Sams        rsAssert(mKind == RS_KIND_USER);
11639cd317d983410055d780d00666f724c5faeaba9Jason Sams        break;
11739cd317d983410055d780d00666f724c5faeaba9Jason Sams
118d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_ELEMENT:
119d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_TYPE:
120d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_ALLOCATION:
121d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SAMPLER:
122d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SCRIPT:
123d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_MESH:
124d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_FRAGMENT:
125d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_VERTEX:
126d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_RASTER:
127d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_PROGRAM_STORE:
128d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mVectorSize == 1);
129d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mNormalized == false);
130d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        rsAssert(mKind == RS_KIND_USER);
131d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mBits = 32;
132d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
133d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        return;
134d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
135d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_16:
136d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
137d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
138d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
139d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_32:
140d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
141d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
142d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
143d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_64:
144d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
145d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsFloat = true;
146d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
147d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_8:
148d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
149d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
150d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
151d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_16:
152d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
153d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
154d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
155d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_32:
156d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
157d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
158d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
159d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_64:
160d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
161d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mIsSigned = true;
162d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
163d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_8:
164d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 8;
165d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
166d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_16:
167d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 16;
168d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
169d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_32:
170d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 32;
171d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
172d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_64:
173d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        mTypeBits = 64;
174d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams        break;
1755e9811f075f5a96925785a95afeda22592a840acJason Sams
1765e9811f075f5a96925785a95afeda22592a840acJason Sams    case RS_TYPE_BOOLEAN:
1775e9811f075f5a96925785a95afeda22592a840acJason Sams        mTypeBits = 8;
1785e9811f075f5a96925785a95afeda22592a840acJason Sams        break;
179d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
180d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
181d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    mBits = mTypeBits * mVectorSize;
182d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
183d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
184e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Samsbool Component::isReference() const
185e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams{
186e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams    return (mType >= RS_TYPE_ELEMENT);
187e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams}
188d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
189d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
190d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
191d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsuint32_t Component::getGLType() const
192d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams{
193d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    switch (mType) {
194d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_6_5:    return GL_UNSIGNED_SHORT_5_6_5;
195d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_5_5_5_1:  return GL_UNSIGNED_SHORT_5_5_5_1;
196d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_4_4_4_4:  return GL_UNSIGNED_SHORT_4_4_4_4;
197d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
198d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    //case RS_TYPE_FLOAT_16:      return GL_HALF_FLOAT;
199d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_FLOAT_32:      return GL_FLOAT;
200d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_8:    return GL_UNSIGNED_BYTE;
201d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_UNSIGNED_16:   return GL_UNSIGNED_SHORT;
202d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_8:      return GL_BYTE;
203d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_TYPE_SIGNED_16:     return GL_SHORT;
204d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    default:    break;
205d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
206d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
207d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    return 0;
208d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
209d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
210d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsuint32_t Component::getGLFormat() const
211d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams{
212d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    switch (mKind) {
213d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_L: return GL_LUMINANCE;
214d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_A: return GL_ALPHA;
215d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_LA: return GL_LUMINANCE_ALPHA;
216d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_RGB: return GL_RGB;
217d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    case RS_KIND_PIXEL_RGBA: return GL_RGBA;
218d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    default: break;
219d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    }
220d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    return 0;
221d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
222d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
223b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason SamsString8 Component::getGLSLType() const
224b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams{
225b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams    if (mType == RS_TYPE_SIGNED_32) {
226b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        switch(mVectorSize) {
227b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        case 1: return String8("int");
228b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        case 2: return String8("ivec2");
229b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        case 3: return String8("ivec3");
230b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        case 4: return String8("ivec4");
231b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        }
232b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams    }
233b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams    if (mType == RS_TYPE_FLOAT_32) {
234b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        switch(mVectorSize) {
235b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        case 1: return String8("float");
236b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        case 2: return String8("vec2");
237b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        case 3: return String8("vec3");
238b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        case 4: return String8("vec4");
239b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams        }
240b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams    }
24139cd317d983410055d780d00666f724c5faeaba9Jason Sams    if ((mType == RS_TYPE_MATRIX_4X4) && (mVectorSize == 1)) {
24239cd317d983410055d780d00666f724c5faeaba9Jason Sams        return String8("mat4");
24339cd317d983410055d780d00666f724c5faeaba9Jason Sams    }
24439cd317d983410055d780d00666f724c5faeaba9Jason Sams    if ((mType == RS_TYPE_MATRIX_3X3) && (mVectorSize == 1)) {
24539cd317d983410055d780d00666f724c5faeaba9Jason Sams        return String8("mat3");
24639cd317d983410055d780d00666f724c5faeaba9Jason Sams    }
24739cd317d983410055d780d00666f724c5faeaba9Jason Sams    if ((mType == RS_TYPE_MATRIX_2X2) && (mVectorSize == 1)) {
24839cd317d983410055d780d00666f724c5faeaba9Jason Sams        return String8("mat2");
24939cd317d983410055d780d00666f724c5faeaba9Jason Sams    }
250b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams    return String8();
251b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams}
252b4d3568f68b1ae97e2a82061cccf220f8e93cd94Jason Sams
25339cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeBasicStrings[] = {
254d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NONE",
255d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F16",
256d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F32",
257d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "F64",
258d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S8",
259d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S16",
260d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S32",
261d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "S64",
262d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U8",
263d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U16",
264d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U32",
265d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "U64",
2665e9811f075f5a96925785a95afeda22592a840acJason Sams    "BOOLEAN",
267d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_565",
268d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_5551",
269d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "UP_4444",
27039cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_4X4",
27139cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_3X3",
27239cd317d983410055d780d00666f724c5faeaba9Jason Sams    "MATRIX_2X2",
27339cd317d983410055d780d00666f724c5faeaba9Jason Sams};
27439cd317d983410055d780d00666f724c5faeaba9Jason Sams
27539cd317d983410055d780d00666f724c5faeaba9Jason Samsstatic const char * gTypeObjStrings[] = {
276d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ELEMENT",
277d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TYPE",
278d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "ALLOCATION",
279d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SAMPLER",
280d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "SCRIPT",
281d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "MESH",
282d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_FRAGMENT",
283d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_VERTEX",
284d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_RASTER",
285d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PROGRAM_STORE",
286d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
287d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
288d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsstatic const char * gKindStrings[] = {
289d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "USER",
290d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "COLOR",
291d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POSITION",
292d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "TEXTURE",
293d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "NORMAL",
294d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "INDEX",
295d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "POINT_SIZE",
296d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_L",
297d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_A",
298d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_LA",
299d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGB",
300d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    "PIXEL_RGBA",
301d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
302d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
303d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsvoid Component::dumpLOGV(const char *prefix) const
304d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams{
30539cd317d983410055d780d00666f724c5faeaba9Jason Sams    if (mType >= RS_TYPE_ELEMENT) {
30639cd317d983410055d780d00666f724c5faeaba9Jason Sams        LOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
30739cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeObjStrings[mType - RS_TYPE_ELEMENT], gKindStrings[mKind], mVectorSize, mBits);
30839cd317d983410055d780d00666f724c5faeaba9Jason Sams    } else {
30939cd317d983410055d780d00666f724c5faeaba9Jason Sams        LOGV("%s   Component: %s, %s, vectorSize=%i, bits=%i",
31039cd317d983410055d780d00666f724c5faeaba9Jason Sams             prefix, gTypeBasicStrings[mType], gKindStrings[mKind], mVectorSize, mBits);
31139cd317d983410055d780d00666f724c5faeaba9Jason Sams    }
312d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
313d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
314fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchoukvoid Component::serialize(OStream *stream) const
315fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk{
316fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mType);
317fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)mKind);
318fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU8((uint8_t)(mNormalized ? 1 : 0));
319fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    stream->addU32(mVectorSize);
320fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
321fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
322fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchoukvoid Component::loadFromStream(IStream *stream)
323fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk{
324fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mType = (RsDataType)stream->loadU8();
325fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mKind = (RsDataKind)stream->loadU8();
326fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    uint8_t temp = stream->loadU8();
327fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mNormalized = temp != 0;
328fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    mVectorSize = stream->loadU32();
329fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
330fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    set(mType, mKind, mNormalized, mVectorSize);
331fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk}
332fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
333fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
334fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
335d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
336