Turn on the sampler 2DMS types for ES 3.1.
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@27741 e7fa87d3-cd2b-0410-9028-fcbf551c1848
diff --git a/Test/310.vert b/Test/310.vert
index d4d710f..ed8ab34 100644
--- a/Test/310.vert
+++ b/Test/310.vert
@@ -47,3 +47,24 @@
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 92682da..5d4c895 100644
--- a/Test/baseResults/310.frag.out
+++ b/Test/baseResults/310.frag.out
@@ -23,15 +23,12 @@
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 @@
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 @@
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 77d6851..4deca14 100644
--- a/Test/baseResults/310.vert.out
+++ b/Test/baseResults/310.vert.out
@@ -4,7 +4,10 @@
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 @@
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 @@
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 @@
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 @@
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 f3912ad..6d03f46 100644
--- a/Todo.txt
+++ b/Todo.txt
@@ -85,7 +85,7 @@
- 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 a0a7deb..57459ff 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -1757,7 +1757,11 @@
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 @@
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 e9d3cfb..1d7c417 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -842,6 +842,11 @@
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: