Support in/out for stage inputs/outputs, tied to being desktop version 150 or ES 300.

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@20077 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
John Kessenich 2013-01-10 01:47:54 +00:00
parent 1b12b9c575
commit f59bfa07e0
7 changed files with 26 additions and 9 deletions

3
Test/pre150.frag Normal file
View File

@ -0,0 +1,3 @@
varying vec4 v;
in vec4 i;
out vec4 o;

View File

@ -1,4 +1,4 @@
#version 110 #version 150
#extension GL_3DL_array_objects : enable #extension GL_3DL_array_objects : enable
@ -61,13 +61,13 @@ layout(row_major, column_major)
layout(shared, row_major) uniform; // default is now shared and row_major layout(shared, row_major) uniform; // default is now shared and row_major
layout(std140) uniform Transform { // layout of this block is std140 layout(std140) uniform Transform { // layout of this block is std140
mat4 M1; // row_major mat4 M1; // row_major
layout(column_major) mat4 M2; // column major layout(column_major) mat4 M2; // column major
mat3 N1; // row_major mat3 N1; // row_major
}; };
layout(column_major) uniform T3 { // shared and column_major layout(column_major) uniform T3 { // shared and column_major
mat4 M3; // column_major mat4 M3; // column_major
layout(row_major) mat4 m4; // row major layout(row_major) mat4 m4; // row major
mat3 N2; // column_major mat3 N2; // column_major
@ -178,7 +178,7 @@ void main()
light lightVar = light(3.0, vec3(1.0, 2.0, 3.0)); light lightVar = light(3.0, vec3(1.0, 2.0, 3.0));
} }
{ {
const float c[3] = float[3](5.0, 7.2, 1.1); const float c[3] = float[3](5.0, 7.2, 1.1);
const float d[3] = float[](5.0, 7.2, 1.1); const float d[3] = float[](5.0, 7.2, 1.1);
float g; float g;

View File

@ -6,3 +6,4 @@ versionsClean.frag
versionsClean.vert versionsClean.vert
versionsErrors.frag versionsErrors.frag
versionsErrors.vert versionsErrors.vert
pre150.frag

View File

@ -623,14 +623,19 @@ bool TParseContext::globalQualifierFixAndErrorCheck(int line, TQualifier& qualif
{ {
switch (qualifier) { switch (qualifier) {
case EvqIn: case EvqIn:
profileRequires(line, ENoProfile, 130, 0, "in for stage inputs");
profileRequires(line, EEsProfile, 300, 0, "in for stage inputs");
qualifier = EvqVaryingIn; qualifier = EvqVaryingIn;
return false; break;
case EvqOut: case EvqOut:
profileRequires(line, ENoProfile, 130, 0, "out for stage outputs");
profileRequires(line, EEsProfile, 300, 0, "out for stage outputs");
qualifier = EvqVaryingOut; qualifier = EvqVaryingOut;
return false; break;
case EvqInOut: case EvqInOut:
qualifier = EvqVaryingIn; qualifier = EvqVaryingIn;
error(line, "cannot use both 'in' and 'out' at global scope", "", ""); error(line, "cannot use 'inout' at global scope", "", "");
return true; return true;
} }

View File

@ -122,7 +122,7 @@ void TParseContext::profileRequires(int line, EProfile callingProfile, int minVe
// one that takes a single extension // one that takes a single extension
void TParseContext::profileRequires(int line, EProfile callingProfile, int minVersion, const char* extension, const char *featureDesc) void TParseContext::profileRequires(int line, EProfile callingProfile, int minVersion, const char* extension, const char *featureDesc)
{ {
profileRequires(line, callingProfile, minVersion, 1, &extension, featureDesc); profileRequires(line, callingProfile, minVersion, extension ? 1 : 0, &extension, featureDesc);
} }
// //

View File

@ -1417,6 +1417,9 @@ single_declaration
: fully_specified_type { : fully_specified_type {
$$.type = $1; $$.type = $1;
$$.intermAggregate = 0; $$.intermAggregate = 0;
if (parseContext.globalQualifierFixAndErrorCheck($1.line, $1.qualifier))
parseContext.recover();
} }
| fully_specified_type IDENTIFIER { | fully_specified_type IDENTIFIER {
$$.intermAggregate = 0; $$.intermAggregate = 0;
@ -1437,6 +1440,10 @@ single_declaration
} }
| fully_specified_type IDENTIFIER array_specifier { | fully_specified_type IDENTIFIER array_specifier {
$$.intermAggregate = 0; $$.intermAggregate = 0;
if (parseContext.globalQualifierFixAndErrorCheck($1.line, $1.qualifier))
parseContext.recover();
if (parseContext.structQualifierErrorCheck($2.line, $1)) if (parseContext.structQualifierErrorCheck($2.line, $1))
parseContext.recover(); parseContext.recover();

View File

@ -213,7 +213,8 @@ enum TDebugOptions {
EDebugOpIntermediate = 0x001, EDebugOpIntermediate = 0x001,
EDebugOpAssembly = 0x002, EDebugOpAssembly = 0x002,
EDebugOpObjectCode = 0x004, EDebugOpObjectCode = 0x004,
EDebugOpLinkMaps = 0x008 EDebugOpLinkMaps = 0x008,
EDebugSuppressInfolog = 0x010
}; };
#ifdef __cplusplus #ifdef __cplusplus
} }