Name

    EXT_shader_integer_mix

Name Strings

    GL_EXT_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/12/2013
    Author Revision:            6

Number

    TBD

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_EXT_shader_integer_mix : <behavior>

    where <behavior> is as specified in section 3.3.

    New preprocessor #defines are added to the OpenGL Shading Language:

      #define GL_EXT_shader_integer_mix        1

Interactions with ARB_ES3_compatibility

    On desktop implementations that support ARB_ES3_compatibility,
    GL_EXT_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
    ----  --------    --------  ---------------------------------------------
      6   09/12/2013  idr       After discussions in Khronos, change vendor
                                prefix to EXT.

      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