Call glViewport before rendering to FBO
authorJames Helferty <jhelferty@nvidia.com>
Fri, 28 Jul 2017 22:34:35 +0000 (18:34 -0400)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 22 Aug 2017 07:10:18 +0000 (03:10 -0400)
The gl_Layer variant of this test wasn't setting the viewport before
rendering to FBO.

VK-GL-CTS issue 608

Component: OpenGL

Affects:
* KHR-GL45.shader_viewport_layer_array.ShaderLayerFramebufferNonLayeredTestCase
* KHR-GL45.shader_viewport_layer_array.ShaderLayerFramebufferLayeredTestCase

Change-Id: I7cda78a25a745816508a65d6dce0708da3c0e53f

external/openglcts/modules/gl/gl4cShaderViewportLayerArrayTests.cpp
external/openglcts/modules/gl/gl4cShaderViewportLayerArrayTests.hpp

index 77c710d..7efa211 100644 (file)
@@ -446,6 +446,8 @@ void ShaderLayerFramebufferTestCaseBase::init()
        if (!m_isExtensionSupported)
                return;
 
+       const glw::Functions&    gl                     = m_context.getRenderContext().getFunctions();
+
        this->createFBO();
 
        m_shaderPipelines.push_back(ShaderViewportLayerArrayUtils::ShaderPipeline(false, false, m_layersNum, "Layer"));
@@ -456,8 +458,20 @@ void ShaderLayerFramebufferTestCaseBase::init()
        {
                iter->create(m_context.getRenderContext());
        }
+
+       gl.viewport(0, 0, m_fboSize, m_fboSize);
 }
 
+void ShaderLayerFramebufferTestCaseBase::deinit()
+{
+       const Functions&                gl                       = m_context.getRenderContext().getFunctions();
+       const tcu::RenderTarget renderTarget = m_context.getRenderContext().getRenderTarget();
+
+       gl.viewport(0, 0, renderTarget.getWidth(), renderTarget.getHeight());
+       GLU_EXPECT_NO_ERROR(gl.getError(), "Viewport");
+}
+
+
 tcu::TestNode::IterateResult ShaderLayerFramebufferTestCaseBase::iterate()
 {
        if (!m_isExtensionSupported)
@@ -484,6 +498,8 @@ tcu::TestNode::IterateResult ShaderLayerFramebufferTestCaseBase::iterate()
                gl.clear(GL_COLOR_BUFFER_BIT);
                GLU_EXPECT_NO_ERROR(gl.getError(), "Clear");
                ShaderViewportLayerArrayUtils::renderQuad(renderContext, *pipelineIter, m_currentLayer, renderColor);
+               gl.flush();
+               GLU_EXPECT_NO_ERROR(gl.getError(), "Flush");
 
                // calculate layer offset (same value as gl_Layer in shader)
                int currentLayerWithOffset = (m_currentLayer + pipelineIter->getViewportLayerOffset()) % m_layersNum;
@@ -498,6 +514,7 @@ tcu::TestNode::IterateResult ShaderLayerFramebufferTestCaseBase::iterate()
                GLU_EXPECT_NO_ERROR(gl.getError(), "ReadPixels");
                bool validationResult =
                        ShaderViewportLayerArrayUtils::validateColor(tcu::Vec4(rgba[0], rgba[1], rgba[2], rgba[3]), renderColor);
+
                TCU_CHECK_MSG(validationResult, "Expected pixel color did not match rendered one.");
        }
 
index cac1741..dff73e2 100644 (file)
@@ -156,6 +156,7 @@ public:
        ShaderLayerFramebufferTestCaseBase(deqp::Context& context, const char* name, const char* description, bool layered);
 
        void init();
+       void deinit();
 
        tcu::TestNode::IterateResult iterate();
 };