blob: af5f5e50b3a76139a7eb31c0bc24a40876e2d3f3 [file] [log] [blame]
Name Strings
Joey Blankenship
Benj Lipchak, AMD (benj.lipchak 'at'
Last Modified Date: April 9, 2008
Revision: #6
OpenGL ES 2.0 is required.
OES_get_program_binary is required.
Written based on the wording of the OpenGL ES 2.0 specification.
AMD provides an offline shader compiler as part of its suite of SDK tools
for AMD's Z400 family of embedded graphics accelerator IP. This extension
makes available a program binary format, Z400_BINARY_AMD.
The offline shader compiler accepts a pair of OpenGL Shading Language
(GLSL) source shaders: one vertex shader and one fragment shader. It
outputs a compiled, optimized, and pre-linked program binary which can then
be loaded into a program objects via the ProgramBinaryOES command.
Applications are recommended to use the OES_get_program_binary extension's
program binary retrieval mechanism for install-time shader compilation where
applicable. That cross-vendor extension provides the performance benefits
of loading pre-compiled program binaries, while providing the portability of
deploying GLSL source shaders with the application rather than vendor-
specific binaries. The details of this extension are obviated by the use
of that extension.
New Procedures and Functions
New Tokens
Accepted by the <binaryFormat> parameter of ProgramBinaryOES:
Z400_BINARY_AMD 0x8740
Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL Operation)
Add the following paragraph to the end of section 2.15.4:
"Z400_BINARY_AMD, returned in the list of PROGRAM_BINARY_FORMATS_OES, is a
format that may be loaded into a program object via ProgramBinaryOES."
An implementation may reject a Z400_BINARY_AMD program binary by setting the
LINK_STATUS to FALSE and updating the program object's info log if it
determines the binary was produced by an incompatible or outdated version of
the shader compiler."
GLX Protocol
New State
Sample Usage
void loadPrecompiledZ400ProgramBinary(const char* myZ400BinaryFileName,
GLuint progObj)
GLint binaryLength;
GLvoid* binary;
GLint success;
FILE* infile;
// Read the program binary
infile = fopen(myZ400BinaryFileName, "rb");
fseek(infile, 0, SEEK_END);
binaryLength = (GLint)ftell(infile);
binary = (GLvoid*)malloc(binaryLength);
fseek(infile, 0, SEEK_SET);
fread(binary, binaryLength, 1, infile);
// Load the binary into the program object -- no need to link!
glProgramBinaryOES(progObj, GL_Z400_BINARY_AMD, binary, binaryLength);
glGetProgramiv(progObj, GL_LINK_STATUS, &success);
if (!success)
// Fallback to source shaders or gracefully exit.
Revision History
#06 04/09/2008 Benj Lipchak Remove INVALID_OPERATION error in favor
of just LINK_STATUS and info log.
Also improve sample code.
#05 03/12/2008 Benj Lipchak Reformulate as program binary.
#04 01/02/2008 Benj Lipchak Split GetProgramBinary into its own
multi-vendor extension proposal.
#03 11/26/2007 Benj Lipchak Add sample usage and define tokens.
#02 10/22/2007 Benj Lipchak Add error conditions.
#01 10/14/2007 Benj Lipchak First draft.