rsSampler.h revision 407f8ca5a1cd2269dba356f40ab32a5ff934a6a2
1e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy/*
2e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Copyright (C) 2009 The Android Open Source Project
3e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *
4e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * you may not use this file except in compliance with the License.
6e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * You may obtain a copy of the License at
7e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *
8e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *
10e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Unless required by applicable law or agreed to in writing, software
11e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * See the License for the specific language governing permissions and
14e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * limitations under the License.
15e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy */
16e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy
17a1db574036c9bc2d397b69f8200594027e1fff16Romain Guy#ifndef ANDROID_RS_SAMPLER_H
18a1db574036c9bc2d397b69f8200594027e1fff16Romain Guy#define ANDROID_RS_SAMPLER_H
19e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy
20e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy#include "rsAllocation.h"
21e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy#include "RenderScript.h"
22deba785f122a47915756ffd991f5540d952cf937Romain Guy
23e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy// ---------------------------------------------------------------------------
24ce0537b80087a6225273040a987414b1dd081aa0Romain Guynamespace android {
25c7d53494f1fbd9f9d74af89053ff9fdb1ccbac6cRomain Guynamespace renderscript {
26f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy
27c7d53494f1fbd9f9d74af89053ff9fdb1ccbac6cRomain Guyconst static uint32_t RS_MAX_SAMPLER_SLOT = 16;
28079ba2c85b15e882629b8d188f5fbdb42f7f8eeaRomain Guy
29a1db574036c9bc2d397b69f8200594027e1fff16Romain Guyclass SamplerState;
3085bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy/*****************************************************************************
31e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * CAUTION
3285bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy *
339d5316e3f56d138504565ff311145ac01621dff4Romain Guy * Any layout changes for this class may require a corresponding change to be
349d5316e3f56d138504565ff311145ac01621dff4Romain Guy * made to frameworks/compile/libbcc/lib/ScriptCRT/rs_core.c, which contains
3585bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy * a partial copy of the information below.
36e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *
37e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy *****************************************************************************/
389d5316e3f56d138504565ff311145ac01621dff4Romain Guyclass Sampler : public ObjectBase {
399d5316e3f56d138504565ff311145ac01621dff4Romain Guypublic:
409d5316e3f56d138504565ff311145ac01621dff4Romain Guy    struct Hal {
419d5316e3f56d138504565ff311145ac01621dff4Romain Guy        mutable void *drv;
429d5316e3f56d138504565ff311145ac01621dff4Romain Guy
439d5316e3f56d138504565ff311145ac01621dff4Romain Guy        struct State {
449d5316e3f56d138504565ff311145ac01621dff4Romain Guy            RsSamplerValue magFilter;
457ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy            RsSamplerValue minFilter;
467ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy            RsSamplerValue wrapS;
479d5316e3f56d138504565ff311145ac01621dff4Romain Guy            RsSamplerValue wrapT;
489d5316e3f56d138504565ff311145ac01621dff4Romain Guy            RsSamplerValue wrapR;
49e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy            float aniso;
50e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy        };
51e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy        State state;
52e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy    };
53ce0537b80087a6225273040a987414b1dd081aa0Romain Guy    Hal mHal;
5485bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy
55e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy    static ObjectBaseRef<Sampler> getSampler(Context *,
56e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy                                             RsSamplerValue magFilter,
57ce0537b80087a6225273040a987414b1dd081aa0Romain Guy                                             RsSamplerValue minFilter,
58f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy                                             RsSamplerValue wrapS,
59f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy                                             RsSamplerValue wrapT,
60e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy                                             RsSamplerValue wrapR,
61e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy                                             float aniso = 1.0f);
62e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy    void bindToContext(SamplerState *, uint32_t slot);
63e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy    void unbindFromContext(SamplerState *);
64e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy
65e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy    virtual void serialize(OStream *stream) const;
66ce0537b80087a6225273040a987414b1dd081aa0Romain Guy    virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_SAMPLER; }
67f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy    static Sampler *createFromStream(Context *rsc, IStream *stream);
68f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy
69e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyprotected:
70e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy    int32_t mBoundSlot;
71ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
72f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy    virtual void preDestroy() const;
73f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy    virtual ~Sampler();
74e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy
75e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guyprivate:
76e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy    Sampler(Context *);
77bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy    Sampler(Context *,
78bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy            RsSamplerValue magFilter,
79bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy            RsSamplerValue minFilter,
80ce0537b80087a6225273040a987414b1dd081aa0Romain Guy            RsSamplerValue wrapS,
81bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy            RsSamplerValue wrapT,
82f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy            RsSamplerValue wrapR,
83f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy            float aniso = 1.0f);
84bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy};
85ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
86f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy
87f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guyclass SamplerState {
88bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guypublic:
89bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy    ObjectBaseRef<Sampler> mSamplers[RS_MAX_SAMPLER_SLOT];
90ce0537b80087a6225273040a987414b1dd081aa0Romain Guy    void init(Context *rsc) {
91f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy    }
92f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy    void deinit(Context *rsc) {
93bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy        for (uint32_t i = 0; i < RS_MAX_SAMPLER_SLOT; i ++) {
94bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy            mSamplers[i].clear();
95ce0537b80087a6225273040a987414b1dd081aa0Romain Guy        }
96f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy    }
97f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy    // Cache of all existing raster programs.
98bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy    Vector<Sampler *> mAllSamplers;
99bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy};
100f6a11b8a9e25ff9861bbba19251bea84d8a5daf2Romain Guy
101bd6b79b40247aea7bfe13d0831c6c0472df6c636Romain Guy}
102bd6b79b40247aea7bfe13d0831c6c0472df6c636Romain Guy}
103bd6b79b40247aea7bfe13d0831c6c0472df6c636Romain Guy#endif //ANDROID_RS_SAMPLER_H
104ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
105bd6b79b40247aea7bfe13d0831c6c0472df6c636Romain Guy
106bd6b79b40247aea7bfe13d0831c6c0472df6c636Romain Guy
107bd6b79b40247aea7bfe13d0831c6c0472df6c636Romain Guy