Implement GL_ARB_viewport_array extension.
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@28653 e7fa87d3-cd2b-0410-9028-fcbf551c1848
diff --git a/Test/150.geom b/Test/150.geom
index f76c650..d5b3c9b 100644
--- a/Test/150.geom
+++ b/Test/150.geom
@@ -123,3 +123,17 @@
gl_MaxGeometryTotalOutputComponents +
gl_MaxGeometryUniformComponents +
gl_MaxGeometryVaryingComponents;
+
+void fooe1()
+{
+ gl_ViewportIndex = gl_MaxViewports - 1;
+}
+
+#extension GL_ARB_viewport_array : enable
+
+void fooe2()
+{
+ gl_ViewportIndex = gl_MaxViewports - 1;
+}
+
+out int gl_ViewportIndex;
diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out
index b2dc891..adb5b11 100644
--- a/Test/baseResults/150.geom.out
+++ b/Test/baseResults/150.geom.out
@@ -31,10 +31,14 @@
ERROR: 0:89: 'invocations' : not supported for this version or the enabled extensions
ERROR: 0:92: 'stream' : member cannot contradict block
ERROR: 0:92: 'stream' : can only be used on an output
-ERROR: 32 compilation errors. No code generated.
+ERROR: 0:129: 'gl_ViewportIndex' : required extension not requested: GL_ARB_viewport_array
+ERROR: 0:129: 'gl_MaxViewports' : required extension not requested: GL_ARB_viewport_array
+ERROR: 0:139: 'gl_ViewportIndex' : identifiers starting with "gl_" are reserved
+ERROR: 35 compilation errors. No code generated.
Shader version: 150
+Requested GL_ARB_viewport_array
invocations = 4
max_vertices = 200
input primitive = lines_adjacency
@@ -129,6 +133,20 @@
0:107 'summ' (float)
0:107 Constant:
0:107 11332.000000
+0:127 Function Definition: fooe1( (void)
+0:127 Function Parameters:
+0:129 Sequence
+0:129 move second child to first child (int)
+0:129 'gl_ViewportIndex' (layout(stream=0 ) out int)
+0:129 Constant:
+0:129 15 (const int)
+0:134 Function Definition: fooe2( (void)
+0:134 Function Parameters:
+0:136 Sequence
+0:136 move second child to first child (int)
+0:136 'gl_ViewportIndex' (layout(stream=0 ) out int)
+0:136 Constant:
+0:136 15 (const int)
0:? Linker Objects
0:? 'fromV' (in 4-element array of block{in 3-component vector of float color})
0:? 'toF' (layout(stream=0 ) out block{layout(stream=0 ) out 3-component vector of float color})
@@ -154,12 +172,14 @@
0:? 'anon@3' (layout(stream=3 ) out block{layout(stream=3 ) out float f15})
0:? 'anon@4' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform bool b15})
0:? 'summ' (float)
+0:? 'gl_ViewportIndex' (layout(stream=3 ) out int)
Linked geometry stage:
Shader version: 150
+Requested GL_ARB_viewport_array
invocations = 4
max_vertices = 200
input primitive = lines_adjacency
@@ -254,6 +274,20 @@
0:107 'summ' (float)
0:107 Constant:
0:107 11332.000000
+0:127 Function Definition: fooe1( (void)
+0:127 Function Parameters:
+0:129 Sequence
+0:129 move second child to first child (int)
+0:129 'gl_ViewportIndex' (layout(stream=0 ) out int)
+0:129 Constant:
+0:129 15 (const int)
+0:134 Function Definition: fooe2( (void)
+0:134 Function Parameters:
+0:136 Sequence
+0:136 move second child to first child (int)
+0:136 'gl_ViewportIndex' (layout(stream=0 ) out int)
+0:136 Constant:
+0:136 15 (const int)
0:? Linker Objects
0:? 'fromV' (in 4-element array of block{in 3-component vector of float color})
0:? 'toF' (layout(stream=0 ) out block{layout(stream=0 ) out 3-component vector of float color})
@@ -279,4 +313,5 @@
0:? 'anon@3' (layout(stream=3 ) out block{layout(stream=3 ) out float f15})
0:? 'anon@4' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform bool b15})
0:? 'summ' (float)
+0:? 'gl_ViewportIndex' (layout(stream=3 ) out int)
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index b9c1344..07e38b4 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -871,7 +871,7 @@
// Bitfield
if ((profile == EEsProfile && version >= 310) ||
(profile != EEsProfile && version >= 400)) {
- commonBuiltins.append(
+ commonBuiltins.append(
" uint uaddCarry( uint, uint, out uint carry);"
"uvec2 uaddCarry(uvec2, uvec2, out uvec2 carry);"
"uvec3 uaddCarry(uvec3, uvec3, out uvec3 carry);"
@@ -1117,7 +1117,7 @@
"\n");
}
- stageBuiltins[EShLangFragment].append(
+ stageBuiltins[EShLangFragment].append(
"float dFdx(float p);"
"vec2 dFdx(vec2 p);"
"vec3 dFdx(vec3 p);"
@@ -1137,7 +1137,7 @@
// GL_ARB_derivative_control
if (profile != EEsProfile && version >= 400) {
- stageBuiltins[EShLangFragment].append(
+ stageBuiltins[EShLangFragment].append(
"float dFdxFine(float p);"
"vec2 dFdxFine(vec2 p);"
"vec3 dFdxFine(vec3 p);"
@@ -1155,7 +1155,7 @@
"\n");
- stageBuiltins[EShLangFragment].append(
+ stageBuiltins[EShLangFragment].append(
"float dFdxCoarse(float p);"
"vec2 dFdxCoarse(vec2 p);"
"vec3 dFdxCoarse(vec3 p);"
@@ -1444,11 +1444,11 @@
}
if (version >= 130)
stageBuiltins[EShLangVertex].append(
- "int gl_VertexID;" // needs qualifier fixed later
+ "int gl_VertexID;" // needs qualifier fixed later
);
if (version >= 140)
stageBuiltins[EShLangVertex].append(
- "int gl_InstanceID;" // needs qualifier fixed later
+ "int gl_InstanceID;" // needs qualifier fixed later
);
} else {
// ES profile
@@ -1459,11 +1459,11 @@
);
} else {
stageBuiltins[EShLangVertex].append(
- "highp int gl_VertexID;" // needs qualifier fixed later
- "highp int gl_InstanceID;" // needs qualifier fixed later
+ "highp int gl_VertexID;" // needs qualifier fixed later
+ "highp int gl_InstanceID;" // needs qualifier fixed later
- "highp vec4 gl_Position;" // needs qualifier fixed later
- "highp float gl_PointSize;" // needs qualifier fixed later
+ "highp vec4 gl_Position;" // needs qualifier fixed later
+ "highp float gl_PointSize;" // needs qualifier fixed later
);
}
}
@@ -1522,8 +1522,7 @@
"};"
"out int gl_PrimitiveID;"
- "out int gl_Layer;"
- "\n");
+ "out int gl_Layer;");
if (version < 400 && profile == ECompatibilityProfile)
stageBuiltins[EShLangGeometry].append(
@@ -1534,10 +1533,12 @@
stageBuiltins[EShLangGeometry].append(
"in int gl_InvocationID;"
);
- if (version >= 410 && profile != EEsProfile)
+ // GL_ARB_viewport_array
+ if (version >= 150 && profile != EEsProfile)
stageBuiltins[EShLangGeometry].append(
"out int gl_ViewportIndex;"
);
+ stageBuiltins[EShLangGeometry].append("\n");
}
//============================================================================
@@ -2230,7 +2231,7 @@
//============================================================================
TString& s = commonBuiltins;
- const int maxSize = 80;
+ const int maxSize = 80;
char builtInConstant[maxSize];
//
@@ -2462,7 +2463,7 @@
}
}
- if (version >= 410) {
+ if (version >= 150) {
snprintf(builtInConstant, maxSize, "const int gl_MaxViewports = %d;", resources.maxViewports);
s.append(builtInConstant);
}
@@ -2631,6 +2632,8 @@
SpecialQualifier("gl_ClipVertex", EvqClipVertex, symbolTable);
SpecialQualifier("gl_VertexID", EvqVertexId, symbolTable);
SpecialQualifier("gl_InstanceID", EvqInstanceId, symbolTable);
+ if (version < 410)
+ symbolTable.setVariableExtensions("gl_ViewportIndex", 1, &GL_ARB_viewport_array);
break;
case EShLangFragment:
@@ -2854,7 +2857,7 @@
symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
break;
- default:
+ default:
assert(false && "Language not supported");
}
}
@@ -2878,6 +2881,8 @@
symbolTable.setVariableExtensions("gl_MinProgramTexelOffset", 1, &GL_ARB_shading_language_420pack);
symbolTable.setVariableExtensions("gl_MaxProgramTexelOffset", 1, &GL_ARB_shading_language_420pack);
}
+ if (profile != EEsProfile && version >= 150 && version < 410)
+ symbolTable.setVariableExtensions("gl_MaxViewports", 1, &GL_ARB_viewport_array);
switch(language) {
case EShLangFragment:
@@ -2892,7 +2897,7 @@
}
break;
- default:
+ default:
break;
}
}
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index ba1a3e6..691722c 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -170,7 +170,8 @@
extensionBehavior[GL_ARB_shader_atomic_counters] = EBhDisable;
extensionBehavior[GL_ARB_derivative_control] = EBhDisable;
extensionBehavior[GL_ARB_shader_texture_image_samples] = EBhDisable;
-// extensionBehavior[GL_ARB_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members
+ extensionBehavior[GL_ARB_viewport_array] = EBhDisable;
+// extensionBehavior[GL_ARB_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members
}
// Get code that is not part of a shared symbol table, is specific to this shader,
@@ -204,6 +205,7 @@
"#define GL_ARB_shader_atomic_counters 1\n"
"#define GL_ARB_derivative_control 1\n"
"#define GL_ARB_shader_texture_image_samples 1\n"
+ "#define GL_ARB_viewport_array 1\n"
// "#define GL_ARB_cull_distance 1\n" // present for 4.5, but need extension control over block members
;
}
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 7739567..6d0e63b 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -94,6 +94,7 @@
const char* const GL_ARB_shader_atomic_counters = "GL_ARB_shader_atomic_counters";
const char* const GL_ARB_derivative_control = "GL_ARB_derivative_control";
const char* const GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture_image_samples";
+const char* const GL_ARB_viewport_array = "GL_ARB_viewport_array";
//const char* const GL_ARB_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members
} // end namespace glslang