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