diff --git a/Test/430.vert b/Test/430.vert index 399a8955..4cc8d29e 100644 --- a/Test/430.vert +++ b/Test/430.vert @@ -155,3 +155,5 @@ void fooBarrier() memoryBarrierImage(); groupMemoryBarrier(); // ERROR } + +buffer vec4 v; // ERROR diff --git a/Test/baseResults/430.vert.out b/Test/baseResults/430.vert.out index 4e8b1ef4..de38acbc 100644 --- a/Test/baseResults/430.vert.out +++ b/Test/baseResults/430.vert.out @@ -48,7 +48,8 @@ ERROR: 0:146: 'shared' : not supported in this stage: vertex ERROR: 0:150: 'barrier' : no matching overloaded function found ERROR: 0:154: 'memoryBarrierShared' : no matching overloaded function found ERROR: 0:156: 'groupMemoryBarrier' : no matching overloaded function found -ERROR: 48 compilation errors. No code generated. +ERROR: 0:159: 'buffer' : buffers can be declared only as blocks +ERROR: 49 compilation errors. No code generated. Shader version: 430 @@ -127,6 +128,7 @@ ERROR: node is still EOpNull! 0:? 'bbinst4' (layout(xfb_stride=80 ) out block{layout(xfb_buffer=1 xfb_offset=16 ) out 4-component vector of float bbv1}) 0:? 'bbinst5' (out block{layout(xfb_buffer=1 xfb_offset=0 ) out 4-component vector of float bbv1, layout(xfb_buffer=1 xfb_offset=64 xfb_stride=80 ) out 4-component vector of float bbv2}) 0:? 'sharedv' (shared 4-component vector of float) +0:? 'v' (buffer 4-component vector of float) 0:? 'gl_VertexID' (gl_VertexId int) 0:? 'gl_InstanceID' (gl_InstanceId int) @@ -213,6 +215,7 @@ ERROR: node is still EOpNull! 0:? 'bbinst4' (layout(xfb_stride=80 ) out block{layout(xfb_buffer=1 xfb_offset=16 ) out 4-component vector of float bbv1}) 0:? 'bbinst5' (out block{layout(xfb_buffer=1 xfb_offset=0 ) out 4-component vector of float bbv1, layout(xfb_buffer=1 xfb_offset=64 xfb_stride=80 ) out 4-component vector of float bbv2}) 0:? 'sharedv' (shared 4-component vector of float) +0:? 'v' (buffer 4-component vector of float) 0:? 'gl_VertexID' (gl_VertexId int) 0:? 'gl_InstanceID' (gl_InstanceId int) diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 82d247cf..cb434678 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -315,7 +315,6 @@ public: nopersp = false; patch = false; sample = false; - shared = false; coherent = false; volatil = false; restrict = false; @@ -333,7 +332,6 @@ public: bool nopersp : 1; bool patch : 1; bool sample : 1; - bool shared : 1; bool coherent : 1; bool volatil : 1; bool restrict : 1; @@ -1179,8 +1177,6 @@ public: p += snprintf(p, end - p, "patch "); if (qualifier.sample) p += snprintf(p, end - p, "sample "); - if (qualifier.shared) - p += snprintf(p, end - p, "shared "); if (qualifier.coherent) p += snprintf(p, end - p, "coherent "); if (qualifier.volatil) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index a3484a91..16c6b92e 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1921,6 +1921,9 @@ void TParseContext::globalQualifierCheck(TSourceLoc loc, const TQualifier& quali if (qualifier.isMemory() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) error(loc, "memory qualifiers cannot be used on this type", "", ""); + if (qualifier.storage == EvqBuffer && publicType.basicType != EbtBlock) + error(loc, "buffers can be declared only as blocks", "buffer", ""); + if (qualifier.storage != EvqVaryingIn && qualifier.storage != EvqVaryingOut) return; @@ -2093,7 +2096,6 @@ void TParseContext::mergeQualifiers(TSourceLoc loc, TQualifier& dst, const TQual MERGE_SINGLETON(nopersp); MERGE_SINGLETON(patch); MERGE_SINGLETON(sample); - MERGE_SINGLETON(shared); MERGE_SINGLETON(coherent); MERGE_SINGLETON(volatil); MERGE_SINGLETON(restrict); diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 3628f99c..310350d8 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -296,8 +296,7 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy } // Memory... - if (symbol.getQualifier().shared != unitSymbol.getQualifier().shared || - symbol.getQualifier().coherent != unitSymbol.getQualifier().coherent || + if (symbol.getQualifier().coherent != unitSymbol.getQualifier().coherent || symbol.getQualifier().volatil != unitSymbol.getQualifier().volatil || symbol.getQualifier().restrict != unitSymbol.getQualifier().restrict || symbol.getQualifier().readonly != unitSymbol.getQualifier().readonly ||