diff --git a/Test/310.vert b/Test/310.vert index d4d710f2..ed8ab349 100644 --- a/Test/310.vert +++ b/Test/310.vert @@ -47,3 +47,24 @@ void main() v4 = unpackUnorm4x8(u1); v4 = unpackSnorm4x8(u1); } + +precision highp sampler2DMS; +precision highp isampler2DMS; +precision highp usampler2DMS; + +uniform sampler2DMS s2dms; +uniform isampler2DMS is2dms; +uniform usampler2DMS us2dms; +uniform usampler2DMSArray us2dmsa; // ERROR + +void foo() +{ + ivec2 v2; + v2 = textureSize(s2dms); + v2 = textureSize(us2dms); + vec4 v4 = texelFetch(s2dms, v2, 2); + ivec4 iv4 = texelFetch(is2dms, v2, 2); + textureSamples(s2dms); // ERROR + + +} \ No newline at end of file diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out index 92682da3..5d4c8958 100644 --- a/Test/baseResults/310.frag.out +++ b/Test/baseResults/310.frag.out @@ -23,15 +23,12 @@ ERROR: 0:78: 'location' : too large for fragment output ERROR: 0:78: 'location' : overlapping use of location 40 ERROR: 0:79: 'non-literal layout-id value' : not supported with this profile: es ERROR: 0:79: 'layout-id value' : cannot be negative -ERROR: 0:92: 'sampler2DMS' : Reserved word. -ERROR: 0:98: 'textureSize' : no matching overloaded function found -ERROR: 0:98: 'assign' : cannot convert from 'const float' to 'highp 2-component vector of int' ERROR: 0:99: 'writeonly' : argument cannot drop memory qualifier when passed to formal parameter ERROR: 0:102: 'out' : cannot be bool ERROR: 0:103: 'image2D' : sampler/image types can only be used in uniform variables or function parameters: imageOut ERROR: 0:103: '' : image variables not declared 'writeonly' must have a format layout qualifier ERROR: 0:104: 'out' : cannot be a matrix -ERROR: 31 compilation errors. No code generated. +ERROR: 28 compilation errors. No code generated. Shader version: 310 @@ -225,7 +222,10 @@ ERROR: node is still EOpNull! 0:97 'isamp2DA' (uniform highp isampler2DArray) 0:97 Constant: 0:97 3 (const int) -0:98 'v2' (highp 2-component vector of int) +0:98 move second child to first child (highp 2-component vector of int) +0:98 'v2' (highp 2-component vector of int) +0:98 Function Call: textureSize(s21; (highp 2-component vector of int) +0:98 's2dms' (uniform highp sampler2DMS) 0:99 move second child to first child (highp 2-component vector of int) 0:99 'v2' (highp 2-component vector of int) 0:99 Function Call: imageSize(I21; (highp 2-component vector of int) @@ -455,7 +455,10 @@ ERROR: node is still EOpNull! 0:97 'isamp2DA' (uniform highp isampler2DArray) 0:97 Constant: 0:97 3 (const int) -0:98 'v2' (highp 2-component vector of int) +0:98 move second child to first child (highp 2-component vector of int) +0:98 'v2' (highp 2-component vector of int) +0:98 Function Call: textureSize(s21; (highp 2-component vector of int) +0:98 's2dms' (uniform highp sampler2DMS) 0:99 move second child to first child (highp 2-component vector of int) 0:99 'v2' (highp 2-component vector of int) 0:99 Function Call: imageSize(I21; (highp 2-component vector of int) diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out index 77d68518..4deca147 100644 --- a/Test/baseResults/310.vert.out +++ b/Test/baseResults/310.vert.out @@ -4,7 +4,10 @@ ERROR: 0:3: 'shared' : not supported in this stage: vertex ERROR: 0:4: 'local_size_x' : there is no such layout identifier for this stage taking an assigned value ERROR: 0:5: 'buffer' : buffers can be declared only as blocks ERROR: 0:10: 'location' : overlapping use of location 3 -ERROR: 4 compilation errors. No code generated. +ERROR: 0:58: 'usampler2DMSArray' : Reserved word. +ERROR: 0:58: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:67: 'textureSamples' : no matching overloaded function found +ERROR: 7 compilation errors. No code generated. Shader version: 310 @@ -126,6 +129,35 @@ ERROR: node is still EOpNull! 0:48 'v4' (mediump 4-component vector of float) 0:48 Function Call: unpackSnorm4x8(u1; (mediump 4-component vector of float) 0:48 'u1' (highp uint) +0:60 Function Definition: foo( (void) +0:60 Function Parameters: +0:? Sequence +0:63 move second child to first child (highp 2-component vector of int) +0:63 'v2' (highp 2-component vector of int) +0:63 Function Call: textureSize(s21; (highp 2-component vector of int) +0:63 's2dms' (uniform highp sampler2DMS) +0:64 move second child to first child (highp 2-component vector of int) +0:64 'v2' (highp 2-component vector of int) +0:64 Function Call: textureSize(us21; (highp 2-component vector of int) +0:64 'us2dms' (uniform highp usampler2DMS) +0:65 Sequence +0:65 move second child to first child (highp 4-component vector of float) +0:65 'v4' (highp 4-component vector of float) +0:65 Function Call: texelFetch(s21;vi2;i1; (highp 4-component vector of float) +0:65 's2dms' (uniform highp sampler2DMS) +0:65 'v2' (highp 2-component vector of int) +0:65 Constant: +0:65 2 (const int) +0:66 Sequence +0:66 move second child to first child (highp 4-component vector of int) +0:66 'iv4' (highp 4-component vector of int) +0:66 Function Call: texelFetch(is21;vi2;i1; (highp 4-component vector of int) +0:66 'is2dms' (uniform highp isampler2DMS) +0:66 'v2' (highp 2-component vector of int) +0:66 Constant: +0:66 2 (const int) +0:67 Constant: +0:67 0.000000 0:? Linker Objects 0:? 's' (shared highp 4-component vector of float) 0:? 'v' (buffer highp 4-component vector of float) @@ -133,6 +165,10 @@ ERROR: node is still EOpNull! 0:? 'y' (layout(location=3 ) uniform highp 4X4 matrix of float) 0:? 'xi' (layout(location=2 ) smooth out highp 4X4 matrix of float) 0:? 'yi' (layout(location=3 ) smooth out highp 4X4 matrix of float) +0:? 's2dms' (uniform highp sampler2DMS) +0:? 'is2dms' (uniform highp isampler2DMS) +0:? 'us2dms' (uniform highp usampler2DMS) +0:? 'us2dmsa' (uniform mediump usampler2DMSArray) 0:? 'gl_VertexID' (gl_VertexId highp int) 0:? 'gl_InstanceID' (gl_InstanceId highp int) @@ -259,6 +295,35 @@ ERROR: node is still EOpNull! 0:48 'v4' (mediump 4-component vector of float) 0:48 Function Call: unpackSnorm4x8(u1; (mediump 4-component vector of float) 0:48 'u1' (highp uint) +0:60 Function Definition: foo( (void) +0:60 Function Parameters: +0:? Sequence +0:63 move second child to first child (highp 2-component vector of int) +0:63 'v2' (highp 2-component vector of int) +0:63 Function Call: textureSize(s21; (highp 2-component vector of int) +0:63 's2dms' (uniform highp sampler2DMS) +0:64 move second child to first child (highp 2-component vector of int) +0:64 'v2' (highp 2-component vector of int) +0:64 Function Call: textureSize(us21; (highp 2-component vector of int) +0:64 'us2dms' (uniform highp usampler2DMS) +0:65 Sequence +0:65 move second child to first child (highp 4-component vector of float) +0:65 'v4' (highp 4-component vector of float) +0:65 Function Call: texelFetch(s21;vi2;i1; (highp 4-component vector of float) +0:65 's2dms' (uniform highp sampler2DMS) +0:65 'v2' (highp 2-component vector of int) +0:65 Constant: +0:65 2 (const int) +0:66 Sequence +0:66 move second child to first child (highp 4-component vector of int) +0:66 'iv4' (highp 4-component vector of int) +0:66 Function Call: texelFetch(is21;vi2;i1; (highp 4-component vector of int) +0:66 'is2dms' (uniform highp isampler2DMS) +0:66 'v2' (highp 2-component vector of int) +0:66 Constant: +0:66 2 (const int) +0:67 Constant: +0:67 0.000000 0:? Linker Objects 0:? 's' (shared highp 4-component vector of float) 0:? 'v' (buffer highp 4-component vector of float) @@ -266,6 +331,10 @@ ERROR: node is still EOpNull! 0:? 'y' (layout(location=3 ) uniform highp 4X4 matrix of float) 0:? 'xi' (layout(location=2 ) smooth out highp 4X4 matrix of float) 0:? 'yi' (layout(location=3 ) smooth out highp 4X4 matrix of float) +0:? 's2dms' (uniform highp sampler2DMS) +0:? 'is2dms' (uniform highp isampler2DMS) +0:? 'us2dms' (uniform highp usampler2DMS) +0:? 'us2dmsa' (uniform mediump usampler2DMSArray) 0:? 'gl_VertexID' (gl_VertexId highp int) 0:? 'gl_InstanceID' (gl_InstanceId highp int) diff --git a/Todo.txt b/Todo.txt index f3912ada..6d03f468 100644 --- a/Todo.txt +++ b/Todo.txt @@ -85,7 +85,7 @@ Shader Functionality to Implement/Finish - overlapping offsets + frexp/ldexp + packUnorm4x8(),packSnorm4x8(), unpackUnorm4x8(), unpackSnorm4x8() - - 2DMS samplers and images + + 2DMS samplers and images - inheritance of memory qualifiers in block members GLSL 1.2 + Handle multiple compilation units per stage diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index a0a7deb0..57459ffc 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1757,7 +1757,11 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile) if ((ms || image) && shadow) continue; - if (ms && (profile == EEsProfile || version < 150)) + if (ms && profile != EEsProfile && version < 150) + continue; + if (ms && image && profile == EEsProfile) + continue; + if (ms && profile == EEsProfile && version < 310) continue; for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not @@ -1777,6 +1781,8 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile) continue; if (dim == EsdBuffer && (shadow || arrayed || ms)) continue; + if (ms && arrayed && profile == EEsProfile) + continue; for (int bType = 0; bType < 3; ++bType) { // float, int, uint results diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index e9d3cfb0..1d7c4177 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -842,6 +842,11 @@ int TScanContext::tokenizeIdentifier() case SAMPLER2DMS: case ISAMPLER2DMS: case USAMPLER2DMS: + afterType = true; + if (parseContext.profile == EEsProfile && parseContext.version >= 310) + return keyword; + return es30ReservedFromGLSL(150); + case SAMPLER2DMSARRAY: case ISAMPLER2DMSARRAY: case USAMPLER2DMSARRAY: