| #ifndef _RSGEXECUTIONCONTEXT_HPP |
| #define _RSGEXECUTIONCONTEXT_HPP |
| /*------------------------------------------------------------------------- |
| * drawElements Quality Program Random Shader Generator |
| * ---------------------------------------------------- |
| * |
| * Copyright 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *//*! |
| * \file |
| * \brief Shader Execution Context. |
| *//*--------------------------------------------------------------------*/ |
| |
| #include "rsgDefs.hpp" |
| #include "rsgVariable.hpp" |
| #include "rsgVariableValue.hpp" |
| #include "rsgSamplers.hpp" |
| |
| #include <vector> |
| #include <map> |
| |
| namespace rsg |
| { |
| |
| enum |
| { |
| EXEC_VEC_WIDTH = 64 |
| }; |
| |
| typedef ConstStridedValueAccess<EXEC_VEC_WIDTH> ExecConstValueAccess; |
| typedef StridedValueAccess<EXEC_VEC_WIDTH> ExecValueAccess; |
| typedef ValueStorage<EXEC_VEC_WIDTH> ExecValueStorage; |
| |
| typedef std::map<const Variable*, ExecValueStorage*> VarValueMap; |
| |
| class ExecMaskStorage |
| { |
| public: |
| ExecMaskStorage (bool initVal = true); |
| |
| ExecValueAccess getValue (void); |
| ExecConstValueAccess getValue (void) const; |
| |
| private: |
| Scalar m_data[EXEC_VEC_WIDTH]; |
| }; |
| |
| class ExecutionContext |
| { |
| public: |
| ExecutionContext (const Sampler2DMap& samplers2D, const SamplerCubeMap& samplersCube); |
| ~ExecutionContext (void); |
| |
| ExecValueAccess getValue (const Variable* variable); |
| const Sampler2D& getSampler2D (const Variable* variable) const; |
| const SamplerCube& getSamplerCube (const Variable* variable) const; |
| |
| ExecConstValueAccess getExecutionMask (void) const; |
| |
| void andExecutionMask (ExecConstValueAccess value); // Pushes computed value |
| void pushExecutionMask (ExecConstValueAccess value); |
| |
| void popExecutionMask (void); |
| |
| protected: |
| ExecutionContext (const ExecutionContext& other); |
| ExecutionContext& operator= (const ExecutionContext& other); |
| |
| VarValueMap m_varValues; |
| const Sampler2DMap& m_samplers2D; |
| const SamplerCubeMap& m_samplersCube; |
| std::vector<ExecMaskStorage> m_execMaskStack; |
| }; |
| |
| void assignMasked (ExecValueAccess dst, ExecConstValueAccess src, ExecConstValueAccess mask); |
| |
| } // rsg |
| |
| #endif // _RSGEXECUTIONCONTEXT_HPP |