Home | History | Annotate | Download | only in glshared
      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 
     35 namespace deqp
     36 {
     37 namespace gls
     38 {
     39 
     40 class TextureSamplerTest : public tcu::TestCase
     41 {
     42 public:
     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 
     71 private:
     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 
     98 class MultiTextureSamplerTest : public tcu::TestCase
     99 {
    100 public:
    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 
    130 private:
    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