| #ifndef _ESEXTCGEOMETRYSHADERCONSTANTVARIABLES_HPP |
| #define _ESEXTCGEOMETRYSHADERCONSTANTVARIABLES_HPP |
| /*------------------------------------------------------------------------- |
| * OpenGL Conformance Test Suite |
| * ----------------------------- |
| * |
| * Copyright (c) 2014-2016 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 |
| * \brief |
| */ /*-------------------------------------------------------------------*/ |
| |
| #include "../esextcTestCaseBase.hpp" |
| |
| namespace glcts |
| { |
| /** Implementation of Test Group 15 from CTS_EXT_geometry_shader. Description follows: |
| * |
| * 1. gl_MaxGeometry* constants should reflect values reported for |
| * corresponding GL_MAX_GEOMETRY_* properties. |
| * |
| * Category: API; |
| * Functional Test. |
| * |
| * Using transform feedback, query values of the following constants in |
| * a geometry shader and transfer them to a buffer object: |
| * |
| * * gl_MaxGeometryInputComponents; |
| * * gl_MaxGeometryOutputComponents; |
| * * gl_MaxGeometryImageUniforms; |
| * * gl_MaxGeometryTextureImageUnits; |
| * * gl_MaxGeometryOutputVertices; |
| * * gl_MaxGeometryTotalOutputComponents; |
| * * gl_MaxGeometryUniformComponents; |
| * * gl_MaxGeometryAtomicCounters; |
| * * gl_MaxGeometryAtomicCounterBuffers; |
| * |
| * The test should then map the buffer object into client-space for reading |
| * and compare them against values reported by glGetIntegerv() for |
| * corresponding pnames. Test should fail if any of the values do not match. |
| * |
| * |
| * 2. Implementation-dependent constants are the same for all compatible |
| * getters. The value reported meets minimum maximum requirements enforced |
| * by the specification. |
| * |
| * Category: API; |
| * |
| * The following properties should be checked: |
| * |
| * 1) GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT (min: 0); |
| * 2) GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT (min: 0); |
| * 3) GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT (min: 16); |
| * 4) GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT (min: 0); |
| * 5) GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT (min: 0); |
| * 6) GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT (min: 1024); |
| * 7) GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT (min: 12); |
| * 8) GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT (min: 64); |
| * 9) GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT (min: 128); |
| * 10) GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT (min: 256); |
| * 11) GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT (min: 1024); |
| * 12) GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT (min: 32); |
| * 13) GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT (min: |
| * GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT * GL_MAX_UNIFORM_BLOCK_SIZE / 4 + |
| * + GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT); |
| * 14) GL_LAYER_PROVOKING_VERTEX_EXT (accepted values: |
| * GL_PROVOKING_VERTEX (*), |
| * GL_FIRST_VERTEX_CONVENTION_EXT, |
| * GL_LAST_VERTEX_CONVENTION_EXT, |
| * GL_UNDEFINED_VERTEX_EXT) |
| * 15) GL_MAX_FRAMEBUFFER_LAYERS_EXT (min: 2048) |
| * |
| * (*) Only applicable to OpenGL. The ES extension does not allow this value. |
| **/ |
| |
| class GeometryShaderConstantVariables : public TestCaseBase |
| { |
| public: |
| /* Public methods */ |
| GeometryShaderConstantVariables(Context& context, const ExtParameters& extParams, const char* name, |
| const char* description); |
| |
| virtual ~GeometryShaderConstantVariables() |
| { |
| } |
| |
| void deinit(void); |
| IterateResult iterate(void); |
| |
| private: |
| /* Private methods */ |
| void initTest(void); |
| |
| /* Private variables */ |
| static const char* m_fragment_shader_code; |
| static const char* m_geometry_shader_code; |
| static const char* m_vertex_shader_code; |
| static const char* m_feedbackVaryings[]; |
| |
| glw::GLuint m_fragment_shader_id; |
| glw::GLuint m_geometry_shader_id; |
| glw::GLuint m_vertex_shader_id; |
| glw::GLuint m_program_id; |
| |
| glw::GLuint m_bo_id; |
| glw::GLuint m_vao_id; |
| |
| /* EXT_geometry_shader specific constant values */ |
| const int m_min_MaxGeometryImagesUniforms; |
| const int m_min_MaxGeometryTextureImagesUnits; |
| const int m_min_MaxGeometryShaderStorageBlocks; |
| const int m_min_MaxGeometryAtomicCounterBuffers; |
| const int m_min_MaxGeometryAtomicCounters; |
| |
| const int m_min_MaxFramebufferLayers; |
| const int m_min_MaxGeometryInputComponents; |
| const int m_min_MaxGeometryOutputComponents; |
| const int m_min_MaxGeometryOutputVertices; |
| const int m_min_MaxGeometryShaderInvocations; |
| const int m_min_MaxGeometryTotalOutputComponents; |
| const int m_min_MaxGeometryUniformBlocks; |
| const int m_min_MaxGeometryUniformComponents; |
| }; |
| |
| } // namespace glcts |
| |
| #endif // _ESEXTCGEOMETRYSHADERCONSTANTVARIABLES_HPP |