Name EXT_multiview_tessellation_geometry_shader Name Strings GL_EXT_multiview_tessellation_geometry_shader Contact Robert Menzel, NVIDIA Corporation (rmenzel 'at' nvidia.com) Contributors Pat Brown, NVIDIA Corporation Jan-Harald Fredriksen, Arm Limited James Helferty, NVIDIA Corporation Kedarnath Thangudu, NVIDIA Corporation Status Complete. Version Last Modified Date: May 13, 2019 Author Revision: 1 Number OpenGL Extension #538 OpenGL ES Extension #319 Dependencies OpenGL 4.0 or OpenGL ES 3.2 are required. This extension is written against the OpenGL 4.6 specification (Core Profile) (February 2, 2019) and OpenGL ES 3.2 specification (February 2, 2019). This extension is written against the OpenGL ES Shading Language 3.20.05 specification and OpenGL Shading Language 4.60.6 specification. This extension interacts with OVR_multiview2. OVR_multiview is required. Overview OVR_multiview introduced multiview rendering to OpenGL and OpenGL ES. This extension removes one of the limitations of the OVR_multiview extension by allowing the use of tessellation control, tessellation evaluation, and geometry shaders during multiview rendering. OVR_multiview by itself forbids the use of any of these shader types. When using tessellation control, tessellation evaluation, and geometry shaders during multiview rendering, any such shader must use the "num_views" layout qualifier provided by the matching shading language extension to specify a view count. The view count specified in these shaders must match the count specified in the vertex shader. Additionally, the shading language extension allows these shaders to use the gl_ViewID_OVR built-in to handle tessellation or geometry shader processing differently for each view. OVR_multiview2 extends OVR_multiview by allowing view-dependent values for any vertex attributes instead of just the position. This new extension does not imply the availability of OVR_multiview2, but if both are available, view-dependent values for any vertex attributes are also allowed in tessellation control, tessellation evaluation, and geometry shaders. New Tokens None. New Procedures and Functions None. Modifications to Chapter 9 of the OpenGL ES 3.2 Specification as well as Chapter 9 of the OpenGL 4.6 Specification (Framebuffers and Framebuffer Objects) Modify the subsection 9.2.2.2 (Multiview Images) which has been added by OVR_multiview: Remove from the list of restrictions ("In this mode there are several restrictions:") the following items: "- no tessellation control or evaluation shaders (section 11.1.3.11) - no geometry shader (section 11.1.3.11)" effectively allowing the usage of multiview rendering with tessellation and geometry shaders. In the same list replace "- in fragment shader the contents of gl_Layer are undefined" with "- reads and writes of gl_Layer by any shaders are undefined". Modifications to Chapter 11 of the OpenGL ES 3.2 Specification as well as Chapter 11 of the OpenGL 4.6 Specification (Programmable Vertex Processing) Modify section 11.1.3.11 (Validation) by removing the following condition from the list of reasons that may result in an INVALID_OPERATION error being generated by any command that transfers vertices to the GL (added by OVR_multiview) after "Any attachment of the draw framebuffer is multiview (section 9.2.8) and any of the following conditions are true:": "- There is an active program for tessellation control, tessellation evaluation, or geometry stages, or". Modify section 11.1.3.11 (Validation) by adding the following item to the bullet point list of conditions generating an INVALID_OPERATION: "The active program for the vertex, tessellation control, tessellation evaluation, or geometry shader stages contains an executable that declared a multiview view count using the "num_views" layout qualifier, but the active program for another one of these stages includes an executable that declared a different view count or failed to declare any view count." Modifications to The OpenGL ES Shading Language Specification, Version 3.20.05 and The OpenGL Shading Language Specification, Version 4.60.6: Including the following line in a tessellation control, tessellation evaluation, or geometry shader can be used to control the language features described in this extension: #extension GL_EXT_multiview_tessellation_geometry_shader : where is as specified in section 3.5. A new preprocessor #define is added to the OpenGL ES Shading Language as well as the OpenGL Shading Language for those shaders: #define GL_EXT_multiview_tessellation_geometry_shader 1 In section "Input Layout Qualifiers" a new paragraph was added by OVR_multiview (section 4.3.8.1 in the OpenGL ES Shading Language Specification, version 3.00.04, which moved to section 4.4.1 in version 3.20.05 of the OpenGL ES Shading Language Specification and version 4.60.6 of the OpenGL Shading Language Specification). In this new paragraph replace "Vertex shaders also allow the following layout qualifier on 'in' only" with "Vertex, tessellation control, tessellation evaluation and geometry shaders also allow the following layout qualifier on 'in' only". In the following paragraph of the same addition by OVR_multiview replace "If multiple vertex shaders attached to a single program object declare num_views, the declarations must be identical; otherwise a link-time error results." with "If multiple shaders of the same type attached to a single program object declare num_views, the declarations must be identical; otherwise a link-time error results. If any vertex, tessellation control, tessellation evaluation, or geometry shader in a single program object declares a view count using 'num_views', at least one shader of each type present in the program must declare a view count and all such declarations must match. If there is a missing or mismatched view count declaration, a link-time error results." Modifications to Section 7.1 "Built-in Language Variables" Replace the following paragraph added by OVR_multiview "Add the following to the list of built-in variables that are intrinsically declared in the vertex and fragment shading languages: in mediump uint gl_ViewID_OVR;" with "Add the following to the list of built-in variables that are intrinsically declared in the vertex, tessellation control, tessellation evaluation geometry and fragment shading languages: [[ If implemented in the OpenGL ES Shading Language ]] in mediump uint gl_ViewID_OVR; [[ If implemented in the OpenGL Shading Language ]] in uint gl_ViewID_OVR;" Interactions with OVR_multiview2: If OVR_multiview2 is supported the restriction from OVR_multiview that only gl_Position is allowed to depend on gl_ViewID_OVR is also lifted from the tessellation control, tessellation evaluation, and geometry shaders. Issues (1) This extension is based on an OVR extension, why call it EXT? While started as a single vendor extension, OVR_multiview and OVR_multiview2 are already supported by multiple vendors. This new extension also has the support from multiple vendors to be specified as EXT. (2) Should the functions and tokens introduced by OVR_multiview be renamed to have EXT suffixes? No. While it is unusual to mix a vendor suffix with EXT in this "family" of extensions, the main goal of this extension is to remove restrictions of OVR_multiview while keeping source code compatibiliy where possible. It is up to a successor of OVR_multiview to change the names (e.g. to revisit the unusual second underscore in gl_ViewID_OVR). The intent of this extension is to change the functionality while "inheriting" the names of the base multiview extension. (3) Are separable program objects with multiview allowed? Yes. Note that when using separable program objects, each program object can have its own multiview view count declared with the "num_views" layout qualfiier. When using separable programs, a draw-time error will occur if the view count for the programs used by the vertex, tessellation control, tessellation evaluation, and geometry stages don't match. Revision History Rev. Date Author Changes ---- -------- -------- ----------------------------------------- 1 05/13/19 rmenzel Initial version.