Commit 8ca60805 by Olli Etuaho Committed by Commit Bot

Add 2D MS array sampler support to compiler

This also places textureSize(gsampler2DMS) correctly in the ESSL 3.10 builtins instead of ESSL 3.00 builtins. BUG=angleproject:2775 TEST=angle_unittests Change-Id: Ieb0f7a7424a5558a5569af6d4fcbcc9b12ec9840 Reviewed-on: https://chromium-review.googlesource.com/1186466 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 4285647b
......@@ -71,13 +71,13 @@ enum ShShaderOutput
// The Compile options type is defined in ShaderVars.h, to allow ANGLE to import the ShaderVars
// header without needing the ShaderLang header. This avoids some conflicts with glslang.
const ShCompileOptions SH_VALIDATE = 0;
const ShCompileOptions SH_VALIDATE_LOOP_INDEXING = UINT64_C(1) << 0;
const ShCompileOptions SH_INTERMEDIATE_TREE = UINT64_C(1) << 1;
const ShCompileOptions SH_OBJECT_CODE = UINT64_C(1) << 2;
const ShCompileOptions SH_VARIABLES = UINT64_C(1) << 3;
const ShCompileOptions SH_LINE_DIRECTIVES = UINT64_C(1) << 4;
const ShCompileOptions SH_SOURCE_PATH = UINT64_C(1) << 5;
const ShCompileOptions SH_VALIDATE = 0;
const ShCompileOptions SH_VALIDATE_LOOP_INDEXING = UINT64_C(1) << 0;
const ShCompileOptions SH_INTERMEDIATE_TREE = UINT64_C(1) << 1;
const ShCompileOptions SH_OBJECT_CODE = UINT64_C(1) << 2;
const ShCompileOptions SH_VARIABLES = UINT64_C(1) << 3;
const ShCompileOptions SH_LINE_DIRECTIVES = UINT64_C(1) << 4;
const ShCompileOptions SH_SOURCE_PATH = UINT64_C(1) << 5;
// This flag will keep invariant declaration for input in fragment shader for GLSL >=4.20 on AMD.
// From GLSL >= 4.20, it's optional to add invariant for fragment input, but GPU vendors have
......@@ -313,6 +313,7 @@ struct ShBuiltInResources
int OVR_multiview;
int EXT_YUV_target;
int EXT_geometry_shader;
int ANGLE_texture_multisample_array;
// Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives
// with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate
......@@ -616,4 +617,4 @@ int GetGeometryShaderMaxVertices(const ShHandle handle);
} // namespace sh
#endif // GLSLANG_SHADERLANG_H_
#endif // GLSLANG_SHADERLANG_H_
......@@ -32,11 +32,11 @@
"DXGI format:src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py":
"2932a5e1c3c846be0169e29a4f9c72e8",
"ESSL static builtins:src/compiler/translator/builtin_function_declarations.txt":
"39b92f5a4d982873d3595b70049d5160",
"36f9636dbfbcd6508a4b76143c5e4540",
"ESSL static builtins:src/compiler/translator/builtin_variables.json":
"2c0e86ff9f92f79ada03f04206e63fba",
"ESSL static builtins:src/compiler/translator/gen_builtin_symbols.py":
"51afaa8fc47b537aa4e62552de9cc7c0",
"9a5226ee6573650897bdc21e1bb0bfd0",
"Emulated HLSL functions:src/compiler/translator/emulated_builtin_function_data_hlsl.json":
"002ad46d144c51fe98d73478aa554ba7",
"Emulated HLSL functions:src/compiler/translator/gen_emulated_builtin_function_tables.py":
......@@ -46,7 +46,7 @@
"GL copy conversion table:src/libANGLE/gen_copy_conversion_table.py":
"ac1afe23d9578bd1d2ef74f4a7aa927a",
"GL entry point:scripts/entry_point_packed_gl_enums.json":
"154df93d8af5156b1f434a7a1a84b671",
"803930a62d35ed9b83faba037f34e293",
"GL entry point:scripts/generate_entry_points.py":
"c502f05207c8a2eb27ae67e48b5d02c2",
"GL entry point:scripts/gl.xml":
......
......@@ -70,16 +70,19 @@ enum TBasicType
EbtSamplerExternal2DY2YEXT, // Only valid if GL_EXT_YUV_target exists.
EbtSampler2DRect, // Only valid if GL_ARB_texture_rectangle exists.
EbtSampler2DMS,
EbtSampler2DMSArray,
EbtISampler2D,
EbtISampler3D,
EbtISamplerCube,
EbtISampler2DArray,
EbtISampler2DMS,
EbtISampler2DMSArray,
EbtUSampler2D,
EbtUSampler3D,
EbtUSamplerCube,
EbtUSampler2DArray,
EbtUSampler2DMS,
EbtUSampler2DMSArray,
EbtSampler2DShadow,
EbtSamplerCubeShadow,
EbtSampler2DArrayShadow,
......
......@@ -13,6 +13,7 @@
#include <string.h>
#define LIST_EXTENSIONS(OP) \
OP(ANGLE_texture_multisample_array) \
OP(ARB_texture_rectangle) \
OP(ARM_shader_framebuffer_fetch) \
OP(EXT_blend_func_extended) \
......
......@@ -18,6 +18,7 @@ enum class TExtension
{
UNDEFINED, // Special value used to indicate no extension.
ANGLE_texture_multisample_array,
ARB_texture_rectangle,
ARM_shader_framebuffer_fetch,
EXT_blend_func_extended,
......
......@@ -73,6 +73,10 @@ void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavi
{
extBehavior[TExtension::EXT_geometry_shader] = EBhUndefined;
}
if (resources.ANGLE_texture_multisample_array)
{
extBehavior[TExtension::ANGLE_texture_multisample_array] = EBhUndefined;
}
}
void ResetExtensionBehavior(TExtensionBehavior &extBehavior)
......
......@@ -21,42 +21,42 @@ namespace BuiltInGroup
bool isTextureOffsetNoBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 662 && id <= 731;
return id >= 668 && id <= 737;
}
bool isTextureOffsetBias(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 732 && id <= 751;
return id >= 738 && id <= 757;
}
bool isTextureGatherOffset(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 823 && id <= 836;
return id >= 832 && id <= 845;
}
bool isTextureGather(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 799 && id <= 836;
return id >= 808 && id <= 845;
}
bool isAtomicMemory(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 853 && id <= 870;
return id >= 862 && id <= 879;
}
bool isImageLoad(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 895 && id <= 906;
return id >= 904 && id <= 915;
}
bool isImageStore(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 907 && id <= 918;
return id >= 916 && id <= 927;
}
bool isImage(const TFunction *func)
{
int id = func->uniqueId().get();
return id >= 871 && id <= 918;
return id >= 880 && id <= 927;
}
} // namespace BuiltInGroup
......
......@@ -17,8 +17,8 @@
#ifdef ANGLE_ENABLE_HLSL
#include "compiler/translator/TranslatorHLSL.h"
#endif // ANGLE_ENABLE_HLSL
#include "compiler/translator/VariablePacker.h"
#include "angle_gl.h"
#include "compiler/translator/VariablePacker.h"
namespace sh
{
......@@ -202,6 +202,7 @@ void InitBuiltInResources(ShBuiltInResources *resources)
resources->OVR_multiview = 0;
resources->EXT_YUV_target = 0;
resources->EXT_geometry_shader = 0;
resources->ANGLE_texture_multisample_array = 0;
resources->NV_draw_buffers = 0;
......@@ -269,7 +270,7 @@ void InitBuiltInResources(ShBuiltInResources *resources)
resources->MaxCombinedAtomicCounterBuffers = 1;
resources->MaxAtomicCounterBufferSize = 32;
resources->MaxUniformBufferBindings = 32;
resources->MaxUniformBufferBindings = 32;
resources->MaxShaderStorageBufferBindings = 4;
resources->MaxGeometryUniformComponents = 1024;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -52,6 +52,8 @@ const char *getBasicString(TBasicType t)
return "sampler2DArray";
case EbtSampler2DMS:
return "sampler2DMS";
case EbtSampler2DMSArray:
return "sampler2DMSArray";
case EbtISampler2D:
return "isampler2D";
case EbtISampler3D:
......@@ -62,6 +64,8 @@ const char *getBasicString(TBasicType t)
return "isampler2DArray";
case EbtISampler2DMS:
return "isampler2DMS";
case EbtISampler2DMSArray:
return "isampler2DMSArray";
case EbtUSampler2D:
return "usampler2D";
case EbtUSampler3D:
......@@ -72,6 +76,8 @@ const char *getBasicString(TBasicType t)
return "usampler2DArray";
case EbtUSampler2DMS:
return "usampler2DMS";
case EbtUSampler2DMSArray:
return "usampler2DMSArray";
case EbtSampler2DShadow:
return "sampler2DShadow";
case EbtSamplerCubeShadow:
......
......@@ -356,7 +356,6 @@ GROUP BEGIN TextureESSL300
ivec2 textureSize(sampler2DShadow, int);
ivec2 textureSize(samplerCubeShadow, int);
ivec3 textureSize(sampler2DArrayShadow, int);
ivec2 textureSize(gsampler2DMS);
gvec4 textureProjLod(gsampler2D, vec3, float);
gvec4 textureProjLod(gsampler2D, vec4, float);
gvec4 textureProjLod(gsampler3D, vec4, float);
......@@ -377,6 +376,16 @@ GROUP BEGIN TextureESSL300
float textureProjGrad(sampler2DShadow, vec4, vec2, vec2);
GROUP END TextureESSL300
GROUP BEGIN TextureSizeMS
DEFAULT METADATA {"level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
ivec2 textureSize(gsampler2DMS);
GROUP END TextureSizeMS
GROUP BEGIN TextureSizeMSArray
DEFAULT METADATA {"level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction", "extension": "ANGLE_texture_multisample_array"}
ivec3 textureSize(gsampler2DMSArray);
GROUP END TextureSizeMSArray
GROUP BEGIN TextureOffsetNoBias {"queryFunction": true}
DEFAULT METADATA {"level": "ESSL3_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 textureOffset(gsampler2D, vec2, ivec2);
......@@ -468,6 +477,11 @@ GROUP BEGIN TexelFetchMS
gvec4 texelFetch(gsampler2DMS, ivec2, int);
GROUP END TexelFetchMS
GROUP BEGIN TexelFetchMSArray
DEFAULT METADATA {"level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction", "extension": "ANGLE_texture_multisample_array"}
gvec4 texelFetch(gsampler2DMSArray, ivec3, int);
GROUP END TexelFetchMSArray
GROUP BEGIN TextureGather {"queryFunction": true}
DEFAULT METADATA {"level": "ESSL3_1_BUILTINS", "op": "CallBuiltInFunction"}
gvec4 textureGather(gsampler2D, vec2);
......
fe7f387068b72dc71759198547902721
\ No newline at end of file
981c1d80d682250a98834c8c1297e616
\ No newline at end of file
......@@ -298,16 +298,19 @@ basic_types_enumeration = [
'SamplerExternal2DY2YEXT',
'Sampler2DRect',
'Sampler2DMS',
'Sampler2DMSArray',
'ISampler2D',
'ISampler3D',
'ISamplerCube',
'ISampler2DArray',
'ISampler2DMS',
'ISampler2DMSArray',
'USampler2D',
'USampler3D',
'USamplerCube',
'USampler2DArray',
'USampler2DMS',
'USampler2DMSArray',
'Sampler2DShadow',
'SamplerCubeShadow',
'Sampler2DArrayShadow',
......
......@@ -85,6 +85,7 @@ static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int toke
static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
static int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token);
static int ES3_extension_keyword_else_ident(TParseContext *context, TExtension extension, int token);
static int ES2_ident_ES3_reserved_ES3_1_extension_keyword(TParseContext *context, TExtension extension, int token);
static int uint_constant(TParseContext *context);
static int int_constant(TParseContext *context);
static int float_constant(yyscan_t yyscanner);
......@@ -203,6 +204,9 @@ O [0-7]
"samplerCubeShadow" { return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
"sampler2DArrayShadow" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
"__samplerExternal2DY2YEXT" { return ES3_extension_keyword_else_ident(context, TExtension::EXT_YUV_target, SAMPLEREXTERNAL2DY2YEXT); }
"sampler2DMSArray" { return ES2_ident_ES3_reserved_ES3_1_extension_keyword(context, TExtension::ANGLE_texture_multisample_array, SAMPLER2DMSARRAY); }
"isampler2DMSArray" { return ES2_ident_ES3_reserved_ES3_1_extension_keyword(context, TExtension::ANGLE_texture_multisample_array, ISAMPLER2DMSARRAY); }
"usampler2DMSArray" { return ES2_ident_ES3_reserved_ES3_1_extension_keyword(context, TExtension::ANGLE_texture_multisample_array, USAMPLER2DMSARRAY); }
"struct" { return STRUCT; }
......@@ -267,10 +271,7 @@ O [0-7]
"usampler2DRect" |
"samplerBuffer" |
"isamplerBuffer" |
"usamplerBuffer" |
"sampler2DMSArray" |
"isampler2DMSArray" |
"usampler2DMSArray" {
"usamplerBuffer" {
if (context->getShaderVersion() < 300) {
yylval->lex.string = AllocatePoolCharArray(yytext, yyleng);
return check_type(yyscanner);
......@@ -577,6 +578,27 @@ int ES3_extension_keyword_else_ident(TParseContext *context, TExtension extensio
return check_type(yyscanner);
}
int ES2_ident_ES3_reserved_ES3_1_extension_keyword(TParseContext *context, TExtension extension, int token)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
yyscan_t yyscanner = (yyscan_t) context->getScanner();
// a keyword in GLSL ES 3.10 with enabled extension
if (context->getShaderVersion() >= 310 && context->isExtensionEnabled(extension))
{
return token;
}
// a reserved word in GLSL ES 3.00+
if (context->getShaderVersion() >= 300)
{
return reserved_word(yyscanner);
}
// Otherwise can be used as an identifier/type name
yylval->lex.string = AllocatePoolCharArray(yytext, yyleng);
return check_type(yyscanner);
}
int uint_constant(TParseContext *context)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
......
......@@ -173,6 +173,7 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons
%token <lex> ISAMPLER2D ISAMPLER3D ISAMPLERCUBE ISAMPLER2DARRAY
%token <lex> USAMPLER2D USAMPLER3D USAMPLERCUBE USAMPLER2DARRAY
%token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
%token <lex> SAMPLER2DMSARRAY ISAMPLER2DMSARRAY USAMPLER2DMSARRAY
%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW
%token <lex> SAMPLEREXTERNAL2DY2YEXT
%token <lex> IMAGE2D IIMAGE2D UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
......@@ -1084,6 +1085,9 @@ type_specifier_nonarray
| SAMPLER2DMS {
$$.initialize(EbtSampler2DMS, @1);
}
| SAMPLER2DMSARRAY {
$$.initialize(EbtSampler2DMSArray, @1);
}
| ISAMPLER2D {
$$.initialize(EbtISampler2D, @1);
}
......@@ -1099,6 +1103,9 @@ type_specifier_nonarray
| ISAMPLER2DMS {
$$.initialize(EbtISampler2DMS, @1);
}
| ISAMPLER2DMSARRAY {
$$.initialize(EbtISampler2DMSArray, @1);
}
| USAMPLER2D {
$$.initialize(EbtUSampler2D, @1);
}
......@@ -1114,6 +1121,9 @@ type_specifier_nonarray
| USAMPLER2DMS {
$$.initialize(EbtUSampler2DMS, @1);
}
| USAMPLER2DMSARRAY {
$$.initialize(EbtUSampler2DMSArray, @1);
}
| SAMPLER2DSHADOW {
$$.initialize(EbtSampler2DShadow, @1);
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -31,25 +31,22 @@
version 2.2 of Bison. */
#ifndef YY_YY_GLSLANG_TAB_H_INCLUDED
# define YY_YY_GLSLANG_TAB_H_INCLUDED
#define YY_YY_GLSLANG_TAB_H_INCLUDED
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#define YYDEBUG 0
#endif
#if YYDEBUG
extern int yydebug;
#endif
/* "%code requires" blocks. */
#define YYLTYPE TSourceLoc
#define YYLTYPE_IS_DECLARED 1
/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
#define YYTOKENTYPE
enum yytokentype
{
INVARIANT = 258,
......@@ -129,91 +126,93 @@ enum yytokentype
SAMPLER2DMS = 332,
ISAMPLER2DMS = 333,
USAMPLER2DMS = 334,
SAMPLER3D = 335,
SAMPLER3DRECT = 336,
SAMPLER2DSHADOW = 337,
SAMPLERCUBESHADOW = 338,
SAMPLER2DARRAYSHADOW = 339,
SAMPLEREXTERNAL2DY2YEXT = 340,
IMAGE2D = 341,
IIMAGE2D = 342,
UIMAGE2D = 343,
IMAGE3D = 344,
IIMAGE3D = 345,
UIMAGE3D = 346,
IMAGE2DARRAY = 347,
IIMAGE2DARRAY = 348,
UIMAGE2DARRAY = 349,
IMAGECUBE = 350,
IIMAGECUBE = 351,
UIMAGECUBE = 352,
ATOMICUINT = 353,
LAYOUT = 354,
YUVCSCSTANDARDEXT = 355,
YUVCSCSTANDARDEXTCONSTANT = 356,
IDENTIFIER = 357,
TYPE_NAME = 358,
FLOATCONSTANT = 359,
INTCONSTANT = 360,
UINTCONSTANT = 361,
BOOLCONSTANT = 362,
FIELD_SELECTION = 363,
LEFT_OP = 364,
RIGHT_OP = 365,
INC_OP = 366,
DEC_OP = 367,
LE_OP = 368,
GE_OP = 369,
EQ_OP = 370,
NE_OP = 371,
AND_OP = 372,
OR_OP = 373,
XOR_OP = 374,
MUL_ASSIGN = 375,
DIV_ASSIGN = 376,
ADD_ASSIGN = 377,
MOD_ASSIGN = 378,
LEFT_ASSIGN = 379,
RIGHT_ASSIGN = 380,
AND_ASSIGN = 381,
XOR_ASSIGN = 382,
OR_ASSIGN = 383,
SUB_ASSIGN = 384,
LEFT_PAREN = 385,
RIGHT_PAREN = 386,
LEFT_BRACKET = 387,
RIGHT_BRACKET = 388,
LEFT_BRACE = 389,
RIGHT_BRACE = 390,
DOT = 391,
COMMA = 392,
COLON = 393,
EQUAL = 394,
SEMICOLON = 395,
BANG = 396,
DASH = 397,
TILDE = 398,
PLUS = 399,
STAR = 400,
SLASH = 401,
PERCENT = 402,
LEFT_ANGLE = 403,
RIGHT_ANGLE = 404,
VERTICAL_BAR = 405,
CARET = 406,
AMPERSAND = 407,
QUESTION = 408
SAMPLER2DMSARRAY = 335,
ISAMPLER2DMSARRAY = 336,
USAMPLER2DMSARRAY = 337,
SAMPLER3D = 338,
SAMPLER3DRECT = 339,
SAMPLER2DSHADOW = 340,
SAMPLERCUBESHADOW = 341,
SAMPLER2DARRAYSHADOW = 342,
SAMPLEREXTERNAL2DY2YEXT = 343,
IMAGE2D = 344,
IIMAGE2D = 345,
UIMAGE2D = 346,
IMAGE3D = 347,
IIMAGE3D = 348,
UIMAGE3D = 349,
IMAGE2DARRAY = 350,
IIMAGE2DARRAY = 351,
UIMAGE2DARRAY = 352,
IMAGECUBE = 353,
IIMAGECUBE = 354,
UIMAGECUBE = 355,
ATOMICUINT = 356,
LAYOUT = 357,
YUVCSCSTANDARDEXT = 358,
YUVCSCSTANDARDEXTCONSTANT = 359,
IDENTIFIER = 360,
TYPE_NAME = 361,
FLOATCONSTANT = 362,
INTCONSTANT = 363,
UINTCONSTANT = 364,
BOOLCONSTANT = 365,
FIELD_SELECTION = 366,
LEFT_OP = 367,
RIGHT_OP = 368,
INC_OP = 369,
DEC_OP = 370,
LE_OP = 371,
GE_OP = 372,
EQ_OP = 373,
NE_OP = 374,
AND_OP = 375,
OR_OP = 376,
XOR_OP = 377,
MUL_ASSIGN = 378,
DIV_ASSIGN = 379,
ADD_ASSIGN = 380,
MOD_ASSIGN = 381,
LEFT_ASSIGN = 382,
RIGHT_ASSIGN = 383,
AND_ASSIGN = 384,
XOR_ASSIGN = 385,
OR_ASSIGN = 386,
SUB_ASSIGN = 387,
LEFT_PAREN = 388,
RIGHT_PAREN = 389,
LEFT_BRACKET = 390,
RIGHT_BRACKET = 391,
LEFT_BRACE = 392,
RIGHT_BRACE = 393,
DOT = 394,
COMMA = 395,
COLON = 396,
EQUAL = 397,
SEMICOLON = 398,
BANG = 399,
DASH = 400,
TILDE = 401,
PLUS = 402,
STAR = 403,
SLASH = 404,
PERCENT = 405,
LEFT_ANGLE = 406,
RIGHT_ANGLE = 407,
VERTICAL_BAR = 408,
CARET = 409,
AMPERSAND = 410,
QUESTION = 411
};
#endif
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
#if !defined YYSTYPE && !defined YYSTYPE_IS_DECLARED
union YYSTYPE {
struct {
struct
{
union {
const char *string; // pool allocated.
float f;
......@@ -223,7 +222,8 @@ union YYSTYPE
};
const TSymbol *symbol;
} lex;
struct {
struct
{
TOperator op;
union {
TIntermNode *intermNode;
......@@ -253,31 +253,27 @@ union YYSTYPE
TTypeQualifierBuilder *typeQualifierBuilder;
};
} interm;
};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#define YYSTYPE_IS_TRIVIAL 1
#define YYSTYPE_IS_DECLARED 1
#endif
/* Location type. */
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
#if !defined YYLTYPE && !defined YYLTYPE_IS_DECLARED
typedef struct YYLTYPE YYLTYPE;
struct YYLTYPE
{
int first_line;
int first_column;
int last_line;
int last_column;
int first_line;
int first_column;
int last_line;
int last_column;
};
# define YYLTYPE_IS_DECLARED 1
# define YYLTYPE_IS_TRIVIAL 1
#define YYLTYPE_IS_DECLARED 1
#define YYLTYPE_IS_TRIVIAL 1
#endif
int yyparse (TParseContext* context, void *scanner);
int yyparse(TParseContext *context, void *scanner);
#endif /* !YY_YY_GLSLANG_TAB_H_INCLUDED */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment