Name MESA_shader_integer_mix Name Strings GL_MESA_shader_integer_mix Contact Matt Turner (matt.turner 'at' intel.com) Contributors Matt Turner, Intel Ian Romanick, Intel Status Shipping Version Last Modified Date: 09/09/2013 Author Revision: 5 Number Dependencies OpenGL 3.0 or OpenGL ES 3.0 is required. This extension interacts with GL_ARB_ES3_compatibility. This extension is written against the OpenGL 4.4 (core) specification and the GLSL 4.40 specification. Overview GLSL 1.30 (and GLSL ES 3.00) expanded the mix() built-in function to operate on a boolean third argument that does not interpolate but selects. This extension extends mix() to select between int, uint, and bool components. New Procedures and Functions None. New Tokens None. Additions to Chapter 8 of the GLSL 4.40 Specification (Built-in Functions) Modify Section 8.3, Common Functions Additions to the table listing common built-in functions: Syntax Description --------------------------- -------------------------------------------------- genIType mix(genIType x, Selects which vector each returned component comes genIType y, from. For a component of a that is false, the genBType a) corresponding component of x is returned. For a genUType mix(genUType x, component of a that is true, the corresponding genUType y, component of y is returned. genBType a) genBType mix(genBType x, genBType y, genBType a) Additions to the AGL/GLX/WGL Specifications None. Modifications to The OpenGL Shading Language Specification, Version 4.40 Including the following line in a shader can be used to control the language features described in this extension: #extension GL_MESA_shader_integer_mix : where is as specified in section 3.3. New preprocessor #defines are added to the OpenGL Shading Language: #define GL_MESA_shader_integer_mix 1 Interactions with ARB_ES3_compatibility On desktop implementations that support ARB_ES3_compatibility, GL_MESA_shader_integer_mix can be enabled (and the new functions used) in shaders declared with '#version 300 es'. GLX Protocol None. Errors None. New State None. New Implementation Dependent State None. Issues 1) Should we allow linear interpolation of integers via a non-boolean third component? RESOLVED: No. 2) Should we allow mix() to select between boolean components? RESOLVED: Yes. Implementing the same functionality using casts would be possible but ugly. Revision History Rev. Date Author Changes ---- -------- -------- --------------------------------------------- 5 09/09/2013 idr Add ARB_ES3_compatibility interaction. 4 09/06/2013 mattst88 Allow extension on OpenGL ES 3.0. 3 08/28/2013 mattst88 Add #extension/#define changes. 2 08/26/2013 mattst88 Change vendor prefix to MESA. Add mix() that selects between boolean components. 1 08/26/2013 mattst88 Initial revision