Implement GL_OES_primitive_bounding_box.
authorJohn Kessenich <cepheus@frii.com>
Sun, 16 Aug 2015 17:38:07 +0000 (11:38 -0600)
committerJohn Kessenich <cepheus@frii.com>
Sun, 16 Aug 2015 18:09:15 +0000 (12:09 -0600)
Test/310.tesc
Test/310.tese
Test/baseResults/310.tesc.out
Test/baseResults/310.tese.out
glslang/Include/BaseTypes.h
glslang/Include/revision.h
glslang/MachineIndependent/Initialize.cpp
glslang/MachineIndependent/Versions.cpp

index 236afde..4f37f88 100644 (file)
@@ -127,3 +127,17 @@ void pointSize2()
 //    d = fma(d, d, d);\r
 //}\r
 //\r
+\r
+void bbBad()\r
+{\r
+    gl_BoundingBoxOES;  // ERROR without GL_OES_primitive_bounding_box \r
+}\r
+\r
+#extension GL_OES_primitive_bounding_box : enable\r
+\r
+void bb()\r
+{\r
+    gl_BoundingBoxOES[0] = vec4(0.0);\r
+    gl_BoundingBoxOES[1] = vec4(1.0);\r
+    gl_BoundingBoxOES[2] = vec4(2.0);  // ERROR, overflow\r
+}\r
index 739ead2..63b1daa 100644 (file)
@@ -119,3 +119,10 @@ void pointSize2()
     float ps = gl_in[1].gl_PointSize;  // ERROR, not in the redeclaration, but no error on use of gl_PointSize\r
     gl_PointSize = ps;\r
 }\r
+\r
+#extension GL_EXT_primitive_bounding_box : enable\r
+\r
+void bbbad()\r
+{\r
+    gl_BoundingBoxOES; // ERROR, wrong stage\r
+}\r
index 9082e8b..9b23825 100644 (file)
@@ -37,11 +37,16 @@ GL_OES_gpu_shader5
 ERROR: 0:104: 'sample' : Reserved word. \r
 ERROR: 0:106: 'vertices' : can only apply to a standalone qualifier \r
 ERROR: 0:107: 'vertices' : inconsistent output number of vertices for array size of misSized\r
-ERROR: 31 compilation errors.  No code generated.\r
+ERROR: 0:133: 'gl_BoundingBoxOES' : required extension not requested: Possible extensions include:\r
+GL_EXT_primitive_bounding_box\r
+GL_OES_primitive_bounding_box\r
+ERROR: 0:142: '[' :  array index out of range '2'\r
+ERROR: 33 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 310\r
 Requested GL_ARB_separate_shader_objects\r
+Requested GL_OES_primitive_bounding_box\r
 Requested GL_OES_shader_io_blocks\r
 Requested GL_OES_tessellation_point_size\r
 Requested GL_OES_tessellation_shader\r
@@ -216,6 +221,43 @@ ERROR: node is still EOpNull!
 0:115          Constant:\r
 0:115            1 (const int)\r
 0:115        'ps' (temp highp float)\r
+0:131  Function Definition: bbBad( (global void)\r
+0:131    Function Parameters: \r
+0:133    Sequence\r
+0:133      'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)\r
+0:138  Function Definition: bb( (global void)\r
+0:138    Function Parameters: \r
+0:140    Sequence\r
+0:140      move second child to first child (temp highp 4-component vector of float)\r
+0:140        direct index (patch temp highp 4-component vector of float BoundingBox)\r
+0:140          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)\r
+0:140          Constant:\r
+0:140            0 (const int)\r
+0:140        Constant:\r
+0:140          0.000000\r
+0:140          0.000000\r
+0:140          0.000000\r
+0:140          0.000000\r
+0:141      move second child to first child (temp highp 4-component vector of float)\r
+0:141        direct index (patch temp highp 4-component vector of float BoundingBox)\r
+0:141          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)\r
+0:141          Constant:\r
+0:141            1 (const int)\r
+0:141        Constant:\r
+0:141          1.000000\r
+0:141          1.000000\r
+0:141          1.000000\r
+0:141          1.000000\r
+0:142      move second child to first child (temp highp 4-component vector of float)\r
+0:142        direct index (patch temp highp 4-component vector of float BoundingBox)\r
+0:142          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)\r
+0:142          Constant:\r
+0:142            2 (const int)\r
+0:142        Constant:\r
+0:142          2.000000\r
+0:142          2.000000\r
+0:142          2.000000\r
+0:142          2.000000\r
 0:?   Linker Objects\r
 0:?     'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
 0:?     'outa' (global 4-element array of highp int)\r
@@ -246,6 +288,7 @@ Linked tessellation control stage:
 \r
 Shader version: 310\r
 Requested GL_ARB_separate_shader_objects\r
+Requested GL_OES_primitive_bounding_box\r
 Requested GL_OES_shader_io_blocks\r
 Requested GL_OES_tessellation_point_size\r
 Requested GL_OES_tessellation_shader\r
@@ -420,6 +463,43 @@ ERROR: node is still EOpNull!
 0:115          Constant:\r
 0:115            1 (const int)\r
 0:115        'ps' (temp highp float)\r
+0:131  Function Definition: bbBad( (global void)\r
+0:131    Function Parameters: \r
+0:133    Sequence\r
+0:133      'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)\r
+0:138  Function Definition: bb( (global void)\r
+0:138    Function Parameters: \r
+0:140    Sequence\r
+0:140      move second child to first child (temp highp 4-component vector of float)\r
+0:140        direct index (patch temp highp 4-component vector of float BoundingBox)\r
+0:140          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)\r
+0:140          Constant:\r
+0:140            0 (const int)\r
+0:140        Constant:\r
+0:140          0.000000\r
+0:140          0.000000\r
+0:140          0.000000\r
+0:140          0.000000\r
+0:141      move second child to first child (temp highp 4-component vector of float)\r
+0:141        direct index (patch temp highp 4-component vector of float BoundingBox)\r
+0:141          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)\r
+0:141          Constant:\r
+0:141            1 (const int)\r
+0:141        Constant:\r
+0:141          1.000000\r
+0:141          1.000000\r
+0:141          1.000000\r
+0:141          1.000000\r
+0:142      move second child to first child (temp highp 4-component vector of float)\r
+0:142        direct index (patch temp highp 4-component vector of float BoundingBox)\r
+0:142          'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox)\r
+0:142          Constant:\r
+0:142            2 (const int)\r
+0:142        Constant:\r
+0:142          2.000000\r
+0:142          2.000000\r
+0:142          2.000000\r
+0:142          2.000000\r
 0:?   Linker Objects\r
 0:?     'gl_out' (out 4-element array of block{out highp 4-component vector of float Position gl_Position, out highp float PointSize gl_PointSize})\r
 0:?     'outa' (global 4-element array of highp int)\r
index d742436..b1ab64a 100644 (file)
@@ -47,11 +47,13 @@ ERROR: 0:105: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved
 ERROR: 0:113: 'sample' : Reserved word. \r
 ERROR: 0:119: 'gl_PointSize' : no such field in structure \r
 ERROR: 0:119: '=' :  cannot convert from 'temp block{in highp 4-component vector of float gl_Position}' to 'temp highp float'\r
-ERROR: 43 compilation errors.  No code generated.\r
+ERROR: 0:127: 'gl_BoundingBoxOES' : undeclared identifier \r
+ERROR: 44 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 310\r
 Requested GL_ARB_separate_shader_objects\r
+Requested GL_EXT_primitive_bounding_box\r
 Requested GL_EXT_shader_io_blocks\r
 Requested GL_EXT_tessellation_shader\r
 Requested GL_OES_shader_io_blocks\r
@@ -148,6 +150,10 @@ ERROR: node is still EOpNull!
 0:120          Constant:\r
 0:120            1 (const uint)\r
 0:120        'ps' (temp highp float)\r
+0:125  Function Definition: bbbad( (global void)\r
+0:125    Function Parameters: \r
+0:127    Sequence\r
+0:127      'gl_BoundingBoxOES' (temp float)\r
 0:?   Linker Objects\r
 0:?     'patchIn' (patch in highp 4-component vector of float)\r
 0:?     'patchOut' (patch out highp 4-component vector of float)\r
@@ -180,6 +186,7 @@ Linked tessellation evaluation stage:
 \r
 Shader version: 310\r
 Requested GL_ARB_separate_shader_objects\r
+Requested GL_EXT_primitive_bounding_box\r
 Requested GL_EXT_shader_io_blocks\r
 Requested GL_EXT_tessellation_shader\r
 Requested GL_OES_shader_io_blocks\r
@@ -276,6 +283,10 @@ ERROR: node is still EOpNull!
 0:120          Constant:\r
 0:120            1 (const uint)\r
 0:120        'ps' (temp highp float)\r
+0:125  Function Definition: bbbad( (global void)\r
+0:125    Function Parameters: \r
+0:127    Sequence\r
+0:127      'gl_BoundingBoxOES' (temp float)\r
 0:?   Linker Objects\r
 0:?     'patchIn' (patch in highp 4-component vector of float)\r
 0:?     'patchOut' (patch out highp 4-component vector of float)\r
index d08f4bd..bed63b0 100644 (file)
@@ -154,6 +154,7 @@ enum TBuiltInVariable {
     EbvPatchVertices,
     EbvTessLevelOuter,
     EbvTessLevelInner,
+    EbvBoundingBox,
     EbvTessCoord,
     EbvColor,
     EbvSecondaryColor,
@@ -241,6 +242,7 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
     case EbvPatchVertices:        return "PatchVertices";
     case EbvTessLevelOuter:       return "TessLevelOuter";
     case EbvTessLevelInner:       return "TessLevelInner";
+    case EbvBoundingBox:          return "BoundingBox";
     case EbvTessCoord:            return "TessCoord";
     case EbvColor:                return "Color";
     case EbvSecondaryColor:       return "SecondaryColor";
index afc749d..b3a3f49 100644 (file)
@@ -2,5 +2,5 @@
 // For the version, it uses the latest git tag followed by the number of commits.
 // For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "2.3.713"
+#define GLSLANG_REVISION "2.3.715"
 #define GLSLANG_DATE "16-Aug-2015"
index 28b8ccd..5ef336d 100644 (file)
@@ -1636,6 +1636,7 @@ void TBuiltIns::initialize(int version, EProfile profile)
 
             "patch out highp float gl_TessLevelOuter[4];"
             "patch out highp float gl_TessLevelInner[2];"
+            "patch out highp vec4 gl_BoundingBoxOES[2];"
             "\n");
     }
 
@@ -2839,6 +2840,13 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb
         // Fall through
 
     case EShLangTessControl:
+        if (profile == EEsProfile && version >= 310) {
+            symbolTable.setVariableExtensions("gl_BoundingBoxOES", Num_AEP_primitive_bounding_box, AEP_primitive_bounding_box);
+            BuiltInVariable("gl_BoundingBoxOES", EbvBoundingBox, symbolTable);
+        }
+
+        // Fall through
+
     case EShLangTessEvaluation:
     case EShLangGeometry:
         SpecialQualifier("gl_Position",   EvqPosition,   EbvPosition,   symbolTable);
index c751076..94bf19c 100644 (file)
@@ -188,7 +188,7 @@ void TParseContext::initializeExtensionBehavior()
     extensionBehavior[E_GL_EXT_geometry_shader]                      = EBhDisable;
     extensionBehavior[E_GL_EXT_geometry_point_size]                  = EBhDisable;
     extensionBehavior[E_GL_EXT_gpu_shader5]                          = EBhDisable;
-    extensionBehavior[E_GL_EXT_primitive_bounding_box]               = EBhDisablePartial;
+    extensionBehavior[E_GL_EXT_primitive_bounding_box]               = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_io_blocks]                     = EBhDisable;
     extensionBehavior[E_GL_EXT_tessellation_shader]                  = EBhDisable;
     extensionBehavior[E_GL_EXT_tessellation_point_size]              = EBhDisable;
@@ -199,7 +199,7 @@ void TParseContext::initializeExtensionBehavior()
     extensionBehavior[E_GL_OES_geometry_shader]          = EBhDisable;
     extensionBehavior[E_GL_OES_geometry_point_size]      = EBhDisable;
     extensionBehavior[E_GL_OES_gpu_shader5]              = EBhDisable;
-    extensionBehavior[E_GL_OES_primitive_bounding_box]   = EBhDisablePartial;
+    extensionBehavior[E_GL_OES_primitive_bounding_box]   = EBhDisable;
     extensionBehavior[E_GL_OES_shader_io_blocks]         = EBhDisable;
     extensionBehavior[E_GL_OES_tessellation_shader]      = EBhDisable;
     extensionBehavior[E_GL_OES_tessellation_point_size]  = EBhDisable;