| #ifndef _ESEXTCGPUSHADER5SAMPLERARRAYINDEXING_HPP |
| #define _ESEXTCGPUSHADER5SAMPLERARRAYINDEXING_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 esextcGPUShader5SamplerArrayIndexing.hpp |
| * \brief gpu_shader5 extension - Sampler Array Indexing (Test 1) |
| */ /*-------------------------------------------------------------------*/ |
| |
| #include "../esextcTestCaseBase.hpp" |
| |
| namespace glcts |
| { |
| /** "Test 1" from CTS_EXT_gpu_shader5. Description follows |
| * |
| * Test whether indexing into an array of samplers using dynamically |
| * uniform integer expressions works as expected. |
| * |
| * Category: API, |
| * Functional Test. |
| * |
| * The test should set up a FBO. A 2D texture of 3x3 resolution using |
| * GL_RGBA8 internal format should be attached to its color attachment 0. |
| * |
| * Write a vertex shader that declares input attribute |
| * |
| * in vec4 position; |
| * |
| * and assigns the value of position to gl_Position. |
| * |
| * Write a fragment shader with an array of four sampler2D samplers. |
| * For each of the samplers in the array bind a 1x1 texture with |
| * GL_RGBA32F internal format. Fill the four textures with |
| * (1.0f,0,0,0), (0,1.0f,0,0), (0,0,1.0f,0), (0,0,0,1.0f) respectively. |
| * |
| * Define in the fragment shader a variable |
| * |
| * layout(location = 0) out vec4 outColor = vec4(0.0f,0.0f,0.0f,0.0f); |
| * |
| * Write a loop that goes from 0 to 3 inclusive and for each iteration |
| * uses the loop index to index into the array of four sampler2d samples |
| * and each chosen sampler is used to read a texel from texture bound to |
| * it at coordinate (0.0f,0.0f). |
| * |
| * A sum of vec4 values read from the textures should be stored |
| * in outColor. |
| * |
| * Create a program from the above vertex shader and fragment shader |
| * and use it. |
| * |
| * Configure buffer object as data source for the position attribute. |
| * The buffer object should be filled with data: (-1,-1,0,1),(1,-1,0,1), |
| * (-1,1,0,1),(1,1,0,1). |
| * |
| * Execute a draw call glDrawArrays(GL_TRIANGLE_STRIP, 0, 4). |
| * |
| * Call glReadPixels(1,1,1,1,GL_RGBA,GL_UNSIGNED_BYTE, pixel); |
| * |
| * The test is successful if texel color is equal to (255,255,255,255) |
| * with GTF tolerance. |
| */ |
| class GPUShader5SamplerArrayIndexing : public TestCaseBase |
| { |
| public: |
| /* Public methods */ |
| GPUShader5SamplerArrayIndexing(Context& context, const ExtParameters& extParams, const char* name, |
| const char* description); |
| |
| virtual ~GPUShader5SamplerArrayIndexing(void) |
| { |
| } |
| |
| virtual void deinit(void); |
| virtual IterateResult iterate(void); |
| |
| private: |
| void initTest(void); |
| const char* getFragmentShaderCode(); |
| const char* getVertexShaderCode(); |
| |
| /* Private static variables */ |
| static const int m_n_small_textures; |
| static const int m_n_texture_components; |
| static const int m_big_texture_height; |
| static const int m_big_texture_width; |
| static const int m_n_texture_levels; |
| static const int m_small_texture_height; |
| static const int m_small_texture_width; |
| |
| /* Private variables */ |
| glw::GLuint m_big_to_id; |
| glw::GLuint m_fbo_id; |
| glw::GLuint m_fs_id; |
| glw::GLuint m_po_id; |
| glw::GLuint* m_small_to_ids; |
| glw::GLuint m_vao_id; |
| glw::GLuint m_vbo_id; |
| glw::GLuint m_vs_id; |
| }; |
| |
| } // namespace glcts |
| |
| #endif // _ESEXTCGPUSHADER5SAMPLERARRAYINDEXING_HPP |