Fix pixel pack/unpack in nearest edge tests
authorDave Airlie <airlied@redhat.com>
Mon, 1 Jun 2020 21:32:17 +0000 (07:32 +1000)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 6 Aug 2020 08:28:52 +0000 (04: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_*

Change-Id: I2b31c8791337555b0bb154cea1f676f0daf43c7e

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");