15fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams/*
27f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk * Copyright (C) 2009-2011 The Android Open Source Project
35fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams *
45fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
55fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams * you may not use this file except in compliance with the License.
65fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams * You may obtain a copy of the License at
75fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams *
85fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
95fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams *
105fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams * Unless required by applicable law or agreed to in writing, software
115fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
125fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams * See the License for the specific language governing permissions and
145fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams * limitations under the License.
155fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams */
165fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams
175fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams#ifndef ANDROID_RS_PROGRAM_RASTER_H
185fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams#define ANDROID_RS_PROGRAM_RASTER_H
195fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams
207f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk#include "rsProgramBase.h"
215fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams
2282e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang#include <vector>
2382e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang
245fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams// ---------------------------------------------------------------------------
255fd09d847586f9680b4f495413b6ca5fbb69af6eJason Samsnamespace android {
265fd09d847586f9680b4f495413b6ca5fbb69af6eJason Samsnamespace renderscript {
275fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams
285fd09d847586f9680b4f495413b6ca5fbb69af6eJason Samsclass ProgramRasterState;
29407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk/*****************************************************************************
30407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * CAUTION
31407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk *
32407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * Any layout changes for this class may require a corresponding change to be
33407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * made to frameworks/compile/libbcc/lib/ScriptCRT/rs_core.c, which contains
34407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * a partial copy of the information below.
35407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk *
36407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk *****************************************************************************/
377f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass ProgramRaster : public ProgramBase {
385fd09d847586f9680b4f495413b6ca5fbb69af6eJason Samspublic:
39721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams    struct Hal {
40721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        mutable void *drv;
41721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams
42721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        struct State {
43721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams            bool pointSprite;
44721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams            RsCullMode cull;
45721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        };
46721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams        State state;
47721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams    };
48721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams    Hal mHal;
495fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams
50407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk    virtual void setup(const Context *, ProgramRasterState *);
51e3150cfb3edb028407669e4a65e087eae77e718cJason Sams    virtual void serialize(Context *rsc, OStream *stream) const;
52407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk    virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_PROGRAM_RASTER; }
53407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk    static ProgramRaster *createFromStream(Context *rsc, IStream *stream);
54407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk
55407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk    static ObjectBaseRef<ProgramRaster> getProgramRaster(Context *rsc,
56407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk                                                         bool pointSprite,
57407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk                                                         RsCullMode cull);
585fd09d847586f9680b4f495413b6ca5fbb69af6eJason Samsprotected:
59c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk    virtual void preDestroy() const;
60c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk    virtual ~ProgramRaster();
61c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk
62c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchoukprivate:
63c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk    ProgramRaster(Context *rsc,
64c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk                  bool pointSprite,
65c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk                  RsCullMode cull);
66c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk
675fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams};
685fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams
69afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass ProgramRasterState {
705fd09d847586f9680b4f495413b6ca5fbb69af6eJason Samspublic:
715fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams    ProgramRasterState();
725fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams    ~ProgramRasterState();
73771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams    void init(Context *rsc);
74f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams    void deinit(Context *rsc);
755fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams
765fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams    ObjectBaseRef<ProgramRaster> mDefault;
775fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams    ObjectBaseRef<ProgramRaster> mLast;
78c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk
79c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk    // Cache of all existing raster programs.
8082e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang    std::vector<ProgramRaster *> mRasterPrograms;
815fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams};
825fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams
835fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams
847974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace renderscript
857974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace android
865fd09d847586f9680b4f495413b6ca5fbb69af6eJason Sams#endif
87b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni
88b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni
89b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni
90b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni
91