From 24f6c33069fae29cda5ace127c4cca496eab59f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 21 May 2021 17:20:07 +0200 Subject: [PATCH] Shaders: ye, SwiftShader, thanks for reminding me of the harsh reality. 256 vectors in total is really damn low, guess I'll have to optimize the remaining uniform structures to deduplicate the redundant material info. --- src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp | 4 +++- src/Magnum/Shaders/Test/FlatGLTest.cpp | 4 +++- src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp | 8 ++++++-- src/Magnum/Shaders/Test/PhongGLTest.cpp | 6 ++++-- src/Magnum/Shaders/Test/VectorGLTest.cpp | 4 +++- src/Magnum/Shaders/Test/VertexColorGLTest.cpp | 4 +++- 6 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp b/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp index b75dd72eb..6319f8d4a 100644 --- a/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp +++ b/src/Magnum/Shaders/Test/DistanceFieldVectorGLTest.cpp @@ -156,7 +156,9 @@ constexpr struct { {"classic fallback", {}, 1, 1}, {"", DistanceFieldVectorGL2D::Flag::UniformBuffers, 1, 1}, {"texture transformation", DistanceFieldVectorGL2D::Flag::UniformBuffers|DistanceFieldVectorGL2D::Flag::TextureTransformation, 1, 1}, - {"multiple materials, draws", DistanceFieldVectorGL2D::Flag::UniformBuffers, 64, 128}, + /* SwiftShader has 256 uniform vectors at most, per-draw is 4+1 in 3D case + and 3+1 in 2D, per-material 4 */ + {"multiple materials, draws", DistanceFieldVectorGL2D::Flag::UniformBuffers, 16, 48}, }; constexpr struct { diff --git a/src/Magnum/Shaders/Test/FlatGLTest.cpp b/src/Magnum/Shaders/Test/FlatGLTest.cpp index 715026036..39f2eeaa2 100644 --- a/src/Magnum/Shaders/Test/FlatGLTest.cpp +++ b/src/Magnum/Shaders/Test/FlatGLTest.cpp @@ -199,7 +199,9 @@ constexpr struct { } ConstructUniformBuffersData[]{ {"classic fallback", {}, 1}, {"", FlatGL2D::Flag::UniformBuffers, 1}, - {"multiple draws", FlatGL2D::Flag::UniformBuffers, 128}, + /* SwiftShader has 256 uniform vectors at most, per-draw is 4+2 in 3D case + and 3+2 in 2D */ + {"multiple draws", FlatGL2D::Flag::UniformBuffers, 42}, {"texture transformation", FlatGL2D::Flag::UniformBuffers|FlatGL2D::Flag::Textured|FlatGL2D::Flag::TextureTransformation, 1}, {"alpha mask", FlatGL2D::Flag::UniformBuffers|FlatGL2D::Flag::AlphaMask, 1}, {"object ID", FlatGL2D::Flag::UniformBuffers|FlatGL2D::Flag::ObjectId, 1} diff --git a/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp b/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp index 7caf1d2f4..3aec29ec1 100644 --- a/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp +++ b/src/Magnum/Shaders/Test/MeshVisualizerGLTest.cpp @@ -215,7 +215,9 @@ constexpr struct { } ConstructUniformBuffersData2D[] { {"classic fallback", MeshVisualizerGL2D::Flag::Wireframe|MeshVisualizerGL2D::Flag::NoGeometryShader, 1, 1}, {"", MeshVisualizerGL2D::Flag::UniformBuffers|MeshVisualizerGL2D::Flag::Wireframe|MeshVisualizerGL2D::Flag::NoGeometryShader, 1, 1}, - {"multiple materials, draws", MeshVisualizerGL2D::Flag::UniformBuffers|MeshVisualizerGL2D::Flag::Wireframe|MeshVisualizerGL2D::Flag::NoGeometryShader, 64, 128}, + /* SwiftShader has 256 uniform vectors at most, per-2D-draw is 4, + per-material 4, two need to be left for drawOffset + viewportSize */ + {"multiple materials, draws", MeshVisualizerGL2D::Flag::UniformBuffers|MeshVisualizerGL2D::Flag::Wireframe|MeshVisualizerGL2D::Flag::NoGeometryShader, 8, 55}, /* The rest is basically a copy of ConstructData2D with UniformBuffers added */ #ifndef MAGNUM_TARGET_WEBGL @@ -271,7 +273,9 @@ constexpr struct { } ConstructUniformBuffersData3D[] { {"classic fallback", MeshVisualizerGL3D::Flag::Wireframe|MeshVisualizerGL3D::Flag::NoGeometryShader, 1, 1}, {"", MeshVisualizerGL3D::Flag::UniformBuffers|MeshVisualizerGL3D::Flag::Wireframe|MeshVisualizerGL3D::Flag::NoGeometryShader, 1, 1}, - {"multiple materials, draws", MeshVisualizerGL3D::Flag::UniformBuffers|MeshVisualizerGL3D::Flag::Wireframe|MeshVisualizerGL3D::Flag::NoGeometryShader, 64, 128}, + /* SwiftShader has 256 uniform vectors at most, per-3D-draw is 4+4, + per-material 4, plus 4 for projection */ + {"multiple materials, draws", MeshVisualizerGL3D::Flag::UniformBuffers|MeshVisualizerGL3D::Flag::Wireframe|MeshVisualizerGL3D::Flag::NoGeometryShader, 6, 28}, /* The rest is basically a copy of ConstructData2D with UniformBuffers added */ #ifndef MAGNUM_TARGET_WEBGL diff --git a/src/Magnum/Shaders/Test/PhongGLTest.cpp b/src/Magnum/Shaders/Test/PhongGLTest.cpp index 520bbb120..66ba51c8d 100644 --- a/src/Magnum/Shaders/Test/PhongGLTest.cpp +++ b/src/Magnum/Shaders/Test/PhongGLTest.cpp @@ -218,8 +218,10 @@ constexpr struct { } ConstructUniformBuffersData[]{ {"classic fallback", {}, 1, 1, 1}, {"", PhongGL::Flag::UniformBuffers, 1, 1, 1}, - {"multiple lights, materials, draws", PhongGL::Flag::UniformBuffers, 30, 64, 128}, - {"zero lights", PhongGL::Flag::UniformBuffers, 0, 64, 128}, + /* SwiftShader has 256 uniform vectors at most, per-3D-draw is 4+4, + per-material 4, per-light 4 plus 4 for projection */ + {"multiple lights, materials, draws", PhongGL::Flag::UniformBuffers, 8, 8, 24}, + {"zero lights", PhongGL::Flag::UniformBuffers, 0, 16, 24}, {"ambient + diffuse + specular texture", PhongGL::Flag::UniformBuffers|PhongGL::Flag::AmbientTexture|PhongGL::Flag::DiffuseTexture|PhongGL::Flag::SpecularTexture, 1, 1, 1}, {"ambient + diffuse + specular texture + texture transformation", PhongGL::Flag::UniformBuffers|PhongGL::Flag::AmbientTexture|PhongGL::Flag::DiffuseTexture|PhongGL::Flag::SpecularTexture|PhongGL::Flag::TextureTransformation, 1, 1, 1}, {"normal texture", PhongGL::Flag::UniformBuffers|PhongGL::Flag::NormalTexture, 1, 1, 1}, diff --git a/src/Magnum/Shaders/Test/VectorGLTest.cpp b/src/Magnum/Shaders/Test/VectorGLTest.cpp index 9474bec3e..0d492b8e1 100644 --- a/src/Magnum/Shaders/Test/VectorGLTest.cpp +++ b/src/Magnum/Shaders/Test/VectorGLTest.cpp @@ -155,7 +155,9 @@ constexpr struct { {"classic fallback", {}, 1}, {"", VectorGL2D::Flag::UniformBuffers, 1}, {"texture transformation", VectorGL2D::Flag::UniformBuffers|VectorGL2D::Flag::TextureTransformation, 1}, - {"multiple draws", VectorGL2D::Flag::UniformBuffers, 128}, + /* SwiftShader has 256 uniform vectors at most, per-draw is 4+3 in 3D case + and 3+3 in 2D */ + {"multiple draws", VectorGL2D::Flag::UniformBuffers, 36}, }; #endif diff --git a/src/Magnum/Shaders/Test/VertexColorGLTest.cpp b/src/Magnum/Shaders/Test/VertexColorGLTest.cpp index 43fc382b6..e9011fe62 100644 --- a/src/Magnum/Shaders/Test/VertexColorGLTest.cpp +++ b/src/Magnum/Shaders/Test/VertexColorGLTest.cpp @@ -132,7 +132,9 @@ constexpr struct { } ConstructUniformBuffersData[]{ {"classic fallback", {}, 1}, {"", VertexColorGL2D::Flag::UniformBuffers, 1}, - {"multiple draws", VertexColorGL2D::Flag::UniformBuffers, 128} + /* SwiftShader has 256 uniform vectors at most, per-draw is 4 in 3D case + and 3 in 2D; one needs to be reserved for drawOffset */ + {"multiple draws", VertexColorGL2D::Flag::UniformBuffers, 63} }; #endif