1#ifndef _GLSSAMPLEROBJECTTEST_HPP
2#define _GLSSAMPLEROBJECTTEST_HPP
3/*-------------------------------------------------------------------------
4 * drawElements Quality Program OpenGL ES 3.0 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 Sampler object testcases.
24 *//*--------------------------------------------------------------------*/
25
26#include "tcuTestCase.hpp"
27#include "tcuTestLog.hpp"
28#include "deRandom.hpp"
29#include "tcuSurface.hpp"
30#include "gluRenderContext.hpp"
31#include "glw.h"
32#include "glwEnums.hpp"
33#include "gluShaderProgram.hpp"
34
35namespace deqp
36{
37namespace gls
38{
39
40class TextureSamplerTest : public tcu::TestCase
41{
42public:
43	struct SamplingState
44	{
45		GLenum	minFilter;
46		GLenum	magFilter;
47		GLenum	wrapT;
48		GLenum	wrapS;
49		GLenum	wrapR;
50		GLfloat	minLod;
51		GLfloat	maxLod;
52	};
53
54	struct TestSpec
55	{
56		const char*		name;
57		const char*		desc;
58		GLenum			target;
59		SamplingState	textureState;
60		SamplingState	samplerState;
61	};
62
63						TextureSamplerTest	(tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const TestSpec& spec);
64						~TextureSamplerTest	(void);
65
66	void				init				(void);
67	void				deinit				(void);
68
69	IterateResult		iterate				(void);
70
71private:
72	void				renderReferences		(tcu::Surface& textureRef, tcu::Surface& samplerRef, int x, int y);
73	void				renderResults			(tcu::Surface& textureResult, tcu::Surface& samplerResult, int x, int y);
74
75	void				render					(void);
76
77	static void			setTextureState			(const glw::Functions& gl, GLenum target, SamplingState state);
78	static void			setSamplerState			(const glw::Functions& gl, SamplingState state, GLuint sampler);
79
80	static GLuint		createTexture2D			(const glw::Functions& gl);
81	static GLuint		createTexture3D			(const glw::Functions& gl);
82	static GLuint		createTextureCube		(const glw::Functions& gl);
83	static GLuint		createTexture			(const glw::Functions& gl, GLenum target);
84
85	static const char*	selectVertexShader		(GLenum target);
86	static const char*	selectFragmentShader	(GLenum target);
87
88	glu::RenderContext& m_renderCtx;
89	glu::ShaderProgram*	m_program;
90
91	GLenum				m_target;
92	SamplingState		m_textureState;
93	SamplingState		m_samplerState;
94
95	de::Random			m_random;
96};
97
98class MultiTextureSamplerTest : public tcu::TestCase
99{
100public:
101	struct SamplingState
102	{
103		GLenum	minFilter;
104		GLenum	magFilter;
105		GLenum	wrapT;
106		GLenum	wrapS;
107		GLenum	wrapR;
108		GLfloat	minLod;
109		GLfloat	maxLod;
110	};
111
112	struct TestSpec
113	{
114		const char*		name;
115		const char*		desc;
116		GLenum			target;
117		SamplingState	textureState1;
118		SamplingState	textureState2;
119		SamplingState	samplerState;
120	};
121
122						MultiTextureSamplerTest		(tcu::TestContext& testCtx, glu::RenderContext& renderCtx, const TestSpec& spec);
123						~MultiTextureSamplerTest	(void);
124
125	void				init						(void);
126	void				deinit						(void);
127
128	IterateResult		iterate						(void);
129
130private:
131	void				renderReferences			(tcu::Surface& textureRef, tcu::Surface& samplerRef, int x, int y);
132	void				renderResults				(tcu::Surface& textureResult, tcu::Surface& samplerResult, int x, int y);
133
134	void				render						(void);
135
136	static void			setTextureState				(const glw::Functions& gl, GLenum target, SamplingState state);
137	static void			setSamplerState				(const glw::Functions& gl, SamplingState state, GLuint sampler);
138
139	static GLuint		createTexture2D				(const glw::Functions& gl, int id);
140	static GLuint		createTexture3D				(const glw::Functions& gl, int id);
141	static GLuint		createTextureCube			(const glw::Functions& gl, int id);
142	static GLuint		createTexture				(const glw::Functions& gl, GLenum target, int id);
143
144	static const char*	selectVertexShader			(GLenum target);
145	static const char*	selectFragmentShader		(GLenum target);
146
147	glu::RenderContext& m_renderCtx;
148	glu::ShaderProgram*	m_program;
149
150	GLenum				m_target;
151	SamplingState		m_textureState1;
152	SamplingState		m_textureState2;
153	SamplingState		m_samplerState;
154
155	de::Random			m_random;
156};
157
158
159} // gls
160} // deqp
161
162#endif // _GLSSAMPLEROBJECTTEST_HPP
163