From dd5ff23399b0da48af229e027b2f4f7491b9b937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 26 Jan 2025 00:31:00 +0100 Subject: [PATCH] GL: these assertions are handled by compressed images themselves now. Which means, they never get hit because it's impossible to craft such an image. So remove that all. --- src/Magnum/GL/AbstractTexture.cpp | 23 ------- src/Magnum/GL/CubeMapTexture.cpp | 25 -------- src/Magnum/GL/Test/AbstractTextureGLTest.cpp | 48 -------------- src/Magnum/GL/Test/CubeMapTextureGLTest.cpp | 66 -------------------- 4 files changed, 162 deletions(-) diff --git a/src/Magnum/GL/AbstractTexture.cpp b/src/Magnum/GL/AbstractTexture.cpp index 3b2d5b79e..520f4a5cf 100644 --- a/src/Magnum/GL/AbstractTexture.cpp +++ b/src/Magnum/GL/AbstractTexture.cpp @@ -1831,18 +1831,6 @@ template void AbstractTexture::compressedImage(const GLi CORRADE_ASSERT(image.size() == size, "GL::AbstractTexture::compressedImage(): expected image view size" << size << "but got" << image.size(), ); - /* If the user-provided pixel storage doesn't tell us all properties about - the compression, we need to ask GL for it */ - std::size_t dataSize; - if(!image.storage().compressedBlockSize().product() || !image.storage().compressedBlockDataSize()) { - GLint textureDataSize; - Context::current().state().texture.getLevelParameterivImplementation(*this, level, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &textureDataSize); - dataSize = textureDataSize; - } else dataSize = Magnum::Implementation::compressedImageDataSizeFor(image, size); - - CORRADE_ASSERT(image.data().size() == dataSize, - "GL::AbstractTexture::compressedImage(): expected image view data size" << dataSize << "bytes but got" << image.data().size(), ); - /* Internal texture format */ GLint format; Context::current().state().texture.getLevelParameterivImplementation(*this, level, GL_TEXTURE_INTERNAL_FORMAT, &format); @@ -2022,17 +2010,6 @@ template void AbstractTexture::compressedSubImage(const CORRADE_ASSERT(compressedPixelFormat(image.format()) == CompressedPixelFormat(format), "GL::AbstractTexture::compressedSubImage(): expected image view format" << CompressedPixelFormat(format) << "but got" << compressedPixelFormat(image.format()), ); - - /* Calculate compressed subimage size. If the user-provided pixel storage - doesn't tell us all properties about the compression, we need to ask GL - for it. That requires GL_ARB_internalformat_query2. */ - std::size_t dataSize; - if(!image.storage().compressedBlockSize().product() || !image.storage().compressedBlockDataSize()) - dataSize = compressedSubImageSize(TextureFormat(format), size); - else dataSize = Magnum::Implementation::compressedImageDataSizeFor(image, size); - - CORRADE_ASSERT(image.data().size() == dataSize, - "GL::AbstractTexture::compressedSubImage(): expected image view data size" << dataSize << "bytes but got" << image.data().size(), ); #endif const Vector3i paddedOffset = Vector3i::pad(range.min()); diff --git a/src/Magnum/GL/CubeMapTexture.cpp b/src/Magnum/GL/CubeMapTexture.cpp index e1041c8a3..554980a8c 100644 --- a/src/Magnum/GL/CubeMapTexture.cpp +++ b/src/Magnum/GL/CubeMapTexture.cpp @@ -205,9 +205,6 @@ void CubeMapTexture::compressedImage(const Int level, const MutableCompressedIma dataOffsetSize.second = Context::current().state().texture.getCubeLevelCompressedImageSizeImplementation(*this, level)*6; } else dataOffsetSize = Magnum::Implementation::compressedImageDataOffsetSizeFor(image, size); - CORRADE_ASSERT(image.data().size() == dataOffsetSize.first + dataOffsetSize.second, - "GL::CubeMapTexture::compressedImage(): expected image view data size" << dataOffsetSize.first + dataOffsetSize.second << "bytes but got" << image.data().size(), ); - #ifndef CORRADE_NO_ASSERT /* Internal texture format */ GLint format; @@ -351,17 +348,6 @@ void CubeMapTexture::compressedImage(const CubeMapCoordinate coordinate, const I "GL::CubeMapTexture::compressedImage(): expected image view size" << size << "but got" << image.size(), ); #ifndef CORRADE_NO_ASSERT - /* If the user-provided pixel storage doesn't tell us all properties about - the compression, we need to ask GL for it */ - std::size_t dataSize; - if(!image.storage().compressedBlockSize().product() || !image.storage().compressedBlockDataSize()) - dataSize = Context::current().state().texture.getCubeLevelCompressedImageSizeImplementation(*this, level); - else - dataSize = Magnum::Implementation::compressedImageDataSizeFor(image, size); - - CORRADE_ASSERT(image.data().size() == dataSize, - "GL::CubeMapTexture::compressedImage(): expected image view data size" << dataSize << "bytes but got" << image.data().size(), ); - /* Internal texture format. Zero-init to avoid an assert about value already wrapped in compressedPixelFormatWrap() later if the drivers are extra shitty (Intel Windows drivers, I'm talking about you). */ @@ -477,17 +463,6 @@ void CubeMapTexture::compressedSubImage(const Int level, const Range3Di& range, CORRADE_ASSERT(compressedPixelFormat(image.format()) == CompressedPixelFormat(format), "GL::CubeMapTexture::compressedSubImage(): expected image view format" << CompressedPixelFormat(format) << "but got" << compressedPixelFormat(image.format()), ); - - /* Calculate compressed subimage size. If the user-provided pixel storage - doesn't tell us all properties about the compression, we need to ask GL - for it. That requires GL_ARB_internalformat_query2. */ - std::size_t dataSize; - if(!image.storage().compressedBlockSize().product() || !image.storage().compressedBlockDataSize()) - dataSize = compressedSubImageSize<3>(TextureFormat(format), range.size()); - else dataSize = Magnum::Implementation::compressedImageDataSizeFor(image, range.size()); - - CORRADE_ASSERT(image.data().size() == dataSize, - "GL::CubeMapTexture::compressedSubImage(): expected image view data size" << dataSize << "bytes but got" << image.data().size(), ); #endif Buffer::unbindInternal(Buffer::TargetHint::PixelPack); diff --git a/src/Magnum/GL/Test/AbstractTextureGLTest.cpp b/src/Magnum/GL/Test/AbstractTextureGLTest.cpp index 40c5a380c..1ac0c5bbf 100644 --- a/src/Magnum/GL/Test/AbstractTextureGLTest.cpp +++ b/src/Magnum/GL/Test/AbstractTextureGLTest.cpp @@ -55,11 +55,9 @@ struct AbstractTextureGLTest: OpenGLTester { void compressedImageQueryViewNullptr(); void compressedImageQueryViewBadSize(); - void compressedImageQueryViewBadDataSize(); void compressedImageQueryViewBadFormat(); void compressedSubImageQueryViewNullptr(); void compressedSubImageQueryViewBadSize(); - void compressedSubImageQueryViewBadDataSize(); void compressedSubImageQueryViewBadFormat(); #endif }; @@ -76,11 +74,9 @@ AbstractTextureGLTest::AbstractTextureGLTest() { &AbstractTextureGLTest::compressedImageQueryViewNullptr, &AbstractTextureGLTest::compressedImageQueryViewBadSize, - &AbstractTextureGLTest::compressedImageQueryViewBadDataSize, &AbstractTextureGLTest::compressedImageQueryViewBadFormat, &AbstractTextureGLTest::compressedSubImageQueryViewNullptr, &AbstractTextureGLTest::compressedSubImageQueryViewBadSize, - &AbstractTextureGLTest::compressedSubImageQueryViewBadDataSize, &AbstractTextureGLTest::compressedSubImageQueryViewBadFormat, #endif }); @@ -229,26 +225,6 @@ void AbstractTextureGLTest::compressedImageQueryViewBadSize() { CORRADE_COMPARE(out, "GL::AbstractTexture::compressedImage(): expected image view size Vector(4, 4) but got Vector(4, 8)\n"); } -void AbstractTextureGLTest::compressedImageQueryViewBadDataSize() { - CORRADE_SKIP_IF_NO_ASSERT(); - - if(!Context::current().isExtensionSupported()) - CORRADE_SKIP(Extensions::EXT::texture_compression_s3tc::string() << "is not supported."); - - Texture2D texture; - texture.setStorage(1, TextureFormat::CompressedRGBAS3tcDxt3, Vector2i{4}); - - MAGNUM_VERIFY_NO_GL_ERROR(); - - char data[16 - 1]; - MutableCompressedImageView2D image{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{4}, data}; - - Containers::String out; - Error redirectError{&out}; - texture.compressedImage(0, image); - CORRADE_COMPARE(out, "GL::AbstractTexture::compressedImage(): expected image view data size 16 bytes but got 15\n"); -} - void AbstractTextureGLTest::compressedImageQueryViewBadFormat() { CORRADE_SKIP_IF_NO_ASSERT(); @@ -316,30 +292,6 @@ void AbstractTextureGLTest::compressedSubImageQueryViewBadSize() { CORRADE_COMPARE(out, "GL::AbstractTexture::compressedSubImage(): expected image view size Vector(4, 4) but got Vector(4, 8)\n"); } -void AbstractTextureGLTest::compressedSubImageQueryViewBadDataSize() { - CORRADE_SKIP_IF_NO_ASSERT(); - - if(!Context::current().isExtensionSupported()) - CORRADE_SKIP(Extensions::ARB::get_texture_sub_image::string() << "is not supported."); - if(!Context::current().isExtensionSupported()) - CORRADE_SKIP(Extensions::EXT::texture_compression_s3tc::string() << "is not supported."); - if(!Context::current().isExtensionSupported()) - CORRADE_SKIP(Extensions::ARB::internalformat_query2::string() << "is not supported."); - - Texture2D texture; - texture.setStorage(1, TextureFormat::CompressedRGBAS3tcDxt3, Vector2i{4}); - - MAGNUM_VERIFY_NO_GL_ERROR(); - - char data[16 - 1]; - MutableCompressedImageView2D image{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{4}, data}; - - Containers::String out; - Error redirectError{&out}; - texture.compressedSubImage(0, {{}, Vector2i{4}}, image); - CORRADE_COMPARE(out, "GL::AbstractTexture::compressedSubImage(): expected image view data size 16 bytes but got 15\n"); -} - void AbstractTextureGLTest::compressedSubImageQueryViewBadFormat() { CORRADE_SKIP_IF_NO_ASSERT(); diff --git a/src/Magnum/GL/Test/CubeMapTextureGLTest.cpp b/src/Magnum/GL/Test/CubeMapTextureGLTest.cpp index 1ce9d1799..a19c574d1 100644 --- a/src/Magnum/GL/Test/CubeMapTextureGLTest.cpp +++ b/src/Magnum/GL/Test/CubeMapTextureGLTest.cpp @@ -130,7 +130,6 @@ struct CubeMapTextureGLTest: OpenGLTester { void compressedImageQueryView(); void compressedImageQueryViewNullptr(); void compressedImageQueryViewBadSize(); - void compressedImageQueryViewBadDataSize(); void compressedImageQueryViewBadFormat(); #endif #if !(defined(MAGNUM_TARGET_GLES2) && defined(MAGNUM_TARGET_WEBGL)) @@ -145,7 +144,6 @@ struct CubeMapTextureGLTest: OpenGLTester { void compressedSubImageQueryView(); void compressedSubImageQueryViewNullptr(); void compressedSubImageQueryViewBadSize(); - void compressedSubImageQueryViewBadDataSize(); void compressedSubImageQueryViewBadFormat(); void compressedSubImageQueryBuffer(); #endif @@ -168,7 +166,6 @@ struct CubeMapTextureGLTest: OpenGLTester { void compressedImage3DQueryView(); void compressedImage3DQueryViewNullptr(); void compressedImage3DQueryViewBadSize(); - void compressedImage3DQueryViewBadDataSize(); void compressedImage3DQueryViewBadFormat(); #endif @@ -432,7 +429,6 @@ CubeMapTextureGLTest::CubeMapTextureGLTest() { #ifndef MAGNUM_TARGET_GLES addTests({&CubeMapTextureGLTest::compressedImageQueryViewNullptr, &CubeMapTextureGLTest::compressedImageQueryViewBadSize, - &CubeMapTextureGLTest::compressedImageQueryViewBadDataSize, &CubeMapTextureGLTest::compressedImageQueryViewBadFormat}); addInstancedTests({ @@ -443,7 +439,6 @@ CubeMapTextureGLTest::CubeMapTextureGLTest() { addTests({&CubeMapTextureGLTest::compressedImage3DQueryViewNullptr, &CubeMapTextureGLTest::compressedImage3DQueryViewBadSize, - &CubeMapTextureGLTest::compressedImage3DQueryViewBadDataSize, &CubeMapTextureGLTest::compressedImage3DQueryViewBadFormat}); #endif @@ -462,7 +457,6 @@ CubeMapTextureGLTest::CubeMapTextureGLTest() { #ifndef MAGNUM_TARGET_GLES addTests({&CubeMapTextureGLTest::compressedSubImageQueryViewNullptr, &CubeMapTextureGLTest::compressedSubImageQueryViewBadSize, - &CubeMapTextureGLTest::compressedSubImageQueryViewBadDataSize, &CubeMapTextureGLTest::compressedSubImageQueryViewBadFormat}); #endif @@ -1462,26 +1456,6 @@ void CubeMapTextureGLTest::compressedImageQueryViewBadSize() { CORRADE_COMPARE(out, "GL::CubeMapTexture::compressedImage(): expected image view size Vector(4, 4) but got Vector(4, 8)\n"); } -void CubeMapTextureGLTest::compressedImageQueryViewBadDataSize() { - CORRADE_SKIP_IF_NO_ASSERT(); - - if(!Context::current().isExtensionSupported()) - CORRADE_SKIP(Extensions::EXT::texture_compression_s3tc::string() << "is not supported."); - - CubeMapTexture texture; - texture.setStorage(1, TextureFormat::CompressedRGBAS3tcDxt3, Vector2i{4}); - - MAGNUM_VERIFY_NO_GL_ERROR(); - - char data[16 - 1]; - MutableCompressedImageView2D image{CompressedPixelFormat::RGBAS3tcDxt3, Vector2i{4}, data}; - - Containers::String out; - Error redirectError{&out}; - texture.compressedImage(CubeMapCoordinate::PositiveX, 0, image); - CORRADE_COMPARE(out, "GL::CubeMapTexture::compressedImage(): expected image view data size 16 bytes but got 15\n"); -} - void CubeMapTextureGLTest::compressedImageQueryViewBadFormat() { CORRADE_SKIP_IF_NO_ASSERT(); @@ -1813,26 +1787,6 @@ void CubeMapTextureGLTest::compressedSubImageQueryViewBadSize() { CORRADE_COMPARE(out, "GL::CubeMapTexture::compressedSubImage(): expected image view size Vector(4, 4, 1) but got Vector(4, 4, 2)\n"); } -void CubeMapTextureGLTest::compressedSubImageQueryViewBadDataSize() { - CORRADE_SKIP_IF_NO_ASSERT(); - - if(!Context::current().isExtensionSupported()) - CORRADE_SKIP(Extensions::EXT::texture_compression_s3tc::string() << "is not supported."); - - CubeMapTexture texture; - texture.setStorage(1, TextureFormat::CompressedRGBAS3tcDxt3, Vector2i{12}); - - MAGNUM_VERIFY_NO_GL_ERROR(); - - char data[16 - 1]; - MutableCompressedImageView3D image{CompressedPixelFormat::RGBAS3tcDxt3, Vector3i{4, 4, 1}, data}; - - Containers::String out; - Error redirectError{&out}; - texture.compressedSubImage(0, Range3Di::fromSize({4, 4, 0}, {4, 4, 1}), image); - CORRADE_COMPARE(out, "GL::CubeMapTexture::compressedSubImage(): expected image view data size 16 bytes but got 15\n"); -} - void CubeMapTextureGLTest::compressedSubImageQueryViewBadFormat() { CORRADE_SKIP_IF_NO_ASSERT(); @@ -2221,26 +2175,6 @@ void CubeMapTextureGLTest::compressedImage3DQueryViewBadSize() { CORRADE_COMPARE(out, "GL::CubeMapTexture::compressedImage(): expected image view size Vector(4, 4, 6) but got Vector(4, 8, 6)\n"); } -void CubeMapTextureGLTest::compressedImage3DQueryViewBadDataSize() { - CORRADE_SKIP_IF_NO_ASSERT(); - - if(!Context::current().isExtensionSupported()) - CORRADE_SKIP(Extensions::EXT::texture_compression_s3tc::string() << "is not supported."); - - CubeMapTexture texture; - texture.setStorage(1, TextureFormat::CompressedRGBAS3tcDxt3, Vector2i{4}); - - MAGNUM_VERIFY_NO_GL_ERROR(); - - char data[16*6 - 1]; - MutableCompressedImageView3D image{CompressedPixelFormat::RGBAS3tcDxt3, Vector3i{4, 4, 6}, data}; - - Containers::String out; - Error redirectError{&out}; - texture.compressedImage(0, image); - CORRADE_COMPARE(out, "GL::CubeMapTexture::compressedImage(): expected image view data size 96 bytes but got 95\n"); -} - void CubeMapTextureGLTest::compressedImage3DQueryViewBadFormat() { CORRADE_SKIP_IF_NO_ASSERT();