Enhance WebGL tests for compressed texture dimensions Added 2D array and 3D validation tests. Removed an overly strict assertion. Bug: angleproject:42264764 Change-Id: I818c8bee7637d701e8091ed0216fa8eef43c6901 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7969957 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
diff --git a/src/libANGLE/formatutils.cpp b/src/libANGLE/formatutils.cpp index 4568f6a..af70359 100644 --- a/src/libANGLE/formatutils.cpp +++ b/src/libANGLE/formatutils.cpp
@@ -1966,7 +1966,7 @@ GLuint *resultOut) const { ASSERT(compressed); - ASSERT(rowPitch > 0 && rowPitch % pixelBytes == 0); + ASSERT(rowPitch % pixelBytes == 0); CheckedNumeric<GLuint> checkedHeight(height); CheckedNumeric<GLuint> checkedRowPitch(rowPitch);
diff --git a/src/tests/gl_tests/WebGLCompatibilityTest.cpp b/src/tests/gl_tests/WebGLCompatibilityTest.cpp index 8997c6a..a82f238 100644 --- a/src/tests/gl_tests/WebGLCompatibilityTest.cpp +++ b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
@@ -5821,58 +5821,79 @@ GLenum expectedError, const char *explanation) { + const bool isBPTC = format == GL_COMPRESSED_RGBA_BPTC_UNORM_EXT || + format == GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT || + format == GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT || + format == GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT; + std::vector<uint8_t> tempVector(expectedByteLength, 0); EXPECT_GL_NO_ERROR(); - GLTexture sourceTexture; - glBindTexture(GL_TEXTURE_2D, sourceTexture); - glCompressedTexImage2D(GL_TEXTURE_2D, level, format, width, height, 0, expectedByteLength, - tempVector.data()); - if (expectedError == 0) { - EXPECT_GL_NO_ERROR() << explanation; + GLTexture sourceTexture; + glBindTexture(GL_TEXTURE_2D, sourceTexture); + glCompressedTexImage2D(GL_TEXTURE_2D, level, format, width, height, 0, expectedByteLength, + tempVector.data()); + EXPECT_GL_ERROR(expectedError) << explanation << " (glCompressedTexImage2D)"; } - else + + if (getClientMajorVersion() >= 3) { - EXPECT_GL_ERROR(expectedError) << explanation; + GLTexture sourceTexture; + glBindTexture(GL_TEXTURE_2D_ARRAY, sourceTexture); + glCompressedTexImage3D(GL_TEXTURE_2D_ARRAY, level, format, width, height, 3, 0, + expectedByteLength * 3, nullptr); + EXPECT_GL_ERROR(expectedError) << explanation << "(glCompressedTexImage3D array)"; + } + + if (isBPTC && getClientMajorVersion() >= 3) + { + GLTexture sourceTexture; + glBindTexture(GL_TEXTURE_3D, sourceTexture); + glCompressedTexImage3D(GL_TEXTURE_3D, level, format, width, height, 3, 0, + expectedByteLength * 3, nullptr); + EXPECT_GL_ERROR(expectedError) << explanation << "(glCompressedTexImage3D volume)"; } if (level == 0 && width > 0) { - GLTexture sourceTextureStorage; - glBindTexture(GL_TEXTURE_2D, sourceTextureStorage); - - if (getClientMajorVersion() >= 3) { - glTexStorage2D(GL_TEXTURE_2D, 1, format, width, height); - if (expectedError == 0) + GLTexture sourceTextureStorage; + glBindTexture(GL_TEXTURE_2D, sourceTextureStorage); + + if (getClientMajorVersion() >= 3) { - EXPECT_GL_NO_ERROR() << explanation << " (texStorage2D)"; + glTexStorage2D(GL_TEXTURE_2D, 1, format, width, height); + EXPECT_GL_ERROR(expectedError) << explanation << " (texStorage2D)"; } else { - EXPECT_GL_ERROR(expectedError) << explanation << " (texStorage2D)"; - } - } - else - { - if (IsGLExtensionRequestable("GL_EXT_texture_storage")) - { - glRequestExtensionANGLE("GL_EXT_texture_storage"); - ASSERT_TRUE(IsGLExtensionEnabled("GL_EXT_texture_storage")); - - glTexStorage2DEXT(GL_TEXTURE_2D, 1, format, width, height); - if (expectedError == 0) + if (EnsureGLExtensionEnabled("GL_EXT_texture_storage")) { - EXPECT_GL_NO_ERROR() << explanation << " (texStorage2DEXT)"; - } - else - { + glTexStorage2DEXT(GL_TEXTURE_2D, 1, format, width, height); EXPECT_GL_ERROR(expectedError) << explanation << " (texStorage2DEXT)"; } } } + + if (getClientMajorVersion() >= 3) + { + GLTexture sourceTextureStorage; + glBindTexture(GL_TEXTURE_2D_ARRAY, sourceTextureStorage); + + glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, format, width, height, 3); + EXPECT_GL_ERROR(expectedError) << explanation << " (texStorage3D, array)"; + } + + if (isBPTC && getClientMajorVersion() >= 3) + { + GLTexture sourceTextureStorage; + glBindTexture(GL_TEXTURE_3D, sourceTextureStorage); + + glTexStorage3D(GL_TEXTURE_3D, 1, format, width, height, 3); + EXPECT_GL_ERROR(expectedError) << explanation << " (texStorage3D, volume)"; + } } }