Fix pixel pack/unpack in nearest edge tests
authorDave Airlie <airlied@redhat.com>
Mon, 1 Jun 2020 21:32:17 +0000 (07:32 +1000)
committerSunny Sun <sunny.sun@arm.com>
Mon, 17 Aug 2020 07:28:16 +0000 (03:28 -0400)
With certain fbconfigs and width/height combos, this would
corrupt memory due to overwriting too many bytes by 1.

Components: OpenGL

VK-GL-CTS Issue: 2496

Affects: KHR-GL46.nearest_edge.offset_*
         KHR-GLES32.core.nearest_edge.offset*

Change-Id: I2b31c8791337555b0bb154cea1f676f0daf43c7e
(cherry picked from commit 9486b751ce73aa581af1c16494506569cf2e8364)

external/openglcts/modules/common/glcNearestEdgeTests.cpp

index acf241e..dfd92bb 100644 (file)
@@ -265,6 +265,8 @@ void NearestEdgeTestCase::fillTexture ()
        }
 
        const auto internalFormat = glu::getInternalFormat(m_texFormat);
+       if (tcu::getPixelSize(m_texFormat) < 4)
+               gl.pixelStorei(GL_UNPACK_ALIGNMENT, 1);
        gl.texImage2D(kTextureType, 0, internalFormat, m_width,  m_height, 0 /* border */, m_transFormat.format, m_transFormat.dataType, m_texData.data());
        GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage2D");
 }
@@ -323,6 +325,8 @@ bool NearestEdgeTestCase::verifyResults ()
        const auto& gl = m_context.getRenderContext().getFunctions();
 
        std::vector<deUint8> fbData(m_width * m_height * tcu::getPixelSize(m_texFormat));
+       if (tcu::getPixelSize(m_texFormat) < 4)
+               gl.pixelStorei(GL_PACK_ALIGNMENT, 1);
        gl.readPixels(0, 0, m_width, m_height, m_transFormat.format, m_transFormat.dataType, fbData.data());
        GLU_EXPECT_NO_ERROR(gl.getError(), "glReadPixels");