From 18057600c7c25e9b90867fb5513d7612d6242713 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 11 Apr 2017 23:47:54 +0200 Subject: [PATCH] Test: cap multisample texture sample count to implementation limits. Fixes a bunch of unnecessary failures on soft Mesa drivers. --- src/Magnum/Test/FramebufferGLTest.cpp | 24 ++++++++++---- src/Magnum/Test/MultisampleTextureGLTest.cpp | 33 +++++++++++++++----- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/Magnum/Test/FramebufferGLTest.cpp b/src/Magnum/Test/FramebufferGLTest.cpp index d13b16294..fc65ef31d 100644 --- a/src/Magnum/Test/FramebufferGLTest.cpp +++ b/src/Magnum/Test/FramebufferGLTest.cpp @@ -587,10 +587,14 @@ void FramebufferGLTest::attachTexture2DMultisample() { #endif MultisampleTexture2D color; - color.setStorage(4, TextureFormat::RGBA8, {128, 128}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + color.setStorage(Math::min(4, MultisampleTexture2D::maxColorSamples()), + TextureFormat::RGBA8, {128, 128}); MultisampleTexture2D depthStencil; - depthStencil.setStorage(4, TextureFormat::Depth24Stencil8, {128, 128}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + depthStencil.setStorage(Math::min(4, MultisampleTexture2D::maxDepthSamples()), + TextureFormat::Depth24Stencil8, {128, 128}); Framebuffer framebuffer({{}, Vector2i(128)}); framebuffer.attachTexture(Framebuffer::ColorAttachment(0), color) @@ -615,10 +619,14 @@ void FramebufferGLTest::attachTexture2DMultisampleArray() { #endif MultisampleTexture2DArray color; - color.setStorage(4, TextureFormat::RGBA8, {128, 128, 8}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + color.setStorage(Math::min(4, MultisampleTexture2DArray::maxColorSamples()), + TextureFormat::RGBA8, {128, 128, 8}); MultisampleTexture2DArray depthStencil; - depthStencil.setStorage(4, TextureFormat::Depth24Stencil8, {128, 128, 8}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + depthStencil.setStorage(Math::min(4, MultisampleTexture2DArray::maxDepthSamples()), + TextureFormat::Depth24Stencil8, {128, 128, 8}); Framebuffer framebuffer({{}, Vector2i(128)}); framebuffer.attachTextureLayer(Framebuffer::ColorAttachment(0), color, 3) @@ -875,10 +883,14 @@ void FramebufferGLTest::attachLayeredTexture2DMultisampleArray() { #endif MultisampleTexture2DArray color; - color.setStorage(4, TextureFormat::RGBA8, {128, 128, 8}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + color.setStorage(Math::min(4, MultisampleTexture2DArray::maxColorSamples()), + TextureFormat::RGBA8, {128, 128, 8}); MultisampleTexture2DArray depthStencil; - depthStencil.setStorage(4, TextureFormat::Depth24Stencil8, {128, 128, 8}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + depthStencil.setStorage(Math::min(4, MultisampleTexture2DArray::maxDepthSamples()), + TextureFormat::Depth24Stencil8, {128, 128, 8}); Framebuffer framebuffer{{{}, Vector2i{128}}}; framebuffer.attachLayeredTexture(Framebuffer::ColorAttachment{0}, color) diff --git a/src/Magnum/Test/MultisampleTextureGLTest.cpp b/src/Magnum/Test/MultisampleTextureGLTest.cpp index 8316f26c2..3f2cf0e1c 100644 --- a/src/Magnum/Test/MultisampleTextureGLTest.cpp +++ b/src/Magnum/Test/MultisampleTextureGLTest.cpp @@ -32,6 +32,7 @@ #include "Magnum/OpenGLTester.h" #include "Magnum/TextureFormat.h" #include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Functions.h" namespace Magnum { namespace Test { @@ -235,7 +236,9 @@ void MultisampleTextureGLTest::bindImage2D() { #endif MultisampleTexture2D texture; - texture.setStorage(4, TextureFormat::RGBA8, Vector2i{32}) + /* Mesa software implementation supports only 1 sample so we have to clamp */ + texture.setStorage(Math::min(4, MultisampleTexture2D::maxColorSamples()), + TextureFormat::RGBA8, Vector2i{32}) .bindImage(2, ImageAccess::ReadWrite, ImageFormat::RGBA8); MAGNUM_VERIFY_NO_ERROR(); @@ -269,7 +272,9 @@ void MultisampleTextureGLTest::bindImage2DArray() { #endif MultisampleTexture2DArray texture; - texture.setStorage(4, TextureFormat::RGBA8, {32, 32, 4}) + /* Mesa software implementation supports only 1 sample so we have to clamp */ + texture.setStorage(Math::min(4, MultisampleTexture2DArray::maxColorSamples()), + TextureFormat::RGBA8, {32, 32, 4}) .bindImage(2, 1, ImageAccess::ReadWrite, ImageFormat::RGBA8); MAGNUM_VERIFY_NO_ERROR(); @@ -302,7 +307,9 @@ void MultisampleTextureGLTest::storage2D() { #endif MultisampleTexture2D texture; - texture.setStorage(4, TextureFormat::RGBA8, {16, 16}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + texture.setStorage(Math::min(4, MultisampleTexture2D::maxColorSamples()), + TextureFormat::RGBA8, {16, 16}); MAGNUM_VERIFY_NO_ERROR(); @@ -321,7 +328,9 @@ void MultisampleTextureGLTest::storage2DArray() { #endif MultisampleTexture2DArray texture; - texture.setStorage(4, TextureFormat::RGBA8, {16, 16, 5}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + texture.setStorage(Math::min(4, MultisampleTexture2DArray::maxColorSamples()), + TextureFormat::RGBA8, {16, 16, 5}); MAGNUM_VERIFY_NO_ERROR(); @@ -340,7 +349,9 @@ void MultisampleTextureGLTest::invalidateImage2D() { #endif MultisampleTexture2D texture; - texture.setStorage(4, TextureFormat::RGBA8, {16, 16}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + texture.setStorage(Math::min(4, MultisampleTexture2D::maxColorSamples()), + TextureFormat::RGBA8, {16, 16}); texture.invalidateImage(); MAGNUM_VERIFY_NO_ERROR(); @@ -356,7 +367,9 @@ void MultisampleTextureGLTest::invalidateImage2DArray() { #endif MultisampleTexture2DArray texture; - texture.setStorage(4, TextureFormat::RGBA8, {16, 16, 5}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + texture.setStorage(Math::min(4, MultisampleTexture2DArray::maxColorSamples()), + TextureFormat::RGBA8, {16, 16, 5}); texture.invalidateImage(); MAGNUM_VERIFY_NO_ERROR(); @@ -372,7 +385,9 @@ void MultisampleTextureGLTest::invalidateSubImage2D() { #endif MultisampleTexture2D texture; - texture.setStorage(4, TextureFormat::RGBA8, {16, 16}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + texture.setStorage(Math::min(4, MultisampleTexture2D::maxColorSamples()), + TextureFormat::RGBA8, {16, 16}); texture.invalidateSubImage({3, 4}, {5, 6}); MAGNUM_VERIFY_NO_ERROR(); @@ -388,7 +403,9 @@ void MultisampleTextureGLTest::invalidateSubImage2DArray() { #endif MultisampleTexture2DArray texture; - texture.setStorage(4, TextureFormat::RGBA8, {16, 16, 5}); + /* Mesa software implementation supports only 1 sample so we have to clamp */ + texture.setStorage(Math::min(4, MultisampleTexture2DArray::maxColorSamples()), + TextureFormat::RGBA8, {16, 16, 5}); texture.invalidateSubImage({3, 4, 1}, {5, 6, 3}); MAGNUM_VERIFY_NO_ERROR();