From 685fd750c9d4796724ef7a6cc11c7f7f92f2ca6e Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 20 Aug 2026 13:50:45 -0400 Subject: [PATCH] [Test] (MG_Test): expect buffer-texture level queries to answer, not to error --- MobileGL/MG_Test/Texture/TextureTest.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/MobileGL/MG_Test/Texture/TextureTest.cpp b/MobileGL/MG_Test/Texture/TextureTest.cpp index a7079b9a..77b08374 100644 --- a/MobileGL/MG_Test/Texture/TextureTest.cpp +++ b/MobileGL/MG_Test/Texture/TextureTest.cpp @@ -4194,24 +4194,30 @@ TEST_F(TextureTest, CopyTexImage1DReportsUnsupportedInsteadOfTerminating) { ExpectSingleGlError(GL_INVALID_OPERATION); } -TEST_F(TextureTest, GetTexLevelParameterOnBufferStorageReportsErrorInsteadOfTerminating) { - // TextureStorageType is {Mipmap, Buffer} and the level queries only answer out of a mipmap - // chain, so every glGetTexLevelParameter* on a GL_TEXTURE_BUFFER texture reached a - // THROW_UNIMPL_EXCEPTION default: label and killed the process. +TEST_F(TextureTest, GetTexLevelParameterAnswersBufferStorageGeometry) { + // TextureStorageType is {Mipmap, Buffer} and the level queries used to answer only out of a + // mipmap chain, so every glGetTexLevelParameter* on a GL_TEXTURE_BUFFER texture reached a + // THROW_UNIMPL_EXCEPTION default: label and killed the process. It now answers out of the + // attached buffer range instead (GL 4.6 core 8.9): a buffer texture is one-dimensional, and + // with no buffer attached it addresses no texels at all. GLuint texture = 0; MG_Impl::GLImpl::CreateTextures(GL_TEXTURE_BUFFER, 1, &texture); MG_Impl::GLImpl::BindTexture(GL_TEXTURE_BUFFER, texture); MG_Impl::GLImpl::TexBuffer(GL_TEXTURE_BUFFER, GL_R8, 0); DrainPendingGlErrors(); - for (const GLenum pname : {GL_TEXTURE_WIDTH, GL_TEXTURE_HEIGHT, GL_TEXTURE_DEPTH}) { + const std::pair expectations[] = { + {GL_TEXTURE_WIDTH, 0}, {GL_TEXTURE_HEIGHT, 1}, {GL_TEXTURE_DEPTH, 1}}; + for (const auto& [pname, expected] : expectations) { GLint intParam = 0x20202020; MG_Impl::GLImpl::GetTexLevelParameteriv(GL_TEXTURE_BUFFER, 0, pname, &intParam); - ExpectSingleGlError(GL_INVALID_OPERATION); + EXPECT_EQ(MG_Impl::GLImpl::GetError(), static_cast(GL_NO_ERROR)); + EXPECT_EQ(intParam, expected) << "pname " << pname; GLfloat floatParam = 12345.0f; MG_Impl::GLImpl::GetTexLevelParameterfv(GL_TEXTURE_BUFFER, 0, pname, &floatParam); - ExpectSingleGlError(GL_INVALID_OPERATION); + EXPECT_EQ(MG_Impl::GLImpl::GetError(), static_cast(GL_NO_ERROR)); + EXPECT_EQ(floatParam, static_cast(expected)) << "pname " << pname; } }