1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ANDROID_RS_SAMPLER_H 18 #define ANDROID_RS_SAMPLER_H 19 20 #include "rsAllocation.h" 21 22 #include <vector> 23 24 // --------------------------------------------------------------------------- 25 namespace android { 26 namespace renderscript { 27 28 const static uint32_t RS_MAX_SAMPLER_SLOT = 16; 29 30 class SamplerState; 31 /***************************************************************************** 32 * CAUTION 33 * 34 * Any layout changes for this class may require a corresponding change to be 35 * made to frameworks/compile/libbcc/lib/ScriptCRT/rs_core.c, which contains 36 * a partial copy of the information below. 37 * 38 *****************************************************************************/ 39 class Sampler : public ObjectBase { 40 public: 41 struct Hal { 42 mutable void *drv; 43 44 struct State { 45 RsSamplerValue magFilter; 46 RsSamplerValue minFilter; 47 RsSamplerValue wrapS; 48 RsSamplerValue wrapT; 49 RsSamplerValue wrapR; 50 float aniso; 51 }; 52 State state; 53 }; 54 Hal mHal; 55 56 void operator delete(void* ptr); 57 58 static ObjectBaseRef<Sampler> getSampler(Context *, 59 RsSamplerValue magFilter, 60 RsSamplerValue minFilter, 61 RsSamplerValue wrapS, 62 RsSamplerValue wrapT, 63 RsSamplerValue wrapR, 64 float aniso = 1.0f); 65 void bindToContext(SamplerState *, uint32_t slot); 66 void unbindFromContext(SamplerState *); 67 68 virtual void serialize(Context *rsc, OStream *stream) const; getClassId()69 virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_SAMPLER; } 70 static Sampler *createFromStream(Context *rsc, IStream *stream); 71 72 protected: 73 int32_t mBoundSlot; 74 75 virtual void preDestroy() const; 76 virtual ~Sampler(); 77 78 private: 79 explicit Sampler(Context *); 80 Sampler(Context *, 81 RsSamplerValue magFilter, 82 RsSamplerValue minFilter, 83 RsSamplerValue wrapS, 84 RsSamplerValue wrapT, 85 RsSamplerValue wrapR, 86 float aniso = 1.0f); 87 }; 88 89 90 class SamplerState { 91 public: 92 ObjectBaseRef<Sampler> mSamplers[RS_MAX_SAMPLER_SLOT]; init(Context * rsc)93 void init(Context *rsc) { 94 } deinit(Context * rsc)95 void deinit(Context *rsc) { 96 for (uint32_t i = 0; i < RS_MAX_SAMPLER_SLOT; i ++) { 97 mSamplers[i].clear(); 98 } 99 } 100 // Cache of all existing raster programs. 101 std::vector<Sampler *> mAllSamplers; 102 }; 103 104 } // namespace renderscript 105 } // namespace android 106 #endif //ANDROID_RS_SAMPLER_H 107 108 109 110