1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 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_SAMPLER_H 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define ANDROID_RS_SAMPLER_H 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsAllocation.h" 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsconst static uint32_t RS_MAX_SAMPLER_SLOT = 16; 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsclass SamplerState; 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 *****************************************************************************/ 37afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass Sampler : public ObjectBase { 38326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 39c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk struct Hal { 40c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk mutable void *drv; 41c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk 42c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk struct State { 43c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk RsSamplerValue magFilter; 44c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk RsSamplerValue minFilter; 45c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk RsSamplerValue wrapS; 46c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk RsSamplerValue wrapT; 47c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk RsSamplerValue wrapR; 48c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk float aniso; 49c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk }; 50c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk State state; 51c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk }; 52c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchouk Hal mHal; 53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 54407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk static ObjectBaseRef<Sampler> getSampler(Context *, 55407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue magFilter, 56407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue minFilter, 57407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue wrapS, 58407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue wrapT, 59407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue wrapR, 60407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk float aniso = 1.0f); 61407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk void bindToContext(SamplerState *, uint32_t slot); 62407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk void unbindFromContext(SamplerState *); 63407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk 64e3150cfb3edb028407669e4a65e087eae77e718cJason Sams virtual void serialize(Context *rsc, OStream *stream) const; 65407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_SAMPLER; } 66407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk static Sampler *createFromStream(Context *rsc, IStream *stream); 67407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk 68c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchoukprotected: 69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int32_t mBoundSlot; 70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 71c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk virtual void preDestroy() const; 72c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk virtual ~Sampler(); 73c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsprivate: 75e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams Sampler(Context *); 76c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk Sampler(Context *, 77c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue magFilter, 78c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue minFilter, 79c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue wrapS, 80c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue wrapT, 81c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue wrapR, 82c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk float aniso = 1.0f); 83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 86afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass SamplerState { 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ObjectBaseRef<Sampler> mSamplers[RS_MAX_SAMPLER_SLOT]; 89c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk void init(Context *rsc) { 90c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk } 91c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk void deinit(Context *rsc) { 92c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk for (uint32_t i = 0; i < RS_MAX_SAMPLER_SLOT; i ++) { 93c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk mSamplers[i].clear(); 94c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk } 95c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk } 96c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk // Cache of all existing raster programs. 97c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk Vector<Sampler *> mAllSamplers; 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif //ANDROID_RS_SAMPLER_H 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 106