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