#ifndef _GL4CSTENCILTEXTURINGTESTS_HPP #define _GL4CSTENCILTEXTURINGTESTS_HPP /*------------------------------------------------------------------------- * OpenGL Conformance Test Suite * ----------------------------- * * Copyright (c) 2015-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 */ /*-------------------------------------------------------------------*/ #include "glcTestCase.hpp" #include "glwDefs.hpp" namespace gl4cts { namespace StencilTexturing { /** * * Create packed GL_DEPTH_STENCIL GL_DEPTH24_STENCIL8 format 2D texture * with a gradient in both depth and stencil components. Set * GL_DEPTH_STENCIL_TEXTURE_MODE texture parameter to GL_DEPTH_COMPONENT, * verify that no error is generated. Create framebuffer and bind it for * drawing. Use a fragment shader with a sampler2D to copy depth component * value to the output color. Draw triangle strip and read color pixels. * Verify that gradient values are copied correctly. * * * Set GL_DEPTH_STENCIL_TEXTURE_MODE texture parameter to GL_STENCIL_INDEX, * verify that no error is generated. Use a fragment shader with usampler2D * to copy stencil index value to output color. Draw triangle strip and read * color pixels. Verify that gradient values are copied correctly. * * * Repeat all the above for GL_DEPTH32F_STENCIL8 format **/ class FunctionalTest : public deqp::TestCase { public: FunctionalTest(deqp::Context& context); ~FunctionalTest() { } virtual tcu::TestNode::IterateResult iterate(); private: /* Private routines */ void dispatch(glw::GLuint program_id, bool is_stencil, glw::GLuint dst_texture_id, glw::GLuint src_texture_id); void draw(glw::GLuint program_id, glw::GLuint dst_texture_id, glw::GLuint src_texture_id); glw::GLuint prepareDestinationTexture(bool is_stencil); glw::GLuint prepareProgram(bool is_draw, bool is_stencil); glw::GLuint prepareSourceTexture(glw::GLenum internal_format, bool is_stencil, const std::vector& texture_data); void prepareSourceTextureData(glw::GLenum internal_format, std::vector& texture_data); bool verifyTexture(glw::GLuint id, glw::GLenum source_internal_format, bool is_stencil, const std::vector& src_texture_data); bool test(glw::GLenum internal_format, bool is_stencil); /* Private constants */ static const glw::GLchar* m_compute_shader_code; static const glw::GLchar* m_fragment_shader_code; static const glw::GLchar* m_geometry_shader_code; static const glw::GLchar* m_tesselation_control_shader_code; static const glw::GLchar* m_tesselation_evaluation_shader_code; static const glw::GLchar* m_vertex_shader_code; static const glw::GLchar* m_expected_value_depth; static const glw::GLchar* m_expected_value_stencil; static const glw::GLchar* m_image_definition_depth; static const glw::GLchar* m_image_definition_stencil; static const glw::GLchar* m_output_type_depth; static const glw::GLchar* m_output_type_stencil; static const glw::GLchar* m_sampler_definition_depth; static const glw::GLchar* m_sampler_definition_stencil; static const glw::GLuint m_height; static const glw::GLint m_image_unit; static const glw::GLint m_texture_unit; static const glw::GLuint m_width; }; } /* namespace StencilTexturing */ class StencilTexturingTests : public deqp::TestCaseGroup { public: StencilTexturingTests(deqp::Context& context); ~StencilTexturingTests(void); virtual void init(void); private: StencilTexturingTests(const StencilTexturingTests& other); StencilTexturingTests& operator=(const StencilTexturingTests& other); }; } /* namespace gl4cts */ #endif // _GL4CSTENCILTEXTURINGTESTS_HPP