xref: /aosp_15_r20/external/deqp/external/openglcts/modules/gl/gl4cShaderBallotTests.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1 #ifndef _GL4CSHADERBALLOTTESTS_HPP
2 #define _GL4CSHADERBALLOTTESTS_HPP
3 /*-------------------------------------------------------------------------
4  * OpenGL Conformance Test Suite
5  * -----------------------------
6  *
7  * Copyright (c) 2014-2017 The Khronos Group Inc.
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  gl4cShaderBallotTests.hpp
23 * \brief Conformance tests for the ARB_shader_ballot functionality.
24 */ /*-------------------------------------------------------------------*/
25 
26 #include "esextcTestCaseBase.hpp"
27 #include "glcTestCase.hpp"
28 #include "gluShaderProgram.hpp"
29 
30 #include <map>
31 #include <vector>
32 
33 namespace gl4cts
34 {
35 class ShaderBallotBaseTestCase : public glcts::TestCaseBase
36 {
37 public:
38     class ShaderPipeline
39     {
40     private:
41         glu::ShaderProgram *m_programRender;
42         glu::ShaderProgram *m_programCompute;
43         glu::ShaderType m_testedShader;
44 
45         std::vector<std::string> m_shaders[glu::SHADERTYPE_LAST];
46         char **m_shaderChunks[glu::SHADERTYPE_LAST];
47 
48         std::map<std::string, std::string> m_specializationMap;
49 
50         void renderQuad(deqp::Context &context);
51         void executeComputeShader(deqp::Context &context);
52 
53     public:
54         ShaderPipeline(glu::ShaderType testedShader, const std::string &contentSnippet,
55                        std::map<std::string, std::string> specMap = std::map<std::string, std::string>());
56         ~ShaderPipeline();
57 
58         const char *const *getShaderParts(glu::ShaderType shaderType) const;
59         unsigned int getShaderPartsCount(glu::ShaderType shaderType) const;
60 
61         void use(deqp::Context &context);
62 
setShaderPrograms(glu::ShaderProgram * programRender,glu::ShaderProgram * programCompute)63         inline void setShaderPrograms(glu::ShaderProgram *programRender, glu::ShaderProgram *programCompute)
64         {
65             m_programRender  = programRender;
66             m_programCompute = programCompute;
67         }
68 
getSpecializationMap() const69         inline const std::map<std::string, std::string> &getSpecializationMap() const
70         {
71             return m_specializationMap;
72         }
73 
74         void test(deqp::Context &context);
75     };
76 
77 protected:
78     /* Protected methods */
79     void createShaderPrograms(ShaderPipeline &pipeline);
80 
81     /* Protected members*/
82     std::vector<ShaderPipeline *> m_shaderPipelines;
83 
84     typedef std::vector<ShaderPipeline *>::iterator ShaderPipelineIter;
85 
86 public:
87     /* Public methods */
ShaderBallotBaseTestCase(deqp::Context & context,const char * name,const char * description)88     ShaderBallotBaseTestCase(deqp::Context &context, const char *name, const char *description)
89         : TestCaseBase(context, glcts::ExtParameters(glu::GLSL_VERSION_450, glcts::EXTENSIONTYPE_EXT), name,
90                        description)
91     {
92     }
93 
94     virtual ~ShaderBallotBaseTestCase();
95 
96     static bool validateScreenPixels(deqp::Context &context, tcu::Vec4 desiredColor, tcu::Vec4 ignoredColor);
97     static bool validateScreenPixelsSameColor(deqp::Context &context, tcu::Vec4 ignoredColor);
98     static bool validateColor(tcu::Vec4 testedColor, tcu::Vec4 desiredColor);
99 };
100 
101 /** Test verifies availability of new build-in features
102  **/
103 class ShaderBallotAvailabilityTestCase : public ShaderBallotBaseTestCase
104 {
105 public:
106     /* Public methods */
107     ShaderBallotAvailabilityTestCase(deqp::Context &context);
108 
109     void init();
110 
111     tcu::TestNode::IterateResult iterate();
112 };
113 
114 /** Test verifies values of gl_SubGroup*MaskARB variables
115  **/
116 class ShaderBallotBitmasksTestCase : public ShaderBallotBaseTestCase
117 {
118 public:
119     /* Public methods */
120     ShaderBallotBitmasksTestCase(deqp::Context &context);
121 
122     void init();
123 
124     tcu::TestNode::IterateResult iterate();
125 
126 protected:
127     /* Protected members*/
128     std::map<std::string, std::string> m_maskVars;
129 
130     typedef std::map<std::string, std::string>::iterator MaskVarIter;
131 };
132 
133 /** Test verifies ballotARB calls and returned results
134  **/
135 class ShaderBallotFunctionBallotTestCase : public ShaderBallotBaseTestCase
136 {
137 public:
138     /* Public methods */
139     ShaderBallotFunctionBallotTestCase(deqp::Context &context);
140 
141     void init();
142 
143     tcu::TestNode::IterateResult iterate();
144 };
145 
146 /** Test verifies readInvocationARB and readFirstInvocationARB function calls
147  **/
148 class ShaderBallotFunctionReadTestCase : public ShaderBallotBaseTestCase
149 {
150 public:
151     /* Public methods */
152     ShaderBallotFunctionReadTestCase(deqp::Context &context);
153 
154     void init();
155 
156     tcu::TestNode::IterateResult iterate();
157 };
158 
159 class ShaderBallotTests : public deqp::TestCaseGroup
160 {
161 public:
162     ShaderBallotTests(deqp::Context &context);
163     void init(void);
164 
165 private:
166     ShaderBallotTests(const ShaderBallotTests &other);
167     ShaderBallotTests &operator=(const ShaderBallotTests &other);
168 };
169 
170 } // namespace gl4cts
171 
172 #endif // _GL4CSHADERBALLOTTESTS_HPP
173