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 543abc05bba372af0f6f89e54071f87777f5efeb49Ling Wan void operator delete(void* ptr); 553abc05bba372af0f6f89e54071f87777f5efeb49Ling Wan 56407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk static ObjectBaseRef<Sampler> getSampler(Context *, 57407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue magFilter, 58407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue minFilter, 59407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue wrapS, 60407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue wrapT, 61407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk RsSamplerValue wrapR, 62407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk float aniso = 1.0f); 63407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk void bindToContext(SamplerState *, uint32_t slot); 64407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk void unbindFromContext(SamplerState *); 65407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk 66e3150cfb3edb028407669e4a65e087eae77e718cJason Sams virtual void serialize(Context *rsc, OStream *stream) const; 67407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_SAMPLER; } 68407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk static Sampler *createFromStream(Context *rsc, IStream *stream); 69407f8ca5a1cd2269dba356f40ab32a5ff934a6a2Alex Sakhartchouk 70c2c02a88641620f50a69cc174077ac8bbef40478Alex Sakhartchoukprotected: 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams int32_t mBoundSlot; 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 73c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk virtual void preDestroy() const; 74c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk virtual ~Sampler(); 75c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk 76326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsprivate: 77e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams Sampler(Context *); 78c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk Sampler(Context *, 79c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue magFilter, 80c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue minFilter, 81c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue wrapS, 82c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue wrapT, 83c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk RsSamplerValue wrapR, 84c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk float aniso = 1.0f); 85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 88afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass SamplerState { 89326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ObjectBaseRef<Sampler> mSamplers[RS_MAX_SAMPLER_SLOT]; 91c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk void init(Context *rsc) { 92c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk } 93c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk void deinit(Context *rsc) { 94c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk for (uint32_t i = 0; i < RS_MAX_SAMPLER_SLOT; i ++) { 95c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk mSamplers[i].clear(); 96c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk } 97c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk } 98c700e649ca44d0dcff8b271e42d949ea72fe3c63Alex Sakhartchouk // Cache of all existing raster programs. 99b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni Vector<Sampler *> mAllSamplers; 100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif //ANDROID_RS_SAMPLER_H 105b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni 106b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni 107b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni 108