Test compiling shaders with given resource limits using GTest.
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 8a497a2..3fd7e7d 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -134,206 +134,8 @@
return;
}
- const char* delims = " \t\n\r";
- const char* token = strtok(config, delims);
- while (token) {
- const char* valueStr = strtok(0, delims);
- if (valueStr == 0 || ! (valueStr[0] == '-' || (valueStr[0] >= '0' && valueStr[0] <= '9'))) {
- printf("Error: '%s' bad .conf file. Each name must be followed by one number.\n", valueStr ? valueStr : "");
- return;
- }
- int value = atoi(valueStr);
+ glslang::DecodeResourceLimits(&Resources, config);
- if (strcmp(token, "MaxLights") == 0)
- Resources.maxLights = value;
- else if (strcmp(token, "MaxClipPlanes") == 0)
- Resources.maxClipPlanes = value;
- else if (strcmp(token, "MaxTextureUnits") == 0)
- Resources.maxTextureUnits = value;
- else if (strcmp(token, "MaxTextureCoords") == 0)
- Resources.maxTextureCoords = value;
- else if (strcmp(token, "MaxVertexAttribs") == 0)
- Resources.maxVertexAttribs = value;
- else if (strcmp(token, "MaxVertexUniformComponents") == 0)
- Resources.maxVertexUniformComponents = value;
- else if (strcmp(token, "MaxVaryingFloats") == 0)
- Resources.maxVaryingFloats = value;
- else if (strcmp(token, "MaxVertexTextureImageUnits") == 0)
- Resources.maxVertexTextureImageUnits = value;
- else if (strcmp(token, "MaxCombinedTextureImageUnits") == 0)
- Resources.maxCombinedTextureImageUnits = value;
- else if (strcmp(token, "MaxTextureImageUnits") == 0)
- Resources.maxTextureImageUnits = value;
- else if (strcmp(token, "MaxFragmentUniformComponents") == 0)
- Resources.maxFragmentUniformComponents = value;
- else if (strcmp(token, "MaxDrawBuffers") == 0)
- Resources.maxDrawBuffers = value;
- else if (strcmp(token, "MaxVertexUniformVectors") == 0)
- Resources.maxVertexUniformVectors = value;
- else if (strcmp(token, "MaxVaryingVectors") == 0)
- Resources.maxVaryingVectors = value;
- else if (strcmp(token, "MaxFragmentUniformVectors") == 0)
- Resources.maxFragmentUniformVectors = value;
- else if (strcmp(token, "MaxVertexOutputVectors") == 0)
- Resources.maxVertexOutputVectors = value;
- else if (strcmp(token, "MaxFragmentInputVectors") == 0)
- Resources.maxFragmentInputVectors = value;
- else if (strcmp(token, "MinProgramTexelOffset") == 0)
- Resources.minProgramTexelOffset = value;
- else if (strcmp(token, "MaxProgramTexelOffset") == 0)
- Resources.maxProgramTexelOffset = value;
- else if (strcmp(token, "MaxClipDistances") == 0)
- Resources.maxClipDistances = value;
- else if (strcmp(token, "MaxComputeWorkGroupCountX") == 0)
- Resources.maxComputeWorkGroupCountX = value;
- else if (strcmp(token, "MaxComputeWorkGroupCountY") == 0)
- Resources.maxComputeWorkGroupCountY = value;
- else if (strcmp(token, "MaxComputeWorkGroupCountZ") == 0)
- Resources.maxComputeWorkGroupCountZ = value;
- else if (strcmp(token, "MaxComputeWorkGroupSizeX") == 0)
- Resources.maxComputeWorkGroupSizeX = value;
- else if (strcmp(token, "MaxComputeWorkGroupSizeY") == 0)
- Resources.maxComputeWorkGroupSizeY = value;
- else if (strcmp(token, "MaxComputeWorkGroupSizeZ") == 0)
- Resources.maxComputeWorkGroupSizeZ = value;
- else if (strcmp(token, "MaxComputeUniformComponents") == 0)
- Resources.maxComputeUniformComponents = value;
- else if (strcmp(token, "MaxComputeTextureImageUnits") == 0)
- Resources.maxComputeTextureImageUnits = value;
- else if (strcmp(token, "MaxComputeImageUniforms") == 0)
- Resources.maxComputeImageUniforms = value;
- else if (strcmp(token, "MaxComputeAtomicCounters") == 0)
- Resources.maxComputeAtomicCounters = value;
- else if (strcmp(token, "MaxComputeAtomicCounterBuffers") == 0)
- Resources.maxComputeAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxVaryingComponents") == 0)
- Resources.maxVaryingComponents = value;
- else if (strcmp(token, "MaxVertexOutputComponents") == 0)
- Resources.maxVertexOutputComponents = value;
- else if (strcmp(token, "MaxGeometryInputComponents") == 0)
- Resources.maxGeometryInputComponents = value;
- else if (strcmp(token, "MaxGeometryOutputComponents") == 0)
- Resources.maxGeometryOutputComponents = value;
- else if (strcmp(token, "MaxFragmentInputComponents") == 0)
- Resources.maxFragmentInputComponents = value;
- else if (strcmp(token, "MaxImageUnits") == 0)
- Resources.maxImageUnits = value;
- else if (strcmp(token, "MaxCombinedImageUnitsAndFragmentOutputs") == 0)
- Resources.maxCombinedImageUnitsAndFragmentOutputs = value;
- else if (strcmp(token, "MaxCombinedShaderOutputResources") == 0)
- Resources.maxCombinedShaderOutputResources = value;
- else if (strcmp(token, "MaxImageSamples") == 0)
- Resources.maxImageSamples = value;
- else if (strcmp(token, "MaxVertexImageUniforms") == 0)
- Resources.maxVertexImageUniforms = value;
- else if (strcmp(token, "MaxTessControlImageUniforms") == 0)
- Resources.maxTessControlImageUniforms = value;
- else if (strcmp(token, "MaxTessEvaluationImageUniforms") == 0)
- Resources.maxTessEvaluationImageUniforms = value;
- else if (strcmp(token, "MaxGeometryImageUniforms") == 0)
- Resources.maxGeometryImageUniforms = value;
- else if (strcmp(token, "MaxFragmentImageUniforms") == 0)
- Resources.maxFragmentImageUniforms = value;
- else if (strcmp(token, "MaxCombinedImageUniforms") == 0)
- Resources.maxCombinedImageUniforms = value;
- else if (strcmp(token, "MaxGeometryTextureImageUnits") == 0)
- Resources.maxGeometryTextureImageUnits = value;
- else if (strcmp(token, "MaxGeometryOutputVertices") == 0)
- Resources.maxGeometryOutputVertices = value;
- else if (strcmp(token, "MaxGeometryTotalOutputComponents") == 0)
- Resources.maxGeometryTotalOutputComponents = value;
- else if (strcmp(token, "MaxGeometryUniformComponents") == 0)
- Resources.maxGeometryUniformComponents = value;
- else if (strcmp(token, "MaxGeometryVaryingComponents") == 0)
- Resources.maxGeometryVaryingComponents = value;
- else if (strcmp(token, "MaxTessControlInputComponents") == 0)
- Resources.maxTessControlInputComponents = value;
- else if (strcmp(token, "MaxTessControlOutputComponents") == 0)
- Resources.maxTessControlOutputComponents = value;
- else if (strcmp(token, "MaxTessControlTextureImageUnits") == 0)
- Resources.maxTessControlTextureImageUnits = value;
- else if (strcmp(token, "MaxTessControlUniformComponents") == 0)
- Resources.maxTessControlUniformComponents = value;
- else if (strcmp(token, "MaxTessControlTotalOutputComponents") == 0)
- Resources.maxTessControlTotalOutputComponents = value;
- else if (strcmp(token, "MaxTessEvaluationInputComponents") == 0)
- Resources.maxTessEvaluationInputComponents = value;
- else if (strcmp(token, "MaxTessEvaluationOutputComponents") == 0)
- Resources.maxTessEvaluationOutputComponents = value;
- else if (strcmp(token, "MaxTessEvaluationTextureImageUnits") == 0)
- Resources.maxTessEvaluationTextureImageUnits = value;
- else if (strcmp(token, "MaxTessEvaluationUniformComponents") == 0)
- Resources.maxTessEvaluationUniformComponents = value;
- else if (strcmp(token, "MaxTessPatchComponents") == 0)
- Resources.maxTessPatchComponents = value;
- else if (strcmp(token, "MaxPatchVertices") == 0)
- Resources.maxPatchVertices = value;
- else if (strcmp(token, "MaxTessGenLevel") == 0)
- Resources.maxTessGenLevel = value;
- else if (strcmp(token, "MaxViewports") == 0)
- Resources.maxViewports = value;
- else if (strcmp(token, "MaxVertexAtomicCounters") == 0)
- Resources.maxVertexAtomicCounters = value;
- else if (strcmp(token, "MaxTessControlAtomicCounters") == 0)
- Resources.maxTessControlAtomicCounters = value;
- else if (strcmp(token, "MaxTessEvaluationAtomicCounters") == 0)
- Resources.maxTessEvaluationAtomicCounters = value;
- else if (strcmp(token, "MaxGeometryAtomicCounters") == 0)
- Resources.maxGeometryAtomicCounters = value;
- else if (strcmp(token, "MaxFragmentAtomicCounters") == 0)
- Resources.maxFragmentAtomicCounters = value;
- else if (strcmp(token, "MaxCombinedAtomicCounters") == 0)
- Resources.maxCombinedAtomicCounters = value;
- else if (strcmp(token, "MaxAtomicCounterBindings") == 0)
- Resources.maxAtomicCounterBindings = value;
- else if (strcmp(token, "MaxVertexAtomicCounterBuffers") == 0)
- Resources.maxVertexAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxTessControlAtomicCounterBuffers") == 0)
- Resources.maxTessControlAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxTessEvaluationAtomicCounterBuffers") == 0)
- Resources.maxTessEvaluationAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxGeometryAtomicCounterBuffers") == 0)
- Resources.maxGeometryAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxFragmentAtomicCounterBuffers") == 0)
- Resources.maxFragmentAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxCombinedAtomicCounterBuffers") == 0)
- Resources.maxCombinedAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxAtomicCounterBufferSize") == 0)
- Resources.maxAtomicCounterBufferSize = value;
- else if (strcmp(token, "MaxTransformFeedbackBuffers") == 0)
- Resources.maxTransformFeedbackBuffers = value;
- else if (strcmp(token, "MaxTransformFeedbackInterleavedComponents") == 0)
- Resources.maxTransformFeedbackInterleavedComponents = value;
- else if (strcmp(token, "MaxCullDistances") == 0)
- Resources.maxCullDistances = value;
- else if (strcmp(token, "MaxCombinedClipAndCullDistances") == 0)
- Resources.maxCombinedClipAndCullDistances = value;
- else if (strcmp(token, "MaxSamples") == 0)
- Resources.maxSamples = value;
-
- else if (strcmp(token, "nonInductiveForLoops") == 0)
- Resources.limits.nonInductiveForLoops = (value != 0);
- else if (strcmp(token, "whileLoops") == 0)
- Resources.limits.whileLoops = (value != 0);
- else if (strcmp(token, "doWhileLoops") == 0)
- Resources.limits.doWhileLoops = (value != 0);
- else if (strcmp(token, "generalUniformIndexing") == 0)
- Resources.limits.generalUniformIndexing = (value != 0);
- else if (strcmp(token, "generalAttributeMatrixVectorIndexing") == 0)
- Resources.limits.generalAttributeMatrixVectorIndexing = (value != 0);
- else if (strcmp(token, "generalVaryingIndexing") == 0)
- Resources.limits.generalVaryingIndexing = (value != 0);
- else if (strcmp(token, "generalSamplerIndexing") == 0)
- Resources.limits.generalSamplerIndexing = (value != 0);
- else if (strcmp(token, "generalVariableIndexing") == 0)
- Resources.limits.generalVariableIndexing = (value != 0);
- else if (strcmp(token, "generalConstantMatrixVectorIndexing") == 0)
- Resources.limits.generalConstantMatrixVectorIndexing = (value != 0);
- else
- printf("Warning: unrecognized limit (%s) in configuration file.\n", token);
-
- token = strtok(0, delims);
- }
if (configStrings)
FreeFileData(configStrings);
else