#ifndef _ESEXTCTESSELLATIONSHADERPRIMITIVECOVERAGE_HPP #define _ESEXTCTESSELLATIONSHADERPRIMITIVECOVERAGE_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 */ /*-------------------------------------------------------------------*/ /*! * \file esextcTessellationShaderPrimitiveCoverage.hpp * \brief TessellationShadePrimitiveCoverage (Test 31) */ /*-------------------------------------------------------------------*/ #include "../esextcTestCaseBase.hpp" #include "esextcTessellationShaderUtils.hpp" #include "gluShaderUtil.hpp" #include "tcuDefs.hpp" namespace glcts { /** Implementation of Test 31 from CTS_EXT_tessellation_shader. Description follows: * * Assume this test is run separately for a tessellated full-screen triangle * and a tessellated full-screen quad. * Using a stencil buffer, make sure that the whole domain is always * covered by exactly one triangle generated during the process of tessellation. * Make sure that the whole domain is covered by the set of all triangles * generated during the process of tessellation. * * Category: Functional Test. * Priority: Must-Have */ class TessellationShaderPrimitiveCoverage : public TestCaseBase { public: /* Public methods */ TessellationShaderPrimitiveCoverage(Context& context, const ExtParameters& extParams); virtual ~TessellationShaderPrimitiveCoverage() { } virtual void deinit(void); virtual IterateResult iterate(void); private: /* Private methods */ void initBufferObjects(void); void initFramebuffer(void); void initProgramObjects(void); void initTest(void); void drawPatch(glw::GLuint po_id, glw::GLuint n_patch_vertices, glw::GLuint n_draw_call_vertices, const glw::GLfloat inner_levels[], const glw::GLfloat outer_levels[]); bool verifyDrawBufferContents(void); /* Private variables */ glw::GLuint m_vao_id; /* name of vertex array object */ glw::GLuint m_quad_tessellation_po_id; /* name of program object that performs quad tessellation */ glw::GLuint m_stencil_verification_po_id; /* name of program object for stencil setup */ glw::GLuint m_triangles_tessellation_po_id; /* name of program object that performs triangle tessellation */ glw::GLuint m_bo_id; /* name of a buffer object used to hold input vertex data */ glw::GLuint m_fs_id; /* name of fragment shader object */ glw::GLuint m_quad_tessellation_tcs_id; /* name of tessellation control shader object that performs quad tessellation */ glw::GLuint m_quad_tessellation_tes_id; /* name of tessellation evaluation shader object that performs quad tessellation */ glw::GLuint m_triangles_tessellation_tcs_id; /* name of tessellation control shader object that performs triangle tessellation */ glw::GLuint m_triangles_tessellation_tes_id; /* name of tessellation evaluation shader object that performs triangle tessellation */ glw::GLuint m_vs_id; /* nameof vertex shader object */ glw::GLuint m_fbo_id; /* name of a framebuffer object */ glw::GLuint m_color_rbo_id; /* name of a renderbuffer object to be used as color attachment */ glw::GLuint m_stencil_rbo_id; /* name of a renderbuffer object to be used as stencil attachment */ static const char* m_fs_code; /* fragment shader source code */ static const char* m_quad_tessellation_tcs_code; /* tessellation control shader source code */ static const char* m_quad_tessellation_tes_code; /* tessellation evaluation shader source code */ static const char* m_triangles_tessellation_tcs_code; /* tessellation control shader source code */ static const char* m_triangles_tessellation_tes_code; /* tessellation evaluation shader source code */ static const char* m_vs_code; /* vertex shader source code */ static const glw::GLuint m_height; /* height of the rendering area */ static const glw::GLuint m_n_components; /* number of components used by a single texel */ static const glw::GLuint m_width; /* width of the rendering area */ static const glw::GLfloat m_clear_color[4]; /* clear color */ static const glw::GLfloat m_stencil_pass_color[4]; /* primitive color when stencil fails */ glw::GLubyte* m_rendered_data_buffer; /* pixel buffer for fetched data */ static const glw::GLuint m_rendered_data_buffer_size; /* pixel buffer size */ }; } // namespace glcts #endif // _ESEXTCTESSELLATIONSHADERPRIMITIVECOVERAGE_HPP