blob: c55c72a4bd368520fccefd4bbc32af93ff49b22d [file] [log] [blame]
#ifndef _ESEXTCGEOMETRYSHADERBLITTING_HPP
#define _ESEXTCGEOMETRYSHADERBLITTING_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
*/ /*-------------------------------------------------------------------*/
#include "../esextcTestCaseBase.hpp"
#include "glwEnums.hpp"
namespace glcts
{
/** Base class for implementation of "Group 9" tests from CTS_EXT_geometry_shader.*/
class GeometryShaderBlitting : public TestCaseBase
{
public:
/* Public methods */
virtual void deinit(void);
virtual IterateResult iterate(void);
protected:
GeometryShaderBlitting(Context& context, const ExtParameters& extParams, const char* name, const char* description);
virtual ~GeometryShaderBlitting(void)
{
}
/* Protected abstract methods */
virtual void setUpFramebuffersForRendering(glw::GLuint fbo_draw_id, glw::GLuint fbo_read_id, glw::GLint to_draw,
glw::GLint to_read) = 0;
private:
/* Private variables */
glw::GLenum m_draw_fbo_completeness;
glw::GLenum m_read_fbo_completeness;
glw::GLuint m_fbo_draw_id;
glw::GLuint m_fbo_read_id;
glw::GLuint m_to_draw;
glw::GLuint m_to_read;
glw::GLuint m_vao_id;
};
/**
* 1. Only layer zero should be used when blitting from a layered read
* framebuffer to a non-layered draw framebuffer.
*
* Category: API;
* Functional Test.
*
* A 3D texture object A of resolution 4x4x4 and of internalformat GL_RGBA8
* should be created:
*
* - First slice should be filled with (255, 0, 0, 0);
* - Second slice should be filled with (0, 255, 0, 0);
* - Third slice should be filled with (0, 0, 255, 0);
* - Fourth slice should be filled with (0, 0, 0, 255);
*
* Source FBO should use:
*
* - glFramebufferTextureEXT() to bind level 0 of 3D texture A for color
* attachment zero;
*
* For destination FBO, create texture object A' of exactly the same type
* as A. The difference should be in content - all layers and slices should
* be filled with (0, 0, 0, 0).
*
* Destination FBO should use:
*
* - glFramebufferTextureLayer() to bind level 0 of texture A'.
*
* After blitting, the test should confirm that only zero layer/slice of
* destination FBO's attachments have been changed. Remaining layers and
* slices should remain black.
*/
class GeometryShaderBlittingLayeredToNonLayered : public GeometryShaderBlitting
{
public:
/* Public methods */
GeometryShaderBlittingLayeredToNonLayered(Context& context, const ExtParameters& extParams, const char* name,
const char* description);
virtual ~GeometryShaderBlittingLayeredToNonLayered(void)
{
}
protected:
/* Protected methods */
void setUpFramebuffersForRendering(glw::GLuint fbo_draw_id, glw::GLuint fbo_read_id, glw::GLint to_draw,
glw::GLint to_read);
};
/**
* 2. Only layer zero should be used when blitting from a non-layered read
* framebuffer to a layered draw framebuffer.
*
* Category: API;
* Functional Test.
*
* Modify test case 9.1 so that:
*
* - Original source FBO becomes a destination FBO;
* - Original destination FBO becomes a source FBO;
* - Texture objects A' and B' are filled with data as original textures
* A and B;
* - Texture objects A and B are filled with data as original textures
* A' and B'.
*/
class GeometryShaderBlittingNonLayeredToLayered : public GeometryShaderBlitting
{
public:
/* Public methods */
GeometryShaderBlittingNonLayeredToLayered(Context& context, const ExtParameters& extParams, const char* name,
const char* description);
virtual ~GeometryShaderBlittingNonLayeredToLayered(void)
{
}
protected:
/* Protected methods */
void setUpFramebuffersForRendering(glw::GLuint fbo_draw_id, glw::GLuint fbo_read_id, glw::GLint to_draw,
glw::GLint to_read);
};
/**
* 3. Only layer zero should be used when blitting from layered read framebuffer
* to a layered draw framebuffer.
*
* Category: API;
* Functional Test.
*
* Modify test case 9.1 so that:
*
* - Texture objects A' and B' should be configured in exactly the same way
* as A and B (they should be layered!), however they should still carry
* the same data as described in test case 9.1.
*/
class GeometryShaderBlittingLayeredToLayered : public GeometryShaderBlitting
{
public:
/* Public methods */
GeometryShaderBlittingLayeredToLayered(Context& context, const ExtParameters& extParams, const char* name,
const char* description);
virtual ~GeometryShaderBlittingLayeredToLayered(void)
{
}
protected:
/* Protected methods */
void setUpFramebuffersForRendering(glw::GLuint fbo_draw_id, glw::GLuint fbo_read_id, glw::GLint to_draw,
glw::GLint to_read);
};
} /* namespace glcts */
#endif // _ESEXTCGEOMETRYSHADERBLITTING_HPP