Fix PIPELINE_STAGE_TOP_OF_PIPE_BIT usage in api tests
[platform/upstream/VK-GL-CTS.git] / modules / egl / teglRenderCase.hpp
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