Commit 2d76e5f6 by Shannon Woods

Adds resource string generation to ANGLE

This will avoid Chrome source having to be updated each time that ANGLE's ShBuiltInResources changes. BUG=374942 Change-Id: If54dba8351de9b261ff269e885f231547c08ff0a Reviewed-on: https://chromium-review.googlesource.com/200171Reviewed-by: 's avatarKenneth Russell <kbr@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarNicolas Capens <nicolascapens@chromium.org> Tested-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent 0e3efa51
...@@ -37,7 +37,7 @@ extern "C" { ...@@ -37,7 +37,7 @@ extern "C" {
// Version number for shader translation API. // Version number for shader translation API.
// It is incremented every time the API changes. // It is incremented every time the API changes.
#define ANGLE_SH_VERSION 123 #define ANGLE_SH_VERSION 124
// //
// The names of the following enums have been derived by replacing GL prefix // The names of the following enums have been derived by replacing GL prefix
...@@ -157,6 +157,7 @@ typedef enum { ...@@ -157,6 +157,7 @@ typedef enum {
SH_ACTIVE_OUTPUT_VARIABLES_ARRAY = 0x6007, SH_ACTIVE_OUTPUT_VARIABLES_ARRAY = 0x6007,
SH_ACTIVE_ATTRIBUTES_ARRAY = 0x6008, SH_ACTIVE_ATTRIBUTES_ARRAY = 0x6008,
SH_ACTIVE_VARYINGS_ARRAY = 0x6009, SH_ACTIVE_VARYINGS_ARRAY = 0x6009,
SH_RESOURCES_STRING_LENGTH = 0x600A
} ShShaderInfo; } ShShaderInfo;
// Compile options. // Compile options.
...@@ -319,7 +320,7 @@ COMPILER_EXPORT void ShInitBuiltInResources(ShBuiltInResources* resources); ...@@ -319,7 +320,7 @@ COMPILER_EXPORT void ShInitBuiltInResources(ShBuiltInResources* resources);
// //
// ShHandle held by but opaque to the driver. It is allocated, // ShHandle held by but opaque to the driver. It is allocated,
// managed, and de-allocated by the compiler. It's contents // managed, and de-allocated by the compiler. Its contents
// are defined by and used by the compiler. // are defined by and used by the compiler.
// //
// If handle creation fails, 0 will be returned. // If handle creation fails, 0 will be returned.
...@@ -327,6 +328,17 @@ COMPILER_EXPORT void ShInitBuiltInResources(ShBuiltInResources* resources); ...@@ -327,6 +328,17 @@ COMPILER_EXPORT void ShInitBuiltInResources(ShBuiltInResources* resources);
typedef void* ShHandle; typedef void* ShHandle;
// //
// Returns the a concatenated list of the items in ShBuiltInResources as a string.
// This function must be updated whenever ShBuiltInResources is changed.
// Parameters:
// handle: Specifies the handle of the compiler to be used.
// outStringLen: Specifies the size of the buffer, in number of characters. The size
// of the buffer required to store the resources string can be obtained
// by calling ShGetInfo with SH_RESOURCES_STRING_LENGTH.
// outStr: Returns a null-terminated string representing all the built-in resources.
COMPILER_EXPORT void ShGetBuiltInResourcesString(const ShHandle handle, size_t outStringLen, char *outStr);
//
// Driver calls these to create and destroy compiler objects. // Driver calls these to create and destroy compiler objects.
// //
// Returns the handle of constructed compiler, null if the requested compiler is // Returns the handle of constructed compiler, null if the requested compiler is
......
...@@ -267,6 +267,7 @@ bool TCompiler::compile(const char* const shaderStrings[], ...@@ -267,6 +267,7 @@ bool TCompiler::compile(const char* const shaderStrings[],
bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources) bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources)
{ {
compileResources = resources; compileResources = resources;
setResourceString();
assert(symbolTable.isEmpty()); assert(symbolTable.isEmpty());
symbolTable.push(); // COMMON_BUILTINS symbolTable.push(); // COMMON_BUILTINS
...@@ -318,6 +319,34 @@ bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources) ...@@ -318,6 +319,34 @@ bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources)
return true; return true;
} }
void TCompiler::setResourceString()
{
std::ostringstream strstream;
strstream << ":MaxVertexAttribs:" << compileResources.MaxVertexAttribs
<< ":MaxVertexUniformVectors:" << compileResources.MaxVertexUniformVectors
<< ":MaxVaryingVectors:" << compileResources.MaxVaryingVectors
<< ":MaxVertexTextureImageUnits:" << compileResources.MaxVertexTextureImageUnits
<< ":MaxCombinedTextureImageUnits:" << compileResources.MaxCombinedTextureImageUnits
<< ":MaxTextureImageUnits:" << compileResources.MaxTextureImageUnits
<< ":MaxFragmentUniformVectors:" << compileResources.MaxFragmentUniformVectors
<< ":MaxDrawBuffers:" << compileResources.MaxDrawBuffers
<< ":OES_standard_derivatives:" << compileResources.OES_standard_derivatives
<< ":OES_EGL_image_external:" << compileResources.OES_EGL_image_external
<< ":ARB_texture_rectangle:" << compileResources.ARB_texture_rectangle
<< ":EXT_draw_buffers:" << compileResources.EXT_draw_buffers
<< ":FragmentPrecisionHigh:" << compileResources.FragmentPrecisionHigh
<< ":MaxExpressionComplexity:" << compileResources.MaxExpressionComplexity
<< ":MaxCallStackDepth:" << compileResources.MaxCallStackDepth
<< ":EXT_frag_depth:" << compileResources.EXT_frag_depth
<< ":EXT_shader_texture_lod:" << compileResources.EXT_shader_texture_lod
<< ":MaxVertexOutputVectors:" << compileResources.MaxVertexOutputVectors
<< ":MaxFragmentInputVectors:" << compileResources.MaxFragmentInputVectors
<< ":MinProgramTexelOffset:" << compileResources.MinProgramTexelOffset
<< ":MaxProgramTexelOffset:" << compileResources.MaxProgramTexelOffset;
builtInResourcesString = strstream.str();
}
void TCompiler::clearResults() void TCompiler::clearResults()
{ {
arrayBoundsClamper.Cleanup(); arrayBoundsClamper.Cleanup();
......
...@@ -74,11 +74,14 @@ public: ...@@ -74,11 +74,14 @@ public:
NameMap& getNameMap() { return nameMap; } NameMap& getNameMap() { return nameMap; }
TSymbolTable& getSymbolTable() { return symbolTable; } TSymbolTable& getSymbolTable() { return symbolTable; }
ShShaderSpec getShaderSpec() const { return shaderSpec; } ShShaderSpec getShaderSpec() const { return shaderSpec; }
std::string getBuiltInResourcesString() const { return builtInResourcesString; }
protected: protected:
ShShaderType getShaderType() const { return shaderType; } ShShaderType getShaderType() const { return shaderType; }
// Initialize symbol-table with built-in symbols. // Initialize symbol-table with built-in symbols.
bool InitBuiltInSymbolTable(const ShBuiltInResources& resources); bool InitBuiltInSymbolTable(const ShBuiltInResources& resources);
// Compute the string representation of the built-in resources
void setResourceString();
// Clears the results from the previous compilation. // Clears the results from the previous compilation.
void clearResults(); void clearResults();
// Return true if function recursion is detected or call depth exceeded. // Return true if function recursion is detected or call depth exceeded.
...@@ -134,6 +137,7 @@ private: ...@@ -134,6 +137,7 @@ private:
int maxCallStackDepth; int maxCallStackDepth;
ShBuiltInResources compileResources; ShBuiltInResources compileResources;
std::string builtInResourcesString;
// Built-in symbol table for the given language, spec, and resources. // Built-in symbol table for the given language, spec, and resources.
// It is preserved from compile-to-compile. // It is preserved from compile-to-compile.
......
...@@ -144,8 +144,25 @@ void ShDestruct(ShHandle handle) ...@@ -144,8 +144,25 @@ void ShDestruct(ShHandle handle)
DeleteCompiler(base->getAsCompiler()); DeleteCompiler(base->getAsCompiler());
} }
void ShGetBuiltInResourcesString(const ShHandle handle, size_t outStringLen, char *outString)
{
if (!handle || !outString)
{
return;
}
TShHandleBase *base = static_cast<TShHandleBase*>(handle);
TCompiler *compiler = base->getAsCompiler();
if (!compiler)
{
return;
}
strncpy(outString, compiler->getBuiltInResourcesString().c_str(), outStringLen);
outString[outStringLen - 1] = '\0';
}
// //
// Do an actual compile on the given strings. The result is left // Do an actual compile on the given strings. The result is left
// in the given compile object. // in the given compile object.
// //
// Return: The return value of ShCompile is really boolean, indicating // Return: The return value of ShCompile is really boolean, indicating
...@@ -229,6 +246,9 @@ void ShGetInfo(const ShHandle handle, ShShaderInfo pname, size_t* params) ...@@ -229,6 +246,9 @@ void ShGetInfo(const ShHandle handle, ShShaderInfo pname, size_t* params)
case SH_SHADER_VERSION: case SH_SHADER_VERSION:
*params = compiler->getShaderVersion(); *params = compiler->getShaderVersion();
break; break;
case SH_RESOURCES_STRING_LENGTH:
*params = compiler->getBuiltInResourcesString().length() + 1;
break;
default: UNREACHABLE(); default: UNREACHABLE();
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment