blob: dea357021e23cab26ab35b6117f3a4dc09de55c5 [file] [log] [blame]
Jason Sams221a4b12012-02-22 15:22:41 -08001/*
Jason Sams69cccdf2012-04-02 19:11:49 -07002 * Copyright (C) 2012 The Android Open Source Project
Jason Sams221a4b12012-02-22 15:22:41 -08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef __ANDROID_ELEMENT_H__
18#define __ANDROID_ELEMENT_H__
19
20#include <rs.h>
21#include "RenderScript.h"
22#include "BaseObj.h"
23
Jason Sams69cccdf2012-04-02 19:11:49 -070024namespace android {
25namespace renderscriptCpp {
26
Jason Sams221a4b12012-02-22 15:22:41 -080027class Element : public BaseObj {
28public:
29 /**
30 * Return if a element is too complex for use as a data source for a Mesh or
31 * a Program.
32 *
33 * @return boolean
34 */
35 bool isComplex();
36
37 /**
38 * @hide
39 * @return number of sub-elements in this element
40 */
41 size_t getSubElementCount() {
42 return mVisibleElementMap.size();
43 }
44
45 /**
46 * @hide
47 * @param index index of the sub-element to return
48 * @return sub-element in this element at given index
49 */
Jason Sams69cccdf2012-04-02 19:11:49 -070050 sp<const Element> getSubElement(uint32_t index);
Jason Sams221a4b12012-02-22 15:22:41 -080051
52 /**
53 * @hide
54 * @param index index of the sub-element
55 * @return sub-element in this element at given index
56 */
57 const char * getSubElementName(uint32_t index);
58
59 /**
60 * @hide
61 * @param index index of the sub-element
62 * @return array size of sub-element in this element at given index
63 */
64 size_t getSubElementArraySize(uint32_t index);
65
66 /**
67 * @hide
68 * @param index index of the sub-element
69 * @return offset in bytes of sub-element in this element at given index
70 */
71 uint32_t getSubElementOffsetBytes(uint32_t index);
72
73 /**
74 * @hide
75 * @return element data type
76 */
77 RsDataType getDataType() const {
78 return mType;
79 }
80
81 /**
82 * @hide
83 * @return element data kind
84 */
85 RsDataKind getDataKind() const {
86 return mKind;
87 }
88
89 size_t getSizeBytes() const {
90 return mSizeBytes;
91 }
92
93
Jason Sams69cccdf2012-04-02 19:11:49 -070094 static sp<const Element> BOOLEAN(RenderScript *rs);
95 static sp<const Element> U8(RenderScript *rs);
96 static sp<const Element> I8(RenderScript *rs);
97 static sp<const Element> U16(RenderScript *rs);
98 static sp<const Element> I16(RenderScript *rs);
99 static sp<const Element> U32(RenderScript *rs);
100 static sp<const Element> I32(RenderScript *rs);
101 static sp<const Element> U64(RenderScript *rs);
102 static sp<const Element> I64(RenderScript *rs);
103 static sp<const Element> F32(RenderScript *rs);
104 static sp<const Element> F64(RenderScript *rs);
105 static sp<const Element> ELEMENT(RenderScript *rs);
106 static sp<const Element> TYPE(RenderScript *rs);
107 static sp<const Element> ALLOCATION(RenderScript *rs);
108 static sp<const Element> SAMPLER(RenderScript *rs);
109 static sp<const Element> SCRIPT(RenderScript *rs);
110 static sp<const Element> MESH(RenderScript *rs);
111 static sp<const Element> PROGRAM_FRAGMENT(RenderScript *rs);
112 static sp<const Element> PROGRAM_VERTEX(RenderScript *rs);
113 static sp<const Element> PROGRAM_RASTER(RenderScript *rs);
114 static sp<const Element> PROGRAM_STORE(RenderScript *rs);
Jason Sams221a4b12012-02-22 15:22:41 -0800115
Jason Sams69cccdf2012-04-02 19:11:49 -0700116 static sp<const Element> A_8(RenderScript *rs);
117 static sp<const Element> RGB_565(RenderScript *rs);
118 static sp<const Element> RGB_888(RenderScript *rs);
119 static sp<const Element> RGBA_5551(RenderScript *rs);
120 static sp<const Element> RGBA_4444(RenderScript *rs);
121 static sp<const Element> RGBA_8888(RenderScript *rs);
Jason Sams221a4b12012-02-22 15:22:41 -0800122
Jason Sams69cccdf2012-04-02 19:11:49 -0700123 static sp<const Element> F32_2(RenderScript *rs);
124 static sp<const Element> F32_3(RenderScript *rs);
125 static sp<const Element> F32_4(RenderScript *rs);
126 static sp<const Element> F64_2(RenderScript *rs);
127 static sp<const Element> F64_3(RenderScript *rs);
128 static sp<const Element> F64_4(RenderScript *rs);
129 static sp<const Element> U8_2(RenderScript *rs);
130 static sp<const Element> U8_3(RenderScript *rs);
131 static sp<const Element> U8_4(RenderScript *rs);
132 static sp<const Element> I8_2(RenderScript *rs);
133 static sp<const Element> I8_3(RenderScript *rs);
134 static sp<const Element> I8_4(RenderScript *rs);
135 static sp<const Element> U16_2(RenderScript *rs);
136 static sp<const Element> U16_3(RenderScript *rs);
137 static sp<const Element> U16_4(RenderScript *rs);
138 static sp<const Element> I16_2(RenderScript *rs);
139 static sp<const Element> I16_3(RenderScript *rs);
140 static sp<const Element> I16_4(RenderScript *rs);
141 static sp<const Element> U32_2(RenderScript *rs);
142 static sp<const Element> U32_3(RenderScript *rs);
143 static sp<const Element> U32_4(RenderScript *rs);
144 static sp<const Element> I32_2(RenderScript *rs);
145 static sp<const Element> I32_3(RenderScript *rs);
146 static sp<const Element> I32_4(RenderScript *rs);
147 static sp<const Element> U64_2(RenderScript *rs);
148 static sp<const Element> U64_3(RenderScript *rs);
149 static sp<const Element> U64_4(RenderScript *rs);
150 static sp<const Element> I64_2(RenderScript *rs);
151 static sp<const Element> I64_3(RenderScript *rs);
152 static sp<const Element> I64_4(RenderScript *rs);
153 static sp<const Element> MATRIX_4X4(RenderScript *rs);
154 static sp<const Element> MATRIX_3X3(RenderScript *rs);
155 static sp<const Element> MATRIX_2X2(RenderScript *rs);
Jason Sams221a4b12012-02-22 15:22:41 -0800156
157 Element(void *id, RenderScript *rs,
Jason Sams69cccdf2012-04-02 19:11:49 -0700158 android::Vector<sp</*const*/ Element> > &elements,
Jason Sams221a4b12012-02-22 15:22:41 -0800159 android::Vector<android::String8> &elementNames,
160 android::Vector<uint32_t> &arraySizes);
161 Element(void *id, RenderScript *rs, RsDataType dt, RsDataKind dk, bool norm, uint32_t size);
162 Element(RenderScript *rs);
163 virtual ~Element();
164
165 void updateFromNative();
Jason Sams69cccdf2012-04-02 19:11:49 -0700166 static sp<const Element> createUser(RenderScript *rs, RsDataType dt);
167 static sp<const Element> createVector(RenderScript *rs, RsDataType dt, uint32_t size);
168 static sp<const Element> createPixel(RenderScript *rs, RsDataType dt, RsDataKind dk);
169 bool isCompatible(sp<const Element>e);
Jason Sams221a4b12012-02-22 15:22:41 -0800170
171 class Builder {
172 private:
173 RenderScript *mRS;
Jason Sams69cccdf2012-04-02 19:11:49 -0700174 android::Vector<sp</*const*/ Element> > mElements;
Jason Sams221a4b12012-02-22 15:22:41 -0800175 android::Vector<android::String8> mElementNames;
176 android::Vector<uint32_t> mArraySizes;
177 bool mSkipPadding;
178
179 public:
180 Builder(RenderScript *rs);
181 ~Builder();
Jason Sams69cccdf2012-04-02 19:11:49 -0700182 void add(sp</*const*/ Element>, android::String8 &name, uint32_t arraySize = 1);
183 sp<const Element> create();
Jason Sams221a4b12012-02-22 15:22:41 -0800184 };
185
186private:
187 void updateVisibleSubElements();
188
Jason Sams69cccdf2012-04-02 19:11:49 -0700189 android::Vector<sp</*const*/ Element> > mElements;
Jason Sams221a4b12012-02-22 15:22:41 -0800190 android::Vector<android::String8> mElementNames;
191 android::Vector<uint32_t> mArraySizes;
192 android::Vector<uint32_t> mVisibleElementMap;
193 android::Vector<uint32_t> mOffsetInBytes;
194
195 RsDataType mType;
196 RsDataKind mKind;
197 bool mNormalized;
198 size_t mSizeBytes;
199 size_t mVectorSize;
200};
201
Jason Sams69cccdf2012-04-02 19:11:49 -0700202}
203}
Jason Sams221a4b12012-02-22 15:22:41 -0800204#endif