Home | History | Annotate | Download | only in egl
      1 #ifndef _TEGLRENDERCASE_HPP
      2 #define _TEGLRENDERCASE_HPP
      3 /*-------------------------------------------------------------------------
      4  * drawElements Quality Program EGL 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 Base class for rendering tests.
     24  *//*--------------------------------------------------------------------*/
     25 
     26 #include "tcuDefs.hpp"
     27 #include "teglTestCase.hpp"
     28 #include "teglSimpleConfigCase.hpp"
     29 
     30 #include <vector>
     31 
     32 namespace deqp
     33 {
     34 namespace egl
     35 {
     36 
     37 class RenderCase : public SimpleConfigCase
     38 {
     39 public:
     40 						RenderCase				(EglTestContext& eglTestCtx, const char* name, const char* description, eglw::EGLint surfaceTypeMask, const eglu::FilterList& filters);
     41 	virtual				~RenderCase				(void);
     42 
     43 protected:
     44 	struct Config
     45 	{
     46 		eglw::EGLConfig		config;
     47 		eglw::EGLint		surfaceTypeBit;
     48 		eglw::EGLint		apiBits;
     49 
     50 		Config (eglw::EGLConfig config_, eglw::EGLint surfaceTypeBit_, eglw::EGLint apiBits_)
     51 			: config			(config_)
     52 			, surfaceTypeBit	(surfaceTypeBit_)
     53 			, apiBits			(apiBits_)
     54 		{
     55 		}
     56 	};
     57 
     58 	virtual void		executeForConfig		(eglw::EGLDisplay display, eglw::EGLConfig config);
     59 	virtual void		executeForSurface		(eglw::EGLDisplay display, eglw::EGLSurface surface, const Config& config) = DE_NULL;
     60 
     61 	eglw::EGLint		m_surfaceTypeMask;
     62 };
     63 
     64 class SingleContextRenderCase : public RenderCase
     65 {
     66 public:
     67 					SingleContextRenderCase		(EglTestContext& eglTestCtx, const char* name, const char* description, eglw::EGLint apiMask, eglw::EGLint surfaceTypeMask, const eglu::FilterList& filters);
     68 	virtual			~SingleContextRenderCase	(void);
     69 
     70 protected:
     71 	virtual void	executeForSurface			(eglw::EGLDisplay display, eglw::EGLSurface surface, const Config& config);
     72 	virtual void	executeForContext			(eglw::EGLDisplay display, eglw::EGLContext context, eglw::EGLSurface surface, const Config& config) = DE_NULL;
     73 
     74 	eglw::EGLint	m_apiMask;
     75 };
     76 
     77 class MultiContextRenderCase : public RenderCase
     78 {
     79 public:
     80 					MultiContextRenderCase		(EglTestContext& eglTestCtx, const char* name, const char* description, eglw::EGLint api, eglw::EGLint surfaceType, const eglu::FilterList& filters, int numContextsPerApi);
     81 	virtual			~MultiContextRenderCase		(void);
     82 
     83 protected:
     84 	virtual void	executeForSurface			(eglw::EGLDisplay display, eglw::EGLSurface surface, const Config& config);
     85 	virtual void	executeForContexts			(eglw::EGLDisplay display, eglw::EGLSurface surface, const Config& config, const std::vector<std::pair<eglw::EGLint, eglw::EGLContext> >& contexts) = DE_NULL;
     86 
     87 	int				m_numContextsPerApi;
     88 	eglw::EGLint	m_apiMask;
     89 };
     90 
     91 class RenderFilterList : public NamedFilterList
     92 {
     93 public:
     94 	RenderFilterList (const char* name, const char* description, eglw::EGLint surfaceTypeMask)
     95 		: NamedFilterList	(name, description)
     96 		, m_surfaceTypeMask	(surfaceTypeMask)
     97 	{
     98 	}
     99 
    100 	eglw::EGLint getSurfaceTypeMask (void) const
    101 	{
    102 		return m_surfaceTypeMask;
    103 	}
    104 
    105 private:
    106 	eglw::EGLint	m_surfaceTypeMask;
    107 };
    108 
    109 void			getDefaultRenderFilterLists	(std::vector<RenderFilterList>& configSets, const eglu::FilterList& baseFilters);
    110 
    111 //! Client APIs supported in current build
    112 eglw::EGLint	getBuildClientAPIMask		(void);
    113 
    114 } // egl
    115 } // deqp
    116 
    117 #endif // _TEGLRENDERCASE_HPP
    118