The es31fCopyImageTests.cpp calculateThreshold function was written in a
too clever way, leading to division by zero in cases where texture
format did not include all channels.
Affects:
dEQP-GLES31.functional.copy_image.*_renderbuffer
Components: OpenGL
VK-GL-CTS issue: 3328
Change-Id: Iaf6b0d80f7427fee3567365603ba8dbd375f206d
{
const tcu::IVec4 srcBits = tcu::getTextureFormatBitDepth(sourceFormat);
const tcu::IVec4 readBits = tcu::getTextureFormatBitDepth(readPixelsFormat);
+ const tcu::IVec4 minBits = tcu::min(srcBits, readBits);
- return Vec4(1.0f) / ((tcu::IVec4(1) << (tcu::min(srcBits, readBits))) - tcu::IVec4(1)).cast<float>();
+ return Vec4(
+ minBits[0] ? 1.0f / (float)((1 << minBits[0]) - 1) : 0,
+ minBits[1] ? 1.0f / (float)((1 << minBits[1]) - 1) : 0,
+ minBits[2] ? 1.0f / (float)((1 << minBits[2]) - 1) : 0,
+ minBits[3] ? 1.0f / (float)((1 << minBits[3]) - 1) : 0);
}
}