1 #ifndef _ESEXTCTEXTURECUBEMAPARRAYIMAGEOPERATIONS_HPP 2 #define _ESEXTCTEXTURECUBEMAPARRAYIMAGEOPERATIONS_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 /*! 27 * \file esextcTextureCubeMapArrayImageOperations.hpp 28 * \brief texture_cube_map_array extension - Image Operations (Test 8) 29 */ /*-------------------------------------------------------------------*/ 30 31 #include "../esextcTestCaseBase.hpp" 32 #include <map> 33 #include <vector> 34 35 namespace glcts 36 { 37 38 /** Implementation of (Test 8) for CTS_EXT_texture_cube_map_array. Test description follows: 39 * 40 * Make sure cube-map array textures work correctly when used as images. 41 * 42 * Category: Functionality tests, 43 * Optional dependency on EXT_geometry_shader; 44 * Optional dependency on EXT_tessellation_shader. 45 * Priority: Must-have. 46 * 47 * Make sure that read and write operations performed on images bound to 48 * image units, to which cube-map array textures have been bound, work 49 * correctly from: 50 * 51 * * a compute shader; (required) 52 * * a fragment shader; (if supported) 53 * * a geometry shader; (if supported) 54 * * a tessellation control shader; (if supported) 55 * * a tessellation evaluation shader; (if supported) 56 * * a vertex shader. (if supported) 57 * 58 * Each shader stage should read data from first image and store read data to 59 * the second image. Next test should verify if data in second image is the 60 * same as stored in the first image. 61 * 62 * The test should use the following image samplers (whichever applies for 63 * image considered): 64 * 65 * * iimageCubeArray; 66 * * imageCubeArray; 67 * * uimageCubeArray; 68 * 69 * Following texture resolutions should be used 70 * { 32, 32, 12}, 71 * { 64, 64, 6}, 72 * { 16, 16, 18}, 73 * { 16, 16, 6} 74 * 75 * Both immutable and mutable textures should be checked. 76 * 77 */ 78 79 /* Define allowed test variants for shaders */ 80 enum SHADER_TO_CHECK 81 { 82 STC_COMPUTE_SHADER, 83 STC_FRAGMENT_SHADER, 84 STC_GEOMETRY_SHADER, 85 STC_TESSELLATION_CONTROL_SHADER, 86 STC_TESSELLATION_EVALUATION_SHADER, 87 STC_VERTEX_SHADER 88 }; 89 90 /* Location of dimensions in array StorageConfigIOC::m_dimensions */ 91 enum DIMENSIONS_LOCATION 92 { 93 DL_WIDTH = 0, 94 DL_HEIGHT = 1, 95 DL_DEPTH = 2 96 }; 97 98 /* Define tested images formats */ 99 enum IMAGE_FORMATS 100 { 101 IF_IMAGE = 0, 102 IF_IIMAGE = 1, 103 IF_UIMAGE = 2 104 }; 105 106 class TextureCubeMapArrayImageOpCompute : public TestCaseBase 107 { 108 public: 109 /* Public methods */ 110 TextureCubeMapArrayImageOpCompute(Context& context, const ExtParameters& extParams, const char* name, 111 const char* description, SHADER_TO_CHECK shaderToCheck); 112 ~TextureCubeMapArrayImageOpCompute(void)113 virtual ~TextureCubeMapArrayImageOpCompute(void) 114 { 115 } 116 117 virtual void deinit(void); 118 virtual IterateResult iterate(void); 119 120 /* Public static constants */ 121 static const glw::GLfloat m_f_base; 122 static const glw::GLint m_i_base; 123 static const glw::GLuint m_ui_base; 124 static const glw::GLuint m_n_components; 125 static const glw::GLuint m_n_dimensions; 126 static const glw::GLuint m_n_image_formats; 127 static const glw::GLuint m_n_resolutions; 128 static const glw::GLuint m_n_storage_type; 129 static const char* m_mutable_storage; 130 static const char* m_immutable_storage; 131 132 private: 133 /* Private methods */ 134 void initTest(void); 135 void removeTextures(void); 136 void configureProgram(void); 137 void runShaders(glw::GLuint width, glw::GLuint height, glw::GLuint depth); 138 139 const char* getComputeShaderCode(void); 140 const char* getFragmentShaderCode(void); 141 const char* getFragmentShaderCodeBoilerPlate(void); 142 const char* getGeometryShaderCode(void); 143 const char* getTessControlShaderCode(void); 144 const char* getTessControlShaderCodeBoilerPlate(void); 145 const char* getTessEvaluationShaderCode(void); 146 const char* getTessEvaluationShaderCodeBoilerPlate(void); 147 const char* getVertexShaderCode(void); 148 const char* getVertexShaderCodeBoilerPlate(void); 149 const char* getFloatingPointCopyShaderSource(void); 150 151 /* Variables for general usage */ 152 SHADER_TO_CHECK m_shader_to_check; 153 154 glw::GLuint m_cs_id; 155 glw::GLuint m_fbo_id; 156 glw::GLuint m_fs_id; 157 glw::GLuint m_gs_id; 158 glw::GLuint m_po_id; 159 glw::GLuint m_tc_id; 160 glw::GLuint m_te_id; 161 glw::GLuint m_vao_id; 162 glw::GLuint m_vs_id; 163 glw::GLuint m_copy_po_id; 164 glw::GLuint m_copy_cs_id; 165 166 glw::GLuint m_iimage_read_to_id; 167 glw::GLuint m_iimage_write_to_id; 168 glw::GLuint m_image_read_to_id; 169 glw::GLuint m_image_write_to_id; 170 glw::GLuint m_uimage_read_to_id; 171 glw::GLuint m_uimage_write_to_id; 172 }; 173 174 } /* glcts */ 175 176 #endif // _ESEXTCTEXTURECUBEMAPARRAYIMAGEOPERATIONS_HPP 177