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