Implement GL_OES_shader_multisample_interpolation, as well as core desktop versions...
authorJohn Kessenich <cepheus@frii.com>
Sat, 22 Aug 2015 07:21:47 +0000 (01:21 -0600)
committerJohn Kessenich <cepheus@frii.com>
Sat, 22 Aug 2015 19:11:12 +0000 (13:11 -0600)
17 files changed:
Test/310.frag
Test/310.vert
Test/400.frag
Test/440.frag
Test/baseResults/310.frag.out
Test/baseResults/310.vert.out
Test/baseResults/400.frag.out
Test/baseResults/440.frag.out
glslang/Include/intermediate.h
glslang/Include/revision.h
glslang/MachineIndependent/Initialize.cpp
glslang/MachineIndependent/Intermediate.cpp
glslang/MachineIndependent/ParseHelper.cpp
glslang/MachineIndependent/Scan.cpp
glslang/MachineIndependent/Versions.cpp
glslang/MachineIndependent/intermOut.cpp
glslang/MachineIndependent/localintermediate.h

index 0de75e8..3de390a 100644 (file)
@@ -341,3 +341,59 @@ void goodImageAtom()
     imageAtomicMax(badIm2Du, P, datu);      // ERROR, not an allowed layout() on the image
     imageAtomicExchange(badIm2Df, P, datf); // ERROR, not an allowed layout() on the image
 }\r
+\r
+sample in vec4 colorSampInBad;       // ERROR, reserved\r
+centroid out vec4 colorCentroidBad;  // ERROR\r
+flat out vec4 colorBadFlat;          // ERROR\r
+smooth out vec4 colorBadSmooth;      // ERROR\r
+noperspective out vec4 colorBadNo;   // ERROR\r
+flat centroid in vec2 colorfc;\r
+in float scalarIn;\r
+\r
+void badInterp()\r
+{\r
+    interpolateAtCentroid(colorfc);             // ERROR, need extension\r
+    interpolateAtSample(colorfc, 1);            // ERROR, need extension\r
+    interpolateAtOffset(colorfc, vec2(0.2));    // ERROR, need extension\r
+}\r
+\r
+#if defined GL_OES_shader_multisample_interpolation\r
+#extension GL_OES_shader_multisample_interpolation : enable\r
+#endif\r
+\r
+sample in vec4 colorSampIn;\r
+sample out vec4 colorSampleBad;     // ERROR\r
+flat sample in vec4 colorfsi;\r
+sample in vec3 sampInArray[4];\r
+\r
+void interp()\r
+{\r
+    float res;\r
+    vec2 res2;\r
+    vec3 res3;\r
+    vec4 res4;\r
+\r
+    res2 = interpolateAtCentroid(colorfc);\r
+    res4 = interpolateAtCentroid(colorSampIn);\r
+    res4 = interpolateAtCentroid(colorfsi);\r
+    res  = interpolateAtCentroid(scalarIn);\r
+    res3 = interpolateAtCentroid(sampInArray);         // ERROR\r
+    res3 = interpolateAtCentroid(sampInArray[2]);\r
+    res2 = interpolateAtCentroid(sampInArray[2].xy);   // ERROR\r
+\r
+    res3 = interpolateAtSample(sampInArray, 1);        // ERROR\r
+    res3 = interpolateAtSample(sampInArray[i], 0);\r
+    res2 = interpolateAtSample(sampInArray[2].xy, 2);  // ERROR\r
+    res  = interpolateAtSample(scalarIn, 1);\r
+\r
+    res3 = interpolateAtOffset(sampInArray, vec2(0.2));         // ERROR\r
+    res3 = interpolateAtOffset(sampInArray[2], vec2(0.2));\r
+    res2 = interpolateAtOffset(sampInArray[2].xy, vec2(0.2));   // ERROR, no swizzle\r
+    res  = interpolateAtOffset(scalarIn + scalarIn, vec2(0.2)); // ERROR, no binary ops other than dereference\r
+    res  = interpolateAtOffset(scalarIn, vec2(0.2));\r
+\r
+    float f;\r
+    res  = interpolateAtCentroid(f);           // ERROR, not interpolant\r
+    res4 = interpolateAtSample(outp, 0);       // ERROR, not interpolant\r
+}\r
+\r
index ae0fe3a..3ea0e6d 100644 (file)
@@ -373,3 +373,19 @@ void goodImageAtom()
     imageAtomicCompSwap(im2Di, P,  3, dati);\r
     imageAtomicCompSwap(im2Du, P, 5u, datu);\r
 }\r
+\r
+sample out vec4 colorSampInBad;       // ERROR, reserved\r
+\r
+#extension GL_OES_shader_multisample_interpolation : enable\r
+\r
+sample out vec4 colorSample;\r
+flat sample out vec4 colorfsi;\r
+sample out vec3 sampInArray[4];\r
+in vec4 inv4;\r
+\r
+void badInterp()\r
+{\r
+    interpolateAtCentroid(inv4);             // ERROR, wrong stage\r
+    interpolateAtSample(inv4, 1);            // ERROR, need extension\r
+    interpolateAtOffset(inv4, vec2(0.2));    // ERROR, need extension\r
+}\r
index f8ca8f5..bda588a 100644 (file)
@@ -99,3 +99,43 @@ void foodc2()
     d = packDouble2x32(u2);
     u2 = unpackDouble2x32(d);
 }
+\r
+sample in vec4 colorSampIn;\r
+sample out vec4 colorSampleBad;     // ERROR\r
+noperspective in vec4 colorfsi;\r
+sample in vec3 sampInArray[4];\r
+smooth in float scalarIn;\r
+flat centroid in vec2 colorfc;\r
+\r
+struct S {\r
+    float x;\r
+};\r
+\r
+in S s1;\r
+sample S s2;\r
+\r
+void interp()\r
+{\r
+    interpolateAtCentroid(colorfc);\r
+    interpolateAtCentroid(colorSampIn);\r
+    interpolateAtCentroid(colorfsi);\r
+    interpolateAtCentroid(scalarIn);\r
+    interpolateAtCentroid(sampInArray);         // ERROR\r
+    interpolateAtCentroid(sampInArray[2]);\r
+    interpolateAtCentroid(sampInArray[2].xy);   // ERROR\r
+\r
+    interpolateAtSample(sampInArray, 1);        // ERROR\r
+    interpolateAtSample(sampInArray[i], 0);\r
+    interpolateAtSample(s1.x, 2);               // ERROR\r
+    interpolateAtSample(scalarIn, 1);\r
+\r
+    interpolateAtOffset(sampInArray, vec2(0.2));         // ERROR\r
+    interpolateAtOffset(sampInArray[2], vec2(0.2));\r
+    interpolateAtOffset(sampInArray[2].xy, vec2(0.2));   // ERROR, no swizzle\r
+    interpolateAtOffset(scalarIn + scalarIn, vec2(0.2)); // ERROR, no binary ops other than dereference\r
+    interpolateAtOffset(s2.x, vec2(0.2));      // ERROR\r
+\r
+    float f;\r
+    interpolateAtCentroid(f);           // ERROR, not interpolant\r
+    interpolateAtSample(outp, 0);       // ERROR, not interpolant\r
+}
\ No newline at end of file
index ef1808f..3a20dab 100644 (file)
@@ -138,3 +138,10 @@ layout(std430, align = 128) uniform block24301 {
 \r
 int aconst[gl_MaxTransformFeedbackBuffers];\r
 int bconst[gl_MaxTransformFeedbackInterleavedComponents];\r
+\r
+sample in vec3 sampInArray[4];\r
+\r
+void interp()\r
+{\r
+    interpolateAtCentroid(sampInArray[2].xy);\r
+}\r
index 36c94db..40e0e2d 100644 (file)
@@ -98,7 +98,30 @@ ERROR: 0:314: 'rgba16i' : format requires readonly or writeonly memory qualifier
 ERROR: 0:340: 'imageAtomicMax' : only supported on image with format r32i or r32ui \r
 ERROR: 0:341: 'imageAtomicMax' : only supported on image with format r32i or r32ui \r
 ERROR: 0:342: 'imageAtomicExchange' : only supported on image with format r32f \r
-ERROR: 90 compilation errors.  No code generated.\r
+ERROR: 0:345: 'sample' : Reserved word. \r
+ERROR: 0:346: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output \r
+ERROR: 0:347: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output \r
+ERROR: 0:348: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output \r
+ERROR: 0:349: 'noperspective' : Reserved word. \r
+ERROR: 0:349: 'noperspective' : not supported with this profile: es\r
+ERROR: 0:349: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output \r
+ERROR: 0:355: 'interpolateAtCentroid' : required extension not requested: GL_OES_shader_multisample_interpolation\r
+ERROR: 0:356: 'interpolateAtSample' : required extension not requested: GL_OES_shader_multisample_interpolation\r
+ERROR: 0:357: 'interpolateAtOffset' : required extension not requested: GL_OES_shader_multisample_interpolation\r
+ERROR: 0:365: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output \r
+ERROR: 0:380: 'interpolateAtCentroid' : no matching overloaded function found \r
+ERROR: 0:380: 'assign' :  cannot convert from 'const float' to 'temp mediump 3-component vector of float'\r
+ERROR: 0:382: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:384: 'interpolateAtSample' : no matching overloaded function found \r
+ERROR: 0:384: 'assign' :  cannot convert from 'const float' to 'temp mediump 3-component vector of float'\r
+ERROR: 0:386: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:389: 'interpolateAtOffset' : no matching overloaded function found \r
+ERROR: 0:389: 'assign' :  cannot convert from 'const float' to 'temp mediump 3-component vector of float'\r
+ERROR: 0:391: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:392: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:396: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:397: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 113 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 310\r
@@ -109,6 +132,7 @@ Requested GL_OES_gpu_shader5
 Requested GL_OES_sample_variables\r
 Requested GL_OES_shader_image_atomic\r
 Requested GL_OES_shader_io_blocks\r
+Requested GL_OES_shader_multisample_interpolation\r
 gl_FragCoord pixel center is integer\r
 gl_FragCoord origin is upper left\r
 using early_fragment_tests\r
@@ -736,6 +760,143 @@ ERROR: node is still EOpNull!
 0:342        'badIm2Df' (layout(rgba32f ) uniform highp image2D)\r
 0:342        'P' (uniform mediump 2-component vector of int)\r
 0:342        'datf' (temp mediump float)\r
+0:353  Function Definition: badInterp( (global void)\r
+0:353    Function Parameters: \r
+0:355    Sequence\r
+0:355      interpolateAtCentroid (global mediump 2-component vector of float)\r
+0:355        'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:356      interpolateAtSample (global mediump 2-component vector of float)\r
+0:356        'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:356        Constant:\r
+0:356          1 (const int)\r
+0:357      interpolateAtOffset (global mediump 2-component vector of float)\r
+0:357        'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:357        Constant:\r
+0:357          0.200000\r
+0:357          0.200000\r
+0:369  Function Definition: interp( (global void)\r
+0:369    Function Parameters: \r
+0:?     Sequence\r
+0:376      move second child to first child (temp mediump 2-component vector of float)\r
+0:376        'res2' (temp mediump 2-component vector of float)\r
+0:376        interpolateAtCentroid (global mediump 2-component vector of float)\r
+0:376          'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:377      move second child to first child (temp mediump 4-component vector of float)\r
+0:377        'res4' (temp mediump 4-component vector of float)\r
+0:377        interpolateAtCentroid (global mediump 4-component vector of float)\r
+0:377          'colorSampIn' (smooth sample in mediump 4-component vector of float)\r
+0:378      move second child to first child (temp mediump 4-component vector of float)\r
+0:378        'res4' (temp mediump 4-component vector of float)\r
+0:378        interpolateAtCentroid (global mediump 4-component vector of float)\r
+0:378          'colorfsi' (flat sample in mediump 4-component vector of float)\r
+0:379      move second child to first child (temp mediump float)\r
+0:379        'res' (temp mediump float)\r
+0:379        interpolateAtCentroid (global mediump float)\r
+0:379          'scalarIn' (smooth in mediump float)\r
+0:380      'res3' (temp mediump 3-component vector of float)\r
+0:381      move second child to first child (temp mediump 3-component vector of float)\r
+0:381        'res3' (temp mediump 3-component vector of float)\r
+0:381        interpolateAtCentroid (global mediump 3-component vector of float)\r
+0:381          direct index (smooth sample temp mediump 3-component vector of float)\r
+0:381            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:381            Constant:\r
+0:381              2 (const int)\r
+0:382      move second child to first child (temp mediump 2-component vector of float)\r
+0:382        'res2' (temp mediump 2-component vector of float)\r
+0:382        interpolateAtCentroid (global mediump 2-component vector of float)\r
+0:382          vector swizzle (temp mediump 2-component vector of float)\r
+0:382            direct index (smooth sample temp mediump 3-component vector of float)\r
+0:382              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:382              Constant:\r
+0:382                2 (const int)\r
+0:382            Sequence\r
+0:382              Constant:\r
+0:382                0 (const int)\r
+0:382              Constant:\r
+0:382                1 (const int)\r
+0:384      'res3' (temp mediump 3-component vector of float)\r
+0:385      move second child to first child (temp mediump 3-component vector of float)\r
+0:385        'res3' (temp mediump 3-component vector of float)\r
+0:385        interpolateAtSample (global mediump 3-component vector of float)\r
+0:385          indirect index (smooth sample temp mediump 3-component vector of float)\r
+0:385            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:385            'i' (uniform mediump int)\r
+0:385          Constant:\r
+0:385            0 (const int)\r
+0:386      move second child to first child (temp mediump 2-component vector of float)\r
+0:386        'res2' (temp mediump 2-component vector of float)\r
+0:386        interpolateAtSample (global mediump 2-component vector of float)\r
+0:386          vector swizzle (temp mediump 2-component vector of float)\r
+0:386            direct index (smooth sample temp mediump 3-component vector of float)\r
+0:386              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:386              Constant:\r
+0:386                2 (const int)\r
+0:386            Sequence\r
+0:386              Constant:\r
+0:386                0 (const int)\r
+0:386              Constant:\r
+0:386                1 (const int)\r
+0:386          Constant:\r
+0:386            2 (const int)\r
+0:387      move second child to first child (temp mediump float)\r
+0:387        'res' (temp mediump float)\r
+0:387        interpolateAtSample (global mediump float)\r
+0:387          'scalarIn' (smooth in mediump float)\r
+0:387          Constant:\r
+0:387            1 (const int)\r
+0:389      'res3' (temp mediump 3-component vector of float)\r
+0:390      move second child to first child (temp mediump 3-component vector of float)\r
+0:390        'res3' (temp mediump 3-component vector of float)\r
+0:390        interpolateAtOffset (global mediump 3-component vector of float)\r
+0:390          direct index (smooth sample temp mediump 3-component vector of float)\r
+0:390            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:390            Constant:\r
+0:390              2 (const int)\r
+0:390          Constant:\r
+0:390            0.200000\r
+0:390            0.200000\r
+0:391      move second child to first child (temp mediump 2-component vector of float)\r
+0:391        'res2' (temp mediump 2-component vector of float)\r
+0:391        interpolateAtOffset (global mediump 2-component vector of float)\r
+0:391          vector swizzle (temp mediump 2-component vector of float)\r
+0:391            direct index (smooth sample temp mediump 3-component vector of float)\r
+0:391              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:391              Constant:\r
+0:391                2 (const int)\r
+0:391            Sequence\r
+0:391              Constant:\r
+0:391                0 (const int)\r
+0:391              Constant:\r
+0:391                1 (const int)\r
+0:391          Constant:\r
+0:391            0.200000\r
+0:391            0.200000\r
+0:392      move second child to first child (temp mediump float)\r
+0:392        'res' (temp mediump float)\r
+0:392        interpolateAtOffset (global mediump float)\r
+0:392          add (temp mediump float)\r
+0:392            'scalarIn' (smooth in mediump float)\r
+0:392            'scalarIn' (smooth in mediump float)\r
+0:392          Constant:\r
+0:392            0.200000\r
+0:392            0.200000\r
+0:393      move second child to first child (temp mediump float)\r
+0:393        'res' (temp mediump float)\r
+0:393        interpolateAtOffset (global mediump float)\r
+0:393          'scalarIn' (smooth in mediump float)\r
+0:393          Constant:\r
+0:393            0.200000\r
+0:393            0.200000\r
+0:396      move second child to first child (temp mediump float)\r
+0:396        'res' (temp mediump float)\r
+0:396        interpolateAtCentroid (global mediump float)\r
+0:396          'f' (temp mediump float)\r
+0:397      move second child to first child (temp mediump 4-component vector of float)\r
+0:397        'res4' (temp mediump 4-component vector of float)\r
+0:397        interpolateAtSample (global mediump 4-component vector of float)\r
+0:397          'outp' (out mediump 4-component vector of float)\r
+0:397          Constant:\r
+0:397            0 (const int)\r
 0:?   Linker Objects\r
 0:?     'gl_FragCoord' (smooth in mediump 4-component vector of float)\r
 0:?     'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)\r
@@ -818,6 +979,17 @@ ERROR: node is still EOpNull!
 0:?     'badIm2Df' (layout(rgba32f ) uniform highp image2D)\r
 0:?     'badIm2Du' (layout(rgba8ui ) uniform highp uimage2D)\r
 0:?     'badIm2Di' (layout(rgba16i ) uniform highp iimage2D)\r
+0:?     'colorSampInBad' (smooth sample in mediump 4-component vector of float)\r
+0:?     'colorCentroidBad' (centroid out mediump 4-component vector of float)\r
+0:?     'colorBadFlat' (flat out mediump 4-component vector of float)\r
+0:?     'colorBadSmooth' (smooth out mediump 4-component vector of float)\r
+0:?     'colorBadNo' (noperspective out mediump 4-component vector of float)\r
+0:?     'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:?     'scalarIn' (smooth in mediump float)\r
+0:?     'colorSampIn' (smooth sample in mediump 4-component vector of float)\r
+0:?     'colorSampleBad' (sample out mediump 4-component vector of float)\r
+0:?     'colorfsi' (flat sample in mediump 4-component vector of float)\r
+0:?     'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
 \r
 \r
 Linked fragment stage:\r
@@ -832,6 +1004,7 @@ Requested GL_OES_gpu_shader5
 Requested GL_OES_sample_variables\r
 Requested GL_OES_shader_image_atomic\r
 Requested GL_OES_shader_io_blocks\r
+Requested GL_OES_shader_multisample_interpolation\r
 gl_FragCoord pixel center is integer\r
 gl_FragCoord origin is upper left\r
 using early_fragment_tests\r
@@ -1459,6 +1632,143 @@ ERROR: node is still EOpNull!
 0:342        'badIm2Df' (layout(rgba32f ) uniform highp image2D)\r
 0:342        'P' (uniform mediump 2-component vector of int)\r
 0:342        'datf' (temp mediump float)\r
+0:353  Function Definition: badInterp( (global void)\r
+0:353    Function Parameters: \r
+0:355    Sequence\r
+0:355      interpolateAtCentroid (global mediump 2-component vector of float)\r
+0:355        'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:356      interpolateAtSample (global mediump 2-component vector of float)\r
+0:356        'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:356        Constant:\r
+0:356          1 (const int)\r
+0:357      interpolateAtOffset (global mediump 2-component vector of float)\r
+0:357        'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:357        Constant:\r
+0:357          0.200000\r
+0:357          0.200000\r
+0:369  Function Definition: interp( (global void)\r
+0:369    Function Parameters: \r
+0:?     Sequence\r
+0:376      move second child to first child (temp mediump 2-component vector of float)\r
+0:376        'res2' (temp mediump 2-component vector of float)\r
+0:376        interpolateAtCentroid (global mediump 2-component vector of float)\r
+0:376          'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:377      move second child to first child (temp mediump 4-component vector of float)\r
+0:377        'res4' (temp mediump 4-component vector of float)\r
+0:377        interpolateAtCentroid (global mediump 4-component vector of float)\r
+0:377          'colorSampIn' (smooth sample in mediump 4-component vector of float)\r
+0:378      move second child to first child (temp mediump 4-component vector of float)\r
+0:378        'res4' (temp mediump 4-component vector of float)\r
+0:378        interpolateAtCentroid (global mediump 4-component vector of float)\r
+0:378          'colorfsi' (flat sample in mediump 4-component vector of float)\r
+0:379      move second child to first child (temp mediump float)\r
+0:379        'res' (temp mediump float)\r
+0:379        interpolateAtCentroid (global mediump float)\r
+0:379          'scalarIn' (smooth in mediump float)\r
+0:380      'res3' (temp mediump 3-component vector of float)\r
+0:381      move second child to first child (temp mediump 3-component vector of float)\r
+0:381        'res3' (temp mediump 3-component vector of float)\r
+0:381        interpolateAtCentroid (global mediump 3-component vector of float)\r
+0:381          direct index (smooth sample temp mediump 3-component vector of float)\r
+0:381            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:381            Constant:\r
+0:381              2 (const int)\r
+0:382      move second child to first child (temp mediump 2-component vector of float)\r
+0:382        'res2' (temp mediump 2-component vector of float)\r
+0:382        interpolateAtCentroid (global mediump 2-component vector of float)\r
+0:382          vector swizzle (temp mediump 2-component vector of float)\r
+0:382            direct index (smooth sample temp mediump 3-component vector of float)\r
+0:382              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:382              Constant:\r
+0:382                2 (const int)\r
+0:382            Sequence\r
+0:382              Constant:\r
+0:382                0 (const int)\r
+0:382              Constant:\r
+0:382                1 (const int)\r
+0:384      'res3' (temp mediump 3-component vector of float)\r
+0:385      move second child to first child (temp mediump 3-component vector of float)\r
+0:385        'res3' (temp mediump 3-component vector of float)\r
+0:385        interpolateAtSample (global mediump 3-component vector of float)\r
+0:385          indirect index (smooth sample temp mediump 3-component vector of float)\r
+0:385            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:385            'i' (uniform mediump int)\r
+0:385          Constant:\r
+0:385            0 (const int)\r
+0:386      move second child to first child (temp mediump 2-component vector of float)\r
+0:386        'res2' (temp mediump 2-component vector of float)\r
+0:386        interpolateAtSample (global mediump 2-component vector of float)\r
+0:386          vector swizzle (temp mediump 2-component vector of float)\r
+0:386            direct index (smooth sample temp mediump 3-component vector of float)\r
+0:386              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:386              Constant:\r
+0:386                2 (const int)\r
+0:386            Sequence\r
+0:386              Constant:\r
+0:386                0 (const int)\r
+0:386              Constant:\r
+0:386                1 (const int)\r
+0:386          Constant:\r
+0:386            2 (const int)\r
+0:387      move second child to first child (temp mediump float)\r
+0:387        'res' (temp mediump float)\r
+0:387        interpolateAtSample (global mediump float)\r
+0:387          'scalarIn' (smooth in mediump float)\r
+0:387          Constant:\r
+0:387            1 (const int)\r
+0:389      'res3' (temp mediump 3-component vector of float)\r
+0:390      move second child to first child (temp mediump 3-component vector of float)\r
+0:390        'res3' (temp mediump 3-component vector of float)\r
+0:390        interpolateAtOffset (global mediump 3-component vector of float)\r
+0:390          direct index (smooth sample temp mediump 3-component vector of float)\r
+0:390            'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:390            Constant:\r
+0:390              2 (const int)\r
+0:390          Constant:\r
+0:390            0.200000\r
+0:390            0.200000\r
+0:391      move second child to first child (temp mediump 2-component vector of float)\r
+0:391        'res2' (temp mediump 2-component vector of float)\r
+0:391        interpolateAtOffset (global mediump 2-component vector of float)\r
+0:391          vector swizzle (temp mediump 2-component vector of float)\r
+0:391            direct index (smooth sample temp mediump 3-component vector of float)\r
+0:391              'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
+0:391              Constant:\r
+0:391                2 (const int)\r
+0:391            Sequence\r
+0:391              Constant:\r
+0:391                0 (const int)\r
+0:391              Constant:\r
+0:391                1 (const int)\r
+0:391          Constant:\r
+0:391            0.200000\r
+0:391            0.200000\r
+0:392      move second child to first child (temp mediump float)\r
+0:392        'res' (temp mediump float)\r
+0:392        interpolateAtOffset (global mediump float)\r
+0:392          add (temp mediump float)\r
+0:392            'scalarIn' (smooth in mediump float)\r
+0:392            'scalarIn' (smooth in mediump float)\r
+0:392          Constant:\r
+0:392            0.200000\r
+0:392            0.200000\r
+0:393      move second child to first child (temp mediump float)\r
+0:393        'res' (temp mediump float)\r
+0:393        interpolateAtOffset (global mediump float)\r
+0:393          'scalarIn' (smooth in mediump float)\r
+0:393          Constant:\r
+0:393            0.200000\r
+0:393            0.200000\r
+0:396      move second child to first child (temp mediump float)\r
+0:396        'res' (temp mediump float)\r
+0:396        interpolateAtCentroid (global mediump float)\r
+0:396          'f' (temp mediump float)\r
+0:397      move second child to first child (temp mediump 4-component vector of float)\r
+0:397        'res4' (temp mediump 4-component vector of float)\r
+0:397        interpolateAtSample (global mediump 4-component vector of float)\r
+0:397          'outp' (out mediump 4-component vector of float)\r
+0:397          Constant:\r
+0:397            0 (const int)\r
 0:?   Linker Objects\r
 0:?     'gl_FragCoord' (smooth in mediump 4-component vector of float)\r
 0:?     'v3' (layout(location=2 ) smooth in mediump 3-component vector of float)\r
@@ -1541,4 +1851,15 @@ ERROR: node is still EOpNull!
 0:?     'badIm2Df' (layout(rgba32f ) uniform highp image2D)\r
 0:?     'badIm2Du' (layout(rgba8ui ) uniform highp uimage2D)\r
 0:?     'badIm2Di' (layout(rgba16i ) uniform highp iimage2D)\r
+0:?     'colorSampInBad' (smooth sample in mediump 4-component vector of float)\r
+0:?     'colorCentroidBad' (centroid out mediump 4-component vector of float)\r
+0:?     'colorBadFlat' (flat out mediump 4-component vector of float)\r
+0:?     'colorBadSmooth' (smooth out mediump 4-component vector of float)\r
+0:?     'colorBadNo' (noperspective out mediump 4-component vector of float)\r
+0:?     'colorfc' (centroid flat in mediump 2-component vector of float)\r
+0:?     'scalarIn' (smooth in mediump float)\r
+0:?     'colorSampIn' (smooth sample in mediump 4-component vector of float)\r
+0:?     'colorSampleBad' (sample out mediump 4-component vector of float)\r
+0:?     'colorfsi' (flat sample in mediump 4-component vector of float)\r
+0:?     'sampInArray' (smooth sample in 4-element array of mediump 3-component vector of float)\r
 \r
index ecd6fd1..3833d75 100644 (file)
@@ -90,7 +90,11 @@ ERROR: 0:318: 'sampler/image' : type requires declaration of default precision q
 ERROR: 0:319: 'sampler/image' : type requires declaration of default precision qualifier \r
 ERROR: 0:339: 'textureSize' : no matching overloaded function found \r
 ERROR: 0:339: '=' :  cannot convert from 'const float' to 'temp highp 3-component vector of int'\r
-ERROR: 86 compilation errors.  No code generated.\r
+ERROR: 0:377: 'sample' : Reserved word. \r
+ERROR: 0:388: 'interpolateAtCentroid' : no matching overloaded function found \r
+ERROR: 0:389: 'interpolateAtSample' : no matching overloaded function found \r
+ERROR: 0:390: 'interpolateAtOffset' : no matching overloaded function found \r
+ERROR: 90 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 310\r
@@ -98,6 +102,7 @@ Requested GL_EXT_texture_buffer
 Requested GL_OES_gpu_shader5\r
 Requested GL_OES_shader_image_atomic\r
 Requested GL_OES_shader_io_blocks\r
+Requested GL_OES_shader_multisample_interpolation\r
 Requested GL_OES_texture_buffer\r
 Requested GL_OES_texture_cube_map_array\r
 Requested GL_OES_texture_storage_multisample_2d_array\r
@@ -852,6 +857,15 @@ ERROR: node is still EOpNull!
 0:374        Constant:\r
 0:374          5 (const uint)\r
 0:374        'datu' (temp highp uint)\r
+0:386  Function Definition: badInterp( (global void)\r
+0:386    Function Parameters: \r
+0:388    Sequence\r
+0:388      Constant:\r
+0:388        0.000000\r
+0:389      Constant:\r
+0:389        0.000000\r
+0:390      Constant:\r
+0:390        0.000000\r
 0:?   Linker Objects\r
 0:?     's' (shared highp 4-component vector of float)\r
 0:?     'v' (buffer highp 4-component vector of float)\r
@@ -953,6 +967,11 @@ ERROR: node is still EOpNull!
 0:?     'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
 0:?     'im2Di' (layout(r32i ) uniform highp iimage2D)\r
 0:?     'P' (uniform highp 2-component vector of int)\r
+0:?     'colorSampInBad' (smooth sample out highp 4-component vector of float)\r
+0:?     'colorSample' (smooth sample out highp 4-component vector of float)\r
+0:?     'colorfsi' (flat sample out highp 4-component vector of float)\r
+0:?     'sampInArray' (smooth sample out 4-element array of highp 3-component vector of float)\r
+0:?     'inv4' (in highp 4-component vector of float)\r
 0:?     'gl_VertexID' (gl_VertexId highp int VertexId)\r
 0:?     'gl_InstanceID' (gl_InstanceId highp int InstanceId)\r
 \r
@@ -965,6 +984,7 @@ Requested GL_EXT_texture_buffer
 Requested GL_OES_gpu_shader5\r
 Requested GL_OES_shader_image_atomic\r
 Requested GL_OES_shader_io_blocks\r
+Requested GL_OES_shader_multisample_interpolation\r
 Requested GL_OES_texture_buffer\r
 Requested GL_OES_texture_cube_map_array\r
 Requested GL_OES_texture_storage_multisample_2d_array\r
@@ -1719,6 +1739,15 @@ ERROR: node is still EOpNull!
 0:374        Constant:\r
 0:374          5 (const uint)\r
 0:374        'datu' (temp highp uint)\r
+0:386  Function Definition: badInterp( (global void)\r
+0:386    Function Parameters: \r
+0:388    Sequence\r
+0:388      Constant:\r
+0:388        0.000000\r
+0:389      Constant:\r
+0:389        0.000000\r
+0:390      Constant:\r
+0:390        0.000000\r
 0:?   Linker Objects\r
 0:?     's' (shared highp 4-component vector of float)\r
 0:?     'v' (buffer highp 4-component vector of float)\r
@@ -1820,6 +1849,11 @@ ERROR: node is still EOpNull!
 0:?     'im2Du' (layout(r32ui ) uniform highp uimage2D)\r
 0:?     'im2Di' (layout(r32i ) uniform highp iimage2D)\r
 0:?     'P' (uniform highp 2-component vector of int)\r
+0:?     'colorSampInBad' (smooth sample out highp 4-component vector of float)\r
+0:?     'colorSample' (smooth sample out highp 4-component vector of float)\r
+0:?     'colorfsi' (flat sample out highp 4-component vector of float)\r
+0:?     'sampInArray' (smooth sample out 4-element array of highp 3-component vector of float)\r
+0:?     'inv4' (in highp 4-component vector of float)\r
 0:?     'gl_VertexID' (gl_VertexId highp int VertexId)\r
 0:?     'gl_InstanceID' (gl_InstanceId highp int InstanceId)\r
 \r
index 7f15728..5ecb908 100644 (file)
@@ -15,11 +15,22 @@ ERROR: 0:54: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset,
 ERROR: 0:54: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]\r
 ERROR: 0:57: 'patch' : not supported in this stage: fragment\r
 ERROR: 0:58: 'patch' : not supported in this stage: fragment\r
+ERROR: 0:58: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output \r
 ERROR: 0:73: 'dFdxFine' : required extension not requested: GL_ARB_derivative_control\r
 ERROR: 0:74: 'dFdyCoarse' : required extension not requested: GL_ARB_derivative_control\r
 ERROR: 0:75: 'fwidthCoarse' : required extension not requested: GL_ARB_derivative_control\r
 ERROR: 0:75: 'fwidthFine' : required extension not requested: GL_ARB_derivative_control\r
-ERROR: 19 compilation errors.  No code generated.\r
+ERROR: 0:104: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output \r
+ERROR: 0:123: 'interpolateAtCentroid' : no matching overloaded function found \r
+ERROR: 0:125: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:127: 'interpolateAtSample' : no matching overloaded function found \r
+ERROR: 0:132: 'interpolateAtOffset' : no matching overloaded function found \r
+ERROR: 0:134: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:135: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:136: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:139: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 0:140: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element \r
+ERROR: 30 compilation errors.  No code generated.\r
 \r
 \r
 Shader version: 400\r
@@ -298,6 +309,99 @@ ERROR: node is still EOpNull!
 0:100        'u2' (temp 2-component vector of uint)\r
 0:100        UnpackUnorm4x8 (global 2-component vector of uint)\r
 0:100          'd' (temp double)\r
+0:117  Function Definition: interp( (global void)\r
+0:117    Function Parameters: \r
+0:119    Sequence\r
+0:119      interpolateAtCentroid (global 2-component vector of float)\r
+0:119        'colorfc' (centroid flat in 2-component vector of float)\r
+0:120      interpolateAtCentroid (global 4-component vector of float)\r
+0:120        'colorSampIn' (smooth sample in 4-component vector of float)\r
+0:121      interpolateAtCentroid (global 4-component vector of float)\r
+0:121        'colorfsi' (noperspective in 4-component vector of float)\r
+0:122      interpolateAtCentroid (global float)\r
+0:122        'scalarIn' (smooth in float)\r
+0:123      Constant:\r
+0:123        0.000000\r
+0:124      interpolateAtCentroid (global 3-component vector of float)\r
+0:124        direct index (smooth sample temp 3-component vector of float)\r
+0:124          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:124          Constant:\r
+0:124            2 (const int)\r
+0:125      interpolateAtCentroid (global 2-component vector of float)\r
+0:125        vector swizzle (temp 2-component vector of float)\r
+0:125          direct index (smooth sample temp 3-component vector of float)\r
+0:125            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:125            Constant:\r
+0:125              2 (const int)\r
+0:125          Sequence\r
+0:125            Constant:\r
+0:125              0 (const int)\r
+0:125            Constant:\r
+0:125              1 (const int)\r
+0:127      Constant:\r
+0:127        0.000000\r
+0:128      interpolateAtSample (global 3-component vector of float)\r
+0:128        indirect index (smooth sample temp 3-component vector of float)\r
+0:128          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:128          'i' (flat in int)\r
+0:128        Constant:\r
+0:128          0 (const int)\r
+0:129      interpolateAtSample (global float)\r
+0:129        x: direct index for structure (global float)\r
+0:129          's1' (smooth in structure{global float x})\r
+0:129          Constant:\r
+0:129            0 (const int)\r
+0:129        Constant:\r
+0:129          2 (const int)\r
+0:130      interpolateAtSample (global float)\r
+0:130        'scalarIn' (smooth in float)\r
+0:130        Constant:\r
+0:130          1 (const int)\r
+0:132      Constant:\r
+0:132        0.000000\r
+0:133      interpolateAtOffset (global 3-component vector of float)\r
+0:133        direct index (smooth sample temp 3-component vector of float)\r
+0:133          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:133          Constant:\r
+0:133            2 (const int)\r
+0:133        Constant:\r
+0:133          0.200000\r
+0:133          0.200000\r
+0:134      interpolateAtOffset (global 2-component vector of float)\r
+0:134        vector swizzle (temp 2-component vector of float)\r
+0:134          direct index (smooth sample temp 3-component vector of float)\r
+0:134            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:134            Constant:\r
+0:134              2 (const int)\r
+0:134          Sequence\r
+0:134            Constant:\r
+0:134              0 (const int)\r
+0:134            Constant:\r
+0:134              1 (const int)\r
+0:134        Constant:\r
+0:134          0.200000\r
+0:134          0.200000\r
+0:135      interpolateAtOffset (global float)\r
+0:135        add (temp float)\r
+0:135          'scalarIn' (smooth in float)\r
+0:135          'scalarIn' (smooth in float)\r
+0:135        Constant:\r
+0:135          0.200000\r
+0:135          0.200000\r
+0:136      interpolateAtOffset (global float)\r
+0:136        x: direct index for structure (global float)\r
+0:136          's2' (sample temp structure{global float x})\r
+0:136          Constant:\r
+0:136            0 (const int)\r
+0:136        Constant:\r
+0:136          0.200000\r
+0:136          0.200000\r
+0:139      interpolateAtCentroid (global float)\r
+0:139        'f' (temp float)\r
+0:140      interpolateAtSample (global 4-component vector of float)\r
+0:140        'outp' (out 4-component vector of float)\r
+0:140        Constant:\r
+0:140          0 (const int)\r
 0:?   Linker Objects\r
 0:?     'c2D' (smooth in 2-component vector of float)\r
 0:?     'i' (flat in int)\r
@@ -320,6 +424,14 @@ ERROR: node is still EOpNull!
 0:?     'in2' (smooth in 2-component vector of float)\r
 0:?     'in3' (smooth in 3-component vector of float)\r
 0:?     'in4' (smooth in 4-component vector of float)\r
+0:?     'colorSampIn' (smooth sample in 4-component vector of float)\r
+0:?     'colorSampleBad' (sample out 4-component vector of float)\r
+0:?     'colorfsi' (noperspective in 4-component vector of float)\r
+0:?     'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:?     'scalarIn' (smooth in float)\r
+0:?     'colorfc' (centroid flat in 2-component vector of float)\r
+0:?     's1' (smooth in structure{global float x})\r
+0:?     's2' (sample temp structure{global float x})\r
 \r
 \r
 Linked fragment stage:\r
@@ -601,6 +713,99 @@ ERROR: node is still EOpNull!
 0:100        'u2' (temp 2-component vector of uint)\r
 0:100        UnpackUnorm4x8 (global 2-component vector of uint)\r
 0:100          'd' (temp double)\r
+0:117  Function Definition: interp( (global void)\r
+0:117    Function Parameters: \r
+0:119    Sequence\r
+0:119      interpolateAtCentroid (global 2-component vector of float)\r
+0:119        'colorfc' (centroid flat in 2-component vector of float)\r
+0:120      interpolateAtCentroid (global 4-component vector of float)\r
+0:120        'colorSampIn' (smooth sample in 4-component vector of float)\r
+0:121      interpolateAtCentroid (global 4-component vector of float)\r
+0:121        'colorfsi' (noperspective in 4-component vector of float)\r
+0:122      interpolateAtCentroid (global float)\r
+0:122        'scalarIn' (smooth in float)\r
+0:123      Constant:\r
+0:123        0.000000\r
+0:124      interpolateAtCentroid (global 3-component vector of float)\r
+0:124        direct index (smooth sample temp 3-component vector of float)\r
+0:124          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:124          Constant:\r
+0:124            2 (const int)\r
+0:125      interpolateAtCentroid (global 2-component vector of float)\r
+0:125        vector swizzle (temp 2-component vector of float)\r
+0:125          direct index (smooth sample temp 3-component vector of float)\r
+0:125            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:125            Constant:\r
+0:125              2 (const int)\r
+0:125          Sequence\r
+0:125            Constant:\r
+0:125              0 (const int)\r
+0:125            Constant:\r
+0:125              1 (const int)\r
+0:127      Constant:\r
+0:127        0.000000\r
+0:128      interpolateAtSample (global 3-component vector of float)\r
+0:128        indirect index (smooth sample temp 3-component vector of float)\r
+0:128          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:128          'i' (flat in int)\r
+0:128        Constant:\r
+0:128          0 (const int)\r
+0:129      interpolateAtSample (global float)\r
+0:129        x: direct index for structure (global float)\r
+0:129          's1' (smooth in structure{global float x})\r
+0:129          Constant:\r
+0:129            0 (const int)\r
+0:129        Constant:\r
+0:129          2 (const int)\r
+0:130      interpolateAtSample (global float)\r
+0:130        'scalarIn' (smooth in float)\r
+0:130        Constant:\r
+0:130          1 (const int)\r
+0:132      Constant:\r
+0:132        0.000000\r
+0:133      interpolateAtOffset (global 3-component vector of float)\r
+0:133        direct index (smooth sample temp 3-component vector of float)\r
+0:133          'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:133          Constant:\r
+0:133            2 (const int)\r
+0:133        Constant:\r
+0:133          0.200000\r
+0:133          0.200000\r
+0:134      interpolateAtOffset (global 2-component vector of float)\r
+0:134        vector swizzle (temp 2-component vector of float)\r
+0:134          direct index (smooth sample temp 3-component vector of float)\r
+0:134            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:134            Constant:\r
+0:134              2 (const int)\r
+0:134          Sequence\r
+0:134            Constant:\r
+0:134              0 (const int)\r
+0:134            Constant:\r
+0:134              1 (const int)\r
+0:134        Constant:\r
+0:134          0.200000\r
+0:134          0.200000\r
+0:135      interpolateAtOffset (global float)\r
+0:135        add (temp float)\r
+0:135          'scalarIn' (smooth in float)\r
+0:135          'scalarIn' (smooth in float)\r
+0:135        Constant:\r
+0:135          0.200000\r
+0:135          0.200000\r
+0:136      interpolateAtOffset (global float)\r
+0:136        x: direct index for structure (global float)\r
+0:136          's2' (sample temp structure{global float x})\r
+0:136          Constant:\r
+0:136            0 (const int)\r
+0:136        Constant:\r
+0:136          0.200000\r
+0:136          0.200000\r
+0:139      interpolateAtCentroid (global float)\r
+0:139        'f' (temp float)\r
+0:140      interpolateAtSample (global 4-component vector of float)\r
+0:140        'outp' (out 4-component vector of float)\r
+0:140        Constant:\r
+0:140          0 (const int)\r
 0:?   Linker Objects\r
 0:?     'c2D' (smooth in 2-component vector of float)\r
 0:?     'i' (flat in int)\r
@@ -623,4 +828,12 @@ ERROR: node is still EOpNull!
 0:?     'in2' (smooth in 2-component vector of float)\r
 0:?     'in3' (smooth in 3-component vector of float)\r
 0:?     'in4' (smooth in 4-component vector of float)\r
+0:?     'colorSampIn' (smooth sample in 4-component vector of float)\r
+0:?     'colorSampleBad' (sample out 4-component vector of float)\r
+0:?     'colorfsi' (noperspective in 4-component vector of float)\r
+0:?     'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:?     'scalarIn' (smooth in float)\r
+0:?     'colorfc' (centroid flat in 2-component vector of float)\r
+0:?     's1' (smooth in structure{global float x})\r
+0:?     's2' (sample temp structure{global float x})\r
 \r
index fdc675f..6de68c7 100644 (file)
@@ -53,6 +53,20 @@ ERROR: 48 compilation errors.  No code generated.
 \r
 Shader version: 440\r
 ERROR: node is still EOpNull!\r
+0:144  Function Definition: interp( (global void)\r
+0:144    Function Parameters: \r
+0:146    Sequence\r
+0:146      interpolateAtCentroid (global 2-component vector of float)\r
+0:146        vector swizzle (temp 2-component vector of float)\r
+0:146          direct index (smooth sample temp 3-component vector of float)\r
+0:146            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:146            Constant:\r
+0:146              2 (const int)\r
+0:146          Sequence\r
+0:146            Constant:\r
+0:146              0 (const int)\r
+0:146            Constant:\r
+0:146              1 (const int)\r
 0:?   Linker Objects\r
 0:?     'a' (layout(location=4 component=2 ) smooth in 2-component vector of float)\r
 0:?     'b' (layout(location=4 component=1 ) smooth in float)\r
@@ -88,6 +102,7 @@ ERROR: node is still EOpNull!
 0:?     'specExample4301' (layout(column_major std430 align=128 ) uniform block{layout(column_major std430 offset=0 align=128 ) uniform 4-component vector of float a, layout(column_major std430 offset=128 align=128 ) uniform 3-component vector of float b, layout(column_major std430 offset=256 align=128 ) uniform 2-component vector of float d, layout(column_major std430 offset=512 align=128 ) uniform float e, layout(column_major std430 offset=520 align=8 ) uniform double f, layout(column_major std430 offset=640 align=128 ) uniform float h, layout(column_major std430 offset=768 align=128 ) uniform 3-component vector of double i})\r
 0:?     'aconst' (global 4-element array of int)\r
 0:?     'bconst' (global 64-element array of int)\r
+0:?     'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
 \r
 \r
 Linked fragment stage:\r
@@ -96,6 +111,20 @@ ERROR: Linking fragment stage: Missing entry point: Each stage requires one "voi
 \r
 Shader version: 440\r
 ERROR: node is still EOpNull!\r
+0:144  Function Definition: interp( (global void)\r
+0:144    Function Parameters: \r
+0:146    Sequence\r
+0:146      interpolateAtCentroid (global 2-component vector of float)\r
+0:146        vector swizzle (temp 2-component vector of float)\r
+0:146          direct index (smooth sample temp 3-component vector of float)\r
+0:146            'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
+0:146            Constant:\r
+0:146              2 (const int)\r
+0:146          Sequence\r
+0:146            Constant:\r
+0:146              0 (const int)\r
+0:146            Constant:\r
+0:146              1 (const int)\r
 0:?   Linker Objects\r
 0:?     'a' (layout(location=4 component=2 ) smooth in 2-component vector of float)\r
 0:?     'b' (layout(location=4 component=1 ) smooth in float)\r
@@ -131,4 +160,5 @@ ERROR: node is still EOpNull!
 0:?     'specExample4301' (layout(column_major std430 align=128 ) uniform block{layout(column_major std430 offset=0 align=128 ) uniform 4-component vector of float a, layout(column_major std430 offset=128 align=128 ) uniform 3-component vector of float b, layout(column_major std430 offset=256 align=128 ) uniform 2-component vector of float d, layout(column_major std430 offset=512 align=128 ) uniform float e, layout(column_major std430 offset=520 align=8 ) uniform double f, layout(column_major std430 offset=640 align=128 ) uniform float h, layout(column_major std430 offset=768 align=128 ) uniform 3-component vector of double i})\r
 0:?     'aconst' (global 4-element array of int)\r
 0:?     'bconst' (global 64-element array of int)\r
+0:?     'sampInArray' (smooth sample in 4-element array of 3-component vector of float)\r
 \r
index 103f0df..9d9d28a 100644 (file)
@@ -226,6 +226,10 @@ enum TOperator {
     EOpDPdyCoarse,      // Fragment only
     EOpFwidthCoarse,    // Fragment only
 
+    EOpInterpolateAtCentroid, // Fragment only
+    EOpInterpolateAtSample,   // Fragment only
+    EOpInterpolateAtOffset,   // Fragment only
+
     EOpMatrixTimesMatrix,
     EOpOuterProduct,
     EOpDeterminant,
index c76f907..a4c86e8 100644 (file)
@@ -2,5 +2,5 @@
 // For the version, it uses the latest git tag followed by the number of commits.
 // For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "3.0.730"
-#define GLSLANG_DATE "21-Aug-2015"
+#define GLSLANG_REVISION "3.0.732"
+#define GLSLANG_DATE "22-Aug-2015"
index 0ea99f0..0411a46 100644 (file)
@@ -1185,6 +1185,28 @@ void TBuiltIns::initialize(int version, EProfile profile)
             "\n");
     }
 
+    // GL_OES_shader_multisample_interpolation
+    if ((profile == EEsProfile && version >= 310) ||
+        (profile != EEsProfile && version >= 400)) {
+        stageBuiltins[EShLangFragment].append(
+            "float interpolateAtCentroid(float);"
+            "vec2  interpolateAtCentroid(vec2);"
+            "vec3  interpolateAtCentroid(vec3);"
+            "vec4  interpolateAtCentroid(vec4);"
+
+            "float interpolateAtSample(float, int);"
+            "vec2  interpolateAtSample(vec2,  int);"
+            "vec3  interpolateAtSample(vec3,  int);"
+            "vec4  interpolateAtSample(vec4,  int);"
+
+            "float interpolateAtOffset(float, vec2);"
+            "vec2  interpolateAtOffset(vec2,  vec2);"
+            "vec3  interpolateAtOffset(vec3,  vec2);"
+            "vec4  interpolateAtOffset(vec4,  vec2);"
+
+            "\n");
+    }
+
     //============================================================================
     //
     // Standard Uniforms
@@ -3009,8 +3031,12 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb
                 symbolTable.setFunctionExtensions("dFdy",   1, &E_GL_OES_standard_derivatives);
                 symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_OES_standard_derivatives);
             }
-            if (version >= 310)
+            if (version >= 310) {
                 symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
+                symbolTable.setFunctionExtensions("interpolateAtCentroid", 1, &E_GL_OES_shader_multisample_interpolation);
+                symbolTable.setFunctionExtensions("interpolateAtSample",   1, &E_GL_OES_shader_multisample_interpolation);
+                symbolTable.setFunctionExtensions("interpolateAtOffset",   1, &E_GL_OES_shader_multisample_interpolation);
+            }
         } else if (version < 130) {
             symbolTable.setFunctionExtensions("texture1DLod",        1, &E_GL_ARB_shader_texture_lod);
             symbolTable.setFunctionExtensions("texture2DLod",        1, &E_GL_ARB_shader_texture_lod);
@@ -3351,6 +3377,9 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb
             symbolTable.relateToOperator("dFdyCoarse",   EOpDPdyCoarse);
             symbolTable.relateToOperator("fwidthCoarse", EOpFwidthCoarse);
         }
+        symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid);
+        symbolTable.relateToOperator("interpolateAtSample",   EOpInterpolateAtSample);
+        symbolTable.relateToOperator("interpolateAtOffset",   EOpInterpolateAtOffset);
         break;
 
     case EShLangCompute:
index ac0a302..35be93b 100644 (file)
@@ -861,6 +861,35 @@ TIntermTyped* TIntermediate::addSwizzle(TVectorFields& fields, const TSourceLoc&
 }
 
 //
+// Follow the left branches down to the root of an l-value
+// expression (just "." and []).
+//
+// Return the base of the l-value (where following indexing quits working).
+// Return nullptr if a chain following dereferences cannot be followed.
+//
+// 'swizzleOkay' says whether or not it is okay to consider a swizzle 
+// a valid part of the dereference chain.
+//
+const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool swizzleOkay)
+{
+    do {
+        const TIntermBinary* binary = node->getAsBinaryNode();
+        if (binary == nullptr)
+            return node;
+        TOperator op = binary->getOp();
+        if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle)
+            return nullptr;
+        if (! swizzleOkay) {
+            if (op == EOpVectorSwizzle)
+                return nullptr;
+            if ((op == EOpIndexDirect || op == EOpIndexIndirect) && binary->getLeft()->getType().isVector() && ! binary->getLeft()->getType().isArray())
+                return nullptr;
+        }
+        node = node->getAsBinaryNode()->getLeft();
+    } while (true);
+}
+
+//
 // Create loop nodes.
 //
 TIntermLoop* TIntermediate::addLoop(TIntermNode* body, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc)
index c31396d..f983313 100644 (file)
@@ -1485,6 +1485,30 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
         break;
     }
 
+    case EOpInterpolateAtCentroid:
+    case EOpInterpolateAtSample:
+    case EOpInterpolateAtOffset:
+        // "For the interpolateAt* functions, the call will return a precision
+        // qualification matching the precision of the 'interpolant' argument to
+        // the function call."
+        callNode.getQualifier().precision = arg0->getQualifier().precision;
+
+        // Make sure the first argument is an interpolant, or an array element of an interpolant
+        if (arg0->getType().getQualifier().storage != EvqVaryingIn) {
+            // It might still be an array element.
+            //
+            // We could check more, but the semantics of the first argument are already met; the
+            // only way to turn an array into a float/vec* is array dereference and swizzle.
+            //
+            // ES and desktop 4.3 and earlier:  swizzles may not be used
+            // desktop 4.4 and later: swizzles may be used
+            bool swizzleOkay = (profile != EEsProfile) && (version >= 440);
+            const TIntermTyped* base = TIntermediate::findLValueBase(arg0, swizzleOkay);
+            if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn)
+                error(loc, "first argument must be an interpolant, or interpolant-array element", fnCandidate.getName().c_str(), "");
+        }
+        break;
+
     default:
         break;
     }
@@ -2456,6 +2480,10 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
                 error(loc, "cannot be a matrix", GetStorageQualifierString(qualifier.storage), "");
                 return;
             }
+            if (qualifier.isAuxiliary())
+                error(loc, "can't use auxiliary qualifier on a fragment output", "centroid/sample/patch", "");
+            if (qualifier.isInterpolation())
+                error(loc, "can't use interpolation qualifier on a fragment output", "flat/smooth/noperspective", "");
         break;
 
         case EShLangCompute:
index 4a4cd47..325a9a9 100644 (file)
@@ -738,6 +738,10 @@ int TScanContext::tokenizeIdentifier()
         return es30ReservedFromGLSL(400);
 
     case SAMPLE:
+        if (parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
+            return keyword;
+        return es30ReservedFromGLSL(400);
+
     case SUBROUTINE:
         return es30ReservedFromGLSL(400);
 
index b0a3718..a269ea3 100644 (file)
@@ -183,7 +183,7 @@ void TParseContext::initializeExtensionBehavior()
     extensionBehavior[E_GL_KHR_blend_equation_advanced]              = EBhDisablePartial;
     extensionBehavior[E_GL_OES_sample_variables]                     = EBhDisable;
     extensionBehavior[E_GL_OES_shader_image_atomic]                  = EBhDisable;
-    extensionBehavior[E_GL_OES_shader_multisample_interpolation]     = EBhDisablePartial;
+    extensionBehavior[E_GL_OES_shader_multisample_interpolation]     = EBhDisable;
     extensionBehavior[E_GL_OES_texture_storage_multisample_2d_array] = EBhDisable;
     extensionBehavior[E_GL_EXT_geometry_shader]                      = EBhDisable;
     extensionBehavior[E_GL_EXT_geometry_point_size]                  = EBhDisable;
index 5c302b9..7edae38 100644 (file)
@@ -286,6 +286,9 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node)
     case EOpDPdxCoarse:     out.debug << "dPdxCoarse";           break;
     case EOpDPdyCoarse:     out.debug << "dPdyCoarse";           break;
     case EOpFwidthCoarse:   out.debug << "fwidthCoarse";         break;
+
+    case EOpInterpolateAtCentroid: out.debug << "interpolateAtCentroid";  break;
+
     case EOpDeterminant:    out.debug << "determinant";          break;
     case EOpMatrixInverse:  out.debug << "inverse";              break;
     case EOpTranspose:      out.debug << "transpose";            break;
@@ -473,8 +476,11 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
     case EOpBitfieldInsert:             out.debug << "bitfieldInsert";        break;
 
     case EOpFma:                        out.debug << "fma";                   break;
-    case EOpFrexp:                        out.debug << "frexp";                 break;
-    case EOpLdexp:                        out.debug << "ldexp";                 break;
+    case EOpFrexp:                      out.debug << "frexp";                 break;
+    case EOpLdexp:                      out.debug << "ldexp";                 break;
+
+    case EOpInterpolateAtSample:   out.debug << "interpolateAtSample";    break;
+    case EOpInterpolateAtOffset:   out.debug << "interpolateAtOffset";    break;
 
     default: out.debug.message(EPrefixError, "Bad aggregation op");
     }
index 8e4e381..627f503 100644 (file)
@@ -192,6 +192,9 @@ public:
     TIntermTyped* foldDereference(TIntermTyped* node, int index, const TSourceLoc&);
     TIntermTyped* foldSwizzle(TIntermTyped* node, TVectorFields& fields, const TSourceLoc&);
 
+    // Tree ops
+    static const TIntermTyped* findLValueBase(const TIntermTyped*, bool swizzleOkay);
+
     // Linkage related
     void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&);
     void addSymbolLinkageNode(TIntermAggregate*& linkage, TSymbolTable&, const TString&);