#ifndef _GL4CSHADERTEXTUREIMAGESAMPLESTESTS_HPP #define _GL4CSHADERTEXTUREIMAGESAMPLESTESTS_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 gl4cShaderTextureImageSamples.hpp * \brief Declares test classes that verify conformance of the * GL implementation with GL_ARB_shader_texture_image_samples * extension specification. */ /*-------------------------------------------------------------------*/ #include "glcTestCase.hpp" #include "glwDefs.hpp" namespace glcts { /** Base test class for GL_ARB_shader_texture_image_samples conformance tests. */ class ShaderTextureImageSamplesTestBase : public deqp::TestCase { public: /* Public methods */ ShaderTextureImageSamplesTestBase(deqp::Context& context, const char* name, const char* description); void deinit(); virtual void init(); protected: /* Protected type definitions */ typedef enum { SAMPLER_TYPE_ISAMPLER2DMS, SAMPLER_TYPE_ISAMPLER2DMSARRAY, SAMPLER_TYPE_SAMPLER2DMS, SAMPLER_TYPE_SAMPLER2DMSARRAY, SAMPLER_TYPE_USAMPLER2DMS, SAMPLER_TYPE_USAMPLER2DMSARRAY, SAMPLER_TYPE_COUNT } _sampler_type; typedef enum { TEST_TYPE_IMAGE, TEST_TYPE_TEXTURE, TEST_TYPE_COUNT } _test_type; /* Protected methods */ bool buildComputeProgram(const char* cs_body, bool should_link_po, bool should_succeed); void executeFunctionalTest(const _sampler_type& sampler_type, const _test_type& test_type); private: /* Private methods */ void deinitProgramAndShaderObjects(); /* Private members */ glw::GLint m_internalformat_n_samples_count; glw::GLint* m_internalformat_n_samples_data; glw::GLuint m_bo_id; glw::GLuint m_cs_id; glw::GLuint m_po_id; glw::GLuint m_to_id; const unsigned int m_to_depth; const unsigned int m_to_height; const unsigned int m_to_width; }; /** Implements the following functional tests from CTS_ARB_shader_texture_image_samples: * * Basic Texture Functionality * * * Create a multisample texture and use a compute shader with an SSBO * to verify the result of calling textureSamples() on that texture. The * compute shader would look like this: * * buffer Result { * int samples; * } * uniform gsampler% tex; * void main() { * samples = textureSamples(tex); * } * * For gsampler% the test should iterate through all the texture targets; * sampler*, isampler* and usamples* for 2DMS and 2DMSArray. For the * 2SMSArray case a multisample array texture should be bound to the * texture unit. * * Readback the SSBO "samples" result and verify that it matches the * parameter used to create the texture. Repeat the test for * all values supported by the implementation. * * Basic Image Functionality * * * Similar to the test above, but bind an image from the multisample * texture: * * Create a multisample texture, bind an image from the texture and use * a compute shader with an SSBO to verify the result of calling * imageSamples() on that image. The compute shader would look like this: * * buffer Result { * int samples; * } * layout(format) uniform gimage% tex; * void main() { * samples = imageSamples(tex); * } * * For gimage% the test should iterate through all the image targets; * image*, iimage* and uimage* for 2DMS and 2DMSArray. For the * 2SMSArray case a multisample array image should be bound to the * image unit. * * Readback the SSBO "samples" result and verify that it matches the * parameter used to create the texture. Repeat the test for * all values supported by the implementation. * **/ class ShaderTextureImageSampleFunctionalTest : public ShaderTextureImageSamplesTestBase { public: /* Public methods */ ShaderTextureImageSampleFunctionalTest(deqp::Context& context, const char* name); void init(); virtual tcu::TestNode::IterateResult iterate(); private: _test_type type_to_test; /* Private methods */ }; /** Implements the following GLSL #extension test from CTS_ARB_shader_texture_image_samples: * * * Verify a shader with #extension GL_ARB_shader_texture_image_samples : enable * defines the pre-processor macro "GL_ARB_shader_texture_image_samples" * to the value "1". * **/ class ShaderTextureImageSamplesGLSLExtensionEnableTest : public ShaderTextureImageSamplesTestBase { public: /* Public methods */ ShaderTextureImageSamplesGLSLExtensionEnableTest(deqp::Context& context); virtual tcu::TestNode::IterateResult iterate(); private: /* Private methods */ }; /** Implements the following GLSL #extension test from CTS_ARB_shader_texture_image_samples: * * * Verify a shader with * #extension GL_ARB_shader_texture_image_samples : require * compiles without error. * **/ class ShaderTextureImageSamplesGLSLExtensionRequireTest : public ShaderTextureImageSamplesTestBase { public: /* Public methods */ ShaderTextureImageSamplesGLSLExtensionRequireTest(deqp::Context& context); virtual tcu::TestNode::IterateResult iterate(); private: /* Private methods */ }; /** Test group which encapsulates all conformance tests for GL_ARB_shader_texture_image_samples * extension. */ class ShaderTextureImageSamplesTests : public deqp::TestCaseGroup { public: /* Public methods */ ShaderTextureImageSamplesTests(deqp::Context& context); void init(void); private: ShaderTextureImageSamplesTests(const ShaderTextureImageSamplesTests& other); ShaderTextureImageSamplesTests& operator=(const ShaderTextureImageSamplesTests& other); }; } /* glcts namespace */ #endif // _GL4CSHADERTEXTUREIMAGESAMPLESTESTS_HPP