10f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines/*
20f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Copyright (C) 2009 The Android Open Source Project
30f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
40f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
50f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * you may not use this file except in compliance with the License.
60f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * You may obtain a copy of the License at
70f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
80f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
90f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines *
100f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * Unless required by applicable law or agreed to in writing, software
110f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
120f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * See the License for the specific language governing permissions and
140f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines * limitations under the License.
150f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines */
160f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
170f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#ifndef ANDROID_COMPONENT_H
180f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#define ANDROID_COMPONENT_H
190f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
200f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsUtils.h"
210f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#include "rsDefines.h"
220f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
230f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// ---------------------------------------------------------------------------
240f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace android {
250f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesnamespace renderscript {
260f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
270f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
280f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines// An element is a group of Components that occupies one cell in a structure.
290f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesclass Component {
300f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinespublic:
310f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    Component();
320f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    ~Component();
330f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
340f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void set(RsDataType dt, RsDataKind dk, bool norm, uint32_t vecSize=1);
350f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
360f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void dumpLOGV(const char *prefix) const;
370f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
380f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RsDataType getType() const {return mType;}
390f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RsDataKind getKind() const {return mKind;}
400f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bool getIsNormalized() const {return mNormalized;}
410f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    uint32_t getVectorSize() const {return mVectorSize;}
420f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bool getIsFloat() const {return mIsFloat;}
430f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bool getIsSigned() const {return mIsSigned;}
440f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    uint32_t getBits() const {return mBits;}
450f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    uint32_t getBitsUnpadded() const {return mBitsUnpadded;}
460f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
470f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // Helpers for reading / writing this class out
480f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void serialize(OStream *stream) const;
490f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    void loadFromStream(IStream *stream);
500f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
510f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bool isReference() const;
520f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
530f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hinesprotected:
540f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RsDataType mType;
550f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    RsDataKind mKind;
560f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bool mNormalized;
570f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    uint32_t mVectorSize;
580f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
590f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    // derived
600f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    uint32_t mBits;
610f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    uint32_t mBitsUnpadded;
620f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    uint32_t mTypeBits;
630f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bool mIsFloat;
640f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bool mIsSigned;
650f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines    bool mIsPixel;
660f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines};
670f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
680f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
690f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines}
700f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
710f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines#endif
720f6f72e19db852cc253fd2fc05459abdf8d5c3afStephen Hines
73