#ifndef _GLCSHADERGROUPVOTETESTS_HPP #define _GLCSHADERGROUPVOTETESTS_HPP /*------------------------------------------------------------------------- * OpenGL Conformance Test Suite * ----------------------------- * * Copyright (c) 2017 The Khronos Group Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ /*! * \file glcShaderGroupVoteTests.hpp * \brief Conformance tests for the ARB_shader_group_vote functionality. */ /*-------------------------------------------------------------------*/ #include "esextcTestCaseBase.hpp" #include "glcTestCase.hpp" #include "gluShaderProgram.hpp" #include namespace glcts { class ShaderGroupVoteTestCaseBase : public glcts::TestCaseBase { public: class ComputeShader { private: /* Private members */ std::string m_name; std::string m_shader; glu::ShaderProgram* m_program; tcu::IVec4 m_desiredColor; bool m_compileOnly; /* Private methods */ bool validateScreenPixels(deqp::Context& context, tcu::IVec4 desiredColor); public: /* Public methods */ ComputeShader(const std::string& name, const std::string& shader); ComputeShader(const std::string& name, const std::string& shader, const tcu::IVec4& desiredColor); ~ComputeShader(); void create(deqp::Context& context); void execute(deqp::Context& context); void validate(deqp::Context& context); }; /* Public methods */ ShaderGroupVoteTestCaseBase(deqp::Context& context, ExtParameters& extParam, const char* name, const char* description); void init(); void deinit(); tcu::TestNode::IterateResult iterate(); typedef std::vector::iterator ComputeShaderIter; protected: /* Protected members */ bool m_extensionSupported; std::vector m_shaders; }; /** Test verifies availability of new built-in functions and constants **/ class ShaderGroupVoteAvailabilityTestCase : public ShaderGroupVoteTestCaseBase { public: /* Public methods */ ShaderGroupVoteAvailabilityTestCase(deqp::Context& context, ExtParameters& extParam); }; class ShaderGroupVoteFunctionTestCaseBase : public ShaderGroupVoteTestCaseBase { protected: /* Protected members*/ std::string m_shaderBase; public: /* Public methods */ ShaderGroupVoteFunctionTestCaseBase(deqp::Context& context, ExtParameters& extParam, const char* name, const char* description); }; /** Test verifies allInvocationsARB function calls **/ class ShaderGroupVoteAllInvocationsTestCase : public ShaderGroupVoteFunctionTestCaseBase { public: /* Public methods */ ShaderGroupVoteAllInvocationsTestCase(deqp::Context& context, ExtParameters& extParam); }; /** Test verifies anyInvocationARB function calls **/ class ShaderGroupVoteAnyInvocationTestCase : public ShaderGroupVoteFunctionTestCaseBase { public: /* Public methods */ ShaderGroupVoteAnyInvocationTestCase(deqp::Context& context, ExtParameters& extParam); }; /** Test verifies allInvocationsEqualARB function calls **/ class ShaderGroupVoteAllInvocationsEqualTestCase : public ShaderGroupVoteFunctionTestCaseBase { public: /* Public methods */ ShaderGroupVoteAllInvocationsEqualTestCase(deqp::Context& context, ExtParameters& extParam); }; /** Test verifies allInvocationsARB function calls **/ class ShaderGroupVoteWithVariablesTestCase : public ShaderGroupVoteTestCaseBase { public: /* Public methods */ ShaderGroupVoteWithVariablesTestCase(deqp::Context& context, ExtParameters& extParam); }; /** Test group which encapsulates all ARB_shader_group_vote conformance tests */ class ShaderGroupVote : public deqp::TestCaseGroup { public: /* Public methods */ ShaderGroupVote(deqp::Context& context); void init(); private: ShaderGroupVote(const ShaderGroupVote& other); }; } /* glcts namespace */ #endif // _GLCSHADERGROUPVOTETESTS_HPP