1 #ifndef _ESEXTCTEXTURECUBEMAPARRAYCOLORDEPTHATTACHMENTS_HPP
2 #define _ESEXTCTEXTURECUBEMAPARRAYCOLORDEPTHATTACHMENTS_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 
28 namespace glcts
29 {
30 /** Implementation of Test 2. Test description follows:
31  *
32  *  Make sure cube-map texture layers can be used as color- or depth-
33  *  attachments.
34  *
35  *  Category: Functionality tests,
36  *            Optional dependency on EXT_geometry_shader;
37  *  Priority: Must-have.
38  *
39  *  Verify that cube-map array texture layers using color- and depth-
40  *  renderable internalformats can be used as color and depth attachments
41  *  for a framebuffer object by rendering a static (but differentiable between
42  *  faces and layers, along the lines of how test 1 behaves) color to the
43  *  attachment and then checking the outcome.
44  *
45  *  Both layered (if supported) and non-layered framebuffers should be checked.
46  *
47  *  Test four different cube-map array texture resolutions, as described
48  *  in test 1. Both immutable and mutable textures should be checked.
49  **/
50 class TextureCubeMapArrayColorDepthAttachmentsTest : public TestCaseBase
51 {
52 public:
53     /* Public methods */
54     TextureCubeMapArrayColorDepthAttachmentsTest(Context &context, const ExtParameters &extParams, const char *name,
55                                                  const char *description);
56 
~TextureCubeMapArrayColorDepthAttachmentsTest()57     virtual ~TextureCubeMapArrayColorDepthAttachmentsTest()
58     {
59     }
60 
61     virtual void deinit(void);
62     virtual IterateResult iterate(void);
63 
64 private:
65     /* Private type definitions */
66     struct _texture_size
67     {
68         _texture_size(glw::GLuint size, glw::GLuint m_n_cubemaps);
69 
70         /* Face width & height */
71         glw::GLuint m_size;
72 
73         /* Number of cubemaps in array */
74         glw::GLuint m_n_cubemaps;
75     };
76 
77     typedef std::vector<_texture_size> _texture_size_vector;
78 
79     /* Private methods */
80     void determineSupportedDepthFormat();
81     void draw(const _texture_size &texture_size);
82     void generateAndConfigureTextureObjects(glw::GLuint texture_size, glw::GLuint n_cubemaps,
83                                             bool should_generate_mutable_textures);
84     void initTest();
85     void prepareImmutableTextureObject(glw::GLuint texture_id, glw::GLuint texture_size, glw::GLuint n_cubemaps,
86                                        bool should_take_color_texture_properties);
87     void prepareMutableTextureObject(glw::GLuint texture_id, glw::GLuint texture_size, glw::GLuint n_cubemaps,
88                                      bool should_take_color_texture_properties);
89     void releaseAndDetachTextureObject(glw::GLuint texture_id, bool is_color);
90     void configureLayeredFramebufferAttachment(glw::GLuint texture_id, bool should_use_as_color_attachment);
91     void configureNonLayeredFramebufferAttachment(glw::GLuint texture_id, glw::GLuint n_layer,
92                                                   bool should_use_as_color_attachment,
93                                                   bool should_update_draw_framebuffer = true);
94     void testLayeredRendering(const _texture_size &texture_size, bool should_use_mutable_textures);
95     void testNonLayeredRendering(const _texture_size &texture_size, bool should_use_mutable_texture);
96     bool verifyColorData(const _texture_size &texture_size, glw::GLuint n_layer);
97     bool verifyDepth16Data(const _texture_size &texture_size, glw::GLuint n_layer);
98     bool verifyDepth24Data(const _texture_size &texture_size, glw::GLuint n_layer);
99     bool verifyDepth32FData(const _texture_size &texture_size, glw::GLuint n_layer);
100 
101     /* Private fields */
102     glw::GLuint m_vao_id;
103     glw::GLuint m_color_texture_id;
104     glw::GLuint m_depth_texture_id;
105     glw::GLuint m_fragment_shader_id;
106     glw::GLuint m_framebuffer_object_id;
107     glw::GLuint m_layered_geometry_shader_id;
108     glw::GLuint m_layered_program_id;
109     glw::GLuint m_non_layered_geometry_shader_id;
110     glw::GLuint m_non_layered_program_id;
111     glw::GLint m_non_layered_program_id_uni_layer_uniform_location;
112     glw::GLuint m_vertex_shader_id;
113 
114     _texture_size_vector m_resolutions;
115 
116     static const glw::GLenum m_color_internal_format;
117     static const glw::GLenum m_color_format;
118     static const glw::GLenum m_color_type;
119     glw::GLenum m_depth_internal_format;
120     static const glw::GLenum m_depth_format;
121     glw::GLenum m_depth_type;
122 
123     glw::GLuint m_n_invalid_color_checks;
124     glw::GLuint m_n_invalid_depth_checks;
125 
126     static const glw::GLchar *const m_fragment_shader_code;
127     static const glw::GLchar *const m_geometry_shader_code_preamble;
128     static const glw::GLchar *const m_geometry_shader_code_layered;
129     static const glw::GLchar *const m_geometry_shader_code_non_layered;
130     static const glw::GLchar *const m_geometry_shader_code_body;
131     static const glw::GLchar *const m_vertex_shader_code;
132 };
133 
134 } // namespace glcts
135 
136 #endif // _ESEXTCTEXTURECUBEMAPARRAYCOLORDEPTHATTACHMENTS_HPP
137