#ifndef _GL4CGETTEXTURESUBIMAGETESTS_HPP
#define _GL4CGETTEXTURESUBIMAGETESTS_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
 */ /*-------------------------------------------------------------------*/

/**
 */ /*!
 * \file  gl4cGetTextureSubImageTests.hpp
 * \brief Get Texture Sub Image Tests Suite Interface
 */ /*-------------------------------------------------------------------*/

/* Includes. */

#include "glcTestCase.hpp"
#include "glwDefs.hpp"
#include "tcuDefs.hpp"

#include "glwEnums.hpp"
#include "glwFunctions.hpp"

/* Interface. */

namespace gl4cts
{
namespace GetTextureSubImage
{
/** Tests group for GetTextureSubImage tests.
 *
 *  Following tests will be run:
 *  -   Errors Test
 *  -   Functional Test
 */
class Tests : public deqp::TestCaseGroup
{
public:
	Tests(deqp::Context& context);
	~Tests(void);
	virtual void init(void);

private:
	/* Private member functions. */
	Tests(const Tests& other);
	Tests& operator=(const Tests& other);
};
/* Tests class. */

/** Error Generation Tests
 *
 *  The Errors test verifies that functions glGetTextureSubImage and
 *  glGetCompressedTextureSubImage generate proper error values if used
 *  improperly. For reference see OpenGL 4.5 Core Specification chapter
 *  8.11.4.

 *  *   Check that GL_INVALID_VALUE error is generated by
 *      glGetTextureSubImage if texture is not the name of an existing
 *      texture object.
 *
 *  *   Check that GL_INVALID_VALUE error is generated by
 *      glGetCompressedTextureSubImage if texture is not the name
 *      of an existingtexture object.
 *
 *  *   Check that GL_INVALID_OPERATION error is generated if texture is the
 *      name of a buffer or multisample texture.
 *
 *  *   Check that GL_INVALID_VALUE is generated if xoffset, yoffset or
 *      zoffset are negative.
 *
 *  *   Check that GL_INVALID_VALUE is generated if xoffset + width is
 *      greater than the texture's width, yoffset + height is greater than
 *      the texture's height, or zoffset + depth is greater than the
 *      texture's depth.
 *
 *  *   Check that GL_INVALID_VALUE error is generated if the effective
 *      target is GL_TEXTURE_1D and either yoffset is not zero, or height
 *      is not one.
 *
 *  *   Check that GL_INVALID_VALUE error is generated if the effective
 *      target is GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D or
 *      GL_TEXTURE_RECTANGLE and either zoffset is not zero, or depth
 *      is not one.
 *
 *  *   Check that GL_INVALID_OPERATION error is generated if the buffer
 *      size required to store the requested data is greater than bufSize.
 */
class Errors : public deqp::TestCase
{
public:
	Errors(deqp::Context& context);
	~Errors(void);
	IterateResult iterate(void);

private:
	/* Private member variables. */
	deqp::Context& m_context;
	glw::GLuint	m_texture_1D;
	glw::GLuint	m_texture_1D_array;
	glw::GLuint	m_texture_2D;
	glw::GLuint	m_texture_rectangle;
	glw::GLuint	m_texture_2D_compressed;
	glw::GLuint	m_texture_2D_multisampled;
	glw::GLubyte*  m_destination_buffer;

	/* Get(Compressed)TextureSubImage function pointer and type declarations. */
	typedef void(GLW_APIENTRY* PFNGLGETTEXTURESUBIMAGEPROC)(glw::GLuint texture, glw::GLint level, glw::GLint xoffset,
															glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width,
															glw::GLsizei height, glw::GLsizei depth, glw::GLenum format,
															glw::GLenum type, glw::GLsizei bufSize, void* pixels);

	typedef void(GLW_APIENTRY* PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(glw::GLuint texture, glw::GLint level,
																	  glw::GLint xoffset, glw::GLint yoffset,
																	  glw::GLint zoffset, glw::GLsizei width,
																	  glw::GLsizei height, glw::GLsizei depth,
																	  glw::GLsizei bufSize, void* pixels);

	PFNGLGETTEXTURESUBIMAGEPROC			  m_gl_GetTextureSubImage;
	PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC m_gl_GetCompressedTextureSubImage;

	/* Private member functions. */
	void prepare();

	bool testExistingTextureObjectError();

	bool testBufferOrMultisampledTargetError();

	bool testNegativeOffsetError();

	bool testBoundsError();

	bool testOneDimmensionalTextureErrors();

	bool testTwoDimmensionalTextureErrors();

	bool testBufferSizeError();

	void clean();

	/* Private static constants. */
	static const glw::GLubyte s_texture_data[];
	static const glw::GLuint  s_texture_data_size;
	static const glw::GLuint  s_texture_data_width;
	static const glw::GLuint  s_texture_data_height;

	static const glw::GLubyte s_texture_data_compressed[];
	static const glw::GLuint  s_texture_data_compressed_size;
	static const glw::GLuint  s_texture_data_compressed_width;
	static const glw::GLuint  s_texture_data_compressed_height;

	static const glw::GLuint s_destination_buffer_size;
};
/* Errors class. */

/** Functional
 *
 *  The Functional test verifies that functions glGetTextureSubImage and
 *  glGetCompressedTextureSubImage works properly. The whole test shall be
 *  constructed as follows:
 *
 *      for each tested function
 *          for each supported texture target
 *              prepare and upload texture
 *              download texture using the function
 *              compare uploaded texture with downloaded texture
 *              clean up
 *
 *  where:
 *  *   tested functions are:
 *      - GetTextureSubImage,
 *      - GetCompressedTextureSubImage;
 *  *   supported uncompressed texture targets are:
 *      - GL_TEXTURE_1D,
 *      - GL_TEXTURE_1D_ARRAY,
 *      - GL_TEXTURE_2D,
 *      - GL_TEXTURE_2D_ARRAY,
 *      - GL_TEXTURE_3D,
 *      - GL_TEXTURE_CUBE_MAP,
 *      - GL_TEXTURE_CUBE_MAP_ARRAY,
 *      - GL_TEXTURE_RECTANGLE;
 *  *   supported compressed texture targets are:
 *      - GL_TEXTURE_2D,
 *      - GL_TEXTURE_2D_ARRAY,
 *      - GL_TEXTURE_CUBE_MAP,
 *      - GL_TEXTURE_CUBE_MAP_ARRAY;
 *  *   texture internal format shall be GL_RGBA8 and
 *      GL_COMPRESSED_RGB8_ETC2;
 *  *   use linear dimmension of texture equal to 8;
 *  *   use offset of 4 (if dimmension is available);
 *  *   use width/height/depth of 4 (if dimmension is available).
 */
class Functional : public deqp::TestCase
{
public:
	Functional(deqp::Context& context);
	~Functional(void);
	IterateResult iterate(void);

private:
	/* Private member variables. */
	deqp::Context& m_context;
	glw::GLuint	m_texture;

	/* Private member functions. */
	void prepare(glw::GLenum target, bool is_compressed);
	bool check(glw::GLenum target, bool is_compressed);
	void clean();

	/* Get(Compressed)TextureSubImage function pointer and type declarations. */
	typedef void(GLW_APIENTRY* PFNGLGETTEXTURESUBIMAGEPROC)(glw::GLuint texture, glw::GLint level, glw::GLint xoffset,
															glw::GLint yoffset, glw::GLint zoffset, glw::GLsizei width,
															glw::GLsizei height, glw::GLsizei depth, glw::GLenum format,
															glw::GLenum type, glw::GLsizei bufSize, void* pixels);

	typedef void(GLW_APIENTRY* PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(glw::GLuint texture, glw::GLint level,
																	  glw::GLint xoffset, glw::GLint yoffset,
																	  glw::GLint zoffset, glw::GLsizei width,
																	  glw::GLsizei height, glw::GLsizei depth,
																	  glw::GLsizei bufSize, void* pixels);

	PFNGLGETTEXTURESUBIMAGEPROC			  m_gl_GetTextureSubImage;
	PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC m_gl_GetCompressedTextureSubImage;

	/* Static constants. */
	static const glw::GLubyte s_texture_data[];
	static const glw::GLsizei s_texture_data_size;
	static const glw::GLsizei s_texture_data_width;
	static const glw::GLsizei s_texture_data_height;
	static const glw::GLsizei s_texture_data_depth;

	static const glw::GLubyte s_texture_data_compressed[];
	static const glw::GLsizei s_texture_data_compressed_size;
};

/* Functional class */
} /* namespace GetTextureSubImage */
} /* namespace gl4cts */

#endif // _GL4CGETTEXTURESUBIMAGETESTS_HPP
