cc_library(
name = "glslang-default-resource-limits",
srcs = ["StandAlone/ResourceLimits.cpp"],
- hdrs = ["StandAlone/ResourceLimits.h"],
+ hdrs = ["glslang/Public/ResourceLimits.h"],
copts = COMMON_COPTS,
linkstatic = 1,
deps = [":glslang"],
#include <sstream>
#include <cctype>
-#include "ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
-namespace glslang {
+TBuiltInResource Resources;
const TBuiltInResource DefaultTBuiltInResource = {
/* .MaxLights = */ 32,
}
}
-} // end namespace glslang
+TBuiltInResource* GetResources()
+{
+ return &Resources;
+}
+
+const TBuiltInResource* GetDefaultResources()
+{
+ return &DefaultTBuiltInResource;
+}
#define _CRT_SECURE_NO_WARNINGS
#endif
-#include "ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
#include "Worklist.h"
#include "DirStackFileIncluder.h"
#include "./../glslang/Include/ShHandle.h"
// array of unique places to leave the shader names and infologs for the asynchronous compiles
std::vector<std::unique_ptr<glslang::TWorkItem>> WorkItems;
-TBuiltInResource Resources;
std::string ConfigFile;
//
void ProcessConfigFile()
{
if (ConfigFile.size() == 0)
- Resources = glslang::DefaultTBuiltInResource;
+ *GetResources() = *GetDefaultResources();
#ifndef GLSLANG_WEB
else {
char* configString = ReadFileData(ConfigFile.c_str());
- glslang::DecodeResourceLimits(&Resources, configString);
+ DecodeResourceLimits(GetResources(), configString);
FreeFileData(configString);
}
#endif
#ifndef GLSLANG_WEB
if (Options & EOptionOutputPreprocessed) {
std::string str;
- if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, false, messages, &str, includer)) {
+ if (shader->preprocess(GetResources(), defaultVersion, ENoProfile, false, false, messages, &str, includer)) {
PutsIfNonEmpty(str.c_str());
} else {
CompileFailed = true;
}
#endif
- if (! shader->parse(&Resources, defaultVersion, false, messages, includer))
+ if (! shader->parse(GetResources(), defaultVersion, false, messages, includer))
CompileFailed = true;
program.addShader(shader);
#ifndef GLSLANG_WEB
if (Options & EOptionDumpConfig) {
- printf("%s", glslang::GetDefaultTBuiltInResourceString().c_str());
+ printf("%s", GetDefaultTBuiltInResourceString().c_str());
if (workList.empty())
return ESuccess;
}
for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) {
for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j) {
// ret = ShCompile(compiler, shaderStrings, NumShaderStrings, lengths, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
- ret = ShCompile(compiler, &shaderString, 1, nullptr, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
+ ret = ShCompile(compiler, &shaderString, 1, nullptr, EShOptNone, GetResources(), Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
// const char* multi[12] = { "# ve", "rsion", " 300 e", "s", "\n#err",
// "or should be l", "ine 1", "string 5\n", "float glo", "bal",
// ";\n#error should be line 2\n void main() {", "global = 2.3;}" };
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**/
-#include "resource_limits_c.h"
-#include "ResourceLimits.h"
+#include "glslang/Public/resource_limits_c.h"
+#include "glslang/Public/ResourceLimits.h"
#include <stdlib.h>
#include <string.h>
#include <string>
+glslang_resource_t* glslang_resource(void)
+{
+ return reinterpret_cast<glslang_resource_t*>(GetResources());
+}
+
const glslang_resource_t* glslang_default_resource(void)
{
- return reinterpret_cast<const glslang_resource_t*>(&glslang::DefaultTBuiltInResource);
+ return reinterpret_cast<const glslang_resource_t*>(GetDefaultResources());
}
#if defined(__clang__) || defined(__GNUC__)
const char* glslang_default_resource_string()
{
- std::string cpp_str = glslang::GetDefaultTBuiltInResourceString();
+ std::string cpp_str = GetDefaultTBuiltInResourceString();
char* c_str = (char*)malloc(cpp_str.length() + 1);
strcpy(c_str, cpp_str.c_str());
return c_str;
void glslang_decode_resource_limits(glslang_resource_t* resources, char* config)
{
- glslang::DecodeResourceLimits(reinterpret_cast<TBuiltInResource*>(resources), config);
+ DecodeResourceLimits(reinterpret_cast<TBuiltInResource*>(resources), config);
}
#include "glslang/Include/glslang_c_interface.h"
#include "StandAlone/DirStackFileIncluder.h"
-#include "StandAlone/ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
#include "glslang/Include/ShHandle.h"
#include "glslang/Include/ResourceLimits.h"
set(GLSLANG_HEADERS
Public/ShaderLang.h
+ Public/ResourceLimits.h
+ Public/resource_limits_c.h
Include/arrays.h
Include/BaseTypes.h
Include/Common.h
#include <string>
-#include "../glslang/Include/ResourceLimits.h"
+#include "../Include/ResourceLimits.h"
-namespace glslang {
+// Return pointer to user-writable Resource to pass through API in
+// future-proof way.
+extern TBuiltInResource* GetResources();
// These are the default resources for TBuiltInResources, used for both
// - parsing this string for the case where the user didn't supply one,
// - dumping out a template for user construction of a config file.
-extern const TBuiltInResource DefaultTBuiltInResource;
+extern const TBuiltInResource* GetDefaultResources();
// Returns the DefaultTBuiltInResource as a human-readable string.
std::string GetDefaultTBuiltInResourceString();
// Decodes the resource limits from |config| to |resources|.
void DecodeResourceLimits(TBuiltInResource* resources, char* config);
-} // end namespace glslang
-
#endif // _STAND_ALONE_RESOURCE_LIMITS_INCLUDED_
extern "C" {
#endif
+// Returns a struct that can be use to create custom resource values.
+glslang_resource_t* glslang_resource(void);
+
// These are the default resources for TBuiltInResources, used for both
// - parsing this string for the case where the user didn't supply one,
// - dumping out a template for user construction of a config file.
#include <gtest/gtest.h>
-#include "StandAlone/ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
#include "TestFixture.h"
namespace glslangtest {
const std::string path = GlobalTestSettings.testRoot + "/baseResults/test.conf";
std::string expectedConfig;
tryLoadFile(path, "expected resource limit", &expectedConfig);
- const std::string realConfig = glslang::GetDefaultTBuiltInResourceString();
+ const std::string realConfig = GetDefaultTBuiltInResourceString();
ASSERT_EQ(expectedConfig, realConfig);
}
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
-#include "StandAlone/ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
#include "TestFixture.h"
namespace glslangtest {
char* configChars = new char[len + 1];
memcpy(configChars, configContents.data(), len);
configChars[len] = 0;
- glslang::DecodeResourceLimits(&resources, configChars);
+ DecodeResourceLimits(&resources, configChars);
delete[] configChars;
}
#include "SPIRV/disassemble.h"
#include "SPIRV/doc.h"
#include "SPIRV/SPVRemapper.h"
-#include "StandAlone/ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
#include "glslang/Public/ShaderLang.h"
#include "Initializer.h"
shader->setStringsWithLengths(&shaderStrings, &shaderLengths, 1);
if (!entryPointName.empty()) shader->setEntryPoint(entryPointName.c_str());
return shader->parse(
- (resources ? resources : &glslang::DefaultTBuiltInResource),
+ (resources ? resources : GetDefaultResources()),
defaultVersion, isForwardCompatible, controls);
}
std::string ppShader;
glslang::TShader::ForbidIncluder includer;
const bool success = shader.preprocess(
- &glslang::DefaultTBuiltInResource, defaultVersion, defaultProfile,
+ GetDefaultResources(), defaultVersion, defaultProfile,
forceVersionProfile, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors),
&ppShader, includer);