| Index: gpu/GLES2/extensions/CHROMIUM/CHROMIUM_bind_uniform_location.txt
|
| diff --git a/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_bind_uniform_location.txt b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_bind_uniform_location.txt
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c6619bb5462b1916112139cae625fa721ae500fc
|
| --- /dev/null
|
| +++ b/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_bind_uniform_location.txt
|
| @@ -0,0 +1,131 @@
|
| +Name
|
| +
|
| + CHROMIUM_bind_uniform_location
|
| +
|
| +Name Strings
|
| +
|
| + GL_CHROMIUM_bind_uniform_location
|
| +
|
| +Version
|
| +
|
| + Last Modifed Date: June 20, 2012
|
| +
|
| +Dependencies
|
| +
|
| + OpenGL ES 2.0 is required.
|
| +
|
| +Overview
|
| +
|
| + This extension is simlar to glBindAttribLocation but instead
|
| + lets you choose a location for a uniform. This allows you
|
| + to not have to query the locations of uniforms.
|
| +
|
| + This allows the client program to know the locations of uniforms
|
| + without having to wait for shaders to compile or GLSL programs to
|
| + link to query the locations and therefore have no blocking calls
|
| + when initializing programs.
|
| +
|
| +Issues
|
| +
|
| + If a uniform is an array you can only call glBindUniformLocation
|
| + for the location of the first element. Other elements' locations
|
| + must be queried if you need them. Often this is not an issue
|
| + because you can set all the elements with a single gl call from
|
| + the first location.
|
| +
|
| + Good Example:
|
| +
|
| + --shader--
|
| + uniform float u_someArray[4];
|
| +
|
| + --C--
|
| + GLint location = 123;
|
| + glBindUniformLocation(program, location, "u_someArray");
|
| + glLinkProgram(program);
|
| + glUseProgram(program);
|
| +
|
| + // set all 4 floats in u_someArray
|
| + float values[] = { 0.1f, 0.2f, 0.3f, 0.4f, };
|
| + glUniform1fv(location, 4, values);
|
| +
|
| + Bad example 1:
|
| +
|
| + GLint location = 123;
|
| + glBindUniformLocation(program, location, "u_someArray");
|
| + glLinkProgram(program);
|
| + glUseProgram(program);
|
| +
|
| + // set floats in u_someArray one at a time
|
| + glUniform1f(location, 0.1f);
|
| + glUniform1f(location + 1, 0.2f); // ERROR! math not allowed on locations
|
| +
|
| + Bad example 2:
|
| +
|
| + GLint location0 = 123;
|
| + GLint location1 = 124;
|
| + glBindUniformLocation(program, location0, "u_someArray[0]");
|
| + glBindUniformLocation(program, location1, "u_someArray[1]"); // ERROR!
|
| + // not allowed to assign locations to array elements
|
| +
|
| + If you need to set individual elements of a uniform array you must query the
|
| + location of the each element you wish to set.
|
| +
|
| +New Tokens
|
| +
|
| + None
|
| +
|
| +New Procedures and Functions
|
| +
|
| + void BindUniformLocationCHROMIUM (GLuint program, GLint location,
|
| + const GLhchar* name);
|
| +
|
| + specifes that the uniform variable named <name> in program <program>
|
| + should be bound to uniform location <location> when the program is next
|
| + linked. If <name> was bound previously, its assigned binding is replaced
|
| + with <location>. <name> must be a null terminated string. The error
|
| + INVALID_VALUE is generated if <location> is equal or greater than
|
| +
|
| + (MAX_VERTEX_UNIFORM_VECTORS + MAX_FRAGMENT_UNIFORM_VECTORS) * 4
|
| +
|
| + or less than 0. BindUniformLocation has no effect until the program is
|
| + linked. In particular, it doesn't modify the bindings of active uniforms
|
| + variables in a program that has already been linked.
|
| +
|
| + The error INVALID_OPERATION is generated if name starts with the reserved
|
| + "gl_" prefix. The error INVALID_VALUE is generated if name ends with
|
| + an array element expression other than "[0]".
|
| +
|
| + When a program is linked, any active uniforms without a binding specified
|
| + through BindUniformLocation will be automatically be bound to locations by
|
| + the GL. Such bindings can be queried using the command
|
| + GetUniformLocation.
|
| +
|
| + BindUniformLocation may be issued before any shader objects are attached
|
| + to a program object. Hence it is allowed to bind any name (except a name
|
| + starting with "gl_") to an index, including a name that is never used as a
|
| + uniform in any shader object. Assigned bindings for uniform variables
|
| + that do not exist or are not active are ignored.
|
| +
|
| + It is possible for an application to bind more than one uniform name to
|
| + the same location. This is referred to as aliasing. This will only work
|
| + if only one of the aliased uniforms is active in the executable program,
|
| + or if no path through the shader consumes more than one uniform of a set
|
| + of uniforms aliased to the same location. A link error can occur if the
|
| + linker determines that every path through the shader consumes multiple
|
| + aliased uniforms, but implementations are not required to generate an
|
| + error in this case. The compiler and linker are allowed to assume that no
|
| + aliasing is done, and may employ optimizations that work only in the
|
| + absence of aliasing.
|
| +
|
| +Errors
|
| +
|
| + None.
|
| +
|
| +New State
|
| +
|
| + None.
|
| +
|
| +Revision History
|
| +
|
| + 7/20/2012 Documented the extension
|
| +
|
|
|