rsElement.cpp revision 4815c0d121310cfcd6a8aba4eab77a9910af53ac
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h" 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 19565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams#include <GLES/gl.h> 20565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android; 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript; 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 25e514b45de8561fbc6ef6770845102ca10b0a69d7Jason SamsElement::Element(Context *rsc) : ObjectBase(rsc) 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 274815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mType = RS_TYPE_FLOAT; 284815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mIsNormalized = false; 294815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mKind = RS_KIND_USER; 304815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mBits = 0; 31f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams mAllocFile = __FILE__; 32f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams mAllocLine = __LINE__; 334815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mFields = NULL; 344815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mFieldCount = 0; 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 38326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsElement::~Element() 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams clear(); 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 43326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Element::clear() 44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 454815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams delete [] mFields; 464815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mFields = NULL; 474815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams mFieldCount = 0; 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 494815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams/* 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid Element::setComponent(uint32_t idx, Component *c) 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsAssert(!mComponents[idx].get()); 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams rsAssert(idx < mComponentCount); 54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mComponents[idx].set(c); 55e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 56e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams// Fixme: This should probably not be here 579397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams c->incUserRef(); 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 594815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams*/ 60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 61326e0ddf89e8df2837752fbfd7a014814b32082cJason Samssize_t Element::getSizeBits() const 62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 634815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (!mFieldCount) { 644815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return mBits; 654815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 664815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams size_t total = 0; 684815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams for (size_t ct=0; ct < mFieldCount; ct++) { 694815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams total += mFields[ct].e->mBits; 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return total; 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 744815c0d121310cfcd6a8aba4eab77a9910af53acJason Samssize_t Element::getFieldOffsetBits(uint32_t componentNumber) const 75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams size_t offset = 0; 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams for (uint32_t ct = 0; ct < componentNumber; ct++) { 784815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams offset += mFields[ct].e->mBits; 79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return offset; 81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 83565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Samsuint32_t Element::getGLType() const 84565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams{ 85565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams int bits[4]; 86565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams 874815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (!mFieldCount) { 884815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams switch (mType) { 894815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case RS_TYPE_FLOAT: 904815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (mBits == 32) { 914815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return GL_FLOAT; 924815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 934815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return 0; 944815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case RS_TYPE_SIGNED: 954815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams switch (mBits) { 964815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case 8: 974815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return GL_BYTE; 984815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case 16: 994815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return GL_SHORT; 1004815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams //case 32: 1014815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams //return GL_INT; 1024815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 1034815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return 0; 1044815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case RS_TYPE_UNSIGNED: 1054815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams switch (mBits) { 1064815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case 8: 1074815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return GL_UNSIGNED_BYTE; 1084815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case 16: 1094815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return GL_UNSIGNED_SHORT; 1104815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams //case 32: 1114815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams //return GL_UNSIGNED_INT; 1124815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 1134815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return 0; 1144815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 1154815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 1164815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 1174815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (mFieldCount > 4) { 118565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return 0; 119565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 120565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams 1214815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams for (uint32_t ct=0; ct < mFieldCount; ct++) { 1224815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams bits[ct] = mFields[ct].e->mBits; 1234815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (mFields[ct].e->mFieldCount) { 1244815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return 0; 1254815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 1264815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (mFields[ct].e->mType != RS_TYPE_UNSIGNED) { 127565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return 0; 128565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 1294815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (!mFields[ct].e->mIsNormalized) { 130565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return 0; 131565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 132565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 133565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams 1344815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams switch(mFieldCount) { 135565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams case 1: 136565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams if (bits[0] == 8) { 137565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_UNSIGNED_BYTE; 138565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 139565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return 0; 140565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams case 2: 141565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams if ((bits[0] == 8) && 142565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[1] == 8)) { 143565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_UNSIGNED_BYTE; 144565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 145565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return 0; 146565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams case 3: 147565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams if ((bits[0] == 8) && 148565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[1] == 8) && 149565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[2] == 8)) { 150565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_UNSIGNED_BYTE; 151565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 152565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams if ((bits[0] == 5) && 153565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[1] == 6) && 154565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[2] == 5)) { 155565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_UNSIGNED_SHORT_5_6_5; 156565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 157565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return 0; 158565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams case 4: 159565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams if ((bits[0] == 8) && 160565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[1] == 8) && 161565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[2] == 8) && 162565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[3] == 8)) { 163565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_UNSIGNED_BYTE; 164565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 165565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams if ((bits[0] == 4) && 166565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[1] == 4) && 167565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[2] == 4) && 168565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[3] == 4)) { 169565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_UNSIGNED_SHORT_4_4_4_4; 170565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 171565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams if ((bits[0] == 5) && 172565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[1] == 5) && 173565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[2] == 5) && 174565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams (bits[3] == 1)) { 175565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_UNSIGNED_SHORT_5_5_5_1; 176565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 177565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 178565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return 0; 179565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams} 180565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams 181565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Samsuint32_t Element::getGLFormat() const 182565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams{ 1834815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (!mFieldCount) { 1844815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (mKind == RS_KIND_ALPHA) { 185565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_ALPHA; 186565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 1874815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (mKind == RS_KIND_LUMINANCE) { 188565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_LUMINANCE; 189565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 1904815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 1914815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 1924815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams switch(mFieldCount) { 193565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams case 2: 1944815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if ((mFields[0].e->mKind == RS_KIND_LUMINANCE) && 1954815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams (mFields[1].e->mKind == RS_KIND_ALPHA)) { 196565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_LUMINANCE_ALPHA; 197565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 198565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams break; 199565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams case 3: 2004815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if ((mFields[0].e->mKind == RS_KIND_RED) && 2014815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams (mFields[1].e->mKind == RS_KIND_GREEN) && 2024815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams (mFields[2].e->mKind == RS_KIND_BLUE)) { 203565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_RGB; 204565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 205565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams break; 206565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams case 4: 2074815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if ((mFields[0].e->mKind == RS_KIND_RED) && 2084815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams (mFields[1].e->mKind == RS_KIND_GREEN) && 2094815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams (mFields[2].e->mKind == RS_KIND_BLUE) && 2104815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams (mFields[3].e->mKind == RS_KIND_ALPHA)) { 211565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return GL_RGBA; 212565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 213565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams break; 214565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams } 215565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams return 0; 216565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams} 217565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams 2184815c0d121310cfcd6a8aba4eab77a9910af53acJason Samsconst char * Element::getCType() const 2194815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams{ 2204815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams switch(mType) { 2214815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case RS_TYPE_FLOAT: 2224815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return "float"; 2234815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case RS_TYPE_SIGNED: 2244815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case RS_TYPE_UNSIGNED: 2254815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams switch(mBits) { 2264815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case 32: 2274815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return "int"; 2284815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case 16: 2294815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return "short"; 2304815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams case 8: 2314815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return "char"; 2324815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 2334815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams break; 2344815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 2354815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return NULL; 2364815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams} 237565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams 238e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Samsvoid Element::dumpLOGV(const char *prefix) const 239e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams{ 240e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams ObjectBase::dumpLOGV(prefix); 2414815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams LOGV("%s Element: components %i, size %i", prefix, mFieldCount, mBits); 2424815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams for (uint32_t ct = 0; ct < mFieldCount; ct++) { 243e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams char buf[1024]; 244e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams sprintf(buf, "%s component %i: ", prefix, ct); 2454815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams //mComponents[ct]->dumpLOGV(buf); 246e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams } 247e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams} 248e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 2494815c0d121310cfcd6a8aba4eab77a9910af53acJason SamsElement * Element::create(Context *rsc, RsDataKind dk, RsDataType dt, 2504815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams bool isNorm, size_t bits) 2514815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams{ 2524815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *e = new Element(rsc); 2534815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mKind = dk; 2544815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mType = dt; 2554815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mIsNormalized = isNorm; 2564815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mBits = bits; 2574815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return e; 2584815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams} 2594815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 2604815c0d121310cfcd6a8aba4eab77a9910af53acJason SamsElement * Element::create(Context *rsc, Element **ein, const char **nin, 2614815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams const size_t * lengths, size_t count) 2624815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams{ 2634815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *e = new Element(rsc); 2644815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mFields = new ElementField_t [count]; 2654815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mFieldCount = count; 2664815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 2674815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams for (size_t ct=0; ct < count; ct++) { 2684815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mFields[ct].e.set(ein[ct]); 2694815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams e->mFields[ct].name.setTo(nin[ct], lengths[ct]); 2704815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 2714815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 2724815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return e; 2734815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams} 2744815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 2754815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 276326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsElementState::ElementState() 277326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 278326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 279326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 280326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsElementState::~ElementState() 281326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 282326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 283326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2844815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 285326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams///////////////////////////////////////// 286e5ffb879ae535a899a486285a23bea05e912480fJason Sams// 287326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 288326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 289326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 290326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 291326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ElementBegin(Context *rsc) 292326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 2934815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams ElementState * sec = &rsc->mStateElement; 2944815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 2954815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mBuildList.clear(); 2964815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mNames.clear(); 297326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 298326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2998b2c065dfc16c148e2829a19e83d2269b9bcd4ccJason Samsvoid rsi_ElementAdd(Context *rsc, RsDataKind dk, RsDataType dt, bool isNormalized, size_t bits, const char *name) 300326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 301326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ElementState * sec = &rsc->mStateElement; 302e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 303e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams rsAssert(bits > 0); 304e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 3054815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *c = Element::create(rsc, dk, dt, isNormalized, bits); 3064815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mBuildList.add(c); 3074815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (name) 3084815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mNames.add(String8(name)); 3094815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams else 3104815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mNames.add(String8("")); 311326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 312326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 313326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsElement rsi_ElementCreate(Context *rsc) 314326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 315326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ElementState * sec = &rsc->mStateElement; 316326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 3174815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams size_t count = sec->mBuildList.size(); 3184815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams rsAssert(count > 0); 3194815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 3204815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams if (count == 1) { 3214815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *se = sec->mBuildList[0]; 3224815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams se->incUserRef(); 3234815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mBuildList.clear(); 3244815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mNames.clear(); 3254815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return se; 3264815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } 3274815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 3284815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element ** tmpElements = (Element **)calloc(count, sizeof(Element *)); 3294815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams const char ** tmpNames = (const char **)calloc(count, sizeof(char *)); 3304815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams size_t * tmpLengths = (size_t *)calloc(count, sizeof(size_t)); 3314815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 332e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 3334815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams for (size_t ct = 0; ct < count; ct++) { 3344815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams tmpElements[ct] = sec->mBuildList[ct]; 3354815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams tmpNames[ct] = sec->mNames[ct].string(); 3364815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams tmpLengths[ct] = sec->mNames[ct].length(); 337326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 3384815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Element *se = Element::create(rsc, tmpElements, tmpNames, tmpLengths, count); 339326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 3404815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mBuildList.clear(); 3414815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams sec->mNames.clear(); 3429397e30ce5fe3f6af9212a93b490836b04fdfffaJason Sams se->incUserRef(); 3434815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams free(tmpElements); 3444815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams free(tmpNames); 3454815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams free(tmpLengths); 346326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams return se; 347326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 348326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 349326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 350326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 351326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 352