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#ifndef ANDROID_COMPONENT_H
18d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams#define ANDROID_COMPONENT_H
19d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
20d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams#include "rsUtils.h"
21e23d239828a229eb7d4d33c9630070f0a87833e1Alex Sakhartchouk#include "rsDefines.h"
22d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
23d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams// ---------------------------------------------------------------------------
24d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsnamespace android {
25d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsnamespace renderscript {
26d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
27d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
28d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams// An element is a group of Components that occupies one cell in a structure.
29afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass Component {
30d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samspublic:
31d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    Component();
32d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    ~Component();
33d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
34d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    void set(RsDataType dt, RsDataKind dk, bool norm, uint32_t vecSize=1);
35d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
36d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    void dumpLOGV(const char *prefix) const;
37d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
38d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    RsDataType getType() const {return mType;}
39d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    RsDataKind getKind() const {return mKind;}
40d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    bool getIsNormalized() const {return mNormalized;}
41d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    uint32_t getVectorSize() const {return mVectorSize;}
42d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    bool getIsFloat() const {return mIsFloat;}
43d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    bool getIsSigned() const {return mIsSigned;}
44d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    uint32_t getBits() const {return mBits;}
452d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    uint32_t getBitsUnpadded() const {return mBitsUnpadded;}
46d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
47fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    // Helpers for reading / writing this class out
48fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    void serialize(OStream *stream) const;
49fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    void loadFromStream(IStream *stream);
50fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk
51e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams    bool isReference() const;
52e3929c9bc6f3897e132304faf1b40c3cf1f47474Jason Sams
53d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Samsprotected:
54d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    RsDataType mType;
55d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    RsDataKind mKind;
56d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    bool mNormalized;
57d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    uint32_t mVectorSize;
58d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
59d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    // derived
60d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    uint32_t mBits;
612d1220c27ae91f0b307f283fe66cb767b63dfe38Alex Sakhartchouk    uint32_t mBitsUnpadded;
62d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    uint32_t mTypeBits;
63d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    bool mIsFloat;
64d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    bool mIsSigned;
65d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams    bool mIsPixel;
66d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams};
67d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
68d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
69d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams}
70d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
71d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams#endif
72d01d970cf5973aa5186cc02c80fb2c143a69b0b1Jason Sams
73