Add support for ARB_texture_multisample

GLSL Version : >= 140

Purpose:
Allow users to use features by enabling this extension, even in low versions.

Extension Name:
ARB_texture_multisample

Builtin-variables:
Nah

Builtin-functions:
Nah

Keywords:
      sampler2DMS, isampler2DMS, usampler2DMS,
      sampler2DMSArray, isampler2DMSArray, usampler2DMSArray

Reference:
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_texture_multisample.txt
This commit is contained in:
Chow 2019-11-26 16:28:52 +08:00
parent bd97b6f9f2
commit a8f9886cc6
5 changed files with 102 additions and 85 deletions

View File

@ -17,6 +17,7 @@ void main()
#error GL_ES is not set #error GL_ES is not set
#endif #endif
in struct S { float f; } s; // ERROR in struct S { float f; } s; // ERROR
float patch = 3.1; float patch = 3.1;
@ -51,3 +52,9 @@ float fooi()
{ {
return i1 + i2; return i1 + i2;
} }
uniform sampler2DMS aaa1; // ERROR
#extension GL_ARB_texture_multisample : enable
uniform sampler2DMS aaa2;

View File

@ -1,14 +1,15 @@
140.frag 140.frag
WARNING: 0:3: varying deprecated in version 130; may be removed in future release WARNING: 0:3: varying deprecated in version 130; may be removed in future release
ERROR: 0:17: '#error' : GL_ES is not set ERROR: 0:17: '#error' : GL_ES is not set
ERROR: 0:20: 'fragment-shader struct input' : not supported for this version or the enabled extensions ERROR: 0:21: 'fragment-shader struct input' : not supported for this version or the enabled extensions
ERROR: 0:24: 'location' : not supported for this version or the enabled extensions ERROR: 0:25: 'location' : not supported for this version or the enabled extensions
ERROR: 0:24: 'location qualifier on input' : not supported for this version or the enabled extensions ERROR: 0:25: 'location qualifier on input' : not supported for this version or the enabled extensions
ERROR: 0:26: 'location' : not supported for this version or the enabled extensions ERROR: 0:27: 'location' : not supported for this version or the enabled extensions
ERROR: 0:26: 'location qualifier on output' : not supported for this version or the enabled extensions ERROR: 0:27: 'location qualifier on output' : not supported for this version or the enabled extensions
ERROR: 0:40: 'assign' : l-value required "v" (can't modify shader input) ERROR: 0:41: 'assign' : l-value required "v" (can't modify shader input)
ERROR: 0:40: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. ERROR: 0:41: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters.
ERROR: 8 compilation errors. No code generated. ERROR: 0:56: '' : syntax error, unexpected IDENTIFIER, expecting LEFT_BRACE or COMMA or SEMICOLON
ERROR: 9 compilation errors. No code generated.
Shader version: 140 Shader version: 140
@ -25,80 +26,80 @@ ERROR: node is still EOpNull!
0:12 'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance) 0:12 'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance)
0:12 Constant: 0:12 Constant:
0:12 2 (const int) 0:12 2 (const int)
0:22 Sequence 0:23 Sequence
0:22 move second child to first child ( temp float) 0:23 move second child to first child ( temp float)
0:22 'patch' ( global float) 0:23 'patch' ( global float)
0:22 Constant: 0:23 Constant:
0:22 3.100000 0:23 3.100000
0:38 Function Definition: foo( ( global void) 0:39 Function Definition: foo( ( global void)
0:38 Function Parameters: 0:39 Function Parameters:
0:40 Sequence 0:41 Sequence
0:40 Sequence
0:40 move second child to first child ( temp 2-component vector of float)
0:40 'r1' ( temp 2-component vector of float)
0:40 modf ( global 2-component vector of float)
0:40 vector swizzle ( temp 2-component vector of float)
0:40 'v' ( smooth in 4-component vector of float)
0:40 Sequence
0:40 Constant:
0:40 0 (const int)
0:40 Constant:
0:40 1 (const int)
0:40 vector swizzle ( temp 2-component vector of float)
0:40 'v' ( smooth in 4-component vector of float)
0:40 Sequence
0:40 Constant:
0:40 2 (const int)
0:40 Constant:
0:40 3 (const int)
0:41 Sequence 0:41 Sequence
0:41 move second child to first child ( temp 2-component vector of float) 0:41 move second child to first child ( temp 2-component vector of float)
0:41 'r2' ( temp 2-component vector of float) 0:41 'r1' ( temp 2-component vector of float)
0:41 modf ( global 2-component vector of float) 0:41 modf ( global 2-component vector of float)
0:41 vector swizzle ( temp 2-component vector of float) 0:41 vector swizzle ( temp 2-component vector of float)
0:41 'o' ( out 4-component vector of float) 0:41 'v' ( smooth in 4-component vector of float)
0:41 Sequence 0:41 Sequence
0:41 Constant: 0:41 Constant:
0:41 0 (const int) 0:41 0 (const int)
0:41 Constant: 0:41 Constant:
0:41 1 (const int) 0:41 1 (const int)
0:41 vector swizzle ( temp 2-component vector of float) 0:41 vector swizzle ( temp 2-component vector of float)
0:41 'o' ( out 4-component vector of float) 0:41 'v' ( smooth in 4-component vector of float)
0:41 Sequence 0:41 Sequence
0:41 Constant: 0:41 Constant:
0:41 2 (const int) 0:41 2 (const int)
0:41 Constant: 0:41 Constant:
0:41 3 (const int) 0:41 3 (const int)
0:42 move second child to first child ( temp float) 0:42 Sequence
0:42 direct index ( temp float) 0:42 move second child to first child ( temp 2-component vector of float)
0:42 'o' ( out 4-component vector of float) 0:42 'r2' ( temp 2-component vector of float)
0:42 Constant: 0:42 modf ( global 2-component vector of float)
0:42 2 (const int) 0:42 vector swizzle ( temp 2-component vector of float)
0:42 Function Call: fooi( ( global float) 0:42 'o' ( out 4-component vector of float)
0:47 Sequence 0:42 Sequence
0:47 move second child to first child ( temp float) 0:42 Constant:
0:47 'i1' ( global float) 0:42 0 (const int)
0:47 Test condition and select ( temp float) 0:42 Constant:
0:47 Condition 0:42 1 (const int)
0:47 'gl_FrontFacing' ( gl_FrontFacing bool Face) 0:42 vector swizzle ( temp 2-component vector of float)
0:47 true case 0:42 'o' ( out 4-component vector of float)
0:47 Constant: 0:42 Sequence
0:47 -2.000000 0:42 Constant:
0:47 false case 0:42 2 (const int)
0:47 Constant: 0:42 Constant:
0:47 2.000000 0:42 3 (const int)
0:43 move second child to first child ( temp float)
0:43 direct index ( temp float)
0:43 'o' ( out 4-component vector of float)
0:43 Constant:
0:43 2 (const int)
0:43 Function Call: fooi( ( global float)
0:48 Sequence 0:48 Sequence
0:48 move second child to first child ( temp float) 0:48 move second child to first child ( temp float)
0:48 'i2' ( global float) 0:48 'i1' ( global float)
0:48 Constant: 0:48 Test condition and select ( temp float)
0:48 102.000000 0:48 Condition
0:50 Function Definition: fooi( ( global float) 0:48 'gl_FrontFacing' ( gl_FrontFacing bool Face)
0:50 Function Parameters: 0:48 true case
0:52 Sequence 0:48 Constant:
0:52 Branch: Return with expression 0:48 -2.000000
0:52 add ( temp float) 0:48 false case
0:52 'i1' ( global float) 0:48 Constant:
0:52 'i2' ( global float) 0:48 2.000000
0:49 Sequence
0:49 move second child to first child ( temp float)
0:49 'i2' ( global float)
0:49 Constant:
0:49 102.000000
0:51 Function Definition: fooi( ( global float)
0:51 Function Parameters:
0:53 Sequence
0:53 Branch: Return with expression
0:53 add ( temp float)
0:53 'i1' ( global float)
0:53 'i2' ( global float)
0:? Linker Objects 0:? Linker Objects
0:? 'v' ( smooth in 4-component vector of float) 0:? 'v' ( smooth in 4-component vector of float)
0:? 'i' ( smooth in 4-component vector of float) 0:? 'i' ( smooth in 4-component vector of float)
@ -131,28 +132,28 @@ ERROR: node is still EOpNull!
0:12 'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance) 0:12 'gl_ClipDistance' ( smooth in 5-element array of float ClipDistance)
0:12 Constant: 0:12 Constant:
0:12 2 (const int) 0:12 2 (const int)
0:22 Sequence 0:23 Sequence
0:22 move second child to first child ( temp float) 0:23 move second child to first child ( temp float)
0:22 'patch' ( global float) 0:23 'patch' ( global float)
0:22 Constant: 0:23 Constant:
0:22 3.100000 0:23 3.100000
0:47 Sequence
0:47 move second child to first child ( temp float)
0:47 'i1' ( global float)
0:47 Test condition and select ( temp float)
0:47 Condition
0:47 'gl_FrontFacing' ( gl_FrontFacing bool Face)
0:47 true case
0:47 Constant:
0:47 -2.000000
0:47 false case
0:47 Constant:
0:47 2.000000
0:48 Sequence 0:48 Sequence
0:48 move second child to first child ( temp float) 0:48 move second child to first child ( temp float)
0:48 'i2' ( global float) 0:48 'i1' ( global float)
0:48 Constant: 0:48 Test condition and select ( temp float)
0:48 102.000000 0:48 Condition
0:48 'gl_FrontFacing' ( gl_FrontFacing bool Face)
0:48 true case
0:48 Constant:
0:48 -2.000000
0:48 false case
0:48 Constant:
0:48 2.000000
0:49 Sequence
0:49 move second child to first child ( temp float)
0:49 'i2' ( global float)
0:49 Constant:
0:49 102.000000
0:? Linker Objects 0:? Linker Objects
0:? 'v' ( smooth in 4-component vector of float) 0:? 'v' ( smooth in 4-component vector of float)
0:? 'i' ( smooth in 4-component vector of float) 0:? 'i' ( smooth in 4-component vector of float)

View File

@ -1421,6 +1421,9 @@ int TScanContext::tokenizeIdentifier()
afterType = true; afterType = true;
if (parseContext.isEsProfile() && parseContext.version >= 310) if (parseContext.isEsProfile() && parseContext.version >= 310)
return keyword; return keyword;
if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
(parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
return keyword;
return es30ReservedFromGLSL(150); return es30ReservedFromGLSL(150);
case SAMPLER2DMSARRAY: case SAMPLER2DMSARRAY:
@ -1430,6 +1433,9 @@ int TScanContext::tokenizeIdentifier()
if ((parseContext.isEsProfile() && parseContext.version >= 320) || if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array)) parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array))
return keyword; return keyword;
if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
(parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
return keyword;
return es30ReservedFromGLSL(150); return es30ReservedFromGLSL(150);
case SAMPLER1D: case SAMPLER1D:

View File

@ -172,6 +172,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_ARB_tessellation_shader] = EBhDisable; extensionBehavior[E_GL_ARB_tessellation_shader] = EBhDisable;
extensionBehavior[E_GL_ARB_enhanced_layouts] = EBhDisable; extensionBehavior[E_GL_ARB_enhanced_layouts] = EBhDisable;
extensionBehavior[E_GL_ARB_texture_cube_map_array] = EBhDisable; extensionBehavior[E_GL_ARB_texture_cube_map_array] = EBhDisable;
extensionBehavior[E_GL_ARB_texture_multisample] = EBhDisable;
extensionBehavior[E_GL_ARB_shader_texture_lod] = EBhDisable; extensionBehavior[E_GL_ARB_shader_texture_lod] = EBhDisable;
extensionBehavior[E_GL_ARB_explicit_attrib_location] = EBhDisable; extensionBehavior[E_GL_ARB_explicit_attrib_location] = EBhDisable;
extensionBehavior[E_GL_ARB_explicit_uniform_location] = EBhDisable; extensionBehavior[E_GL_ARB_explicit_uniform_location] = EBhDisable;
@ -379,6 +380,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_ARB_tessellation_shader 1\n" "#define GL_ARB_tessellation_shader 1\n"
"#define GL_ARB_enhanced_layouts 1\n" "#define GL_ARB_enhanced_layouts 1\n"
"#define GL_ARB_texture_cube_map_array 1\n" "#define GL_ARB_texture_cube_map_array 1\n"
"#define GL_ARB_texture_multisample 1\n"
"#define GL_ARB_shader_texture_lod 1\n" "#define GL_ARB_shader_texture_lod 1\n"
"#define GL_ARB_explicit_attrib_location 1\n" "#define GL_ARB_explicit_attrib_location 1\n"
"#define GL_ARB_explicit_uniform_location 1\n" "#define GL_ARB_explicit_uniform_location 1\n"

View File

@ -124,6 +124,7 @@ const char* const E_GL_ARB_compute_shader = "GL_ARB_compute_shader
const char* const E_GL_ARB_tessellation_shader = "GL_ARB_tessellation_shader"; const char* const E_GL_ARB_tessellation_shader = "GL_ARB_tessellation_shader";
const char* const E_GL_ARB_enhanced_layouts = "GL_ARB_enhanced_layouts"; const char* const E_GL_ARB_enhanced_layouts = "GL_ARB_enhanced_layouts";
const char* const E_GL_ARB_texture_cube_map_array = "GL_ARB_texture_cube_map_array"; const char* const E_GL_ARB_texture_cube_map_array = "GL_ARB_texture_cube_map_array";
const char* const E_GL_ARB_texture_multisample = "GL_ARB_texture_multisample";
const char* const E_GL_ARB_shader_texture_lod = "GL_ARB_shader_texture_lod"; const char* const E_GL_ARB_shader_texture_lod = "GL_ARB_shader_texture_lod";
const char* const E_GL_ARB_explicit_attrib_location = "GL_ARB_explicit_attrib_location"; const char* const E_GL_ARB_explicit_attrib_location = "GL_ARB_explicit_attrib_location";
const char* const E_GL_ARB_explicit_uniform_location = "GL_ARB_explicit_uniform_location"; const char* const E_GL_ARB_explicit_uniform_location = "GL_ARB_explicit_uniform_location";