| 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 <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 |
| |
| 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. |