1af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#ifndef _RSGGENERATORSTATE_HPP 2af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#define _RSGGENERATORSTATE_HPP 3af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com/*------------------------------------------------------------------------- 4af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * drawElements Quality Program Random Shader Generator 5af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * ---------------------------------------------------- 6af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * 7af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * Copyright 2014 The Android Open Source Project 8af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * 9af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * Licensed under the Apache License, Version 2.0 (the "License"); 10af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * you may not use this file except in compliance with the License. 11af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * You may obtain a copy of the License at 12c636308f0ab6fb1af7589eaf0917103dc22fa61ephilip.liard@gmail.com * 13af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * http://www.apache.org/licenses/LICENSE-2.0 14af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * 15af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * Unless required by applicable law or agreed to in writing, software 16af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * distributed under the License is distributed on an "AS IS" BASIS, 17fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com * See the License for the specific language governing permissions and 19fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com * limitations under the License. 20af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * 21af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com *//*! 22af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * \file 23af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com * \brief Generator state. 24af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com *//*--------------------------------------------------------------------*/ 25af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 26af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#include "rsgDefs.hpp" 27af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#include "rsgParameters.hpp" 28af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#include "deRandom.hpp" 29af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#include "rsgNameAllocator.hpp" 30af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 31af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#include <vector> 32af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 33af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.comnamespace rsg 34af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com{ 35af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 36af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.comclass Shader; 37af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.comclass VariableManager; 38af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.comclass VariableType; 39af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.comclass Statement; 40af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 41af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.comenum ExpressionFlags 42af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com{ 43af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com CONST_EXPR = (1<<0), 44af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com NO_VAR_ALLOCATION = (1<<1) 45af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com}; 46af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 47af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.comenum 48af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com{ 49af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com PRECEDENCE_MAX = 100 50af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com}; 51af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 52af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.comclass GeneratorState 53af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com{ 54af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.compublic: 55af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com GeneratorState (const ProgramParameters& programParams, de::Random& random); 56af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com ~GeneratorState (void); 57af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 58af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com const ProgramParameters& getProgramParameters (void) const { return m_programParams; } 59af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com de::Random& getRandom (void) { return m_random; } 60af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 61af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com const ShaderParameters& getShaderParameters (void) const { return *m_shaderParams; } 62af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com Shader& getShader (void) { return *m_shader; } 63af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 64af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com void setShader (const ShaderParameters& params, Shader& shader); 65af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 66af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com NameAllocator& getNameAllocator (void) { return m_nameAllocator; } 67af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com VariableManager& getVariableManager (void) { return *m_varManager; } 68af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com const VariableManager& getVariableManager (void) const { return *m_varManager; } 69af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com void setVariableManager (VariableManager& varManager) { m_varManager = &varManager; } 70af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 71af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com // \todo [2011-06-10 pyry] Could we not expose whole statement stack to everyone? 72af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com int getStatementDepth (void) const { return (int)m_statementStack->size(); } 73af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com void setStatementStack (std::vector<Statement*>& stack) { m_statementStack = &stack; } 74af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com const Statement* getStatementStackEntry (int ndx) const { return m_statementStack->at(ndx); } 75af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 76af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com int getExpressionDepth (void) const { return m_expressionDepth; } 77af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com void setExpressionDepth (int depth) { m_expressionDepth = depth; } 78af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 79af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com // \todo [2011-03-21 pyry] A bit of a hack... Move to ValueRange? 80af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com deUint32 getExpressionFlags (void) const { return m_exprFlagStack.back(); } 81af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com void pushExpressionFlags (deUint32 flags) { m_exprFlagStack.push_back(flags); } 82af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com void popExpressionFlags (void) { m_exprFlagStack.pop_back(); } 83af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 84af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com int getPrecedence (void) const { return m_precedenceStack.back(); } 85af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com void pushPrecedence (int precedence) { m_precedenceStack.push_back(precedence); } 86af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com void popPrecedence (void) { m_precedenceStack.pop_back(); } 87af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 88af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.comprivate: 89af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com const ProgramParameters& m_programParams; 90af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com de::Random& m_random; 91af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 92af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com const ShaderParameters* m_shaderParams; 93af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com Shader* m_shader; 94af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 95af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com NameAllocator m_nameAllocator; 96af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com VariableManager* m_varManager; 97af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 98af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com std::vector<Statement*>* m_statementStack; 99fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com int m_expressionDepth; 100af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com std::vector<deUint32> m_exprFlagStack; 101af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com std::vector<int> m_precedenceStack; 102af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com}; 103fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com 104af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com} // rsg 105af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com 106af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com#endif // _RSGGENERATORSTATE_HPP 107af4a2ce290b619b39c2cb2a682ea4d7746d3fb21philip.liard@gmail.com