1 #ifndef _ESEXTCTESSELLATIONSHADERXFB_HPP 2 #define _ESEXTCTESSELLATIONSHADERXFB_HPP 3 /*------------------------------------------------------------------------- 4 * OpenGL Conformance Test Suite 5 * ----------------------------- 6 * 7 * Copyright (c) 2014-2016 The Khronos Group Inc. 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 */ /*! 22 * \file 23 * \brief 24 */ /*-------------------------------------------------------------------*/ 25 26 #include "../esextcTestCaseBase.hpp" 27 #include "glwEnums.hpp" 28 29 namespace glcts 30 { 31 /** Implementation for Test Case 10 32 * 33 * Verify transform feed-back captures data from appropriate shader stage. 34 * Consider the following scenarios: 35 * 36 * * vertex shader, tessellation control + evaluation shader, geometry shaders 37 * are defined (output should be taken from geometry shader); 38 * * vertex shader, tessellation control + evaluation shaders are defined 39 * (output should be taken from tessellation evaluation shader); 40 * 41 * Verify the following shader/stage combination is invalid and neither links 42 * nor is considered a valid combination of stages for a pipeline object: 43 * 44 * * vertex shader, tessellation control shaders are defined; 45 * 46 * Make sure to include separate shader objects in the test. 47 **/ 48 class TessellationShaderXFB : public TestCaseBase 49 { 50 public: 51 /* Public methods */ 52 TessellationShaderXFB(Context& context, const ExtParameters& extParams); 53 ~TessellationShaderXFB(void)54 virtual ~TessellationShaderXFB(void) 55 { 56 } 57 58 virtual void deinit(void); 59 void initTest(void); 60 virtual IterateResult iterate(void); 61 62 private: 63 /* Private definitions */ 64 typedef struct _test_descriptor 65 { 66 /* Allowed values: 67 * 68 * GL_GEOMETRY_SHADER_EXT / GL_TESS_CONTROL_SHADER_EXT / GL_TESS_EVALUATION_SHADER_EXT / 69 * GL_VERTEX_SHADER. 70 */ 71 glw::GLenum expected_data_source; 72 int expected_n_values; 73 bool should_draw_call_fail; 74 bool requires_pipeline; 75 glw::GLenum tf_mode; 76 77 bool use_gs; 78 bool use_tc; 79 bool use_te; 80 _test_descriptorglcts::TessellationShaderXFB::_test_descriptor81 _test_descriptor() 82 { 83 expected_data_source = GL_NONE; 84 expected_n_values = 0; 85 should_draw_call_fail = false; 86 requires_pipeline = false; 87 tf_mode = GL_POINTS; 88 use_gs = false; 89 use_tc = false; 90 use_te = false; 91 } 92 } _test_descriptor; 93 94 /* Private variables */ 95 glw::GLuint m_bo_id; 96 glw::GLuint m_fs_id; 97 glw::GLuint m_gs_id; 98 glw::GLuint m_po_id; 99 glw::GLuint m_tc_id; 100 glw::GLuint m_te_id; 101 glw::GLuint m_vs_id; 102 103 glw::GLuint m_pipeline_id; 104 glw::GLuint m_fs_program_id; 105 glw::GLuint m_gs_program_id; 106 glw::GLuint m_tc_program_id; 107 glw::GLuint m_te_program_id; 108 glw::GLuint m_vs_program_id; 109 110 glw::GLuint m_vao_id; 111 112 /* Private methods */ 113 glw::GLuint createSeparableProgram(glw::GLenum shader_type, unsigned int n_strings, const char* const* strings, 114 unsigned int n_varyings, const char* const* varyings, bool should_succeed); 115 }; 116 117 } // namespace glcts 118 119 #endif // _ESEXTCTESSELLATIONSHADERXFB_HPP 120