diff --git a/StandAlone/ResourceLimits.cpp b/StandAlone/ResourceLimits.cpp index 6e1a3d85c..0e9d1b548 100644 --- a/StandAlone/ResourceLimits.cpp +++ b/StandAlone/ResourceLimits.cpp @@ -505,6 +505,8 @@ void DecodeResourceLimits(TBuiltInResource* resources, char* config) resources->maxTaskWorkGroupSizeZ_EXT = value; else if (tokenStr == "MaxMeshViewCountEXT") resources->maxMeshViewCountEXT = value; + else if (tokenStr == "MaxDualSourceDrawBuffersEXT") + resources->maxDualSourceDrawBuffersEXT = value; else if (tokenStr == "nonInductiveForLoops") resources->limits.nonInductiveForLoops = (value != 0); else if (tokenStr == "whileLoops") diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index f540f26d6..28d52330e 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -157,7 +157,13 @@ typedef struct glslang_resource_s { int max_task_work_group_size_y_ext; int max_task_work_group_size_z_ext; int max_mesh_view_count_ext; - int maxDualSourceDrawBuffersEXT; + union + { + int max_dual_source_draw_buffers_ext; + + /* Incorrectly capitalized name retained for backward compatibility */ + int maxDualSourceDrawBuffersEXT; + }; glslang_limits_t limits; } glslang_resource_t; diff --git a/gtests/BuiltInResource.FromFile.cpp b/gtests/BuiltInResource.FromFile.cpp index 9a7c9b575..eeea51187 100644 --- a/gtests/BuiltInResource.FromFile.cpp +++ b/gtests/BuiltInResource.FromFile.cpp @@ -53,5 +53,15 @@ TEST_F(DefaultResourceTest, FromFile) ASSERT_EQ(expectedConfig, realConfig); } +TEST_F(DefaultResourceTest, UnrecognizedLimit) +{ + const std::string defaultConfig = GetDefaultTBuiltInResourceString(); + testing::internal::CaptureStdout(); + TBuiltInResource resources; + DecodeResourceLimits(&resources, const_cast(defaultConfig.c_str())); + std::string output = testing::internal::GetCapturedStdout(); + ASSERT_EQ(output.find("unrecognized limit"), std::string::npos); +} + } // anonymous namespace } // namespace glslangtest