1Name 2 3 EXT_multiview_tessellation_geometry_shader 4 5Name Strings 6 7 GL_EXT_multiview_tessellation_geometry_shader 8 9Contact 10 11 Robert Menzel, NVIDIA Corporation (rmenzel 'at' nvidia.com) 12 13Contributors 14 15 Pat Brown, NVIDIA Corporation 16 Jan-Harald Fredriksen, Arm Limited 17 James Helferty, NVIDIA Corporation 18 Kedarnath Thangudu, NVIDIA Corporation 19 20Status 21 22 Complete. 23 24Version 25 26 Last Modified Date: May 13, 2019 27 Author Revision: 1 28 29Number 30 31 OpenGL Extension #538 32 OpenGL ES Extension #319 33 34Dependencies 35 36 OpenGL 4.0 or OpenGL ES 3.2 are required. 37 38 This extension is written against the OpenGL 4.6 specification 39 (Core Profile) (February 2, 2019) and OpenGL ES 3.2 specification 40 (February 2, 2019). 41 42 This extension is written against the OpenGL ES Shading Language 3.20.05 43 specification and OpenGL Shading Language 4.60.6 specification. 44 45 This extension interacts with OVR_multiview2. 46 47 OVR_multiview is required. 48 49Overview 50 51 OVR_multiview introduced multiview rendering to OpenGL and OpenGL ES. 52 53 This extension removes one of the limitations of the OVR_multiview 54 extension by allowing the use of tessellation control, tessellation 55 evaluation, and geometry shaders during multiview rendering. 56 OVR_multiview by itself forbids the use of any of these shader types. 57 58 When using tessellation control, tessellation evaluation, and geometry 59 shaders during multiview rendering, any such shader must use the 60 "num_views" layout qualifier provided by the matching shading language 61 extension to specify a view count. The view count specified in these 62 shaders must match the count specified in the vertex shader. Additionally, 63 the shading language extension allows these shaders to use the 64 gl_ViewID_OVR built-in to handle tessellation or geometry shader processing 65 differently for each view. 66 67 OVR_multiview2 extends OVR_multiview by allowing view-dependent values 68 for any vertex attributes instead of just the position. This new extension 69 does not imply the availability of OVR_multiview2, but if both are available, 70 view-dependent values for any vertex attributes are also allowed in 71 tessellation control, tessellation evaluation, and geometry shaders. 72 73 74New Tokens 75 76 None. 77 78 79New Procedures and Functions 80 81 None. 82 83 84Modifications to Chapter 9 of the OpenGL ES 3.2 Specification as well as 85Chapter 9 of the OpenGL 4.6 Specification (Framebuffers and Framebuffer 86Objects) 87 88 Modify the subsection 9.2.2.2 (Multiview Images) which has been added by 89 OVR_multiview: 90 91 Remove from the list of restrictions ("In this mode there are several 92 restrictions:") the following items: 93 94 "- no tessellation control or evaluation shaders (section 11.1.3.11) 95 - no geometry shader (section 11.1.3.11)" 96 97 effectively allowing the usage of multiview rendering with tessellation and 98 geometry shaders. 99 100 In the same list replace 101 "- in fragment shader the contents of gl_Layer are undefined" 102 with 103 "- reads and writes of gl_Layer by any shaders are undefined". 104 105 106Modifications to Chapter 11 of the OpenGL ES 3.2 Specification as well 107as Chapter 11 of the OpenGL 4.6 Specification (Programmable Vertex Processing) 108 109 Modify section 11.1.3.11 (Validation) by removing the following condition 110 from the list of reasons that may result in an INVALID_OPERATION error 111 being generated by any command that transfers vertices to the GL 112 (added by OVR_multiview) after 113 "Any attachment of the draw framebuffer is multiview (section 9.2.8) 114 and any of the following conditions are true:": 115 116 "- There is an active program for tessellation control, tessellation 117 evaluation, or geometry stages, or". 118 119 120 Modify section 11.1.3.11 (Validation) by adding the following 121 item to the bullet point list of conditions generating an INVALID_OPERATION: 122 "The active program for the vertex, tessellation control, tessellation 123 evaluation, or geometry shader stages contains an executable that declared 124 a multiview view count using the "num_views" layout qualifier, but the 125 active program for another one of these stages includes an executable that 126 declared a different view count or failed to declare any view count." 127 128 129Modifications to The OpenGL ES Shading Language Specification, Version 3.20.05 130and The OpenGL Shading Language Specification, Version 4.60.6: 131 132 Including the following line in a tessellation control, tessellation evaluation, 133 or geometry shader can be used to control the language features described in 134 this extension: 135 136 #extension GL_EXT_multiview_tessellation_geometry_shader : <behavior> 137 138 where <behavior> is as specified in section 3.5. 139 140 A new preprocessor #define is added to the OpenGL ES Shading Language 141 as well as the OpenGL Shading Language for those shaders: 142 143 #define GL_EXT_multiview_tessellation_geometry_shader 1 144 145 In section "Input Layout Qualifiers" a new paragraph was added by OVR_multiview 146 (section 4.3.8.1 in the OpenGL ES Shading Language Specification, version 3.00.04, 147 which moved to section 4.4.1 in version 3.20.05 of the OpenGL ES Shading Language 148 Specification and version 4.60.6 of the OpenGL Shading Language Specification). 149 150 In this new paragraph replace 151 "Vertex shaders also allow the following layout qualifier on 'in' only" 152 with 153 "Vertex, tessellation control, tessellation evaluation and geometry shaders 154 also allow the following layout qualifier on 'in' only". 155 156 In the following paragraph of the same addition by OVR_multiview replace 157 "If multiple vertex shaders attached to a 158 single program object declare num_views, the declarations must be 159 identical; otherwise a link-time error results." 160 with 161 "If multiple shaders of the same type attached to a 162 single program object declare num_views, the declarations must be 163 identical; otherwise a link-time error results. 164 165 If any vertex, tessellation control, tessellation evaluation, or 166 geometry shader in a single program object declares a view count using 167 'num_views', at least one shader of each type present in the program must 168 declare a view count and all such declarations must match. If there is a 169 missing or mismatched view count declaration, a link-time error results." 170 171 172Modifications to Section 7.1 "Built-in Language Variables" 173 174 Replace the following paragraph added by OVR_multiview 175 "Add the following to the list of built-in variables that are intrinsically 176 declared in the vertex and fragment shading languages: 177 178 in mediump uint gl_ViewID_OVR;" 179 with 180 "Add the following to the list of built-in variables that are intrinsically 181 declared in the vertex, tessellation control, tessellation evaluation 182 geometry and fragment shading languages: 183 184 [[ If implemented in the OpenGL ES Shading Language ]] 185 in mediump uint gl_ViewID_OVR; 186 187 [[ If implemented in the OpenGL Shading Language ]] 188 in uint gl_ViewID_OVR;" 189 190 191Interactions with OVR_multiview2: 192 193 If OVR_multiview2 is supported the restriction from OVR_multiview that only 194 gl_Position is allowed to depend on gl_ViewID_OVR is also lifted from the 195 tessellation control, tessellation evaluation, and geometry 196 shaders. 197 198 199Issues 200 201 (1) This extension is based on an OVR extension, why call it EXT? 202 203 While started as a single vendor extension, OVR_multiview and OVR_multiview2 204 are already supported by multiple vendors. This new extension also has the 205 support from multiple vendors to be specified as EXT. 206 207 (2) Should the functions and tokens introduced by OVR_multiview be renamed 208 to have EXT suffixes? 209 210 No. While it is unusual to mix a vendor suffix with EXT in this "family" of 211 extensions, the main goal of this extension is to remove restrictions of 212 OVR_multiview while keeping source code compatibiliy where possible. It is 213 up to a successor of OVR_multiview to change the names (e.g. to revisit 214 the unusual second underscore in gl_ViewID_OVR). The intent of this extension 215 is to change the functionality while "inheriting" the names of the base 216 multiview extension. 217 218 (3) Are separable program objects with multiview allowed? 219 220 Yes. Note that when using separable program objects, each program object 221 can have its own multiview view count declared with the "num_views" layout 222 qualfiier. When using separable programs, a draw-time error will occur if 223 the view count for the programs used by the vertex, tessellation control, 224 tessellation evaluation, and geometry stages don't match. 225 226Revision History 227 228 Rev. Date Author Changes 229 ---- -------- -------- ----------------------------------------- 230 1 05/13/19 rmenzel Initial version. 231