Browse Source

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.
pull/680/head
Vladimír Vondruš 1 year ago
parent
commit
dd5ff23399
  1. 23
      src/Magnum/GL/AbstractTexture.cpp
  2. 25
      src/Magnum/GL/CubeMapTexture.cpp
  3. 48
      src/Magnum/GL/Test/AbstractTextureGLTest.cpp
  4. 66
      src/Magnum/GL/Test/CubeMapTextureGLTest.cpp

23
src/Magnum/GL/AbstractTexture.cpp

@ -1831,18 +1831,6 @@ template<UnsignedInt dimensions> void AbstractTexture::compressedImage(const GLi
CORRADE_ASSERT(image.size() == size, CORRADE_ASSERT(image.size() == size,
"GL::AbstractTexture::compressedImage(): expected image view size" << size << "but got" << image.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 */ /* Internal texture format */
GLint format; GLint format;
Context::current().state().texture.getLevelParameterivImplementation(*this, level, GL_TEXTURE_INTERNAL_FORMAT, &format); Context::current().state().texture.getLevelParameterivImplementation(*this, level, GL_TEXTURE_INTERNAL_FORMAT, &format);
@ -2022,17 +2010,6 @@ template<UnsignedInt dimensions> void AbstractTexture::compressedSubImage(const
CORRADE_ASSERT(compressedPixelFormat(image.format()) == CompressedPixelFormat(format), CORRADE_ASSERT(compressedPixelFormat(image.format()) == CompressedPixelFormat(format),
"GL::AbstractTexture::compressedSubImage(): expected image view format" << CompressedPixelFormat(format) << "but got" << compressedPixelFormat(image.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<dimensions>(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 #endif
const Vector3i paddedOffset = Vector3i::pad<dimensions>(range.min()); const Vector3i paddedOffset = Vector3i::pad<dimensions>(range.min());

25
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; dataOffsetSize.second = Context::current().state().texture.getCubeLevelCompressedImageSizeImplementation(*this, level)*6;
} else dataOffsetSize = Magnum::Implementation::compressedImageDataOffsetSizeFor(image, size); } 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 #ifndef CORRADE_NO_ASSERT
/* Internal texture format */ /* Internal texture format */
GLint 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(), ); "GL::CubeMapTexture::compressedImage(): expected image view size" << size << "but got" << image.size(), );
#ifndef CORRADE_NO_ASSERT #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 /* Internal texture format. Zero-init to avoid an assert about value
already wrapped in compressedPixelFormatWrap() later if the drivers are already wrapped in compressedPixelFormatWrap() later if the drivers are
extra shitty (Intel Windows drivers, I'm talking about you). */ 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), CORRADE_ASSERT(compressedPixelFormat(image.format()) == CompressedPixelFormat(format),
"GL::CubeMapTexture::compressedSubImage(): expected image view format" << CompressedPixelFormat(format) << "but got" << compressedPixelFormat(image.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 #endif
Buffer::unbindInternal(Buffer::TargetHint::PixelPack); Buffer::unbindInternal(Buffer::TargetHint::PixelPack);

48
src/Magnum/GL/Test/AbstractTextureGLTest.cpp

@ -55,11 +55,9 @@ struct AbstractTextureGLTest: OpenGLTester {
void compressedImageQueryViewNullptr(); void compressedImageQueryViewNullptr();
void compressedImageQueryViewBadSize(); void compressedImageQueryViewBadSize();
void compressedImageQueryViewBadDataSize();
void compressedImageQueryViewBadFormat(); void compressedImageQueryViewBadFormat();
void compressedSubImageQueryViewNullptr(); void compressedSubImageQueryViewNullptr();
void compressedSubImageQueryViewBadSize(); void compressedSubImageQueryViewBadSize();
void compressedSubImageQueryViewBadDataSize();
void compressedSubImageQueryViewBadFormat(); void compressedSubImageQueryViewBadFormat();
#endif #endif
}; };
@ -76,11 +74,9 @@ AbstractTextureGLTest::AbstractTextureGLTest() {
&AbstractTextureGLTest::compressedImageQueryViewNullptr, &AbstractTextureGLTest::compressedImageQueryViewNullptr,
&AbstractTextureGLTest::compressedImageQueryViewBadSize, &AbstractTextureGLTest::compressedImageQueryViewBadSize,
&AbstractTextureGLTest::compressedImageQueryViewBadDataSize,
&AbstractTextureGLTest::compressedImageQueryViewBadFormat, &AbstractTextureGLTest::compressedImageQueryViewBadFormat,
&AbstractTextureGLTest::compressedSubImageQueryViewNullptr, &AbstractTextureGLTest::compressedSubImageQueryViewNullptr,
&AbstractTextureGLTest::compressedSubImageQueryViewBadSize, &AbstractTextureGLTest::compressedSubImageQueryViewBadSize,
&AbstractTextureGLTest::compressedSubImageQueryViewBadDataSize,
&AbstractTextureGLTest::compressedSubImageQueryViewBadFormat, &AbstractTextureGLTest::compressedSubImageQueryViewBadFormat,
#endif #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"); 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<Extensions::EXT::texture_compression_s3tc>())
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() { void AbstractTextureGLTest::compressedImageQueryViewBadFormat() {
CORRADE_SKIP_IF_NO_ASSERT(); 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"); 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<Extensions::ARB::get_texture_sub_image>())
CORRADE_SKIP(Extensions::ARB::get_texture_sub_image::string() << "is not supported.");
if(!Context::current().isExtensionSupported<Extensions::EXT::texture_compression_s3tc>())
CORRADE_SKIP(Extensions::EXT::texture_compression_s3tc::string() << "is not supported.");
if(!Context::current().isExtensionSupported<Extensions::ARB::internalformat_query2>())
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() { void AbstractTextureGLTest::compressedSubImageQueryViewBadFormat() {
CORRADE_SKIP_IF_NO_ASSERT(); CORRADE_SKIP_IF_NO_ASSERT();

66
src/Magnum/GL/Test/CubeMapTextureGLTest.cpp

@ -130,7 +130,6 @@ struct CubeMapTextureGLTest: OpenGLTester {
void compressedImageQueryView(); void compressedImageQueryView();
void compressedImageQueryViewNullptr(); void compressedImageQueryViewNullptr();
void compressedImageQueryViewBadSize(); void compressedImageQueryViewBadSize();
void compressedImageQueryViewBadDataSize();
void compressedImageQueryViewBadFormat(); void compressedImageQueryViewBadFormat();
#endif #endif
#if !(defined(MAGNUM_TARGET_GLES2) && defined(MAGNUM_TARGET_WEBGL)) #if !(defined(MAGNUM_TARGET_GLES2) && defined(MAGNUM_TARGET_WEBGL))
@ -145,7 +144,6 @@ struct CubeMapTextureGLTest: OpenGLTester {
void compressedSubImageQueryView(); void compressedSubImageQueryView();
void compressedSubImageQueryViewNullptr(); void compressedSubImageQueryViewNullptr();
void compressedSubImageQueryViewBadSize(); void compressedSubImageQueryViewBadSize();
void compressedSubImageQueryViewBadDataSize();
void compressedSubImageQueryViewBadFormat(); void compressedSubImageQueryViewBadFormat();
void compressedSubImageQueryBuffer(); void compressedSubImageQueryBuffer();
#endif #endif
@ -168,7 +166,6 @@ struct CubeMapTextureGLTest: OpenGLTester {
void compressedImage3DQueryView(); void compressedImage3DQueryView();
void compressedImage3DQueryViewNullptr(); void compressedImage3DQueryViewNullptr();
void compressedImage3DQueryViewBadSize(); void compressedImage3DQueryViewBadSize();
void compressedImage3DQueryViewBadDataSize();
void compressedImage3DQueryViewBadFormat(); void compressedImage3DQueryViewBadFormat();
#endif #endif
@ -432,7 +429,6 @@ CubeMapTextureGLTest::CubeMapTextureGLTest() {
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
addTests({&CubeMapTextureGLTest::compressedImageQueryViewNullptr, addTests({&CubeMapTextureGLTest::compressedImageQueryViewNullptr,
&CubeMapTextureGLTest::compressedImageQueryViewBadSize, &CubeMapTextureGLTest::compressedImageQueryViewBadSize,
&CubeMapTextureGLTest::compressedImageQueryViewBadDataSize,
&CubeMapTextureGLTest::compressedImageQueryViewBadFormat}); &CubeMapTextureGLTest::compressedImageQueryViewBadFormat});
addInstancedTests({ addInstancedTests({
@ -443,7 +439,6 @@ CubeMapTextureGLTest::CubeMapTextureGLTest() {
addTests({&CubeMapTextureGLTest::compressedImage3DQueryViewNullptr, addTests({&CubeMapTextureGLTest::compressedImage3DQueryViewNullptr,
&CubeMapTextureGLTest::compressedImage3DQueryViewBadSize, &CubeMapTextureGLTest::compressedImage3DQueryViewBadSize,
&CubeMapTextureGLTest::compressedImage3DQueryViewBadDataSize,
&CubeMapTextureGLTest::compressedImage3DQueryViewBadFormat}); &CubeMapTextureGLTest::compressedImage3DQueryViewBadFormat});
#endif #endif
@ -462,7 +457,6 @@ CubeMapTextureGLTest::CubeMapTextureGLTest() {
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
addTests({&CubeMapTextureGLTest::compressedSubImageQueryViewNullptr, addTests({&CubeMapTextureGLTest::compressedSubImageQueryViewNullptr,
&CubeMapTextureGLTest::compressedSubImageQueryViewBadSize, &CubeMapTextureGLTest::compressedSubImageQueryViewBadSize,
&CubeMapTextureGLTest::compressedSubImageQueryViewBadDataSize,
&CubeMapTextureGLTest::compressedSubImageQueryViewBadFormat}); &CubeMapTextureGLTest::compressedSubImageQueryViewBadFormat});
#endif #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"); 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<Extensions::EXT::texture_compression_s3tc>())
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() { void CubeMapTextureGLTest::compressedImageQueryViewBadFormat() {
CORRADE_SKIP_IF_NO_ASSERT(); 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"); 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<Extensions::EXT::texture_compression_s3tc>())
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() { void CubeMapTextureGLTest::compressedSubImageQueryViewBadFormat() {
CORRADE_SKIP_IF_NO_ASSERT(); 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"); 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<Extensions::EXT::texture_compression_s3tc>())
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() { void CubeMapTextureGLTest::compressedImage3DQueryViewBadFormat() {
CORRADE_SKIP_IF_NO_ASSERT(); CORRADE_SKIP_IF_NO_ASSERT();

Loading…
Cancel
Save