1#ifndef _GLSRANDOMSHADERPROGRAM_HPP
2#define _GLSRANDOMSHADERPROGRAM_HPP
3/*-------------------------------------------------------------------------
4 * drawElements Quality Program OpenGL (ES) Module
5 * -----------------------------------------------
6 *
7 * Copyright 2014 The Android Open Source Project
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 *
21 *//*!
22 * \file
23 * \brief sglr-rsg adaptation.
24 *//*--------------------------------------------------------------------*/
25
26#include "tcuDefs.hpp"
27#include "sglrContext.hpp"
28#include "rsgExecutionContext.hpp"
29
30namespace rsg
31{
32class Shader;
33class ShaderInput;
34}
35
36namespace deqp
37{
38namespace gls
39{
40
41class RandomShaderProgram : public sglr::ShaderProgram
42{
43public:
44										RandomShaderProgram			(const rsg::Shader& vertexShader, const rsg::Shader& fragmentShader, int numUnifiedUniforms, const rsg::ShaderInput* const* unifiedUniforms);
45
46private:
47	virtual void						shadeVertices				(const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const;
48	virtual void						shadeFragments				(rr::FragmentPacket* packets, const int numPackets, const rr::FragmentShadingContext& context) const;
49
50	void								refreshUniforms				(void) const;
51
52	const rsg::Shader&					m_vertexShader;
53	const rsg::Shader&					m_fragmentShader;
54	const int							m_numUnifiedUniforms;
55	const rsg::ShaderInput* const*		m_unifiedUniforms;
56
57	const rsg::Variable*				m_positionVar;
58	std::vector<const rsg::Variable*>	m_vertexOutputs;			//!< Other vertex outputs in the order they are passed to fragment shader.
59	const rsg::Variable*				m_fragColorVar;
60
61	rsg::Sampler2DMap					m_sampler2DMap;
62	rsg::SamplerCubeMap					m_samplerCubeMap;
63	mutable rsg::ExecutionContext		m_execCtx;
64};
65
66} // gls
67} // deqp
68
69#endif // _GLSRANDOMSHADERPROGRAM_HPP
70