1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#ifndef ANDROID_RS_PROGRAM_FRAGMENT_STORE_H 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define ANDROID_RS_PROGRAM_FRAGMENT_STORE_H 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 207f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchouk#include "rsProgramBase.h" 21fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include "rsStream.h" 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 2382e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang#include <vector> 2482e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 29ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsclass ProgramStoreState; 30407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk/***************************************************************************** 31407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * CAUTION 32407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * 33407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * Any layout changes for this class may require a corresponding change to be 34407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * made to frameworks/compile/libbcc/lib/ScriptCRT/rs_core.c, which contains 35407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * a partial copy of the information below. 36407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk * 37407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk *****************************************************************************/ 387f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass ProgramStore : public ProgramBase { 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 408feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct Hal { 418feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams mutable void *drv; 428feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 438feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct State { 448feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool ditherEnable; 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 468feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams //bool blendEnable; 478feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool colorRWriteEnable; 488feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool colorGWriteEnable; 498feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool colorBWriteEnable; 508feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool colorAWriteEnable; 518feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams RsBlendSrcFunc blendSrc; 528feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams RsBlendDstFunc blendDst; 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 548feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams //bool depthTestEnable; 558feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool depthWriteEnable; 568feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams RsDepthFunc depthFunc; 578feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams }; 588feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams State state; 598feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams }; 608feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams Hal mHal; 618feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 62407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk virtual void setup(const Context *, ProgramStoreState *); 63407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk 64e3150cfb3edb028407669e4a65e087eae77e718cJason Sams virtual void serialize(Context *rsc, OStream *stream) const; 65407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_PROGRAM_STORE; } 66407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk static ProgramStore *createFromStream(Context *rsc, IStream *stream); 67407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk static ObjectBaseRef<ProgramStore> getProgramStore(Context *, 68407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk bool colorMaskR, bool colorMaskG, 69407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk bool colorMaskB, bool colorMaskA, 70407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk bool depthMask, bool ditherEnable, 71407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc, 72407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsDepthFunc depthFunc); 73407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk void init(); 748feea4e0dec48ea03bd6d32706d058b86dddc5baJason Samsprotected: 75c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk virtual void preDestroy() const; 76c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk virtual ~ProgramStore(); 77c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk 78c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchoukprivate: 79c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk ProgramStore(Context *, 80c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk bool colorMaskR, bool colorMaskG, bool colorMaskB, bool colorMaskA, 81c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk bool depthMask, bool ditherEnable, 82c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc, 83c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsDepthFunc depthFunc); 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 86afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass ProgramStoreState { 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 88ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ProgramStoreState(); 89ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ~ProgramStoreState(); 90771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams void init(Context *rsc); 91f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams void deinit(Context *rsc); 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 93ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ObjectBaseRef<ProgramStore> mDefault; 94ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ObjectBaseRef<ProgramStore> mLast; 95c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk 96c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk // Cache of all existing store programs. 9782e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang std::vector<ProgramStore *> mStorePrograms; 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 1007974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace renderscript 1017974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace android 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif 103b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni 104b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni 105b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni 106