Matt Turner | 56fff70 | 2013-08-28 18:01:39 -0700 | [diff] [blame] | 1 | Name |
| 2 | |
Ian Romanick | ea373f0 | 2013-09-12 11:40:00 -0500 | [diff] [blame] | 3 | EXT_shader_integer_mix |
Matt Turner | 56fff70 | 2013-08-28 18:01:39 -0700 | [diff] [blame] | 4 | |
| 5 | Name Strings |
| 6 | |
Ian Romanick | ea373f0 | 2013-09-12 11:40:00 -0500 | [diff] [blame] | 7 | GL_EXT_shader_integer_mix |
Matt Turner | 56fff70 | 2013-08-28 18:01:39 -0700 | [diff] [blame] | 8 | |
| 9 | Contact |
| 10 | |
| 11 | Matt Turner (matt.turner 'at' intel.com) |
| 12 | |
| 13 | Contributors |
| 14 | |
| 15 | Matt Turner, Intel |
| 16 | Ian Romanick, Intel |
| 17 | |
| 18 | Status |
| 19 | |
| 20 | Shipping |
| 21 | |
| 22 | Version |
| 23 | |
Ian Romanick | ea373f0 | 2013-09-12 11:40:00 -0500 | [diff] [blame] | 24 | Last Modified Date: 09/12/2013 |
| 25 | Author Revision: 6 |
Matt Turner | 56fff70 | 2013-08-28 18:01:39 -0700 | [diff] [blame] | 26 | |
| 27 | Number |
| 28 | |
Ian Romanick | ea373f0 | 2013-09-12 11:40:00 -0500 | [diff] [blame] | 29 | TBD |
Matt Turner | 56fff70 | 2013-08-28 18:01:39 -0700 | [diff] [blame] | 30 | |
| 31 | Dependencies |
| 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 | |
| 39 | Overview |
| 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 | |
| 46 | New Procedures and Functions |
| 47 | |
| 48 | None. |
| 49 | |
| 50 | New Tokens |
| 51 | |
| 52 | None. |
| 53 | |
| 54 | Additions 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 | |
| 72 | Additions to the AGL/GLX/WGL Specifications |
| 73 | |
| 74 | None. |
| 75 | |
| 76 | Modifications 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 | |
Ian Romanick | ea373f0 | 2013-09-12 11:40:00 -0500 | [diff] [blame] | 81 | #extension GL_EXT_shader_integer_mix : <behavior> |
Matt Turner | 56fff70 | 2013-08-28 18:01:39 -0700 | [diff] [blame] | 82 | |
| 83 | where <behavior> is as specified in section 3.3. |
| 84 | |
| 85 | New preprocessor #defines are added to the OpenGL Shading Language: |
| 86 | |
Ian Romanick | ea373f0 | 2013-09-12 11:40:00 -0500 | [diff] [blame] | 87 | #define GL_EXT_shader_integer_mix 1 |
Matt Turner | 56fff70 | 2013-08-28 18:01:39 -0700 | [diff] [blame] | 88 | |
| 89 | Interactions with ARB_ES3_compatibility |
| 90 | |
| 91 | On desktop implementations that support ARB_ES3_compatibility, |
Ian Romanick | ea373f0 | 2013-09-12 11:40:00 -0500 | [diff] [blame] | 92 | GL_EXT_shader_integer_mix can be enabled (and the new functions |
Matt Turner | 56fff70 | 2013-08-28 18:01:39 -0700 | [diff] [blame] | 93 | used) in shaders declared with '#version 300 es'. |
| 94 | |
| 95 | GLX Protocol |
| 96 | |
| 97 | None. |
| 98 | |
| 99 | Errors |
| 100 | |
| 101 | None. |
| 102 | |
| 103 | New State |
| 104 | |
| 105 | None. |
| 106 | |
| 107 | New Implementation Dependent State |
| 108 | |
| 109 | None. |
| 110 | |
| 111 | Issues |
| 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 | |
| 123 | Revision History |
| 124 | |
| 125 | Rev. Date Author Changes |
| 126 | ---- -------- -------- --------------------------------------------- |
Ian Romanick | ea373f0 | 2013-09-12 11:40:00 -0500 | [diff] [blame] | 127 | 6 09/12/2013 idr After discussions in Khronos, change vendor |
| 128 | prefix to EXT. |
| 129 | |
Matt Turner | 56fff70 | 2013-08-28 18:01:39 -0700 | [diff] [blame] | 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 |