Home | History | Annotate | Download | only in gl
      1 #ifndef _GL4CSHADERTEXTUREIMAGESAMPLESTESTS_HPP
      2 #define _GL4CSHADERTEXTUREIMAGESAMPLESTESTS_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  */ /*!
     28  * \file  gl4cShaderTextureImageSamples.hpp
     29  * \brief Declares test classes that verify conformance of the
     30  *        GL implementation with GL_ARB_shader_texture_image_samples
     31  *        extension specification.
     32  */ /*-------------------------------------------------------------------*/
     33 
     34 #include "glcTestCase.hpp"
     35 #include "glwDefs.hpp"
     36 
     37 namespace glcts
     38 {
     39 /** Base test class for GL_ARB_shader_texture_image_samples conformance tests. */
     40 class ShaderTextureImageSamplesTestBase : public deqp::TestCase
     41 {
     42 public:
     43 	/* Public methods */
     44 	ShaderTextureImageSamplesTestBase(deqp::Context& context, const char* name, const char* description);
     45 
     46 	void		 deinit();
     47 	virtual void init();
     48 
     49 protected:
     50 	/* Protected type definitions */
     51 	typedef enum {
     52 		SAMPLER_TYPE_ISAMPLER2DMS,
     53 		SAMPLER_TYPE_ISAMPLER2DMSARRAY,
     54 		SAMPLER_TYPE_SAMPLER2DMS,
     55 		SAMPLER_TYPE_SAMPLER2DMSARRAY,
     56 		SAMPLER_TYPE_USAMPLER2DMS,
     57 		SAMPLER_TYPE_USAMPLER2DMSARRAY,
     58 
     59 		SAMPLER_TYPE_COUNT
     60 	} _sampler_type;
     61 
     62 	typedef enum {
     63 		TEST_TYPE_IMAGE,
     64 		TEST_TYPE_TEXTURE,
     65 
     66 		TEST_TYPE_COUNT
     67 	} _test_type;
     68 
     69 	/* Protected methods */
     70 	bool buildComputeProgram(const char* cs_body, bool should_link_po, bool should_succeed);
     71 
     72 	void executeFunctionalTest(const _sampler_type& sampler_type, const _test_type& test_type);
     73 
     74 private:
     75 	/* Private methods */
     76 	void deinitProgramAndShaderObjects();
     77 
     78 	/* Private members */
     79 	glw::GLint  m_internalformat_n_samples_count;
     80 	glw::GLint* m_internalformat_n_samples_data;
     81 
     82 	glw::GLuint m_bo_id;
     83 	glw::GLuint m_cs_id;
     84 	glw::GLuint m_po_id;
     85 	glw::GLuint m_to_id;
     86 
     87 	const unsigned int m_to_depth;
     88 	const unsigned int m_to_height;
     89 	const unsigned int m_to_width;
     90 };
     91 
     92 /** Implements the following functional tests from CTS_ARB_shader_texture_image_samples:
     93  *
     94  *  Basic Texture Functionality
     95  *
     96  *  * Create a multisample texture and use a compute shader with an SSBO
     97  *    to verify the result of calling textureSamples() on that texture. The
     98  *    compute shader would look like this:
     99  *
    100  *      buffer Result {
    101  *          int samples;
    102  *      }
    103  *      uniform gsampler% tex;
    104  *      void main() {
    105  *          samples = textureSamples(tex);
    106  *      }
    107  *
    108  *      For gsampler% the test should iterate through all the texture targets;
    109  *      sampler*, isampler* and usamples* for 2DMS and 2DMSArray. For the
    110  *      2SMSArray case a multisample array texture should be bound to the
    111  *      texture unit.
    112  *
    113  *      Readback the SSBO "samples" result and verify that it matches the
    114  *      <samples> parameter used to create the texture. Repeat the test for
    115  *      all <samples> values supported by the implementation.
    116  *
    117  *  Basic Image Functionality
    118  *
    119  *  * Similar to the test above, but bind an image from the multisample
    120  *    texture:
    121  *
    122  *    Create a multisample texture, bind an image from the texture and use
    123  *    a compute shader with an SSBO to verify the result of calling
    124  *    imageSamples() on that image. The compute shader would look like this:
    125  *
    126  *      buffer Result {
    127  *          int samples;
    128  *      }
    129  *      layout(format) uniform gimage% tex;
    130  *      void main() {
    131  *          samples = imageSamples(tex);
    132  *      }
    133  *
    134  *      For gimage% the test should iterate through all the image targets;
    135  *      image*, iimage* and uimage* for 2DMS and 2DMSArray. For the
    136  *      2SMSArray case a multisample array image should be bound to the
    137  *      image unit.
    138  *
    139  *      Readback the SSBO "samples" result and verify that it matches the
    140  *      <samples> parameter used to create the texture. Repeat the test for
    141  *      all <samples> values supported by the implementation.
    142  *
    143  **/
    144 class ShaderTextureImageSampleFunctionalTest : public ShaderTextureImageSamplesTestBase
    145 {
    146 public:
    147 	/* Public methods */
    148 	ShaderTextureImageSampleFunctionalTest(deqp::Context& context, const char* name);
    149 	void init();
    150 
    151 	virtual tcu::TestNode::IterateResult iterate();
    152 
    153 private:
    154 	_test_type type_to_test;
    155 	/* Private methods */
    156 };
    157 
    158 /** Implements the following GLSL #extension test from CTS_ARB_shader_texture_image_samples:
    159  *
    160  *  * Verify a shader with #extension GL_ARB_shader_texture_image_samples : enable
    161  *    defines the pre-processor macro "GL_ARB_shader_texture_image_samples"
    162  *    to the value "1".
    163  *
    164  **/
    165 class ShaderTextureImageSamplesGLSLExtensionEnableTest : public ShaderTextureImageSamplesTestBase
    166 {
    167 public:
    168 	/* Public methods */
    169 	ShaderTextureImageSamplesGLSLExtensionEnableTest(deqp::Context& context);
    170 
    171 	virtual tcu::TestNode::IterateResult iterate();
    172 
    173 private:
    174 	/* Private methods */
    175 };
    176 
    177 /** Implements the following GLSL #extension test from CTS_ARB_shader_texture_image_samples:
    178  *
    179  *  * Verify a shader with
    180  *    #extension GL_ARB_shader_texture_image_samples : require
    181  *    compiles without error.
    182  *
    183  **/
    184 class ShaderTextureImageSamplesGLSLExtensionRequireTest : public ShaderTextureImageSamplesTestBase
    185 {
    186 public:
    187 	/* Public methods */
    188 	ShaderTextureImageSamplesGLSLExtensionRequireTest(deqp::Context& context);
    189 
    190 	virtual tcu::TestNode::IterateResult iterate();
    191 
    192 private:
    193 	/* Private methods */
    194 };
    195 
    196 /** Test group which encapsulates all conformance tests for GL_ARB_shader_texture_image_samples
    197  *  extension.
    198  */
    199 class ShaderTextureImageSamplesTests : public deqp::TestCaseGroup
    200 {
    201 public:
    202 	/* Public methods */
    203 	ShaderTextureImageSamplesTests(deqp::Context& context);
    204 
    205 	void init(void);
    206 
    207 private:
    208 	ShaderTextureImageSamplesTests(const ShaderTextureImageSamplesTests& other);
    209 	ShaderTextureImageSamplesTests& operator=(const ShaderTextureImageSamplesTests& other);
    210 };
    211 
    212 } /* glcts namespace */
    213 
    214 #endif // _GL4CSHADERTEXTUREIMAGESAMPLESTESTS_HPP
    215