rsProgramStore.h revision c700e649ca44d0dcff8b271e42d949ea72fe3c63
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 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 27ccc010bb7c0f89e162bf60033968a20be90a903aJason Samsclass ProgramStoreState; 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 297f126c78a107257090c6675ea40ffac41516a9dcAlex Sakhartchoukclass ProgramStore : public ProgramBase { 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 31721acc495b859c6d884725a4f9b5523583dd11c7Jason Sams virtual void setup(const Context *, ProgramStoreState *); 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 33fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk virtual void serialize(OStream *stream) const; 34b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_PROGRAM_STORE; } 35fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk static ProgramStore *createFromStream(Context *rsc, IStream *stream); 36c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk static ObjectBaseRef<ProgramStore> getProgramStore(Context *, 37c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk bool colorMaskR, bool colorMaskG, 38c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk bool colorMaskB, bool colorMaskA, 39c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk bool depthMask, bool ditherEnable, 40c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc, 41c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsDepthFunc depthFunc); 42fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk 438feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams void init(); 448feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 458feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct Hal { 468feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams mutable void *drv; 478feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 488feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams struct State { 498feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool ditherEnable; 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 518feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams //bool blendEnable; 528feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool colorRWriteEnable; 538feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool colorGWriteEnable; 548feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool colorBWriteEnable; 558feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool colorAWriteEnable; 568feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams RsBlendSrcFunc blendSrc; 578feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams RsBlendDstFunc blendDst; 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 598feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams //bool depthTestEnable; 608feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams bool depthWriteEnable; 618feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams RsDepthFunc depthFunc; 628feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams }; 638feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams State state; 648feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams }; 658feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams Hal mHal; 668feea4e0dec48ea03bd6d32706d058b86dddc5baJason Sams 678feea4e0dec48ea03bd6d32706d058b86dddc5baJason Samsprotected: 68c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk virtual void preDestroy() const; 69c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk virtual ~ProgramStore(); 70c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk 71c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchoukprivate: 72c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk ProgramStore(Context *, 73c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk bool colorMaskR, bool colorMaskG, bool colorMaskB, bool colorMaskA, 74c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk bool depthMask, bool ditherEnable, 75c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsBlendSrcFunc srcFunc, RsBlendDstFunc destFunc, 76c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsDepthFunc depthFunc); 77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 79afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass ProgramStoreState { 80326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 81ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ProgramStoreState(); 82ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ~ProgramStoreState(); 83771565f47fc44608444c00aa8fa3bda769ceaeceJason Sams void init(Context *rsc); 84f2649a961db2995e9e24a6c98f8a419f1496c1b7Jason Sams void deinit(Context *rsc); 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 86ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ObjectBaseRef<ProgramStore> mDefault; 87ccc010bb7c0f89e162bf60033968a20be90a903aJason Sams ObjectBaseRef<ProgramStore> mLast; 88c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk 89c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk // Cache of all existing store programs. 90c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk Vector<ProgramStore *> mStorePrograms; 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 99