1e5c31af7Sopenharmony_ci#ifndef _GL4CSHADERBALLOTTESTS_HPP 2e5c31af7Sopenharmony_ci#define _GL4CSHADERBALLOTTESTS_HPP 3e5c31af7Sopenharmony_ci/*------------------------------------------------------------------------- 4e5c31af7Sopenharmony_ci* OpenGL Conformance Test Suite 5e5c31af7Sopenharmony_ci* ----------------------------- 6e5c31af7Sopenharmony_ci* 7e5c31af7Sopenharmony_ci* Copyright (c) 2014-2017 The Khronos Group Inc. 8e5c31af7Sopenharmony_ci* 9e5c31af7Sopenharmony_ci* Licensed under the Apache License, Version 2.0 (the "License"); 10e5c31af7Sopenharmony_ci* you may not use this file except in compliance with the License. 11e5c31af7Sopenharmony_ci* You may obtain a copy of the License at 12e5c31af7Sopenharmony_ci* 13e5c31af7Sopenharmony_ci* http://www.apache.org/licenses/LICENSE-2.0 14e5c31af7Sopenharmony_ci* 15e5c31af7Sopenharmony_ci* Unless required by applicable law or agreed to in writing, software 16e5c31af7Sopenharmony_ci* distributed under the License is distributed on an "AS IS" BASIS, 17e5c31af7Sopenharmony_ci* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18e5c31af7Sopenharmony_ci* See the License for the specific language governing permissions and 19e5c31af7Sopenharmony_ci* limitations under the License. 20e5c31af7Sopenharmony_ci* 21e5c31af7Sopenharmony_ci*/ /*! 22e5c31af7Sopenharmony_ci* \file gl4cShaderBallotTests.hpp 23e5c31af7Sopenharmony_ci* \brief Conformance tests for the ARB_shader_ballot functionality. 24e5c31af7Sopenharmony_ci*/ /*-------------------------------------------------------------------*/ 25e5c31af7Sopenharmony_ci 26e5c31af7Sopenharmony_ci#include "esextcTestCaseBase.hpp" 27e5c31af7Sopenharmony_ci#include "glcTestCase.hpp" 28e5c31af7Sopenharmony_ci#include "gluShaderProgram.hpp" 29e5c31af7Sopenharmony_ci 30e5c31af7Sopenharmony_ci#include <map> 31e5c31af7Sopenharmony_ci#include <vector> 32e5c31af7Sopenharmony_ci 33e5c31af7Sopenharmony_cinamespace gl4cts 34e5c31af7Sopenharmony_ci{ 35e5c31af7Sopenharmony_ciclass ShaderBallotBaseTestCase : public glcts::TestCaseBase 36e5c31af7Sopenharmony_ci{ 37e5c31af7Sopenharmony_cipublic: 38e5c31af7Sopenharmony_ci class ShaderPipeline 39e5c31af7Sopenharmony_ci { 40e5c31af7Sopenharmony_ci private: 41e5c31af7Sopenharmony_ci glu::ShaderProgram* m_programRender; 42e5c31af7Sopenharmony_ci glu::ShaderProgram* m_programCompute; 43e5c31af7Sopenharmony_ci glu::ShaderType m_testedShader; 44e5c31af7Sopenharmony_ci 45e5c31af7Sopenharmony_ci std::vector<std::string> m_shaders[glu::SHADERTYPE_LAST]; 46e5c31af7Sopenharmony_ci char** m_shaderChunks[glu::SHADERTYPE_LAST]; 47e5c31af7Sopenharmony_ci 48e5c31af7Sopenharmony_ci std::map<std::string, std::string> m_specializationMap; 49e5c31af7Sopenharmony_ci 50e5c31af7Sopenharmony_ci void renderQuad(deqp::Context& context); 51e5c31af7Sopenharmony_ci void executeComputeShader(deqp::Context& context); 52e5c31af7Sopenharmony_ci 53e5c31af7Sopenharmony_ci public: 54e5c31af7Sopenharmony_ci ShaderPipeline(glu::ShaderType testedShader, const std::string& contentSnippet, 55e5c31af7Sopenharmony_ci std::map<std::string, std::string> specMap = std::map<std::string, std::string>()); 56e5c31af7Sopenharmony_ci ~ShaderPipeline(); 57e5c31af7Sopenharmony_ci 58e5c31af7Sopenharmony_ci const char* const* getShaderParts(glu::ShaderType shaderType) const; 59e5c31af7Sopenharmony_ci unsigned int getShaderPartsCount(glu::ShaderType shaderType) const; 60e5c31af7Sopenharmony_ci 61e5c31af7Sopenharmony_ci void use(deqp::Context& context); 62e5c31af7Sopenharmony_ci 63e5c31af7Sopenharmony_ci inline void setShaderPrograms(glu::ShaderProgram* programRender, glu::ShaderProgram* programCompute) 64e5c31af7Sopenharmony_ci { 65e5c31af7Sopenharmony_ci m_programRender = programRender; 66e5c31af7Sopenharmony_ci m_programCompute = programCompute; 67e5c31af7Sopenharmony_ci } 68e5c31af7Sopenharmony_ci 69e5c31af7Sopenharmony_ci inline const std::map<std::string, std::string>& getSpecializationMap() const 70e5c31af7Sopenharmony_ci { 71e5c31af7Sopenharmony_ci return m_specializationMap; 72e5c31af7Sopenharmony_ci } 73e5c31af7Sopenharmony_ci 74e5c31af7Sopenharmony_ci void test(deqp::Context& context); 75e5c31af7Sopenharmony_ci }; 76e5c31af7Sopenharmony_ci 77e5c31af7Sopenharmony_ciprotected: 78e5c31af7Sopenharmony_ci /* Protected methods */ 79e5c31af7Sopenharmony_ci void createShaderPrograms(ShaderPipeline& pipeline); 80e5c31af7Sopenharmony_ci 81e5c31af7Sopenharmony_ci /* Protected members*/ 82e5c31af7Sopenharmony_ci std::vector<ShaderPipeline*> m_shaderPipelines; 83e5c31af7Sopenharmony_ci 84e5c31af7Sopenharmony_ci typedef std::vector<ShaderPipeline*>::iterator ShaderPipelineIter; 85e5c31af7Sopenharmony_ci 86e5c31af7Sopenharmony_cipublic: 87e5c31af7Sopenharmony_ci /* Public methods */ 88e5c31af7Sopenharmony_ci ShaderBallotBaseTestCase(deqp::Context& context, const char* name, const char* description) 89e5c31af7Sopenharmony_ci : TestCaseBase(context, glcts::ExtParameters(glu::GLSL_VERSION_450, glcts::EXTENSIONTYPE_EXT), name, 90e5c31af7Sopenharmony_ci description) 91e5c31af7Sopenharmony_ci { 92e5c31af7Sopenharmony_ci } 93e5c31af7Sopenharmony_ci 94e5c31af7Sopenharmony_ci virtual ~ShaderBallotBaseTestCase(); 95e5c31af7Sopenharmony_ci 96e5c31af7Sopenharmony_ci static bool validateScreenPixels(deqp::Context& context, tcu::Vec4 desiredColor, tcu::Vec4 ignoredColor); 97e5c31af7Sopenharmony_ci static bool validateScreenPixelsSameColor(deqp::Context& context, tcu::Vec4 ignoredColor); 98e5c31af7Sopenharmony_ci static bool validateColor(tcu::Vec4 testedColor, tcu::Vec4 desiredColor); 99e5c31af7Sopenharmony_ci}; 100e5c31af7Sopenharmony_ci 101e5c31af7Sopenharmony_ci/** Test verifies availability of new build-in features 102e5c31af7Sopenharmony_ci**/ 103e5c31af7Sopenharmony_ciclass ShaderBallotAvailabilityTestCase : public ShaderBallotBaseTestCase 104e5c31af7Sopenharmony_ci{ 105e5c31af7Sopenharmony_cipublic: 106e5c31af7Sopenharmony_ci /* Public methods */ 107e5c31af7Sopenharmony_ci ShaderBallotAvailabilityTestCase(deqp::Context& context); 108e5c31af7Sopenharmony_ci 109e5c31af7Sopenharmony_ci void init(); 110e5c31af7Sopenharmony_ci 111e5c31af7Sopenharmony_ci tcu::TestNode::IterateResult iterate(); 112e5c31af7Sopenharmony_ci}; 113e5c31af7Sopenharmony_ci 114e5c31af7Sopenharmony_ci/** Test verifies values of gl_SubGroup*MaskARB variables 115e5c31af7Sopenharmony_ci**/ 116e5c31af7Sopenharmony_ciclass ShaderBallotBitmasksTestCase : public ShaderBallotBaseTestCase 117e5c31af7Sopenharmony_ci{ 118e5c31af7Sopenharmony_cipublic: 119e5c31af7Sopenharmony_ci /* Public methods */ 120e5c31af7Sopenharmony_ci ShaderBallotBitmasksTestCase(deqp::Context& context); 121e5c31af7Sopenharmony_ci 122e5c31af7Sopenharmony_ci void init(); 123e5c31af7Sopenharmony_ci 124e5c31af7Sopenharmony_ci tcu::TestNode::IterateResult iterate(); 125e5c31af7Sopenharmony_ci 126e5c31af7Sopenharmony_ciprotected: 127e5c31af7Sopenharmony_ci /* Protected members*/ 128e5c31af7Sopenharmony_ci std::map<std::string, std::string> m_maskVars; 129e5c31af7Sopenharmony_ci 130e5c31af7Sopenharmony_ci typedef std::map<std::string, std::string>::iterator MaskVarIter; 131e5c31af7Sopenharmony_ci}; 132e5c31af7Sopenharmony_ci 133e5c31af7Sopenharmony_ci/** Test verifies ballotARB calls and returned results 134e5c31af7Sopenharmony_ci**/ 135e5c31af7Sopenharmony_ciclass ShaderBallotFunctionBallotTestCase : public ShaderBallotBaseTestCase 136e5c31af7Sopenharmony_ci{ 137e5c31af7Sopenharmony_cipublic: 138e5c31af7Sopenharmony_ci /* Public methods */ 139e5c31af7Sopenharmony_ci ShaderBallotFunctionBallotTestCase(deqp::Context& context); 140e5c31af7Sopenharmony_ci 141e5c31af7Sopenharmony_ci void init(); 142e5c31af7Sopenharmony_ci 143e5c31af7Sopenharmony_ci tcu::TestNode::IterateResult iterate(); 144e5c31af7Sopenharmony_ci}; 145e5c31af7Sopenharmony_ci 146e5c31af7Sopenharmony_ci/** Test verifies readInvocationARB and readFirstInvocationARB function calls 147e5c31af7Sopenharmony_ci**/ 148e5c31af7Sopenharmony_ciclass ShaderBallotFunctionReadTestCase : public ShaderBallotBaseTestCase 149e5c31af7Sopenharmony_ci{ 150e5c31af7Sopenharmony_cipublic: 151e5c31af7Sopenharmony_ci /* Public methods */ 152e5c31af7Sopenharmony_ci ShaderBallotFunctionReadTestCase(deqp::Context& context); 153e5c31af7Sopenharmony_ci 154e5c31af7Sopenharmony_ci void init(); 155e5c31af7Sopenharmony_ci 156e5c31af7Sopenharmony_ci tcu::TestNode::IterateResult iterate(); 157e5c31af7Sopenharmony_ci}; 158e5c31af7Sopenharmony_ci 159e5c31af7Sopenharmony_ciclass ShaderBallotTests : public deqp::TestCaseGroup 160e5c31af7Sopenharmony_ci{ 161e5c31af7Sopenharmony_cipublic: 162e5c31af7Sopenharmony_ci ShaderBallotTests(deqp::Context& context); 163e5c31af7Sopenharmony_ci void init(void); 164e5c31af7Sopenharmony_ci 165e5c31af7Sopenharmony_ciprivate: 166e5c31af7Sopenharmony_ci ShaderBallotTests(const ShaderBallotTests& other); 167e5c31af7Sopenharmony_ci ShaderBallotTests& operator=(const ShaderBallotTests& other); 168e5c31af7Sopenharmony_ci}; 169e5c31af7Sopenharmony_ci 170e5c31af7Sopenharmony_ci} /* gl4cts namespace */ 171e5c31af7Sopenharmony_ci 172e5c31af7Sopenharmony_ci#endif // _GL4CSHADERBALLOTTESTS_HPP 173