148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#ifndef _ESEXTCGEOMETRYSHADERPROGRAMRESOURCE_HPP
248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define _ESEXTCGEOMETRYSHADERPROGRAMRESOURCE_HPP
348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/*-------------------------------------------------------------------------
448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * OpenGL Conformance Test Suite
548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * -----------------------------
648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Copyright (c) 2014-2016 The Khronos Group Inc.
848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License");
1048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * you may not use this file except in compliance with the License.
1148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * You may obtain a copy of the License at
1248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
1348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *      http://www.apache.org/licenses/LICENSE-2.0
1448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
1548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Unless required by applicable law or agreed to in writing, software
1648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS,
1748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * See the License for the specific language governing permissions and
1948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * limitations under the License.
2048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
2184322c9402f810da3cd80b52e9f9ef72150a9004Alexander Galazin */ /*!
2248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \file
2348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \brief
2484322c9402f810da3cd80b52e9f9ef72150a9004Alexander Galazin */ /*-------------------------------------------------------------------*/
2548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
2648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "../esextcTestCaseBase.hpp"
2748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
2848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosnamespace glcts
2948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
3048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
3148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Implementation of Group 3. Test description follows:
3248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
3348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 1. Make sure that GL_REFERENCED_BY_GEOMETRY_SHADER_EXT property works
3448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *    correctly for all supported interfaces.
3548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
3648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *    Category: API.
3748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *
3848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *    1. Create a program object with boilerplate fragment and vertex shaders,
3948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *       as well as an attached geometry shader using all of the features,
4048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *       properties of which can later be examined using
4148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *       glGetProgramResourceiv() call.
4248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *    2. Link the program object.
4348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *    3. Use GetProgramResourceiv() calls to verify values reported for
4448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *       geometry stage are as expected.
4548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos **/
4648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass GeometryShaderProgramResourceTest : public TestCaseBase
4748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{
4848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic:
4948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	/* Public methods */
5048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	GeometryShaderProgramResourceTest(Context& context, const ExtParameters& extParams, const char* name,
5148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos									  const char* description);
5248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
5348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	virtual ~GeometryShaderProgramResourceTest()
5448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	{
5548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	}
5648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
5748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	virtual void		  deinit(void);
5848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	virtual IterateResult iterate(void);
5948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
6048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosprivate:
6148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	/* Private methods */
6248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	void initTest(void);
6348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
6448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	bool checkIfResourceAtIndexIsReferenced(glw::GLuint program_object_id, glw::GLenum interface,
6548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos											glw::GLuint index) const;
6648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
6748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	bool checkIfResourceIsReferenced(glw::GLuint program_object_id, glw::GLenum interface, const char* name) const;
6848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
6948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	/* Private fields */
7048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
7148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	/* Shader objects */
7248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	glw::GLuint m_fragment_shader_id;
7348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	glw::GLuint m_geometry_shader_id;
7448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	glw::GLuint m_vertex_shader_id;
7548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
7648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	/* Program object */
7748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	glw::GLuint m_program_object_id;
7848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
7948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_common_shader_code_definitions_body;
8048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_common_shader_code_definitions_atomic_counter_body;
8148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_common_shader_code_definitions_ssbo_body;
8248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
8348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_vertex_shader_code_preamble;
8448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_vertex_shader_code_body;
8548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_vertex_shader_code_atomic_counter_body;
8648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_vertex_shader_code_ssbo_body;
8748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
8848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_geometry_shader_code_preamble;
8948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_geometry_shader_code_body;
9048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_geometry_shader_code_atomic_counter_body;
9148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_geometry_shader_code_ssbo_body;
9248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
9348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	static const char* const m_fragment_shader_code;
9448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
9548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	bool m_atomic_counters_supported;
9648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos	bool m_ssbos_supported;
9748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos};
9848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
9948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} /* glcts */
10048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos
10148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#endif // _ESEXTCGEOMETRYSHADERPROGRAMRESOURCE_HPP
102