From 30314590ff652df84a31289b2b8e1bfe7a3ceaa9 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Sun, 16 Aug 2015 11:38:07 -0600 Subject: [PATCH] Implement GL_OES_primitive_bounding_box. --- Test/310.tesc | 14 ++++++ Test/310.tese | 7 +++ Test/baseResults/310.tesc.out | 82 ++++++++++++++++++++++++++++++- Test/baseResults/310.tese.out | 13 ++++- glslang/Include/BaseTypes.h | 2 + glslang/Include/revision.h | 2 +- glslang/MachineIndependent/Initialize.cpp | 8 +++ glslang/MachineIndependent/Versions.cpp | 4 +- 8 files changed, 127 insertions(+), 5 deletions(-) diff --git a/Test/310.tesc b/Test/310.tesc index 236afde..4f37f88 100644 --- a/Test/310.tesc +++ b/Test/310.tesc @@ -127,3 +127,17 @@ void pointSize2() // d = fma(d, d, d); //} // + +void bbBad() +{ + gl_BoundingBoxOES; // ERROR without GL_OES_primitive_bounding_box +} + +#extension GL_OES_primitive_bounding_box : enable + +void bb() +{ + gl_BoundingBoxOES[0] = vec4(0.0); + gl_BoundingBoxOES[1] = vec4(1.0); + gl_BoundingBoxOES[2] = vec4(2.0); // ERROR, overflow +} diff --git a/Test/310.tese b/Test/310.tese index 739ead2..63b1daa 100644 --- a/Test/310.tese +++ b/Test/310.tese @@ -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 gl_PointSize = ps; } + +#extension GL_EXT_primitive_bounding_box : enable + +void bbbad() +{ + gl_BoundingBoxOES; // ERROR, wrong stage +} diff --git a/Test/baseResults/310.tesc.out b/Test/baseResults/310.tesc.out index 9082e8b..9b23825 100644 --- a/Test/baseResults/310.tesc.out +++ b/Test/baseResults/310.tesc.out @@ -37,11 +37,16 @@ GL_OES_gpu_shader5 ERROR: 0:104: 'sample' : Reserved word. ERROR: 0:106: 'vertices' : can only apply to a standalone qualifier ERROR: 0:107: 'vertices' : inconsistent output number of vertices for array size of misSized -ERROR: 31 compilation errors. No code generated. +ERROR: 0:133: 'gl_BoundingBoxOES' : required extension not requested: Possible extensions include: +GL_EXT_primitive_bounding_box +GL_OES_primitive_bounding_box +ERROR: 0:142: '[' : array index out of range '2' +ERROR: 33 compilation errors. No code generated. Shader version: 310 Requested GL_ARB_separate_shader_objects +Requested GL_OES_primitive_bounding_box Requested GL_OES_shader_io_blocks Requested GL_OES_tessellation_point_size Requested GL_OES_tessellation_shader @@ -216,6 +221,43 @@ ERROR: node is still EOpNull! 0:115 Constant: 0:115 1 (const int) 0:115 'ps' (temp highp float) +0:131 Function Definition: bbBad( (global void) +0:131 Function Parameters: +0:133 Sequence +0:133 'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox) +0:138 Function Definition: bb( (global void) +0:138 Function Parameters: +0:140 Sequence +0:140 move second child to first child (temp highp 4-component vector of float) +0:140 direct index (patch temp highp 4-component vector of float BoundingBox) +0:140 'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox) +0:140 Constant: +0:140 0 (const int) +0:140 Constant: +0:140 0.000000 +0:140 0.000000 +0:140 0.000000 +0:140 0.000000 +0:141 move second child to first child (temp highp 4-component vector of float) +0:141 direct index (patch temp highp 4-component vector of float BoundingBox) +0:141 'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox) +0:141 Constant: +0:141 1 (const int) +0:141 Constant: +0:141 1.000000 +0:141 1.000000 +0:141 1.000000 +0:141 1.000000 +0:142 move second child to first child (temp highp 4-component vector of float) +0:142 direct index (patch temp highp 4-component vector of float BoundingBox) +0:142 'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox) +0:142 Constant: +0:142 2 (const int) +0:142 Constant: +0:142 2.000000 +0:142 2.000000 +0:142 2.000000 +0:142 2.000000 0:? Linker Objects 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}) 0:? 'outa' (global 4-element array of highp int) @@ -246,6 +288,7 @@ Linked tessellation control stage: Shader version: 310 Requested GL_ARB_separate_shader_objects +Requested GL_OES_primitive_bounding_box Requested GL_OES_shader_io_blocks Requested GL_OES_tessellation_point_size Requested GL_OES_tessellation_shader @@ -420,6 +463,43 @@ ERROR: node is still EOpNull! 0:115 Constant: 0:115 1 (const int) 0:115 'ps' (temp highp float) +0:131 Function Definition: bbBad( (global void) +0:131 Function Parameters: +0:133 Sequence +0:133 'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox) +0:138 Function Definition: bb( (global void) +0:138 Function Parameters: +0:140 Sequence +0:140 move second child to first child (temp highp 4-component vector of float) +0:140 direct index (patch temp highp 4-component vector of float BoundingBox) +0:140 'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox) +0:140 Constant: +0:140 0 (const int) +0:140 Constant: +0:140 0.000000 +0:140 0.000000 +0:140 0.000000 +0:140 0.000000 +0:141 move second child to first child (temp highp 4-component vector of float) +0:141 direct index (patch temp highp 4-component vector of float BoundingBox) +0:141 'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox) +0:141 Constant: +0:141 1 (const int) +0:141 Constant: +0:141 1.000000 +0:141 1.000000 +0:141 1.000000 +0:141 1.000000 +0:142 move second child to first child (temp highp 4-component vector of float) +0:142 direct index (patch temp highp 4-component vector of float BoundingBox) +0:142 'gl_BoundingBoxOES' (patch out 2-element array of highp 4-component vector of float BoundingBox) +0:142 Constant: +0:142 2 (const int) +0:142 Constant: +0:142 2.000000 +0:142 2.000000 +0:142 2.000000 +0:142 2.000000 0:? Linker Objects 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}) 0:? 'outa' (global 4-element array of highp int) diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out index d742436..b1ab64a 100644 --- a/Test/baseResults/310.tese.out +++ b/Test/baseResults/310.tese.out @@ -47,11 +47,13 @@ ERROR: 0:105: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved ERROR: 0:113: 'sample' : Reserved word. ERROR: 0:119: 'gl_PointSize' : no such field in structure ERROR: 0:119: '=' : cannot convert from 'temp block{in highp 4-component vector of float gl_Position}' to 'temp highp float' -ERROR: 43 compilation errors. No code generated. +ERROR: 0:127: 'gl_BoundingBoxOES' : undeclared identifier +ERROR: 44 compilation errors. No code generated. Shader version: 310 Requested GL_ARB_separate_shader_objects +Requested GL_EXT_primitive_bounding_box Requested GL_EXT_shader_io_blocks Requested GL_EXT_tessellation_shader Requested GL_OES_shader_io_blocks @@ -148,6 +150,10 @@ ERROR: node is still EOpNull! 0:120 Constant: 0:120 1 (const uint) 0:120 'ps' (temp highp float) +0:125 Function Definition: bbbad( (global void) +0:125 Function Parameters: +0:127 Sequence +0:127 'gl_BoundingBoxOES' (temp float) 0:? Linker Objects 0:? 'patchIn' (patch in highp 4-component vector of float) 0:? 'patchOut' (patch out highp 4-component vector of float) @@ -180,6 +186,7 @@ Linked tessellation evaluation stage: Shader version: 310 Requested GL_ARB_separate_shader_objects +Requested GL_EXT_primitive_bounding_box Requested GL_EXT_shader_io_blocks Requested GL_EXT_tessellation_shader Requested GL_OES_shader_io_blocks @@ -276,6 +283,10 @@ ERROR: node is still EOpNull! 0:120 Constant: 0:120 1 (const uint) 0:120 'ps' (temp highp float) +0:125 Function Definition: bbbad( (global void) +0:125 Function Parameters: +0:127 Sequence +0:127 'gl_BoundingBoxOES' (temp float) 0:? Linker Objects 0:? 'patchIn' (patch in highp 4-component vector of float) 0:? 'patchOut' (patch out highp 4-component vector of float) diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index d08f4bd..bed63b0 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -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"; diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index afc749d..b3a3f49 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -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" diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 28b8ccd..5ef336d 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -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); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index c751076..94bf19c 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -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; -- 2.7.4