From a39159a1921367fb0adc4dc20a3767e56e911084 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Sun, 16 Aug 2015 21:10:38 -0600 Subject: [PATCH] Implement GL_OES_texture_storage_multisample_2d_array. --- Test/310.vert | 34 ++++++++ Test/baseResults/310.vert.out | 135 +++++++++++++++++++++++++++++- glslang/Include/revision.h | 2 +- glslang/MachineIndependent/Initialize.cpp | 2 +- glslang/MachineIndependent/Scan.cpp | 2 + glslang/MachineIndependent/Versions.cpp | 2 +- 6 files changed, 173 insertions(+), 4 deletions(-) diff --git a/Test/310.vert b/Test/310.vert index 53f5461..5b25f3f 100644 --- a/Test/310.vert +++ b/Test/310.vert @@ -305,3 +305,37 @@ void CAT() highp ivec3 s2 = imageSize(CA2); highp ivec3 s3 = imageSize(CA3); } + +uniform sampler2DMSArray bad2DMS; // ERROR, reserved +uniform isampler2DMSArray bad2DMSi; // ERROR, reserved +uniform usampler2DMSArray bad2DMSu; // ERROR, reserved + +#extension GL_OES_texture_storage_multisample_2d_array : enable + +#ifdef GL_OES_texture_storage_multisample_2d_array + +uniform sampler2DMSArray noPrec2DMS; // ERROR, no default +uniform isampler2DMSArray noPrec2DMSi; // ERROR, no default +uniform usampler2DMSArray noPrec2DMSu; // ERROR, no default + +#endif + +precision highp sampler2DMSArray; +precision highp isampler2DMSArray; +precision highp usampler2DMSArray; + +uniform sampler2DMSArray samp2DMSA; +uniform isampler2DMSArray samp2DMSAi; +uniform usampler2DMSArray samp2DMSAu; + +void MSA() +{ + vec4 tf = texelFetch(samp2DMSA, ivec3(5), 2); + ivec4 tfi = texelFetch(samp2DMSAi, ivec3(5), 2); + uvec4 tfu = texelFetch(samp2DMSAu, ivec3(5), 2); + + ivec3 tfs = textureSize(samp2DMSA); + ivec3 tfsi = textureSize(samp2DMSAi); + ivec3 tfsb = textureSize(samp2DMSAi, 4); // ERROR, no lod + ivec3 tfsu = textureSize(samp2DMSAu); +} diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out index 208cd56..315c6b0 100644 --- a/Test/baseResults/310.vert.out +++ b/Test/baseResults/310.vert.out @@ -79,7 +79,18 @@ ERROR: 0:250: 'sampler/image' : type requires declaration of default precision q ERROR: 0:251: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:252: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:253: 'sampler/image' : type requires declaration of default precision qualifier -ERROR: 75 compilation errors. No code generated. +ERROR: 0:309: 'sampler2DMSArray' : Reserved word. +ERROR: 0:309: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:310: 'isampler2DMSArray' : Reserved word. +ERROR: 0:310: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:311: 'usampler2DMSArray' : Reserved word. +ERROR: 0:311: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:317: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:318: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:319: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:339: 'textureSize' : no matching overloaded function found +ERROR: 0:339: '=' : cannot convert from 'const float' to 'temp highp 3-component vector of int' +ERROR: 86 compilation errors. No code generated. Shader version: 310 @@ -88,6 +99,7 @@ Requested GL_OES_gpu_shader5 Requested GL_OES_shader_io_blocks Requested GL_OES_texture_buffer Requested GL_OES_texture_cube_map_array +Requested GL_OES_texture_storage_multisample_2d_array ERROR: node is still EOpNull! 0:12 Function Definition: main( (global void) 0:12 Function Parameters: @@ -713,6 +725,57 @@ ERROR: node is still EOpNull! 0:306 's3' (temp highp 3-component vector of int) 0:306 Function Call: imageSize(uIAC1; (global highp 3-component vector of int) 0:306 'CA3' (writeonly uniform highp uimageCubeArray) +0:331 Function Definition: MSA( (global void) +0:331 Function Parameters: +0:333 Sequence +0:333 Sequence +0:333 move second child to first child (temp highp 4-component vector of float) +0:333 'tf' (temp highp 4-component vector of float) +0:333 Function Call: texelFetch(sA2M1;vi3;i1; (global highp 4-component vector of float) +0:333 'samp2DMSA' (uniform highp sampler2DMSArray) +0:333 Constant: +0:333 5 (const int) +0:333 5 (const int) +0:333 5 (const int) +0:333 Constant: +0:333 2 (const int) +0:334 Sequence +0:334 move second child to first child (temp highp 4-component vector of int) +0:334 'tfi' (temp highp 4-component vector of int) +0:334 Function Call: texelFetch(isA2M1;vi3;i1; (global highp 4-component vector of int) +0:334 'samp2DMSAi' (uniform highp isampler2DMSArray) +0:334 Constant: +0:334 5 (const int) +0:334 5 (const int) +0:334 5 (const int) +0:334 Constant: +0:334 2 (const int) +0:335 Sequence +0:335 move second child to first child (temp highp 4-component vector of uint) +0:335 'tfu' (temp highp 4-component vector of uint) +0:335 Function Call: texelFetch(usA2M1;vi3;i1; (global highp 4-component vector of uint) +0:335 'samp2DMSAu' (uniform highp usampler2DMSArray) +0:335 Constant: +0:335 5 (const int) +0:335 5 (const int) +0:335 5 (const int) +0:335 Constant: +0:335 2 (const int) +0:337 Sequence +0:337 move second child to first child (temp highp 3-component vector of int) +0:337 'tfs' (temp highp 3-component vector of int) +0:337 Function Call: textureSize(sA2M1; (global highp 3-component vector of int) +0:337 'samp2DMSA' (uniform highp sampler2DMSArray) +0:338 Sequence +0:338 move second child to first child (temp highp 3-component vector of int) +0:338 'tfsi' (temp highp 3-component vector of int) +0:338 Function Call: textureSize(isA2M1; (global highp 3-component vector of int) +0:338 'samp2DMSAi' (uniform highp isampler2DMSArray) +0:340 Sequence +0:340 move second child to first child (temp highp 3-component vector of int) +0:340 'tfsu' (temp highp 3-component vector of int) +0:340 Function Call: textureSize(usA2M1; (global highp 3-component vector of int) +0:340 'samp2DMSAu' (uniform highp usampler2DMSArray) 0:? Linker Objects 0:? 's' (shared highp 4-component vector of float) 0:? 'v' (buffer highp 4-component vector of float) @@ -801,6 +864,15 @@ ERROR: node is still EOpNull! 0:? 'CA5' (uniform highp samplerCubeArrayShadow) 0:? 'CA6' (uniform highp isamplerCubeArray) 0:? 'CA7' (uniform highp usamplerCubeArray) +0:? 'bad2DMS' (uniform mediump sampler2DMSArray) +0:? 'bad2DMSi' (uniform mediump isampler2DMSArray) +0:? 'bad2DMSu' (uniform mediump usampler2DMSArray) +0:? 'noPrec2DMS' (uniform mediump sampler2DMSArray) +0:? 'noPrec2DMSi' (uniform mediump isampler2DMSArray) +0:? 'noPrec2DMSu' (uniform mediump usampler2DMSArray) +0:? 'samp2DMSA' (uniform highp sampler2DMSArray) +0:? 'samp2DMSAi' (uniform highp isampler2DMSArray) +0:? 'samp2DMSAu' (uniform highp usampler2DMSArray) 0:? 'gl_VertexID' (gl_VertexId highp int VertexId) 0:? 'gl_InstanceID' (gl_InstanceId highp int InstanceId) @@ -814,6 +886,7 @@ Requested GL_OES_gpu_shader5 Requested GL_OES_shader_io_blocks Requested GL_OES_texture_buffer Requested GL_OES_texture_cube_map_array +Requested GL_OES_texture_storage_multisample_2d_array ERROR: node is still EOpNull! 0:12 Function Definition: main( (global void) 0:12 Function Parameters: @@ -1439,6 +1512,57 @@ ERROR: node is still EOpNull! 0:306 's3' (temp highp 3-component vector of int) 0:306 Function Call: imageSize(uIAC1; (global highp 3-component vector of int) 0:306 'CA3' (writeonly uniform highp uimageCubeArray) +0:331 Function Definition: MSA( (global void) +0:331 Function Parameters: +0:333 Sequence +0:333 Sequence +0:333 move second child to first child (temp highp 4-component vector of float) +0:333 'tf' (temp highp 4-component vector of float) +0:333 Function Call: texelFetch(sA2M1;vi3;i1; (global highp 4-component vector of float) +0:333 'samp2DMSA' (uniform highp sampler2DMSArray) +0:333 Constant: +0:333 5 (const int) +0:333 5 (const int) +0:333 5 (const int) +0:333 Constant: +0:333 2 (const int) +0:334 Sequence +0:334 move second child to first child (temp highp 4-component vector of int) +0:334 'tfi' (temp highp 4-component vector of int) +0:334 Function Call: texelFetch(isA2M1;vi3;i1; (global highp 4-component vector of int) +0:334 'samp2DMSAi' (uniform highp isampler2DMSArray) +0:334 Constant: +0:334 5 (const int) +0:334 5 (const int) +0:334 5 (const int) +0:334 Constant: +0:334 2 (const int) +0:335 Sequence +0:335 move second child to first child (temp highp 4-component vector of uint) +0:335 'tfu' (temp highp 4-component vector of uint) +0:335 Function Call: texelFetch(usA2M1;vi3;i1; (global highp 4-component vector of uint) +0:335 'samp2DMSAu' (uniform highp usampler2DMSArray) +0:335 Constant: +0:335 5 (const int) +0:335 5 (const int) +0:335 5 (const int) +0:335 Constant: +0:335 2 (const int) +0:337 Sequence +0:337 move second child to first child (temp highp 3-component vector of int) +0:337 'tfs' (temp highp 3-component vector of int) +0:337 Function Call: textureSize(sA2M1; (global highp 3-component vector of int) +0:337 'samp2DMSA' (uniform highp sampler2DMSArray) +0:338 Sequence +0:338 move second child to first child (temp highp 3-component vector of int) +0:338 'tfsi' (temp highp 3-component vector of int) +0:338 Function Call: textureSize(isA2M1; (global highp 3-component vector of int) +0:338 'samp2DMSAi' (uniform highp isampler2DMSArray) +0:340 Sequence +0:340 move second child to first child (temp highp 3-component vector of int) +0:340 'tfsu' (temp highp 3-component vector of int) +0:340 Function Call: textureSize(usA2M1; (global highp 3-component vector of int) +0:340 'samp2DMSAu' (uniform highp usampler2DMSArray) 0:? Linker Objects 0:? 's' (shared highp 4-component vector of float) 0:? 'v' (buffer highp 4-component vector of float) @@ -1527,6 +1651,15 @@ ERROR: node is still EOpNull! 0:? 'CA5' (uniform highp samplerCubeArrayShadow) 0:? 'CA6' (uniform highp isamplerCubeArray) 0:? 'CA7' (uniform highp usamplerCubeArray) +0:? 'bad2DMS' (uniform mediump sampler2DMSArray) +0:? 'bad2DMSi' (uniform mediump isampler2DMSArray) +0:? 'bad2DMSu' (uniform mediump usampler2DMSArray) +0:? 'noPrec2DMS' (uniform mediump sampler2DMSArray) +0:? 'noPrec2DMSi' (uniform mediump isampler2DMSArray) +0:? 'noPrec2DMSu' (uniform mediump usampler2DMSArray) +0:? 'samp2DMSA' (uniform highp sampler2DMSArray) +0:? 'samp2DMSAi' (uniform highp isampler2DMSArray) +0:? 'samp2DMSAu' (uniform highp usampler2DMSArray) 0:? 'gl_VertexID' (gl_VertexId highp int VertexId) 0:? 'gl_InstanceID' (gl_InstanceId highp int InstanceId) diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index 981beeb..d5dfc84 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -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 "2.3.717" +#define GLSLANG_REVISION "2.3.718" #define GLSLANG_DATE "16-Aug-2015" diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 7330106..06e522e 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1862,7 +1862,7 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile) continue; if (dim == EsdBuffer && (shadow || arrayed || ms)) continue; - if (ms && arrayed && profile == EEsProfile) + if (ms && arrayed && profile == EEsProfile && version < 310) 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 3c26155..4a4cd47 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -900,6 +900,8 @@ int TScanContext::tokenizeIdentifier() case ISAMPLER2DMSARRAY: case USAMPLER2DMSARRAY: afterType = true; + if (parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array)) + return keyword; return es30ReservedFromGLSL(150); case SAMPLER1D: diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 504110b..dbd37cc 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -184,7 +184,7 @@ void TParseContext::initializeExtensionBehavior() extensionBehavior[E_GL_OES_sample_variables] = EBhDisablePartial; extensionBehavior[E_GL_OES_shader_image_atomic] = EBhDisablePartial; extensionBehavior[E_GL_OES_shader_multisample_interpolation] = EBhDisablePartial; - extensionBehavior[E_GL_OES_texture_storage_multisample_2d_array] = EBhDisablePartial; + 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; extensionBehavior[E_GL_EXT_gpu_shader5] = EBhDisable; -- 2.7.4