Name AMD_program_binary_Z400 Name Strings GL_AMD_program_binary_Z400 Contributors Joey Blankenship Contact Benj Lipchak, AMD (benj.lipchak 'at' amd.com) Status Complete. Version Last Modified Date: April 9, 2008 Revision: #6 Number 48 Dependencies OpenGL ES 2.0 is required. OES_get_program_binary is required. Written based on the wording of the OpenGL ES 2.0 specification. Overview 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 None. New Tokens Accepted by the 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 None. Errors None. New State None. 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); fclose(infile); // // Load the binary into the program object -- no need to link! // glProgramBinaryOES(progObj, GL_Z400_BINARY_AMD, binary, binaryLength); free(binary); 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.