1c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams/*
2a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project
3c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams *
4c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * you may not use this file except in compliance with the License.
6c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * You may obtain a copy of the License at
7c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams *
8c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams *
10c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * Unless required by applicable law or agreed to in writing, software
11c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * See the License for the specific language governing permissions and
14c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * limitations under the License.
15c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams */
16c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
17a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#ifndef ANDROID_RSD_VERTEX_ARRAY_H
18a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#define ANDROID_RSD_VERTEX_ARRAY_H
19c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
20c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samsnamespace android {
21c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samsnamespace renderscript {
22c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
23a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass Context;
24a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
25a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk}
26a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk}
27a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
28a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#include <utils/String8.h>
29c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
30c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams// An element is a group of Components that occupies one cell in a structure.
31a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass RsdVertexArray {
32c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samspublic:
33433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams    class Attrib {
34433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams    public:
35c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        uint32_t buffer;
36760f1f7335ad0c5aee59ca829a40bbf6e3328a1bJason Sams        const uint8_t * ptr;
37c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        uint32_t offset;
38c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        uint32_t type;
39c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        uint32_t size;
40c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        uint32_t stride;
41c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        bool normalized;
42a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk        android::String8 name;
43433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams
44433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams        Attrib();
45433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams        void clear();
4654929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk        void set(uint32_t type, uint32_t size, uint32_t stride, bool normalized, uint32_t offset, const char *name);
47433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams    };
48c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
49a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    RsdVertexArray(const Attrib *attribs, uint32_t numAttribs);
50a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    virtual ~RsdVertexArray();
51c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
52c19ff0177a7a0dadfc01b1990f822354fdc95991Alex Sakhartchouk    void setup(const android::renderscript::Context *rsc) const;
53433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams    void logAttrib(uint32_t idx, uint32_t slot) const;
54c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
55c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samsprotected:
56be504f2d0c5db4485e6db5b406e9e8b8c390dea9Jason Sams    void clear(uint32_t index);
57c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    uint32_t mActiveBuffer;
58760f1f7335ad0c5aee59ca829a40bbf6e3328a1bJason Sams    const uint8_t * mActivePointer;
59be504f2d0c5db4485e6db5b406e9e8b8c390dea9Jason Sams    uint32_t mCount;
60be504f2d0c5db4485e6db5b406e9e8b8c390dea9Jason Sams
6154929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk    const Attrib *mAttribs;
62c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams};
63c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
64c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
65a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass RsdVertexArrayState {
66c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samspublic:
67a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    RsdVertexArrayState();
68a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    ~RsdVertexArrayState();
69a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    void init(uint32_t maxAttrs);
70c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
712d791976a2b937017423519d9f9a4928fc31dae2Alex Sakhartchouk    bool *mAttrsEnabled;
722d791976a2b937017423519d9f9a4928fc31dae2Alex Sakhartchouk    uint32_t mAttrsEnabledSize;
73c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams};
74c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
75c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
76a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#endif //ANDROID_RSD_VERTEX_ARRAY_H
77c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
78c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
79c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
80