1Name
2
3    EXT_shader_integer_mix
4
5Name Strings
6
7    GL_EXT_shader_integer_mix
8
9Contact
10
11    Matt Turner (matt.turner 'at' intel.com)
12
13Contributors
14
15    Matt Turner, Intel
16    Ian Romanick, Intel
17
18Status
19
20    Shipping
21
22Version
23
24    Last Modified Date:         09/12/2013
25    Author Revision:            6
26
27Number
28
29    TBD
30
31Dependencies
32
33    OpenGL 3.0 or OpenGL ES 3.0 is required. This extension interacts with
34    GL_ARB_ES3_compatibility.
35
36    This extension is written against the OpenGL 4.4 (core) specification
37    and the GLSL 4.40 specification.
38
39Overview
40
41    GLSL 1.30 (and GLSL ES 3.00) expanded the mix() built-in function to
42    operate on a boolean third argument that does not interpolate but
43    selects. This extension extends mix() to select between int, uint,
44    and bool components.
45
46New Procedures and Functions
47
48    None.
49
50New Tokens
51
52    None.
53
54Additions to Chapter 8 of the GLSL 4.40 Specification (Built-in Functions)
55
56    Modify Section 8.3, Common Functions
57
58    Additions to the table listing common built-in functions:
59
60      Syntax                       Description
61      ---------------------------  --------------------------------------------------
62      genIType mix(genIType x,     Selects which vector each returned component comes
63                   genIType y,     from. For a component of a that is false, the
64                   genBType a)     corresponding component of x is returned. For a
65      genUType mix(genUType x,     component of a that is true, the corresponding
66                   genUType y,     component of y is returned.
67                   genBType a)
68      genBType mix(genBType x,
69                   genBType y,
70                   genBType a)
71
72Additions to the AGL/GLX/WGL Specifications
73
74    None.
75
76Modifications to The OpenGL Shading Language Specification, Version 4.40
77
78    Including the following line in a shader can be used to control the
79    language features described in this extension:
80
81      #extension GL_EXT_shader_integer_mix : <behavior>
82
83    where <behavior> is as specified in section 3.3.
84
85    New preprocessor #defines are added to the OpenGL Shading Language:
86
87      #define GL_EXT_shader_integer_mix        1
88
89Interactions with ARB_ES3_compatibility
90
91    On desktop implementations that support ARB_ES3_compatibility,
92    GL_EXT_shader_integer_mix can be enabled (and the new functions
93    used) in shaders declared with '#version 300 es'.
94
95GLX Protocol
96
97    None.
98
99Errors
100
101    None.
102
103New State
104
105    None.
106
107New Implementation Dependent State
108
109    None.
110
111Issues
112
113    1) Should we allow linear interpolation of integers via a non-boolean
114       third component?
115
116    RESOLVED: No.
117
118    2) Should we allow mix() to select between boolean components?
119
120    RESOLVED: Yes. Implementing the same functionality using casts would be
121    possible but ugly.
122
123Revision History
124
125    Rev.    Date      Author    Changes
126    ----  --------    --------  ---------------------------------------------
127      6   09/12/2013  idr       After discussions in Khronos, change vendor
128                                prefix to EXT.
129
130      5   09/09/2013  idr       Add ARB_ES3_compatibility interaction.
131
132      4   09/06/2013  mattst88  Allow extension on OpenGL ES 3.0.
133
134      3   08/28/2013  mattst88  Add #extension/#define changes.
135
136      2   08/26/2013  mattst88  Change vendor prefix to MESA. Add mix() that
137                                selects between boolean components.
138      1   08/26/2013  mattst88  Initial revision
139