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