Commit a5527071 by Andrei Volykhin Committed by Commit Bot

Add support for EXT_YUV_target

Add new sampler type "__samplerExternal2DY2YEXT" to sample a YUV texture image and output color value without any color conversion, new additional type to specify color space standard formula and built-in functions for yuv to rgb transformation. Change-Id: I1780650fe84cd75191c1ca1e4118e89d585bfd92 Reviewed-on: https://chromium-review.googlesource.com/454697Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org>
parent c1ebf5bd
...@@ -47,3 +47,4 @@ Sebastian Bergstein ...@@ -47,3 +47,4 @@ Sebastian Bergstein
James Ross-Gowan James Ross-Gowan
Nickolay Artamonov Nickolay Artamonov
Ihsan Akmal Ihsan Akmal
Andrei Volykhin
...@@ -95,6 +95,7 @@ Tibor den Ouden ...@@ -95,6 +95,7 @@ Tibor den Ouden
Régis Fénéon Régis Fénéon
Sebastian Bergstein Sebastian Bergstein
James Ross-Gowan James Ross-Gowan
Andrei Volykhin
Microsoft Corporation Microsoft Corporation
Cooper Partin Cooper Partin
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
// Version number for shader translation API. // Version number for shader translation API.
// It is incremented every time the API changes. // It is incremented every time the API changes.
#define ANGLE_SH_VERSION 173 #define ANGLE_SH_VERSION 174
enum ShShaderSpec enum ShShaderSpec
{ {
...@@ -264,6 +264,7 @@ struct ShBuiltInResources ...@@ -264,6 +264,7 @@ struct ShBuiltInResources
int NV_shader_framebuffer_fetch; int NV_shader_framebuffer_fetch;
int ARM_shader_framebuffer_fetch; int ARM_shader_framebuffer_fetch;
int OVR_multiview; int OVR_multiview;
int EXT_YUV_target;
// Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives // 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 // with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate
......
...@@ -209,6 +209,7 @@ int main(int argc, char *argv[]) ...@@ -209,6 +209,7 @@ int main(int argc, char *argv[])
resources.OVR_multiview = 1; resources.OVR_multiview = 1;
compileOptions |= SH_TRANSLATE_VIEWID_OVR_TO_UNIFORM; compileOptions |= SH_TRANSLATE_VIEWID_OVR_TO_UNIFORM;
break; break;
case 'y': resources.EXT_YUV_target = 1; break;
default: failCode = EFailUsage; default: failCode = EFailUsage;
} }
// clang-format on // clang-format on
...@@ -346,7 +347,8 @@ void usage() ...@@ -346,7 +347,8 @@ void usage()
" -x=f : enable EXT_shader_framebuffer_fetch\n" " -x=f : enable EXT_shader_framebuffer_fetch\n"
" -x=n : enable NV_shader_framebuffer_fetch\n" " -x=n : enable NV_shader_framebuffer_fetch\n"
" -x=a : enable ARM_shader_framebuffer_fetch\n" " -x=a : enable ARM_shader_framebuffer_fetch\n"
" -x=m : enable OVR_multiview\n"); " -x=m : enable OVR_multiview\n"
" -x=y : enable YUV_target\n");
// clang-format on // clang-format on
} }
...@@ -526,6 +528,9 @@ void PrintVariable(const std::string &prefix, size_t index, const sh::ShaderVari ...@@ -526,6 +528,9 @@ void PrintVariable(const std::string &prefix, size_t index, const sh::ShaderVari
break; break;
case GL_SAMPLER_EXTERNAL_OES: typeName = "GL_SAMPLER_EXTERNAL_OES"; break; case GL_SAMPLER_EXTERNAL_OES: typeName = "GL_SAMPLER_EXTERNAL_OES"; break;
case GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT:
typeName = "GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT";
break;
default: typeName = "UNKNOWN"; break; default: typeName = "UNKNOWN"; break;
} }
......
...@@ -150,6 +150,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) ...@@ -150,6 +150,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
resources.EXT_shader_framebuffer_fetch = 1; resources.EXT_shader_framebuffer_fetch = 1;
resources.NV_shader_framebuffer_fetch = 1; resources.NV_shader_framebuffer_fetch = 1;
resources.ARM_shader_framebuffer_fetch = 1; resources.ARM_shader_framebuffer_fetch = 1;
resources.EXT_YUV_target = 1;
resources.MaxDualSourceDrawBuffers = 1; resources.MaxDualSourceDrawBuffers = 1;
if (!translator->Init(resources)) if (!translator->Init(resources))
......
...@@ -65,12 +65,14 @@ enum TBasicType ...@@ -65,12 +65,14 @@ enum TBasicType
EbtIVec, // non type: represents ivec2, ivec3, and ivec4 EbtIVec, // non type: represents ivec2, ivec3, and ivec4
EbtUVec, // non type: represents uvec2, uvec3, and uvec4 EbtUVec, // non type: represents uvec2, uvec3, and uvec4
EbtBVec, // non type: represents bvec2, bvec3, and bvec4 EbtBVec, // non type: represents bvec2, bvec3, and bvec4
EbtYuvCscStandardEXT, // Only valid if EXT_YUV_target exists.
EbtGuardSamplerBegin, // non type: see implementation of IsSampler() EbtGuardSamplerBegin, // non type: see implementation of IsSampler()
EbtSampler2D, EbtSampler2D,
EbtSampler3D, EbtSampler3D,
EbtSamplerCube, EbtSamplerCube,
EbtSampler2DArray, EbtSampler2DArray,
EbtSamplerExternalOES, // Only valid if OES_EGL_image_external exists. EbtSamplerExternalOES, // Only valid if OES_EGL_image_external exists.
EbtSamplerExternal2DY2YEXT, // Only valid if GL_EXT_YUV_target exists.
EbtSampler2DRect, // Only valid if GL_ARB_texture_rectangle exists. EbtSampler2DRect, // Only valid if GL_ARB_texture_rectangle exists.
EbtSampler2DMS, EbtSampler2DMS,
EbtISampler2D, EbtISampler2D,
...@@ -221,6 +223,7 @@ inline bool IsIntegerSampler(TBasicType type) ...@@ -221,6 +223,7 @@ inline bool IsIntegerSampler(TBasicType type)
case EbtSampler3D: case EbtSampler3D:
case EbtSamplerCube: case EbtSamplerCube:
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
case EbtSamplerExternal2DY2YEXT:
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtSampler2DShadow: case EbtSampler2DShadow:
...@@ -310,6 +313,7 @@ inline bool IsSampler2D(TBasicType type) ...@@ -310,6 +313,7 @@ inline bool IsSampler2D(TBasicType type)
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
case EbtSamplerExternal2DY2YEXT:
case EbtSampler2DShadow: case EbtSampler2DShadow:
case EbtSampler2DArrayShadow: case EbtSampler2DArrayShadow:
case EbtSampler2DMS: case EbtSampler2DMS:
...@@ -343,6 +347,7 @@ inline bool IsSamplerCube(TBasicType type) ...@@ -343,6 +347,7 @@ inline bool IsSamplerCube(TBasicType type)
case EbtSampler2D: case EbtSampler2D:
case EbtSampler3D: case EbtSampler3D:
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
case EbtSamplerExternal2DY2YEXT:
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtSampler2DMS: case EbtSampler2DMS:
...@@ -375,6 +380,7 @@ inline bool IsSampler3D(TBasicType type) ...@@ -375,6 +380,7 @@ inline bool IsSampler3D(TBasicType type)
case EbtSampler2D: case EbtSampler2D:
case EbtSamplerCube: case EbtSamplerCube:
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
case EbtSamplerExternal2DY2YEXT:
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtSampler2DMS: case EbtSampler2DMS:
...@@ -411,6 +417,7 @@ inline bool IsSamplerArray(TBasicType type) ...@@ -411,6 +417,7 @@ inline bool IsSamplerArray(TBasicType type)
case EbtUSampler2D: case EbtUSampler2D:
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
case EbtSamplerExternal2DY2YEXT:
case EbtSampler3D: case EbtSampler3D:
case EbtISampler3D: case EbtISampler3D:
case EbtUSampler3D: case EbtUSampler3D:
...@@ -452,6 +459,7 @@ inline bool IsShadowSampler(TBasicType type) ...@@ -452,6 +459,7 @@ inline bool IsShadowSampler(TBasicType type)
case EbtSampler3D: case EbtSampler3D:
case EbtSamplerCube: case EbtSamplerCube:
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
case EbtSamplerExternal2DY2YEXT:
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtSampler2DMS: case EbtSampler2DMS:
...@@ -599,6 +607,14 @@ enum TLayoutBlockStorage ...@@ -599,6 +607,14 @@ enum TLayoutBlockStorage
EbsStd140 EbsStd140
}; };
enum TYuvCscStandardEXT
{
EycsUndefined,
EycsItu601,
EycsItu601FullRange,
EycsItu709
};
struct TLayoutQualifier struct TLayoutQualifier
{ {
int location; int location;
...@@ -617,6 +633,9 @@ struct TLayoutQualifier ...@@ -617,6 +633,9 @@ struct TLayoutQualifier
// OVR_multiview num_views. // OVR_multiview num_views.
int numViews; int numViews;
// EXT_YUV_target yuv layout qualifier.
bool yuv;
static TLayoutQualifier create() static TLayoutQualifier create()
{ {
TLayoutQualifier layoutQualifier; TLayoutQualifier layoutQualifier;
...@@ -629,6 +648,7 @@ struct TLayoutQualifier ...@@ -629,6 +648,7 @@ struct TLayoutQualifier
layoutQualifier.localSize.fill(-1); layoutQualifier.localSize.fill(-1);
layoutQualifier.binding = -1; layoutQualifier.binding = -1;
layoutQualifier.numViews = -1; layoutQualifier.numViews = -1;
layoutQualifier.yuv = false;
layoutQualifier.imageInternalFormat = EiifUnspecified; layoutQualifier.imageInternalFormat = EiifUnspecified;
return layoutQualifier; return layoutQualifier;
...@@ -636,7 +656,7 @@ struct TLayoutQualifier ...@@ -636,7 +656,7 @@ struct TLayoutQualifier
bool isEmpty() const bool isEmpty() const
{ {
return location == -1 && binding == -1 && numViews == -1 && return location == -1 && binding == -1 && numViews == -1 && yuv == false &&
matrixPacking == EmpUnspecified && blockStorage == EbsUnspecified && matrixPacking == EmpUnspecified && blockStorage == EbsUnspecified &&
!localSize.isAnyValueSet() && imageInternalFormat == EiifUnspecified; !localSize.isAnyValueSet() && imageInternalFormat == EiifUnspecified;
} }
...@@ -649,9 +669,9 @@ struct TLayoutQualifier ...@@ -649,9 +669,9 @@ struct TLayoutQualifier
(location != -1 || binding != -1 || matrixPacking != EmpUnspecified || (location != -1 || binding != -1 || matrixPacking != EmpUnspecified ||
blockStorage != EbsUnspecified || imageInternalFormat != EiifUnspecified); blockStorage != EbsUnspecified || imageInternalFormat != EiifUnspecified);
// we can have either the work group size specified, or number of views, or the other layout // we can have either the work group size specified, or number of views,
// qualifiers. // or yuv layout qualifier, or the other layout qualifiers.
return (workSizeSpecified ? 1 : 0) + (numViewsSet ? 1 : 0) + return (workSizeSpecified ? 1 : 0) + (numViewsSet ? 1 : 0) + (yuv ? 1 : 0) +
(otherLayoutQualifiersSpecified ? 1 : 0) <= (otherLayoutQualifiersSpecified ? 1 : 0) <=
1; 1;
} }
...@@ -842,6 +862,33 @@ inline const char *getImageInternalFormatString(TLayoutImageInternalFormat iifq) ...@@ -842,6 +862,33 @@ inline const char *getImageInternalFormatString(TLayoutImageInternalFormat iifq)
} }
} }
inline TYuvCscStandardEXT getYuvCscStandardEXT(const std::string &str)
{
if (str == "itu_601")
return EycsItu601;
else if (str == "itu_601_full_range")
return EycsItu601FullRange;
else if (str == "itu_709")
return EycsItu709;
return EycsUndefined;
}
inline const char *getYuvCscStandardEXTString(TYuvCscStandardEXT ycsq)
{
switch (ycsq)
{
case EycsItu601:
return "itu_601";
case EycsItu601FullRange:
return "itu_601_full_range";
case EycsItu709:
return "itu_709";
default:
UNREACHABLE();
return "unknown color space conversion standard";
}
}
} // namespace sh } // namespace sh
#endif // COMPILER_TRANSLATOR_BASETYPES_H_ #endif // COMPILER_TRANSLATOR_BASETYPES_H_
...@@ -571,6 +571,8 @@ bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources) ...@@ -571,6 +571,8 @@ bool TCompiler::InitBuiltInSymbolTable(const ShBuiltInResources &resources)
initSamplerDefaultPrecision(EbtSamplerCube); initSamplerDefaultPrecision(EbtSamplerCube);
// SamplerExternalOES is specified in the extension to have default precision. // SamplerExternalOES is specified in the extension to have default precision.
initSamplerDefaultPrecision(EbtSamplerExternalOES); initSamplerDefaultPrecision(EbtSamplerExternalOES);
// SamplerExternal2DY2YEXT is specified in the extension to have default precision.
initSamplerDefaultPrecision(EbtSamplerExternal2DY2YEXT);
// It isn't specified whether Sampler2DRect has default precision. // It isn't specified whether Sampler2DRect has default precision.
initSamplerDefaultPrecision(EbtSampler2DRect); initSamplerDefaultPrecision(EbtSampler2DRect);
...@@ -618,6 +620,7 @@ void TCompiler::setResourceString() ...@@ -618,6 +620,7 @@ void TCompiler::setResourceString()
<< ":EXT_shader_framebuffer_fetch:" << compileResources.EXT_shader_framebuffer_fetch << ":EXT_shader_framebuffer_fetch:" << compileResources.EXT_shader_framebuffer_fetch
<< ":NV_shader_framebuffer_fetch:" << compileResources.NV_shader_framebuffer_fetch << ":NV_shader_framebuffer_fetch:" << compileResources.NV_shader_framebuffer_fetch
<< ":ARM_shader_framebuffer_fetch:" << compileResources.ARM_shader_framebuffer_fetch << ":ARM_shader_framebuffer_fetch:" << compileResources.ARM_shader_framebuffer_fetch
<< ":EXT_YUV_target:" << compileResources.EXT_YUV_target
<< ":MaxVertexOutputVectors:" << compileResources.MaxVertexOutputVectors << ":MaxVertexOutputVectors:" << compileResources.MaxVertexOutputVectors
<< ":MaxFragmentInputVectors:" << compileResources.MaxFragmentInputVectors << ":MaxFragmentInputVectors:" << compileResources.MaxFragmentInputVectors
<< ":MinProgramTexelOffset:" << compileResources.MinProgramTexelOffset << ":MinProgramTexelOffset:" << compileResources.MinProgramTexelOffset
......
...@@ -198,6 +198,11 @@ bool TConstantUnion::operator==(const bool b) const ...@@ -198,6 +198,11 @@ bool TConstantUnion::operator==(const bool b) const
return b == bConst; return b == bConst;
} }
bool TConstantUnion::operator==(const TYuvCscStandardEXT s) const
{
return s == yuvCscStandardEXTConst;
}
bool TConstantUnion::operator==(const TConstantUnion &constant) const bool TConstantUnion::operator==(const TConstantUnion &constant) const
{ {
if (constant.type != type) if (constant.type != type)
...@@ -213,6 +218,8 @@ bool TConstantUnion::operator==(const TConstantUnion &constant) const ...@@ -213,6 +218,8 @@ bool TConstantUnion::operator==(const TConstantUnion &constant) const
return constant.fConst == fConst; return constant.fConst == fConst;
case EbtBool: case EbtBool:
return constant.bConst == bConst; return constant.bConst == bConst;
case EbtYuvCscStandardEXT:
return constant.yuvCscStandardEXTConst == yuvCscStandardEXTConst;
default: default:
return false; return false;
} }
...@@ -238,6 +245,11 @@ bool TConstantUnion::operator!=(const bool b) const ...@@ -238,6 +245,11 @@ bool TConstantUnion::operator!=(const bool b) const
return !operator==(b); return !operator==(b);
} }
bool TConstantUnion::operator!=(const TYuvCscStandardEXT s) const
{
return !operator==(s);
}
bool TConstantUnion::operator!=(const TConstantUnion &constant) const bool TConstantUnion::operator!=(const TConstantUnion &constant) const
{ {
return !operator==(constant); return !operator==(constant);
......
...@@ -46,20 +46,29 @@ class TConstantUnion ...@@ -46,20 +46,29 @@ class TConstantUnion
type = EbtBool; type = EbtBool;
} }
void setYuvCscStandardEXTConst(TYuvCscStandardEXT s)
{
yuvCscStandardEXTConst = s;
type = EbtYuvCscStandardEXT;
}
int getIConst() const { return iConst; } int getIConst() const { return iConst; }
unsigned int getUConst() const { return uConst; } unsigned int getUConst() const { return uConst; }
float getFConst() const { return fConst; } float getFConst() const { return fConst; }
bool getBConst() const { return bConst; } bool getBConst() const { return bConst; }
TYuvCscStandardEXT getYuvCscStandardEXTConst() const { return yuvCscStandardEXTConst; }
bool operator==(const int i) const; bool operator==(const int i) const;
bool operator==(const unsigned int u) const; bool operator==(const unsigned int u) const;
bool operator==(const float f) const; bool operator==(const float f) const;
bool operator==(const bool b) const; bool operator==(const bool b) const;
bool operator==(const TYuvCscStandardEXT s) const;
bool operator==(const TConstantUnion &constant) const; bool operator==(const TConstantUnion &constant) const;
bool operator!=(const int i) const; bool operator!=(const int i) const;
bool operator!=(const unsigned int u) const; bool operator!=(const unsigned int u) const;
bool operator!=(const float f) const; bool operator!=(const float f) const;
bool operator!=(const bool b) const; bool operator!=(const bool b) const;
bool operator!=(const TYuvCscStandardEXT s) const;
bool operator!=(const TConstantUnion &constant) const; bool operator!=(const TConstantUnion &constant) const;
bool operator>(const TConstantUnion &constant) const; bool operator>(const TConstantUnion &constant) const;
bool operator<(const TConstantUnion &constant) const; bool operator<(const TConstantUnion &constant) const;
...@@ -97,6 +106,7 @@ class TConstantUnion ...@@ -97,6 +106,7 @@ class TConstantUnion
unsigned int uConst; // used for uvec, scalar uints unsigned int uConst; // used for uvec, scalar uints
bool bConst; // used for bvec, scalar bools bool bConst; // used for bvec, scalar bools
float fConst; // used for vec, mat, scalar floats float fConst; // used for vec, mat, scalar floats
TYuvCscStandardEXT yuvCscStandardEXTConst;
}; };
TBasicType type; TBasicType type;
......
...@@ -391,6 +391,25 @@ void InsertBuiltInFunctions(sh::GLenum type, ...@@ -391,6 +391,25 @@ void InsertBuiltInFunctions(sh::GLenum type,
float4); float4);
} }
if (resources.EXT_YUV_target)
{
const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "texture",
samplerExternal2DY2YEXT, float2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
samplerExternal2DY2YEXT, float3);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
samplerExternal2DY2YEXT, float4);
const TType *yuvCscStandardEXT = TCache::getType(EbtYuvCscStandardEXT);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float3, "rgb_2_yuv", float3,
yuvCscStandardEXT);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float3, "yuv_2_rgb", float3,
yuvCscStandardEXT);
}
if (type == GL_FRAGMENT_SHADER) if (type == GL_FRAGMENT_SHADER)
{ {
symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "texture", gsampler2D, float2, float1); symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "texture", gsampler2D, float2, float1);
...@@ -413,6 +432,18 @@ void InsertBuiltInFunctions(sh::GLenum type, ...@@ -413,6 +432,18 @@ void InsertBuiltInFunctions(sh::GLenum type,
symbolTable.insertBuiltIn(ESSL3_BUILTINS, float4, "textureProj", samplerExternalOES, symbolTable.insertBuiltIn(ESSL3_BUILTINS, float4, "textureProj", samplerExternalOES,
float4, float1); float4, float1);
} }
if (resources.EXT_YUV_target)
{
const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "texture",
samplerExternal2DY2YEXT, float2, float1);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
samplerExternal2DY2YEXT, float3, float1);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "textureProj",
samplerExternal2DY2YEXT, float4, float1);
}
} }
const TType *sampler2DShadow = TCache::getType(EbtSampler2DShadow); const TType *sampler2DShadow = TCache::getType(EbtSampler2DShadow);
...@@ -452,6 +483,14 @@ void InsertBuiltInFunctions(sh::GLenum type, ...@@ -452,6 +483,14 @@ void InsertBuiltInFunctions(sh::GLenum type,
symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "textureSize", samplerExternalOES, int1); symbolTable.insertBuiltIn(ESSL3_BUILTINS, int2, "textureSize", samplerExternalOES, int1);
} }
if (resources.EXT_YUV_target)
{
const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", int2, "textureSize",
samplerExternal2DY2YEXT, int1);
}
if (type == GL_FRAGMENT_SHADER) if (type == GL_FRAGMENT_SHADER)
{ {
symbolTable.insertBuiltInOp(ESSL3_BUILTINS, EOpDFdx, genType, genType); symbolTable.insertBuiltInOp(ESSL3_BUILTINS, EOpDFdx, genType, genType);
...@@ -532,6 +571,14 @@ void InsertBuiltInFunctions(sh::GLenum type, ...@@ -532,6 +571,14 @@ void InsertBuiltInFunctions(sh::GLenum type,
int1); int1);
} }
if (resources.EXT_YUV_target)
{
const TType *samplerExternal2DY2YEXT = TCache::getType(EbtSamplerExternal2DY2YEXT);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, "GL_EXT_YUV_target", float4, "texelFetch",
samplerExternal2DY2YEXT, int2, int1);
}
symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "texelFetchOffset", gsampler2D, int2, int1, symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "texelFetchOffset", gsampler2D, int2, int1,
int2); int2);
symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "texelFetchOffset", gsampler3D, int3, int1, symbolTable.insertBuiltIn(ESSL3_BUILTINS, gvec4, "texelFetchOffset", gsampler3D, int3, int1,
...@@ -906,6 +953,10 @@ void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavi ...@@ -906,6 +953,10 @@ void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavi
extBehavior["GL_OVR_multiview"] = EBhUndefined; extBehavior["GL_OVR_multiview"] = EBhUndefined;
extBehavior["GL_OVR_multiview2"] = EBhUndefined; extBehavior["GL_OVR_multiview2"] = EBhUndefined;
} }
if (resources.EXT_YUV_target)
{
extBehavior["GL_EXT_YUV_target"] = EBhUndefined;
}
} }
void ResetExtensionBehavior(TExtensionBehavior &extBehavior) void ResetExtensionBehavior(TExtensionBehavior &extBehavior)
......
...@@ -73,6 +73,11 @@ bool NeedsToWriteLayoutQualifier(const TType &type) ...@@ -73,6 +73,11 @@ bool NeedsToWriteLayoutQualifier(const TType &type)
return true; return true;
} }
if (type.getQualifier() == EvqFragmentOut && layoutQualifier.yuv == true)
{
return true;
}
if (IsOpaqueType(type.getBasicType()) && layoutQualifier.binding != -1) if (IsOpaqueType(type.getBasicType()) && layoutQualifier.binding != -1)
{ {
return true; return true;
...@@ -214,6 +219,14 @@ void TOutputGLSLBase::writeLayoutQualifier(const TType &type) ...@@ -214,6 +219,14 @@ void TOutputGLSLBase::writeLayoutQualifier(const TType &type)
} }
} }
if (type.getQualifier() == EvqFragmentOut)
{
if (layoutQualifier.yuv == true)
{
out << listItemPrefix << "yuv";
}
}
if (IsOpaqueType(type.getBasicType())) if (IsOpaqueType(type.getBasicType()))
{ {
if (layoutQualifier.binding >= 0) if (layoutQualifier.binding >= 0)
...@@ -414,6 +427,9 @@ const TConstantUnion *TOutputGLSLBase::writeConstantUnion(const TType &type, ...@@ -414,6 +427,9 @@ const TConstantUnion *TOutputGLSLBase::writeConstantUnion(const TType &type,
case EbtBool: case EbtBool:
out << pConstUnion->getBConst(); out << pConstUnion->getBConst();
break; break;
case EbtYuvCscStandardEXT:
out << getYuvCscStandardEXTString(pConstUnion->getYuvCscStandardEXTConst());
break;
default: default:
UNREACHABLE(); UNREACHABLE();
} }
......
...@@ -1188,6 +1188,15 @@ void TParseContext::singleDeclarationErrorCheck(const TPublicType &publicType, ...@@ -1188,6 +1188,15 @@ void TParseContext::singleDeclarationErrorCheck(const TPublicType &publicType,
return; return;
} }
if ((publicType.qualifier != EvqTemporary && publicType.qualifier != EvqGlobal &&
publicType.qualifier != EvqConst) &&
publicType.getBasicType() == EbtYuvCscStandardEXT)
{
error(identifierLocation, "cannot be used with a yuvCscStandardEXT",
getQualifierString(publicType.qualifier));
return;
}
// check for layout qualifier issues // check for layout qualifier issues
const TLayoutQualifier layoutQualifier = publicType.layoutQualifier; const TLayoutQualifier layoutQualifier = publicType.layoutQualifier;
...@@ -1226,6 +1235,19 @@ void TParseContext::singleDeclarationErrorCheck(const TPublicType &publicType, ...@@ -1226,6 +1235,19 @@ void TParseContext::singleDeclarationErrorCheck(const TPublicType &publicType,
checkLocationIsNotSpecified(identifierLocation, publicType.layoutQualifier); checkLocationIsNotSpecified(identifierLocation, publicType.layoutQualifier);
} }
if (publicType.qualifier == EvqFragmentOut)
{
if (layoutQualifier.location != -1 && layoutQualifier.yuv == true)
{
error(identifierLocation, "invalid layout qualifier combination", "yuv");
return;
}
}
else
{
checkYuvIsNotSpecified(identifierLocation, layoutQualifier.yuv);
}
if (IsImage(publicType.getBasicType())) if (IsImage(publicType.getBasicType()))
{ {
...@@ -1402,6 +1424,14 @@ void TParseContext::checkUniformLocationInRange(const TSourceLoc &location, ...@@ -1402,6 +1424,14 @@ void TParseContext::checkUniformLocationInRange(const TSourceLoc &location,
} }
} }
void TParseContext::checkYuvIsNotSpecified(const TSourceLoc &location, bool yuv)
{
if (yuv != false)
{
error(location, "invalid layout qualifier: only valid on program outputs", "yuv");
}
}
void TParseContext::functionCallLValueErrorCheck(const TFunction *fnCandidate, void TParseContext::functionCallLValueErrorCheck(const TFunction *fnCandidate,
TIntermAggregate *fnCall) TIntermAggregate *fnCall)
{ {
...@@ -2340,6 +2370,8 @@ void TParseContext::parseGlobalLayoutQualifier(const TTypeQualifierBuilder &type ...@@ -2340,6 +2370,8 @@ void TParseContext::parseGlobalLayoutQualifier(const TTypeQualifierBuilder &type
checkInternalFormatIsNotSpecified(typeQualifier.line, layoutQualifier.imageInternalFormat); checkInternalFormatIsNotSpecified(typeQualifier.line, layoutQualifier.imageInternalFormat);
checkYuvIsNotSpecified(typeQualifier.line, layoutQualifier.yuv);
if (typeQualifier.qualifier == EvqComputeIn) if (typeQualifier.qualifier == EvqComputeIn)
{ {
if (mComputeShaderLocalSizeDeclared && if (mComputeShaderLocalSizeDeclared &&
...@@ -2818,6 +2850,8 @@ TIntermDeclaration *TParseContext::addInterfaceBlock( ...@@ -2818,6 +2850,8 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
// TODO(oetuaho): Remove this and support binding for blocks. // TODO(oetuaho): Remove this and support binding for blocks.
checkBindingIsNotSpecified(typeQualifier.line, typeQualifier.layoutQualifier.binding); checkBindingIsNotSpecified(typeQualifier.line, typeQualifier.layoutQualifier.binding);
checkYuvIsNotSpecified(typeQualifier.line, typeQualifier.layoutQualifier.yuv);
TLayoutQualifier blockLayoutQualifier = typeQualifier.layoutQualifier; TLayoutQualifier blockLayoutQualifier = typeQualifier.layoutQualifier;
checkLocationIsNotSpecified(typeQualifier.line, blockLayoutQualifier); checkLocationIsNotSpecified(typeQualifier.line, blockLayoutQualifier);
...@@ -3304,6 +3338,11 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp ...@@ -3304,6 +3338,11 @@ TLayoutQualifier TParseContext::parseLayoutQualifier(const TString &qualifierTyp
error(qualifierTypeLine, "invalid layout qualifier: location requires an argument", error(qualifierTypeLine, "invalid layout qualifier: location requires an argument",
qualifierType.c_str()); qualifierType.c_str());
} }
else if (qualifierType == "yuv" && isExtensionEnabled("GL_EXT_YUV_target") &&
mShaderType == GL_FRAGMENT_SHADER)
{
qualifier.yuv = true;
}
else if (qualifierType == "rgba32f") else if (qualifierType == "rgba32f")
{ {
checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310); checkLayoutQualifierSupported(qualifierTypeLine, qualifierType, 310);
......
...@@ -399,6 +399,8 @@ class TParseContext : angle::NonCopyable ...@@ -399,6 +399,8 @@ class TParseContext : angle::NonCopyable
int objectLocationCount, int objectLocationCount,
const TLayoutQualifier &layoutQualifier); const TLayoutQualifier &layoutQualifier);
void checkYuvIsNotSpecified(const TSourceLoc &location, bool yuv);
TIntermTyped *addBinaryMathInternal(TOperator op, TIntermTyped *addBinaryMathInternal(TOperator op,
TIntermTyped *left, TIntermTyped *left,
TIntermTyped *right, TIntermTyped *right,
......
...@@ -560,6 +560,10 @@ TLayoutQualifier JoinLayoutQualifiers(TLayoutQualifier leftQualifier, ...@@ -560,6 +560,10 @@ TLayoutQualifier JoinLayoutQualifiers(TLayoutQualifier leftQualifier,
joinedQualifier.location = rightQualifier.location; joinedQualifier.location = rightQualifier.location;
++joinedQualifier.locationsSpecified; ++joinedQualifier.locationsSpecified;
} }
if (rightQualifier.yuv != false)
{
joinedQualifier.yuv = rightQualifier.yuv;
}
if (rightQualifier.binding != -1) if (rightQualifier.binding != -1)
{ {
joinedQualifier.binding = rightQualifier.binding; joinedQualifier.binding = rightQualifier.binding;
......
...@@ -163,6 +163,7 @@ void InitBuiltInResources(ShBuiltInResources *resources) ...@@ -163,6 +163,7 @@ void InitBuiltInResources(ShBuiltInResources *resources)
resources->NV_shader_framebuffer_fetch = 0; resources->NV_shader_framebuffer_fetch = 0;
resources->ARM_shader_framebuffer_fetch = 0; resources->ARM_shader_framebuffer_fetch = 0;
resources->OVR_multiview = 0; resources->OVR_multiview = 0;
resources->EXT_YUV_target = 0;
resources->NV_draw_buffers = 0; resources->NV_draw_buffers = 0;
......
...@@ -33,6 +33,8 @@ const char *getBasicString(TBasicType t) ...@@ -33,6 +33,8 @@ const char *getBasicString(TBasicType t)
return "uint"; return "uint";
case EbtBool: case EbtBool:
return "bool"; return "bool";
case EbtYuvCscStandardEXT:
return "yuvCscStandardEXT";
case EbtSampler2D: case EbtSampler2D:
return "sampler2D"; return "sampler2D";
case EbtSampler3D: case EbtSampler3D:
...@@ -41,6 +43,8 @@ const char *getBasicString(TBasicType t) ...@@ -41,6 +43,8 @@ const char *getBasicString(TBasicType t)
return "samplerCube"; return "samplerCube";
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
return "samplerExternalOES"; return "samplerExternalOES";
case EbtSamplerExternal2DY2YEXT:
return "__samplerExternal2DY2YEXT";
case EbtSampler2DRect: case EbtSampler2DRect:
return "sampler2DRect"; return "sampler2DRect";
case EbtSampler2DArray: case EbtSampler2DArray:
...@@ -292,6 +296,9 @@ TString TType::buildMangledName() const ...@@ -292,6 +296,9 @@ TString TType::buildMangledName() const
case EbtBool: case EbtBool:
mangledName += 'b'; mangledName += 'b';
break; break;
case EbtYuvCscStandardEXT:
mangledName += "ycs";
break;
case EbtSampler2D: case EbtSampler2D:
mangledName += "s2"; mangledName += "s2";
break; break;
...@@ -307,6 +314,9 @@ TString TType::buildMangledName() const ...@@ -307,6 +314,9 @@ TString TType::buildMangledName() const
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
mangledName += "sext"; mangledName += "sext";
break; break;
case EbtSamplerExternal2DY2YEXT:
mangledName += "sext2y2y";
break;
case EbtSampler2DRect: case EbtSampler2DRect:
mangledName += "s2r"; mangledName += "s2r";
break; break;
......
...@@ -25,7 +25,8 @@ ValidateOutputs::ValidateOutputs(const TExtensionBehavior &extBehavior, int maxD ...@@ -25,7 +25,8 @@ ValidateOutputs::ValidateOutputs(const TExtensionBehavior &extBehavior, int maxD
: TIntermTraverser(true, false, false), : TIntermTraverser(true, false, false),
mMaxDrawBuffers(maxDrawBuffers), mMaxDrawBuffers(maxDrawBuffers),
mAllowUnspecifiedOutputLocationResolution( mAllowUnspecifiedOutputLocationResolution(
IsExtensionEnabled(extBehavior, "GL_EXT_blend_func_extended")) IsExtensionEnabled(extBehavior, "GL_EXT_blend_func_extended")),
mUsesFragDepth(false)
{ {
} }
...@@ -41,15 +42,23 @@ void ValidateOutputs::visitSymbol(TIntermSymbol *symbol) ...@@ -41,15 +42,23 @@ void ValidateOutputs::visitSymbol(TIntermSymbol *symbol)
if (qualifier == EvqFragmentOut) if (qualifier == EvqFragmentOut)
{ {
if (symbol->getType().getLayoutQualifier().location == -1) if (symbol->getType().getLayoutQualifier().location != -1)
{ {
mUnspecifiedLocationOutputs.push_back(symbol); mOutputs.push_back(symbol);
}
else if (symbol->getType().getLayoutQualifier().yuv == true)
{
mYuvOutputs.push_back(symbol);
} }
else else
{ {
mOutputs.push_back(symbol); mUnspecifiedLocationOutputs.push_back(symbol);
} }
} }
else if (qualifier == EvqFragDepth || qualifier == EvqFragDepthEXT)
{
mUsesFragDepth = true;
}
} }
void ValidateOutputs::validate(TDiagnostics *diagnostics) const void ValidateOutputs::validate(TDiagnostics *diagnostics) const
...@@ -106,6 +115,18 @@ void ValidateOutputs::validate(TDiagnostics *diagnostics) const ...@@ -106,6 +115,18 @@ void ValidateOutputs::validate(TDiagnostics *diagnostics) const
diagnostics); diagnostics);
} }
} }
if (!mYuvOutputs.empty() && (mYuvOutputs.size() > 1 || mUsesFragDepth || !mOutputs.empty() ||
!mUnspecifiedLocationOutputs.empty()))
{
for (const auto &symbol : mYuvOutputs)
{
error(*symbol,
"not allowed to specify yuv qualifier when using depth or multiple color "
"fragment outputs",
diagnostics);
}
}
} }
} // namespace sh } // namespace sh
...@@ -29,10 +29,12 @@ class ValidateOutputs : public TIntermTraverser ...@@ -29,10 +29,12 @@ class ValidateOutputs : public TIntermTraverser
private: private:
int mMaxDrawBuffers; int mMaxDrawBuffers;
bool mAllowUnspecifiedOutputLocationResolution; bool mAllowUnspecifiedOutputLocationResolution;
bool mUsesFragDepth;
typedef std::vector<TIntermSymbol *> OutputVector; typedef std::vector<TIntermSymbol *> OutputVector;
OutputVector mOutputs; OutputVector mOutputs;
OutputVector mUnspecifiedLocationOutputs; OutputVector mUnspecifiedLocationOutputs;
OutputVector mYuvOutputs;
std::set<std::string> mVisitedSymbols; std::set<std::string> mVisitedSymbols;
}; };
......
...@@ -79,10 +79,12 @@ static int ES2_ident_ES3_keyword(TParseContext *context, int token); ...@@ -79,10 +79,12 @@ static int ES2_ident_ES3_keyword(TParseContext *context, int token);
static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token); static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token); 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 ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token);
static int ES3_extension_keyword_else_ident(TParseContext *context, const char *extension, int token);
static int uint_constant(TParseContext *context); static int uint_constant(TParseContext *context);
static int int_constant(TParseContext *context); static int int_constant(TParseContext *context);
static int float_constant(yyscan_t yyscanner); static int float_constant(yyscan_t yyscanner);
static int floatsuffix_check(TParseContext* context); static int floatsuffix_check(TParseContext* context);
static int yuvcscstandardext_constant(TParseContext *context);
%} %}
%option noyywrap nounput never-interactive %option noyywrap nounput never-interactive
...@@ -194,11 +196,17 @@ O [0-7] ...@@ -194,11 +196,17 @@ O [0-7]
"sampler2DShadow" { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); } "sampler2DShadow" { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
"samplerCubeShadow" { return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); } "samplerCubeShadow" { return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
"sampler2DArrayShadow" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); } "sampler2DArrayShadow" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
"__samplerExternal2DY2YEXT" { return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", SAMPLEREXTERNAL2DY2YEXT); }
"struct" { return STRUCT; } "struct" { return STRUCT; }
"layout" { return ES2_ident_ES3_keyword(context, LAYOUT); } "layout" { return ES2_ident_ES3_keyword(context, LAYOUT); }
"yuvCscStandardEXT" { return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", YUVCSCSTANDARDEXT); }
"itu_601" { return yuvcscstandardext_constant(context); }
"itu_601_full_range" { return yuvcscstandardext_constant(context); }
"itu_709" { return yuvcscstandardext_constant(context); }
"image2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); } "image2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
"iimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); } "iimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
"uimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); } "uimage2D" { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
...@@ -533,6 +541,21 @@ int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token) ...@@ -533,6 +541,21 @@ int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token)
return token; return token;
} }
int ES3_extension_keyword_else_ident(TParseContext *context, const char* extension, int token)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
yyscan_t yyscanner = (yyscan_t) context->getScanner();
// a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name
if (context->getShaderVersion() >= 300 && context->isExtensionEnabled(extension))
{
return token;
}
yylval->lex.string = NewPoolTString(yytext);
return check_type(yyscanner);
}
int uint_constant(TParseContext *context) int uint_constant(TParseContext *context)
{ {
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
...@@ -594,6 +617,22 @@ int float_constant(yyscan_t yyscanner) { ...@@ -594,6 +617,22 @@ int float_constant(yyscan_t yyscanner) {
return FLOATCONSTANT; return FLOATCONSTANT;
} }
int yuvcscstandardext_constant(TParseContext *context)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
yyscan_t yyscanner = (yyscan_t) context->getScanner();
// a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name
if (context->getShaderVersion() >= 300 && context->isExtensionEnabled("GL_EXT_YUV_target"))
{
yylval->lex.string = NewPoolTString(yytext);
return YUVCSCSTANDARDEXTCONSTANT;
}
yylval->lex.string = NewPoolTString(yytext);
return check_type(yyscanner);
}
int glslang_initialize(TParseContext* context) { int glslang_initialize(TParseContext* context) {
yyscan_t scanner = NULL; yyscan_t scanner = NULL;
if (yylex_init_extra(context, &scanner)) if (yylex_init_extra(context, &scanner))
......
...@@ -178,9 +178,11 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons ...@@ -178,9 +178,11 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons
%token <lex> USAMPLER2D USAMPLER3D USAMPLERCUBE USAMPLER2DARRAY %token <lex> USAMPLER2D USAMPLER3D USAMPLERCUBE USAMPLER2DARRAY
%token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS %token <lex> SAMPLER2DMS ISAMPLER2DMS USAMPLER2DMS
%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW %token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW
%token <lex> SAMPLEREXTERNAL2DY2YEXT
%token <lex> IMAGE2D IIMAGE2D UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY %token <lex> IMAGE2D IIMAGE2D UIMAGE2D IMAGE3D IIMAGE3D UIMAGE3D IMAGE2DARRAY IIMAGE2DARRAY UIMAGE2DARRAY
%token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE %token <lex> IMAGECUBE IIMAGECUBE UIMAGECUBE
%token <lex> LAYOUT %token <lex> LAYOUT
%token <lex> YUVCSCSTANDARDEXT YUVCSCSTANDARDEXTCONSTANT
%token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT %token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
%token <lex> FIELD_SELECTION %token <lex> FIELD_SELECTION
...@@ -280,6 +282,14 @@ primary_expression ...@@ -280,6 +282,14 @@ primary_expression
unionArray->setBConst($1.b); unionArray->setBConst($1.b);
$$ = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), @1); $$ = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), @1);
} }
| YUVCSCSTANDARDEXTCONSTANT {
if (!context->isExtensionEnabled("GL_EXT_YUV_target")) {
context->error(@1, "unsupported value", $1.string->c_str());
}
TConstantUnion *unionArray = new TConstantUnion[1];
unionArray->setYuvCscStandardEXTConst(getYuvCscStandardEXT($1.string->c_str()));
$$ = context->intermediate.addConstantUnion(unionArray, TType(EbtYuvCscStandardEXT, EbpUndefined, EvqConst), @1);
}
| LEFT_PAREN expression RIGHT_PAREN { | LEFT_PAREN expression RIGHT_PAREN {
$$ = $2; $$ = $2;
} }
...@@ -1130,6 +1140,12 @@ type_specifier_nonarray ...@@ -1130,6 +1140,12 @@ type_specifier_nonarray
$$.initialize(EbtFloat, @1); $$.initialize(EbtFloat, @1);
$$.setMatrix(4, 3); $$.setMatrix(4, 3);
} }
| YUVCSCSTANDARDEXT {
if (!context->isExtensionEnabled("GL_EXT_YUV_target")) {
context->error(@1, "unsupported type", "yuvCscStandardEXT");
}
$$.initialize(EbtYuvCscStandardEXT, @1);
}
| SAMPLER2D { | SAMPLER2D {
$$.initialize(EbtSampler2D, @1); $$.initialize(EbtSampler2D, @1);
} }
...@@ -1191,6 +1207,12 @@ type_specifier_nonarray ...@@ -1191,6 +1207,12 @@ type_specifier_nonarray
} }
$$.initialize(EbtSamplerExternalOES, @1); $$.initialize(EbtSamplerExternalOES, @1);
} }
| SAMPLEREXTERNAL2DY2YEXT {
if (!context->isExtensionEnabled("GL_EXT_YUV_target")) {
context->error(@1, "unsupported type", "__samplerExternal2DY2YEXT");
}
$$.initialize(EbtSamplerExternal2DY2YEXT, @1);
}
| SAMPLER2DRECT { | SAMPLER2DRECT {
if (!context->supportsExtension("GL_ARB_texture_rectangle")) { if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
context->error(@1, "unsupported type", "sampler2DRect"); context->error(@1, "unsupported type", "sampler2DRect");
......
...@@ -402,8 +402,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); ...@@ -402,8 +402,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \ *yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp; yyg->yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 241 #define YY_NUM_RULES 246
#define YY_END_OF_BUFFER 242 #define YY_END_OF_BUFFER 247
/* This struct is not used in this scanner, /* This struct is not used in this scanner,
but its presence is necessary. */ but its presence is necessary. */
struct yy_trans_info struct yy_trans_info
...@@ -411,99 +411,105 @@ struct yy_trans_info ...@@ -411,99 +411,105 @@ struct yy_trans_info
flex_int32_t yy_verify; flex_int32_t yy_verify;
flex_int32_t yy_nxt; flex_int32_t yy_nxt;
}; };
static yyconst flex_int16_t yy_accept[824] = static yyconst flex_int16_t yy_accept[886] =
{ 0, { 0,
0, 0, 0, 0, 242, 240, 239, 239, 223, 229, 0, 0, 0, 0, 247, 245, 244, 244, 228, 234,
234, 218, 219, 227, 226, 215, 224, 222, 228, 181, 239, 223, 224, 232, 231, 220, 229, 227, 233, 186,
181, 216, 212, 230, 217, 231, 235, 178, 220, 221, 186, 221, 217, 235, 222, 236, 240, 183, 225, 226,
233, 178, 178, 178, 178, 178, 178, 178, 178, 178, 238, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 213, 232, 214, 225, 238, 237, 241, 236, 209, 183, 183, 183, 218, 237, 219, 230, 243, 242, 246,
195, 214, 203, 198, 193, 201, 191, 202, 192, 187, 241, 214, 200, 219, 208, 203, 198, 206, 196, 207,
194, 186, 180, 181, 0, 184, 0, 221, 213, 220, 197, 192, 199, 191, 185, 186, 0, 189, 0, 226,
210, 206, 208, 207, 211, 178, 199, 205, 178, 178, 218, 225, 215, 211, 213, 212, 216, 183, 204, 210,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
12, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 12, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 15, 178, 178, 23, 178, 178, 183, 183, 183, 183, 183, 183, 183, 15, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 23, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 200, 204, 236, 0, 190, 186, 0, 189, 183, 183, 183, 183, 183, 183, 183, 205, 209, 241, 0,
0, 185, 179, 196, 197, 178, 138, 178, 178, 178, 195, 191, 0, 194, 188, 0, 190, 184, 201, 202,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 143, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
13, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 13, 183, 183, 183,
178, 28, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 28, 183, 183,
178, 178, 178, 24, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 24, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 0, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
187, 0, 186, 188, 182, 178, 178, 178, 31, 178, 183, 183, 183, 183, 183, 183, 183, 0, 192, 0,
178, 18, 175, 178, 178, 178, 178, 178, 178, 178, 191, 193, 187, 183, 183, 183, 183, 31, 183, 183,
178, 178, 178, 16, 141, 178, 178, 178, 178, 21, 18, 180, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 145, 156, 178, 178, 178, 178, 178, 178, 183, 183, 16, 146, 183, 183, 183, 183, 21, 183,
178, 178, 178, 178, 178, 178, 153, 4, 36, 37, 183, 150, 161, 183, 183, 183, 183, 183, 183, 183,
38, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 158, 4, 36, 37,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 38, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 144, 32, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
29, 178, 178, 178, 178, 178, 178, 178, 48, 49, 183, 183, 183, 183, 183, 183, 149, 32, 183, 183,
50, 30, 178, 178, 178, 178, 178, 178, 10, 54, 29, 183, 183, 183, 183, 183, 183, 183, 48, 49,
55, 56, 178, 139, 178, 178, 7, 178, 178, 178, 50, 30, 183, 183, 183, 183, 183, 183, 183, 183,
178, 165, 166, 167, 178, 33, 178, 157, 27, 168, 10, 54, 55, 56, 183, 144, 183, 183, 7, 183,
169, 170, 2, 162, 163, 164, 178, 178, 178, 25, 183, 183, 183, 170, 171, 172, 183, 33, 183, 162,
160, 178, 178, 178, 51, 52, 53, 178, 178, 178, 27, 173, 174, 175, 2, 167, 168, 169, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 103, 178, 183, 25, 165, 183, 183, 183, 183, 183, 51, 52,
178, 178, 178, 178, 178, 178, 178, 154, 178, 178, 53, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 140, 183, 183, 108, 183, 183, 183, 183, 183, 183, 183,
178, 178, 177, 57, 58, 59, 178, 178, 14, 178, 183, 159, 183, 183, 183, 183, 183, 183, 183, 183,
108, 178, 178, 178, 178, 106, 178, 178, 178, 155, 183, 183, 183, 145, 183, 183, 182, 57, 58, 59,
150, 109, 178, 178, 178, 178, 178, 178, 146, 178, 183, 183, 14, 183, 183, 183, 113, 183, 183, 183,
178, 178, 82, 39, 42, 44, 43, 40, 46, 45, 183, 111, 183, 183, 183, 160, 155, 114, 183, 183,
47, 41, 178, 178, 178, 178, 161, 137, 178, 178, 183, 183, 183, 183, 151, 183, 183, 183, 183, 183,
148, 178, 178, 178, 35, 104, 26, 174, 22, 149, 83, 39, 42, 44, 43, 40, 46, 45, 47, 41,
81, 178, 159, 17, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 166, 142, 183, 183, 153, 183,
178, 178, 178, 178, 178, 178, 178, 178, 19, 34, 183, 183, 35, 109, 26, 179, 22, 154, 82, 183,
178, 178, 178, 178, 178, 178, 110, 83, 89, 178, 164, 17, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 3, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 19, 34,
178, 178, 178, 178, 178, 178, 142, 178, 178, 178, 183, 183, 183, 183, 183, 183, 115, 88, 94, 183,
178, 178, 8, 178, 178, 9, 178, 178, 178, 178, 183, 183, 183, 183, 85, 87, 3, 183, 183, 183,
20, 97, 11, 151, 111, 84, 91, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 183, 147, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 147, 183, 183, 183, 183, 8, 183, 183, 9, 183, 183,
178, 178, 178, 95, 100, 98, 178, 178, 178, 178, 183, 183, 183, 183, 20, 102, 11, 156, 116, 89,
178, 178, 178, 143, 112, 85, 90, 178, 178, 158, 96, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 99, 178, 178, 6, 178, 178, 178, 178, 178, 183, 183, 183, 183, 152, 183, 183, 183, 100, 105,
178, 178, 178, 178, 94, 152, 1, 178, 178, 178, 103, 183, 183, 183, 183, 183, 183, 183, 148, 117,
178, 178, 176, 178, 107, 5, 171, 60, 63, 178, 90, 95, 183, 183, 163, 183, 104, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 6, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 96, 178, 178, 178, 178, 92, 178, 178, 183, 99, 157, 1, 183, 183, 183, 183, 183, 183,
178, 178, 178, 125, 68, 69, 178, 178, 178, 178, 181, 183, 112, 5, 176, 60, 63, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 105, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 93, 127, 73, 74, 178, 178, 101, 101, 183, 183, 183, 183, 183, 183, 97, 183, 183,
178, 178, 178, 178, 178, 178, 178, 120, 178, 178, 183, 183, 183, 130, 68, 69, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 67, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 61, 178, 178, 178, 178, 178, 178, 110, 183, 183, 183, 98, 132, 73, 74, 183, 183,
178, 178, 178, 178, 178, 178, 121, 113, 178, 86, 183, 183, 106, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 72, 178, 178, 70, 178, 178, 178, 125, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 67, 183, 183, 183, 183, 61, 183, 183,
122, 178, 178, 77, 178, 178, 75, 114, 87, 178, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
116, 178, 117, 178, 178, 178, 178, 178, 102, 178, 183, 183, 126, 118, 183, 91, 183, 183, 183, 72,
178, 178, 178, 65, 178, 64, 131, 178, 178, 115, 183, 183, 70, 183, 183, 183, 183, 183, 183, 183,
88, 178, 178, 178, 178, 178, 178, 178, 178, 178, 183, 183, 183, 183, 183, 183, 183, 127, 183, 183,
178, 129, 132, 123, 178, 66, 178, 178, 178, 178, 77, 183, 183, 75, 183, 183, 119, 92, 183, 121,
178, 178, 178, 178, 130, 133, 178, 178, 126, 71, 183, 122, 183, 183, 183, 183, 183, 183, 107, 183,
178, 178, 172, 178, 178, 178, 78, 178, 178, 128, 183, 183, 183, 65, 183, 64, 136, 183, 183, 120,
76, 178, 178, 178, 178, 178, 178, 134, 178, 178, 93, 183, 183, 183, 183, 183, 183, 183, 183, 183,
178, 178, 178, 178, 135, 178, 178, 178, 79, 178, 183, 183, 183, 134, 137, 183, 128, 183, 66, 183,
136, 118, 119, 178, 178, 178, 62, 178, 178, 173, 183, 183, 183, 183, 183, 183, 183, 135, 138, 183,
124, 80, 0 183, 183, 183, 131, 71, 183, 183, 183, 177, 183,
183, 183, 78, 183, 183, 133, 76, 183, 183, 183,
183, 183, 183, 183, 183, 183, 139, 183, 183, 183,
183, 183, 183, 183, 183, 140, 183, 183, 183, 183,
79, 183, 141, 84, 183, 123, 124, 86, 183, 183,
183, 62, 183, 183, 183, 178, 183, 129, 80, 183,
183, 183, 183, 81, 0
} ; } ;
static yyconst flex_int32_t yy_ec[256] = static yyconst flex_int32_t yy_ec[256] =
...@@ -513,15 +519,15 @@ static yyconst flex_int32_t yy_ec[256] = ...@@ -513,15 +519,15 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 4, 1, 1, 1, 5, 6, 1, 7, 1, 2, 4, 1, 1, 1, 5, 6, 1, 7,
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 20, 20, 21, 21, 22, 23, 24, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
25, 26, 27, 1, 28, 29, 30, 31, 32, 33, 28, 29, 30, 1, 31, 32, 33, 34, 35, 36,
34, 34, 34, 34, 34, 34, 35, 34, 36, 34, 37, 37, 37, 37, 37, 37, 38, 37, 39, 37,
34, 37, 38, 34, 39, 34, 34, 40, 34, 34, 37, 40, 41, 42, 43, 37, 37, 44, 45, 37,
41, 1, 42, 43, 44, 1, 45, 46, 47, 48, 46, 1, 47, 48, 49, 1, 50, 51, 52, 53,
49, 50, 51, 52, 53, 34, 54, 55, 56, 57, 54, 55, 56, 57, 58, 37, 59, 60, 61, 62,
58, 59, 34, 60, 61, 62, 63, 64, 65, 66, 63, 64, 37, 65, 66, 67, 68, 69, 70, 71,
67, 68, 69, 70, 71, 72, 1, 1, 1, 1, 72, 73, 74, 75, 76, 77, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
...@@ -538,334 +544,357 @@ static yyconst flex_int32_t yy_ec[256] = ...@@ -538,334 +544,357 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1 1, 1, 1, 1, 1
} ; } ;
static yyconst flex_int32_t yy_meta[73] = static yyconst flex_int32_t yy_meta[78] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 3, 1, 4, 4, 4, 4, 4, 4,
2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1,
3, 2, 2, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 7, 8, 8, 8, 8,
1, 1, 1, 4, 3, 3, 3, 3, 2, 2, 8, 8, 9, 8, 8, 1, 1, 1, 8, 5,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 7, 8, 8, 8, 8, 8,
4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8,
1, 1 8, 8, 8, 1, 1, 1, 1
} ; } ;
static yyconst flex_int16_t yy_base[829] = static yyconst flex_int16_t yy_base[895] =
{ 0, { 0,
0, 0, 72, 0, 1020, 1021, 1021, 1021, 994, 120, 0, 0, 77, 0, 1089, 1090, 1090, 1090, 1060, 127,
141, 1021, 1021, 993, 138, 1021, 137, 135, 992, 154, 151, 1090, 1090, 1059, 148, 1090, 147, 145, 1058, 167,
208, 990, 1021, 154, 990, 132, 1021, 0, 1021, 1021, 158, 1056, 1090, 167, 1056, 145, 1090, 0, 1090, 1090,
139, 130, 123, 140, 147, 133, 177, 956, 186, 151, 149, 1034, 147, 135, 155, 162, 146, 174, 1019, 172,
139, 116, 161, 950, 173, 963, 193, 199, 208, 215, 178, 179, 153, 196, 1013, 198, 1026, 200, 197, 213,
108, 1021, 184, 1021, 1021, 1021, 1021, 1021, 0, 1021, 202, 113, 1011, 1090, 153, 1090, 1090, 1090, 1090, 1090,
1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 230, 0, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090,
1021, 235, 235, 0, 271, 1021, 0, 1021, 1021, 1021, 1090, 237, 1090, 241, 237, 271, 243, 1090, 0, 1090,
986, 1021, 1021, 1021, 985, 0, 1021, 1021, 947, 952, 1090, 1090, 1050, 1090, 1090, 1090, 1049, 0, 1090, 1090,
152, 949, 957, 956, 943, 946, 957, 243, 951, 939, 1010, 1008, 1013, 156, 1010, 1018, 1017, 1004, 1007, 1018,
936, 949, 936, 933, 933, 939, 147, 248, 933, 943, 226, 1012, 1000, 997, 1010, 997, 994, 994, 1000, 189,
929, 935, 938, 939, 0, 931, 941, 249, 940, 935, 235, 994, 1004, 990, 996, 999, 1000, 0, 992, 1002,
916, 177, 920, 933, 924, 184, 917, 250, 929, 931, 230, 1001, 982, 995, 976, 216, 980, 993, 984, 243,
257, 920, 251, 907, 916, 260, 257, 920, 916, 918, 977, 237, 989, 991, 250, 980, 259, 967, 976, 253,
907, 910, 196, 217, 269, 919, 907, 919, 262, 912, 259, 980, 976, 978, 967, 970, 250, 255, 269, 979,
911, 1021, 1021, 0, 311, 1021, 292, 328, 1021, 1021, 967, 979, 266, 972, 971, 959, 1090, 1090, 0, 318,
335, 342, 325, 1021, 1021, 910, 0, 906, 901, 905, 1090, 296, 323, 1090, 1090, 325, 324, 286, 1090, 1090,
914, 911, 316, 895, 895, 906, 898, 215, 908, 905, 977, 968, 0, 964, 959, 963, 972, 969, 298, 953,
905, 903, 900, 892, 898, 885, 883, 895, 881, 897, 953, 964, 956, 271, 966, 963, 963, 961, 958, 950,
0, 894, 882, 889, 886, 890, 891, 884, 881, 870, 956, 943, 941, 953, 939, 955, 0, 952, 940, 947,
869, 882, 885, 873, 881, 869, 875, 866, 316, 871, 944, 948, 949, 942, 939, 928, 927, 940, 943, 931,
874, 865, 872, 861, 865, 856, 870, 869, 860, 866, 942, 938, 926, 932, 923, 338, 928, 931, 922, 929,
308, 850, 853, 851, 850, 860, 850, 845, 843, 845, 918, 922, 913, 927, 926, 917, 923, 295, 907, 910,
855, 841, 843, 840, 851, 850, 853, 835, 318, 843, 908, 907, 917, 907, 902, 900, 902, 912, 898, 900,
839, 837, 846, 825, 354, 843, 845, 834, 826, 364, 897, 908, 907, 910, 892, 298, 900, 896, 894, 903,
378, 385, 397, 1021, 1021, 823, 833, 832, 0, 830, 882, 349, 900, 902, 891, 883, 916, 354, 370, 368,
372, 0, 0, 823, 821, 821, 822, 817, 825, 814, 383, 1090, 1090, 887, 878, 888, 887, 0, 885, 379,
831, 820, 390, 0, 0, 814, 824, 823, 823, 0, 0, 0, 878, 876, 876, 877, 872, 880, 869, 886,
808, 402, 0, 0, 810, 405, 817, 818, 809, 803, 875, 382, 0, 0, 869, 879, 878, 878, 0, 863,
802, 803, 802, 802, 408, 797, 0, 0, 793, 792, 385, 0, 0, 865, 390, 872, 873, 864, 858, 857,
791, 793, 794, 799, 793, 789, 802, 797, 797, 795, 858, 857, 857, 342, 393, 852, 0, 0, 848, 847,
794, 788, 782, 784, 783, 787, 792, 778, 781, 776, 846, 848, 849, 854, 848, 844, 857, 852, 852, 850,
784, 789, 777, 774, 786, 777, 0, 0, 783, 779, 849, 843, 837, 839, 838, 842, 847, 833, 836, 831,
0, 771, 771, 776, 767, 774, 414, 771, 0, 0, 839, 844, 832, 829, 841, 832, 0, 0, 838, 834,
0, 0, 761, 773, 772, 771, 772, 772, 0, 0, 0, 826, 826, 831, 822, 829, 396, 826, 0, 0,
0, 0, 759, 0, 767, 758, 0, 757, 758, 752, 0, 0, 816, 828, 827, 814, 815, 824, 825, 825,
762, 0, 0, 0, 753, 0, 749, 0, 0, 0, 0, 0, 0, 0, 812, 0, 820, 811, 0, 810,
0, 0, 0, 0, 0, 0, 759, 419, 758, 0, 811, 805, 815, 0, 0, 0, 806, 0, 802, 0,
0, 756, 752, 749, 0, 0, 0, 741, 421, 424, 0, 0, 0, 0, 0, 0, 0, 0, 812, 400,
427, 746, 742, 747, 738, 736, 749, 734, 0, 734, 811, 0, 0, 809, 805, 802, 846, 845, 0, 0,
747, 736, 732, 738, 733, 740, 740, 0, 737, 734, 0, 792, 403, 409, 412, 797, 793, 798, 789, 787,
738, 722, 720, 723, 729, 735, 730, 729, 717, 0, 800, 785, 0, 785, 798, 787, 783, 789, 784, 791,
719, 720, 0, 0, 0, 0, 717, 720, 0, 714, 791, 0, 788, 785, 789, 773, 771, 774, 780, 786,
0, 727, 707, 716, 711, 0, 704, 704, 717, 0, 781, 780, 768, 0, 770, 771, 0, 0, 0, 0,
719, 0, 434, 732, 731, 730, 697, 696, 0, 713, 768, 771, 0, 765, 775, 766, 0, 776, 756, 765,
712, 707, 0, 0, 0, 0, 0, 0, 0, 0, 760, 0, 753, 753, 766, 0, 768, 0, 418, 783,
0, 0, 696, 709, 696, 693, 0, 0, 698, 697, 782, 781, 746, 745, 0, 762, 761, 756, 793, 784,
0, 694, 701, 700, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 683, 0, 0, 682, 693, 437, 686, 692, 691, 743, 756, 743, 740, 0, 0, 745, 744, 0, 741,
688, 683, 680, 673, 673, 686, 671, 683, 0, 0, 748, 747, 0, 733, 0, 0, 0, 0, 0, 730,
676, 699, 698, 697, 664, 663, 339, 430, 0, 675, 0, 0, 729, 740, 423, 733, 739, 738, 735, 730,
678, 676, 665, 661, 0, 673, 670, 669, 659, 658, 727, 747, 733, 718, 718, 731, 716, 728, 0, 0,
648, 665, 651, 443, 659, 662, 0, 679, 678, 677, 721, 746, 745, 744, 709, 708, 233, 406, 0, 720,
644, 643, 0, 657, 644, 0, 654, 647, 648, 651, 723, 721, 710, 706, 721, 0, 0, 717, 714, 713,
0, 0, 0, 0, 671, 670, 0, 647, 650, 635, 703, 702, 692, 709, 695, 426, 703, 706, 0, 725,
642, 633, 640, 641, 641, 640, 626, 453, 638, 0, 724, 723, 688, 687, 0, 701, 688, 0, 698, 691,
639, 628, 627, 0, 0, 0, 652, 651, 650, 617, 683, 684, 690, 693, 0, 0, 0, 0, 715, 714,
616, 612, 620, 0, 648, 647, 0, 624, 627, 0, 0, 689, 692, 677, 684, 675, 682, 683, 683, 682,
460, 0, 605, 614, 0, 610, 609, 618, 618, 606, 668, 436, 679, 679, 0, 680, 669, 668, 0, 0,
620, 604, 618, 613, 0, 0, 0, 630, 629, 628, 0, 695, 694, 693, 658, 657, 653, 661, 0, 691,
595, 594, 0, 594, 0, 0, 446, 457, 618, 604, 690, 0, 665, 668, 0, 446, 0, 646, 667, 681,
607, 590, 602, 590, 589, 598, 598, 615, 614, 613, 653, 0, 649, 648, 657, 657, 645, 659, 643, 657,
580, 579, 0, 579, 580, 579, 589, 0, 592, 588, 652, 0, 0, 0, 671, 670, 669, 634, 633, 632,
590, 586, 573, 604, 451, 0, 581, 584, 576, 568, 0, 632, 0, 0, 426, 434, 658, 642, 645, 628,
575, 566, 587, 575, 571, 573, 571, 571, 570, 0, 640, 628, 627, 636, 636, 655, 654, 653, 618, 617,
558, 557, 567, 0, 587, 463, 0, 564, 567, 0, 0, 622, 612, 615, 616, 615, 625, 0, 628, 624,
567, 566, 550, 542, 550, 540, 548, 0, 545, 544, 626, 622, 609, 642, 442, 0, 617, 620, 610, 611,
565, 553, 551, 551, 535, 538, 552, 536, 567, 547, 603, 610, 601, 624, 610, 606, 608, 606, 606, 605,
548, 545, 542, 552, 529, 543, 542, 526, 525, 524, 0, 593, 592, 602, 0, 624, 445, 0, 599, 602,
545, 533, 531, 531, 512, 511, 0, 539, 511, 537, 599, 584, 0, 600, 599, 583, 575, 583, 573, 581,
509, 513, 512, 543, 523, 520, 0, 519, 522, 518, 0, 578, 577, 600, 586, 584, 584, 577, 567, 570,
520, 504, 501, 514, 499, 500, 507, 501, 490, 489, 584, 568, 601, 579, 580, 577, 574, 586, 561, 575,
0, 495, 494, 525, 505, 502, 0, 0, 0, 498, 574, 558, 557, 556, 579, 565, 563, 563, 566, 561,
0, 497, 0, 503, 502, 486, 483, 484, 0, 476, 542, 541, 0, 571, 541, 569, 539, 543, 542, 575,
484, 474, 480, 501, 480, 0, 0, 492, 491, 0, 553, 550, 0, 554, 548, 551, 547, 549, 532, 527,
0, 490, 489, 473, 470, 471, 485, 484, 461, 460, 534, 516, 514, 507, 501, 489, 124, 0, 162, 250,
466, 0, 0, 487, 459, 485, 477, 128, 151, 196, 289, 307, 327, 0, 329, 340, 0, 0, 366, 0,
227, 227, 269, 277, 0, 0, 291, 321, 0, 0, 367, 0, 395, 396, 383, 382, 395, 401, 0, 398,
329, 334, 0, 335, 343, 384, 0, 376, 420, 0, 408, 405, 416, 443, 423, 0, 0, 437, 438, 0,
0, 412, 404, 407, 413, 436, 442, 0, 445, 431, 0, 439, 440, 426, 425, 428, 441, 433, 446, 447,
465, 432, 436, 437, 0, 455, 456, 447, 0, 468, 426, 427, 435, 0, 0, 451, 461, 433, 463, 455,
0, 0, 0, 449, 450, 444, 0, 445, 446, 0, 449, 437, 455, 449, 438, 439, 447, 0, 0, 478,
0, 0, 1021, 510, 513, 516, 517, 518 464, 462, 463, 0, 0, 467, 456, 462, 0, 463,
449, 472, 0, 460, 485, 0, 0, 475, 482, 467,
465, 466, 458, 475, 482, 483, 0, 481, 465, 501,
465, 496, 522, 470, 471, 0, 488, 490, 491, 482,
0, 505, 0, 0, 513, 0, 0, 0, 485, 486,
480, 0, 506, 482, 483, 0, 537, 0, 0, 510,
521, 513, 516, 0, 1090, 556, 562, 568, 574, 578,
584, 585, 591, 594
} ; } ;
static yyconst flex_int16_t yy_def[829] = static yyconst flex_int16_t yy_def[895] =
{ 0, { 0,
823, 1, 823, 3, 823, 823, 823, 823, 823, 823, 885, 1, 885, 3, 885, 885, 885, 885, 885, 885,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
823, 823, 823, 823, 823, 823, 823, 824, 823, 823, 886, 885, 885, 885, 885, 885, 885, 887, 885, 885,
823, 824, 824, 824, 824, 824, 824, 824, 824, 824, 885, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 823, 823, 823, 823, 823, 823, 823, 825, 823, 887, 887, 887, 885, 885, 885, 885, 885, 885, 885,
823, 823, 823, 823, 823, 823, 823, 823, 823, 826, 888, 885, 885, 885, 885, 885, 885, 885, 885, 885,
823, 827, 20, 21, 823, 823, 828, 823, 823, 823, 885, 889, 885, 890, 20, 886, 891, 885, 892, 885,
823, 823, 823, 823, 823, 824, 823, 823, 824, 824, 885, 885, 885, 885, 885, 885, 885, 887, 885, 885,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 823, 823, 825, 823, 823, 827, 823, 823, 823, 887, 887, 887, 887, 887, 887, 885, 885, 888, 893,
823, 823, 828, 823, 823, 824, 824, 824, 824, 824, 885, 890, 894, 885, 885, 885, 891, 892, 885, 885,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 823, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
823, 823, 823, 823, 823, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 885, 893, 885,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 894, 885, 885, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
824, 824, 0, 823, 823, 823, 823, 823 887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887,
887, 887, 887, 887, 0, 885, 885, 885, 885, 885,
885, 885, 885, 885
} ; } ;
static yyconst flex_int16_t yy_nxt[1094] = static yyconst flex_int16_t yy_nxt[1168] =
{ 0, { 0,
6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 21, 21, 21, 21, 16, 17, 18, 19, 20, 21, 21, 21, 21, 21,
21, 22, 23, 24, 25, 26, 27, 28, 28, 28, 21, 21, 21, 21, 22, 23, 24, 25, 26, 27,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
29, 30, 31, 28, 32, 33, 34, 35, 36, 37, 28, 28, 28, 28, 28, 29, 30, 31, 32, 33,
38, 39, 40, 28, 41, 42, 43, 44, 45, 46, 34, 35, 36, 37, 38, 39, 40, 41, 28, 42,
47, 48, 49, 50, 51, 28, 28, 28, 52, 53, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
54, 55, 56, 57, 58, 56, 56, 56, 56, 56, 28, 53, 28, 54, 55, 56, 57, 58, 59, 60,
56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
56, 56, 56, 56, 56, 56, 56, 56, 56, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 61, 61, 61,
59, 59, 56, 56, 56, 59, 59, 59, 59, 59, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 61, 58, 58, 58, 61, 61, 61, 61, 61,
59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
56, 56, 56, 56, 61, 62, 63, 66, 68, 70, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
70, 70, 70, 70, 70, 70, 84, 85, 79, 150, 58, 58, 58, 58, 63, 64, 65, 68, 70, 72,
123, 69, 67, 87, 124, 64, 72, 151, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 154,
73, 73, 73, 73, 74, 80, 89, 81, 82, 786, 74, 81, 86, 87, 71, 69, 89, 155, 66, 74,
92, 88, 93, 121, 95, 75, 94, 103, 96, 104, 157, 75, 75, 75, 75, 75, 75, 75, 75, 76,
90, 91, 76, 77, 97, 99, 122, 98, 105, 100, 76, 82, 77, 83, 84, 791, 90, 95, 92, 96,
115, 187, 75, 116, 101, 125, 117, 118, 152, 168, 78, 77, 127, 97, 98, 106, 128, 107, 99, 78,
102, 119, 188, 169, 120, 787, 76, 128, 126, 77, 79, 77, 93, 94, 100, 102, 108, 101, 174, 103,
72, 106, 74, 74, 74, 74, 74, 74, 74, 107, 77, 115, 175, 109, 104, 78, 792, 158, 125, 116,
112, 108, 129, 207, 109, 130, 212, 132, 113, 75, 105, 110, 118, 111, 78, 119, 112, 79, 120, 121,
110, 208, 213, 788, 133, 134, 76, 139, 135, 114, 117, 126, 113, 122, 123, 129, 124, 132, 193, 136,
140, 237, 238, 153, 136, 137, 75, 138, 141, 147, 143, 151, 166, 144, 166, 152, 137, 138, 130, 194,
143, 155, 156, 148, 144, 142, 158, 159, 145, 239, 139, 145, 133, 574, 153, 134, 140, 141, 146, 142,
76, 146, 149, 160, 823, 268, 269, 240, 155, 156, 147, 160, 161, 575, 148, 163, 164, 214, 149, 165,
161, 789, 161, 158, 159, 162, 162, 162, 162, 162, 885, 150, 182, 74, 195, 215, 183, 184, 222, 205,
162, 162, 189, 790, 176, 224, 215, 160, 177, 178, 160, 161, 206, 207, 163, 164, 208, 196, 209, 227,
823, 220, 230, 199, 228, 190, 200, 201, 225, 216, 219, 223, 235, 224, 165, 77, 220, 885, 231, 237,
202, 217, 203, 241, 246, 231, 247, 221, 222, 229, 244, 245, 246, 78, 793, 228, 229, 236, 248, 794,
250, 242, 250, 158, 159, 251, 251, 251, 251, 251, 247, 232, 238, 253, 77, 254, 249, 258, 263, 258,
251, 251, 299, 300, 301, 791, 792, 252, 793, 252, 163, 164, 260, 885, 260, 885, 277, 278, 78, 167,
158, 159, 253, 253, 253, 253, 253, 253, 253, 162, 167, 167, 167, 167, 167, 167, 167, 167, 167, 163,
162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 271, 342, 263, 309, 310, 311, 323, 795, 262,
162, 162, 162, 255, 262, 313, 550, 332, 794, 314, 343, 324, 397, 398, 272, 349, 350, 351, 259, 259,
339, 340, 341, 795, 254, 333, 551, 263, 251, 251, 259, 259, 259, 259, 259, 259, 259, 259, 262, 885,
251, 251, 251, 251, 251, 796, 797, 255, 350, 351, 796, 885, 261, 261, 261, 261, 261, 261, 261, 261,
352, 254, 251, 251, 251, 251, 251, 251, 251, 253, 261, 261, 885, 797, 885, 362, 363, 364, 374, 375,
253, 253, 253, 253, 253, 253, 362, 363, 364, 798, 376, 382, 383, 384, 798, 161, 386, 387, 388, 399,
156, 253, 253, 253, 253, 253, 253, 253, 370, 371, 400, 401, 438, 439, 440, 460, 461, 462, 164, 472,
372, 374, 375, 376, 385, 386, 387, 156, 799, 159, 473, 474, 799, 800, 161, 475, 476, 477, 478, 479,
424, 425, 426, 800, 444, 445, 446, 454, 455, 456, 480, 463, 464, 522, 523, 524, 576, 164, 550, 551,
457, 458, 459, 460, 461, 462, 159, 447, 448, 502, 552, 592, 593, 594, 801, 802, 577, 803, 804, 525,
503, 504, 528, 529, 530, 801, 802, 552, 567, 568, 526, 625, 626, 627, 553, 554, 671, 595, 596, 805,
569, 803, 505, 506, 804, 531, 532, 553, 598, 599, 597, 646, 647, 648, 673, 806, 672, 628, 629, 807,
600, 570, 571, 640, 572, 618, 619, 620, 670, 805, 808, 674, 703, 675, 676, 724, 809, 649, 650, 704,
806, 601, 602, 641, 642, 671, 807, 672, 621, 622, 810, 705, 725, 811, 726, 812, 813, 814, 815, 816,
690, 643, 808, 644, 645, 809, 810, 691, 811, 692, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826,
812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836,
822, 86, 86, 86, 154, 154, 154, 70, 157, 163, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846,
163, 785, 784, 783, 782, 781, 780, 779, 778, 777, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856,
776, 775, 774, 773, 772, 771, 770, 769, 768, 767, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866,
766, 765, 764, 763, 762, 761, 760, 759, 758, 757, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876,
756, 755, 754, 753, 752, 751, 750, 749, 748, 747, 877, 878, 879, 880, 881, 882, 883, 884, 76, 76,
746, 745, 744, 743, 742, 741, 740, 739, 738, 737, 790, 76, 789, 788, 76, 88, 88, 88, 88, 88,
736, 735, 734, 733, 732, 731, 730, 729, 728, 727, 88, 159, 159, 159, 159, 159, 159, 72, 787, 72,
726, 725, 724, 723, 722, 721, 720, 719, 718, 717, 72, 162, 786, 162, 162, 167, 785, 167, 168, 168,
716, 715, 714, 713, 712, 711, 710, 709, 708, 707, 168, 168, 259, 784, 259, 261, 783, 261, 782, 781,
706, 705, 704, 703, 702, 701, 700, 699, 698, 697, 780, 779, 778, 777, 776, 775, 774, 773, 772, 771,
696, 695, 694, 693, 689, 688, 687, 686, 685, 684, 770, 769, 768, 767, 766, 765, 764, 763, 762, 761,
683, 682, 681, 680, 679, 678, 677, 676, 675, 674, 760, 759, 758, 757, 756, 755, 754, 753, 752, 751,
673, 669, 668, 667, 666, 665, 664, 663, 662, 661, 750, 749, 748, 747, 746, 745, 744, 743, 742, 741,
660, 659, 658, 657, 656, 655, 654, 653, 652, 651, 740, 739, 738, 737, 736, 735, 734, 733, 732, 731,
650, 649, 648, 647, 646, 639, 638, 637, 636, 635, 730, 729, 728, 727, 723, 722, 721, 720, 719, 718,
634, 633, 632, 631, 630, 629, 628, 627, 626, 625, 717, 716, 715, 714, 713, 712, 711, 710, 709, 708,
624, 623, 617, 616, 615, 614, 613, 612, 611, 610, 707, 706, 702, 701, 700, 699, 698, 697, 696, 695,
609, 608, 607, 606, 605, 604, 603, 597, 596, 595, 694, 693, 692, 691, 690, 689, 688, 687, 686, 685,
594, 593, 592, 591, 590, 589, 588, 587, 586, 585, 684, 683, 682, 681, 680, 679, 678, 677, 670, 669,
584, 583, 582, 581, 580, 579, 578, 577, 576, 575, 668, 667, 666, 665, 664, 663, 662, 661, 660, 659,
574, 573, 566, 565, 564, 563, 562, 561, 560, 559, 658, 657, 656, 655, 654, 653, 652, 651, 645, 644,
558, 557, 556, 555, 554, 549, 548, 547, 546, 545, 643, 642, 641, 640, 639, 638, 637, 636, 635, 634,
544, 543, 542, 541, 540, 539, 538, 537, 536, 535, 633, 632, 631, 630, 624, 623, 622, 621, 620, 619,
534, 533, 527, 526, 525, 524, 523, 522, 521, 520, 618, 617, 616, 615, 614, 613, 612, 611, 610, 609,
519, 518, 517, 516, 515, 514, 513, 512, 511, 510, 608, 607, 606, 605, 604, 603, 602, 601, 600, 599,
509, 508, 507, 501, 500, 499, 498, 497, 496, 495, 598, 591, 590, 589, 588, 587, 586, 585, 584, 583,
494, 493, 492, 491, 490, 489, 488, 487, 486, 485, 582, 581, 580, 579, 578, 573, 572, 571, 570, 569,
484, 483, 482, 481, 480, 479, 478, 477, 476, 475, 568, 567, 566, 565, 564, 563, 562, 561, 560, 559,
474, 473, 472, 471, 470, 469, 468, 467, 466, 465, 558, 557, 556, 555, 549, 548, 547, 546, 545, 544,
464, 463, 453, 452, 451, 450, 449, 443, 442, 441, 543, 542, 541, 540, 539, 538, 537, 536, 535, 534,
440, 439, 438, 437, 436, 435, 434, 433, 432, 431, 533, 532, 531, 530, 529, 528, 527, 521, 520, 519,
430, 429, 428, 427, 423, 422, 421, 420, 419, 418, 518, 517, 516, 515, 514, 513, 512, 511, 510, 509,
417, 416, 415, 414, 413, 412, 411, 410, 409, 408, 508, 507, 506, 505, 504, 503, 502, 501, 500, 499,
407, 406, 405, 404, 403, 402, 401, 400, 399, 398, 498, 497, 496, 495, 494, 493, 492, 491, 490, 489,
397, 396, 395, 394, 393, 392, 391, 390, 389, 388, 488, 487, 486, 485, 484, 483, 482, 481, 471, 470,
384, 383, 382, 381, 380, 379, 378, 377, 373, 369, 469, 468, 467, 466, 465, 459, 458, 457, 456, 455,
368, 367, 366, 365, 361, 360, 359, 358, 357, 356, 454, 453, 452, 451, 450, 449, 448, 447, 446, 445,
355, 354, 353, 349, 348, 347, 346, 345, 344, 343, 444, 443, 442, 441, 437, 436, 435, 434, 433, 432,
342, 338, 337, 336, 335, 334, 331, 330, 329, 328, 431, 430, 429, 428, 427, 426, 425, 424, 423, 422,
327, 326, 325, 324, 323, 322, 321, 320, 319, 318, 421, 420, 419, 418, 417, 416, 415, 414, 413, 412,
317, 316, 315, 312, 311, 310, 309, 308, 307, 306, 411, 410, 409, 408, 407, 406, 405, 404, 403, 402,
305, 304, 303, 302, 298, 297, 296, 295, 294, 293, 396, 395, 394, 393, 392, 391, 390, 389, 385, 381,
292, 291, 290, 289, 288, 287, 286, 285, 284, 283, 380, 379, 378, 377, 373, 372, 371, 370, 369, 368,
282, 281, 280, 279, 278, 277, 276, 275, 274, 273, 367, 366, 365, 361, 360, 359, 358, 357, 356, 355,
272, 271, 270, 267, 266, 265, 264, 261, 260, 259, 354, 353, 352, 348, 347, 346, 345, 344, 341, 340,
258, 257, 256, 249, 248, 245, 244, 243, 236, 235, 339, 338, 337, 336, 335, 334, 333, 332, 331, 330,
234, 233, 232, 227, 226, 223, 219, 218, 214, 211, 329, 328, 327, 326, 325, 322, 321, 320, 319, 318,
210, 209, 206, 205, 204, 198, 197, 196, 195, 194, 317, 316, 315, 314, 313, 312, 308, 307, 306, 305,
193, 192, 191, 186, 185, 184, 183, 182, 181, 180, 304, 303, 302, 301, 300, 299, 298, 297, 296, 295,
179, 175, 174, 173, 172, 171, 170, 167, 166, 165, 294, 293, 292, 291, 290, 289, 288, 287, 286, 285,
164, 131, 127, 111, 83, 78, 71, 65, 60, 823, 284, 283, 282, 281, 280, 279, 276, 275, 274, 273,
5, 823, 823, 823, 823, 823, 823, 823, 823, 823, 270, 269, 268, 267, 266, 265, 264, 257, 256, 255,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 252, 251, 250, 243, 242, 241, 240, 239, 234, 233,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 230, 226, 225, 221, 218, 217, 216, 213, 212, 211,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 210, 204, 203, 202, 201, 200, 199, 198, 197, 192,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 191, 190, 189, 188, 187, 186, 185, 181, 180, 179,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 178, 177, 176, 173, 172, 171, 170, 169, 156, 135,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 131, 114, 91, 85, 80, 73, 67, 62, 885, 5,
823, 823, 823 885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885
} ; } ;
static yyconst flex_int16_t yy_chk[1094] = static yyconst flex_int16_t yy_chk[1168] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
...@@ -874,7 +903,7 @@ static yyconst flex_int16_t yy_chk[1094] = ...@@ -874,7 +903,7 @@ static yyconst flex_int16_t yy_chk[1094] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
...@@ -882,116 +911,123 @@ static yyconst flex_int16_t yy_chk[1094] = ...@@ -882,116 +911,123 @@ static yyconst flex_int16_t yy_chk[1094] =
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 10, 10, 11, 15, 17, 18, 3, 3, 3, 3, 10, 10, 11, 15, 17, 18,
18, 18, 18, 18, 18, 18, 26, 26, 24, 51, 18, 18, 18, 18, 18, 18, 18, 18, 18, 52,
42, 17, 15, 31, 42, 11, 20, 51, 20, 20, 21, 24, 26, 26, 17, 15, 31, 52, 11, 20,
20, 20, 20, 20, 20, 24, 32, 24, 24, 768, 55, 20, 20, 20, 20, 20, 20, 20, 20, 20,
33, 31, 33, 41, 34, 20, 33, 36, 34, 36, 20, 24, 21, 24, 24, 757, 31, 34, 33, 34,
32, 32, 20, 20, 34, 35, 41, 34, 36, 35,
21, 20, 43, 34, 35, 37, 43, 37, 35, 20,
40, 107, 20, 40, 35, 43, 40, 40, 53, 91, 20, 21, 33, 33, 35, 36, 37, 35, 94, 36,
35, 40, 107, 91, 40, 769, 20, 45, 43, 20, 20, 40, 94, 38, 36, 21, 759, 55, 42, 40,
21, 37, 21, 21, 21, 21, 21, 21, 21, 37, 36, 38, 41, 38, 20, 41, 38, 20, 41, 41,
39, 37, 45, 122, 37, 45, 126, 47, 39, 21, 40, 42, 38, 41, 41, 44, 41, 46, 110, 48,
37, 122, 126, 770, 47, 47, 21, 48, 47, 39, 49, 51, 77, 49, 77, 51, 48, 48, 44, 110,
48, 143, 143, 53, 47, 47, 21, 47, 48, 50, 48, 49, 46, 527, 51, 46, 48, 48, 49, 48,
49, 70, 70, 50, 49, 48, 72, 72, 49, 144, 50, 72, 72, 527, 50, 74, 74, 126, 50, 75,
21, 49, 50, 73, 73, 178, 178, 144, 70, 70, 75, 50, 101, 76, 111, 126, 101, 101, 132, 121,
75, 771, 75, 72, 72, 75, 75, 75, 75, 75, 72, 72, 121, 121, 74, 74, 121, 111, 121, 135,
75, 75, 108, 772, 98, 133, 128, 73, 98, 98,
130, 132, 140, 132, 75, 76, 130, 75, 137, 141,
73, 131, 137, 118, 136, 108, 118, 118, 133, 128, 147, 147, 148, 76, 760, 135, 135, 140, 149, 761,
118, 128, 118, 145, 149, 137, 149, 131, 131, 136, 148, 137, 141, 153, 76, 153, 149, 160, 168, 160,
155, 145, 155, 157, 157, 155, 155, 155, 155, 155, 162, 162, 163, 167, 163, 167, 184, 184, 76, 166,
155, 155, 209, 209, 209, 773, 774, 158, 777, 158, 166, 166, 166, 166, 166, 166, 166, 166, 166, 162,
157, 157, 158, 158, 158, 158, 158, 158, 158, 161, 162, 179, 246, 168, 216, 216, 216, 228, 762, 167,
161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 246, 228, 304, 304, 179, 252, 252, 252, 258, 258,
162, 162, 162, 163, 173, 221, 507, 239, 778, 221, 258, 258, 258, 258, 258, 258, 258, 258, 167, 259,
245, 245, 245, 781, 162, 239, 507, 173, 250, 250, 763, 259, 260, 260, 260, 260, 260, 260, 260, 260,
250, 250, 250, 250, 250, 782, 784, 163, 261, 261, 260, 260, 261, 765, 261, 270, 270, 270, 282, 282,
261, 162, 251, 251, 251, 251, 251, 251, 251, 252,
282, 291, 291, 291, 766, 259, 295, 295, 295, 305,
252, 252, 252, 252, 252, 252, 273, 273, 273, 785, 305, 305, 347, 347, 347, 390, 390, 390, 261, 403,
251, 253, 253, 253, 253, 253, 253, 253, 282, 282, 403, 403, 769, 771, 259, 404, 404, 404, 405, 405,
282, 286, 286, 286, 295, 295, 295, 251, 786, 253, 405, 390, 390, 459, 459, 459, 528, 261, 505, 505,
337, 337, 337, 788, 378, 378, 378, 389, 389, 389, 505, 546, 546, 546, 773, 774, 528, 775, 776, 459,
390, 390, 390, 391, 391, 391, 253, 378, 378, 443, 459, 582, 582, 582, 505, 505, 635, 546, 546, 777,
443, 443, 487, 487, 487, 789, 792, 508, 524, 524, 546, 606, 606, 606, 636, 778, 635, 582, 582, 780,
524, 793, 443, 443, 794, 487, 487, 508, 558, 558, 781, 636, 665, 636, 636, 687, 782, 606, 606, 665,
558, 524, 524, 607, 524, 581, 581, 581, 635, 795, 783, 665, 687, 784, 687, 785, 788, 789, 792, 793,
796, 558, 558, 607, 608, 635, 797, 635, 581, 581, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803,
656, 608, 799, 608, 608, 800, 801, 656, 802, 656,
806, 807, 808, 809, 810, 811, 812, 813, 814, 815,
803, 804, 806, 807, 808, 810, 814, 815, 816, 818, 816, 817, 820, 821, 822, 823, 826, 827, 828, 830,
819, 824, 824, 824, 825, 825, 825, 826, 827, 828, 831, 832, 834, 835, 838, 839, 840, 841, 842, 843,
828, 767, 766, 765, 764, 761, 760, 759, 758, 757, 844, 845, 846, 848, 849, 850, 851, 852, 853, 854,
756, 755, 754, 753, 752, 749, 748, 745, 744, 743, 855, 857, 858, 859, 860, 862, 865, 869, 870, 871,
742, 741, 740, 738, 737, 736, 735, 734, 732, 730, 873, 874, 875, 877, 880, 881, 882, 883, 886, 886,
726, 725, 724, 723, 722, 720, 719, 718, 717, 716, 756, 886, 755, 754, 886, 887, 887, 887, 887, 887,
715, 714, 713, 712, 711, 710, 709, 708, 706, 705, 887, 888, 888, 888, 888, 888, 888, 889, 753, 889,
704, 703, 702, 701, 700, 699, 698, 696, 695, 694, 889, 890, 752, 890, 890, 891, 751, 891, 892, 892,
693, 692, 691, 690, 689, 688, 687, 686, 685, 684, 892, 892, 893, 750, 893, 894, 749, 894, 748, 747,
683, 682, 681, 680, 679, 678, 677, 676, 675, 674,
746, 745, 744, 742, 741, 740, 739, 738, 737, 736,
673, 672, 671, 670, 669, 667, 666, 665, 664, 663, 735, 734, 732, 731, 730, 729, 728, 727, 726, 725,
662, 661, 659, 658, 655, 653, 652, 651, 649, 648, 724, 723, 722, 721, 720, 719, 718, 717, 716, 715,
647, 646, 645, 644, 643, 642, 641, 640, 639, 638, 714, 713, 712, 711, 710, 709, 708, 707, 706, 705,
637, 634, 633, 632, 631, 630, 629, 627, 626, 625, 704, 703, 702, 700, 699, 698, 697, 696, 695, 694,
624, 622, 621, 620, 619, 618, 617, 616, 615, 614, 692, 691, 690, 689, 686, 684, 683, 682, 680, 679,
613, 612, 611, 610, 609, 604, 602, 601, 600, 599, 678, 677, 676, 675, 674, 673, 672, 671, 670, 669,
598, 594, 593, 592, 591, 590, 589, 588, 587, 586, 668, 667, 664, 663, 662, 661, 660, 659, 657, 656,
584, 583, 579, 578, 576, 575, 573, 572, 571, 570, 655, 654, 653, 652, 650, 649, 648, 647, 646, 645,
569, 568, 567, 563, 562, 561, 559, 557, 556, 555, 644, 643, 642, 641, 640, 639, 638, 637, 632, 630,
554, 553, 552, 551, 550, 549, 548, 546, 545, 540,
629, 628, 627, 626, 625, 621, 620, 619, 618, 617,
539, 538, 537, 535, 534, 532, 531, 530, 529, 528, 616, 615, 614, 613, 611, 610, 609, 608, 604, 603,
526, 525, 523, 522, 521, 520, 519, 518, 517, 516, 601, 600, 598, 597, 596, 595, 594, 593, 592, 588,
514, 513, 512, 511, 510, 506, 505, 504, 503, 502, 587, 586, 584, 583, 581, 580, 579, 578, 577, 576,
501, 498, 497, 496, 495, 494, 493, 492, 491, 490, 575, 574, 573, 572, 570, 569, 564, 563, 562, 561,
489, 488, 486, 485, 482, 476, 474, 473, 472, 470, 560, 559, 557, 556, 554, 553, 552, 551, 550, 548,
469, 466, 465, 464, 463, 452, 451, 450, 448, 447, 547, 545, 544, 543, 542, 541, 540, 539, 538, 535,
446, 445, 444, 441, 439, 438, 437, 435, 434, 433, 534, 533, 532, 531, 530, 526, 525, 524, 523, 522,
432, 430, 428, 427, 422, 421, 419, 418, 417, 416, 521, 518, 517, 516, 515, 514, 513, 512, 511, 510,
415, 414, 413, 412, 411, 410, 409, 407, 406, 405, 509, 508, 507, 506, 504, 503, 500, 494, 492, 491,
404, 403, 402, 401, 400, 398, 397, 396, 395, 394,
490, 488, 487, 484, 483, 482, 481, 470, 469, 468,
393, 392, 388, 384, 383, 382, 379, 377, 367, 365, 467, 466, 464, 463, 462, 461, 460, 457, 455, 454,
361, 360, 359, 358, 356, 355, 353, 348, 347, 346, 453, 451, 450, 449, 448, 446, 445, 444, 442, 441,
345, 344, 343, 338, 336, 335, 334, 333, 332, 330, 436, 435, 433, 432, 431, 430, 429, 428, 427, 426,
329, 326, 325, 324, 323, 322, 321, 320, 319, 318, 425, 424, 423, 421, 420, 419, 418, 417, 416, 415,
317, 316, 315, 314, 313, 312, 311, 310, 309, 308, 414, 412, 411, 410, 409, 408, 407, 406, 402, 398,
307, 306, 305, 304, 303, 302, 301, 300, 299, 296, 397, 396, 395, 394, 391, 389, 379, 377, 373, 372,
294, 293, 292, 291, 290, 289, 288, 287, 285, 281, 371, 370, 368, 367, 365, 360, 359, 358, 357, 356,
279, 278, 277, 276, 272, 271, 270, 269, 268, 267, 355, 354, 353, 348, 346, 345, 344, 343, 342, 340,
266, 265, 264, 260, 258, 257, 256, 249, 248, 247, 339, 336, 335, 334, 333, 332, 331, 330, 329, 328,
246, 244, 243, 242, 241, 240, 238, 237, 236, 235,
234, 233, 232, 231, 230, 229, 228, 227, 226, 225,
224, 223, 222, 220, 219, 218, 217, 216, 215, 214,
213, 212, 211, 210, 208, 207, 206, 205, 204, 203,
202, 201, 200, 199, 198, 197, 196, 195, 194, 193,
192, 190, 189, 188, 187, 186, 185, 184, 183, 182,
181, 180, 179, 177, 176, 175, 174, 172, 171, 170,
169, 168, 166, 151, 150, 148, 147, 146, 142, 141,
140, 139, 138, 135, 134, 132, 130, 129, 127, 125,
124, 123, 121, 120, 119, 117, 116, 114, 113, 112,
111, 110, 109, 106, 105, 104, 103, 102, 101, 100,
99, 97, 96, 95, 94, 93, 92, 90, 89, 85,
81, 46, 44, 38, 25, 22, 19, 14, 9, 5,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823,
823, 823, 823, 823, 823, 823, 823, 823, 823, 823,
823, 823, 823
327, 326, 325, 324, 323, 322, 321, 320, 319, 318,
317, 316, 315, 314, 313, 312, 311, 310, 309, 306,
303, 302, 301, 300, 299, 298, 297, 296, 294, 290,
288, 287, 286, 285, 281, 280, 279, 278, 277, 276,
275, 274, 273, 269, 267, 266, 265, 264, 257, 256,
255, 254, 253, 251, 250, 249, 248, 247, 245, 244,
243, 242, 241, 240, 239, 238, 237, 236, 235, 234,
233, 232, 231, 230, 229, 227, 226, 225, 224, 223,
222, 221, 220, 219, 218, 217, 215, 214, 213, 212,
211, 210, 209, 208, 207, 206, 205, 204, 203, 202,
201, 200, 199, 198, 196, 195, 194, 193, 192, 191,
190, 189, 188, 187, 186, 185, 183, 182, 181, 180,
178, 177, 176, 175, 174, 172, 171, 156, 155, 154,
152, 151, 150, 146, 145, 144, 143, 142, 139, 138,
136, 134, 133, 131, 129, 128, 127, 125, 124, 123,
122, 120, 119, 117, 116, 115, 114, 113, 112, 109,
108, 107, 106, 105, 104, 103, 102, 100, 99, 98,
97, 96, 95, 93, 92, 91, 87, 83, 53, 47,
45, 39, 32, 25, 22, 19, 14, 9, 5, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885,
885, 885, 885, 885, 885, 885, 885
} ; } ;
/* Table of booleans, true if rule could match eol. */ /* Table of booleans, true if rule could match eol. */
static yyconst flex_int32_t yy_rule_can_match_eol[242] = static yyconst flex_int32_t yy_rule_can_match_eol[247] =
{ 0, { 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
...@@ -1004,8 +1040,8 @@ static yyconst flex_int32_t yy_rule_can_match_eol[242] = ...@@ -1004,8 +1040,8 @@ static yyconst flex_int32_t yy_rule_can_match_eol[242] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, }; 0, 0, 0, 0, 1, 0, 0, };
/* The intent behind this definition is that it'll catch /* The intent behind this definition is that it'll catch
* any uses of REJECT which flex missed. * any uses of REJECT which flex missed.
...@@ -1067,10 +1103,12 @@ static int ES2_ident_ES3_keyword(TParseContext *context, int token); ...@@ -1067,10 +1103,12 @@ static int ES2_ident_ES3_keyword(TParseContext *context, int token);
static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token); static int ES2_ident_ES3_reserved_ES3_1_keyword(TParseContext *context, int token);
static int ES2_and_ES3_reserved_ES3_1_keyword(TParseContext *context, int token); 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 ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token);
static int ES3_extension_keyword_else_ident(TParseContext *context, const char *extension, int token);
static int uint_constant(TParseContext *context); static int uint_constant(TParseContext *context);
static int int_constant(TParseContext *context); static int int_constant(TParseContext *context);
static int float_constant(yyscan_t yyscanner); static int float_constant(yyscan_t yyscanner);
static int floatsuffix_check(TParseContext* context); static int floatsuffix_check(TParseContext* context);
static int yuvcscstandardext_constant(TParseContext *context);
#define INITIAL 0 #define INITIAL 0
#define FIELDS 1 #define FIELDS 1
...@@ -1363,13 +1401,13 @@ yy_match: ...@@ -1363,13 +1401,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 824 ) if ( yy_current_state >= 886 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp; ++yy_cp;
} }
while ( yy_current_state != 823 ); while ( yy_current_state != 885 );
yy_cp = yyg->yy_last_accepting_cpos; yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state; yy_current_state = yyg->yy_last_accepting_state;
...@@ -1723,86 +1761,101 @@ YY_RULE_SETUP ...@@ -1723,86 +1761,101 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 81: case 81:
YY_RULE_SETUP YY_RULE_SETUP
{ return STRUCT; } { return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", SAMPLEREXTERNAL2DY2YEXT); }
YY_BREAK YY_BREAK
case 82: case 82:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, LAYOUT); } { return STRUCT; }
YY_BREAK YY_BREAK
case 83: case 83:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); } { return ES2_ident_ES3_keyword(context, LAYOUT); }
YY_BREAK YY_BREAK
case 84: case 84:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); } { return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", YUVCSCSTANDARDEXT); }
YY_BREAK YY_BREAK
case 85: case 85:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); } { return yuvcscstandardext_constant(context); }
YY_BREAK YY_BREAK
case 86: case 86:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); } { return yuvcscstandardext_constant(context); }
YY_BREAK YY_BREAK
case 87: case 87:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); } { return yuvcscstandardext_constant(context); }
YY_BREAK YY_BREAK
case 88: case 88:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
YY_BREAK YY_BREAK
case 89: case 89:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
YY_BREAK YY_BREAK
case 90: case 90:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
YY_BREAK YY_BREAK
case 91: case 91:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
YY_BREAK YY_BREAK
case 92: case 92:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
YY_BREAK YY_BREAK
case 93: case 93:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
YY_BREAK YY_BREAK
case 94: case 94:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
YY_BREAK YY_BREAK
case 95: case 95:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
YY_BREAK YY_BREAK
case 96: case 96:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
YY_BREAK YY_BREAK
case 97: case 97:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
YY_BREAK YY_BREAK
case 98: case 98:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
YY_BREAK YY_BREAK
case 99: case 99:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
YY_BREAK YY_BREAK
/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
case 100: case 100:
YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
YY_BREAK
case 101: case 101:
YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
YY_BREAK
case 102: case 102:
YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
YY_BREAK
case 103: case 103:
YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
YY_BREAK
case 104: case 104:
YY_RULE_SETUP
{ return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); }
YY_BREAK
/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
case 105: case 105:
case 106: case 106:
case 107: case 107:
...@@ -1835,6 +1888,11 @@ case 133: ...@@ -1835,6 +1888,11 @@ case 133:
case 134: case 134:
case 135: case 135:
case 136: case 136:
case 137:
case 138:
case 139:
case 140:
case 141:
YY_RULE_SETUP YY_RULE_SETUP
{ {
if (context->getShaderVersion() < 300) { if (context->getShaderVersion() < 300) {
...@@ -1845,7 +1903,7 @@ YY_RULE_SETUP ...@@ -1845,7 +1903,7 @@ YY_RULE_SETUP
} }
YY_BREAK YY_BREAK
/* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */ /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
case 137: case 142:
YY_RULE_SETUP YY_RULE_SETUP
{ {
if (context->getShaderVersion() >= 300) if (context->getShaderVersion() >= 300)
...@@ -1858,11 +1916,6 @@ YY_RULE_SETUP ...@@ -1858,11 +1916,6 @@ YY_RULE_SETUP
} }
YY_BREAK YY_BREAK
/* Reserved keywords */ /* Reserved keywords */
case 138:
case 139:
case 140:
case 141:
case 142:
case 143: case 143:
case 144: case 144:
case 145: case 145:
...@@ -1898,245 +1951,250 @@ case 174: ...@@ -1898,245 +1951,250 @@ case 174:
case 175: case 175:
case 176: case 176:
case 177: case 177:
case 178:
case 179:
case 180:
case 181:
case 182:
YY_RULE_SETUP YY_RULE_SETUP
{ return reserved_word(yyscanner); } { return reserved_word(yyscanner); }
YY_BREAK YY_BREAK
case 178: case 183:
YY_RULE_SETUP YY_RULE_SETUP
{ {
yylval->lex.string = NewPoolTString(yytext); yylval->lex.string = NewPoolTString(yytext);
return check_type(yyscanner); return check_type(yyscanner);
} }
YY_BREAK YY_BREAK
case 179: case 184:
YY_RULE_SETUP YY_RULE_SETUP
{ return int_constant(context); } { return int_constant(context); }
YY_BREAK YY_BREAK
case 180: case 185:
YY_RULE_SETUP YY_RULE_SETUP
{ return int_constant(context); } { return int_constant(context); }
YY_BREAK YY_BREAK
case 181: case 186:
YY_RULE_SETUP YY_RULE_SETUP
{ return int_constant(context); } { return int_constant(context); }
YY_BREAK YY_BREAK
case 182: case 187:
YY_RULE_SETUP YY_RULE_SETUP
{ return uint_constant(context); } { return uint_constant(context); }
YY_BREAK YY_BREAK
case 183: case 188:
YY_RULE_SETUP YY_RULE_SETUP
{ return uint_constant(context); } { return uint_constant(context); }
YY_BREAK YY_BREAK
case 184: case 189:
YY_RULE_SETUP YY_RULE_SETUP
{ return uint_constant(context); } { return uint_constant(context); }
YY_BREAK YY_BREAK
case 185: case 190:
YY_RULE_SETUP YY_RULE_SETUP
{ return float_constant(yyscanner); } { return float_constant(yyscanner); }
YY_BREAK YY_BREAK
case 186: case 191:
YY_RULE_SETUP YY_RULE_SETUP
{ return float_constant(yyscanner); } { return float_constant(yyscanner); }
YY_BREAK YY_BREAK
case 187: case 192:
YY_RULE_SETUP YY_RULE_SETUP
{ return float_constant(yyscanner); } { return float_constant(yyscanner); }
YY_BREAK YY_BREAK
case 188: case 193:
YY_RULE_SETUP YY_RULE_SETUP
{ return floatsuffix_check(context); } { return floatsuffix_check(context); }
YY_BREAK YY_BREAK
case 189: case 194:
YY_RULE_SETUP YY_RULE_SETUP
{ return floatsuffix_check(context); } { return floatsuffix_check(context); }
YY_BREAK YY_BREAK
case 190: case 195:
YY_RULE_SETUP YY_RULE_SETUP
{ return floatsuffix_check(context); } { return floatsuffix_check(context); }
YY_BREAK YY_BREAK
case 191: case 196:
YY_RULE_SETUP YY_RULE_SETUP
{ return ADD_ASSIGN; } { return ADD_ASSIGN; }
YY_BREAK YY_BREAK
case 192: case 197:
YY_RULE_SETUP YY_RULE_SETUP
{ return SUB_ASSIGN; } { return SUB_ASSIGN; }
YY_BREAK YY_BREAK
case 193: case 198:
YY_RULE_SETUP YY_RULE_SETUP
{ return MUL_ASSIGN; } { return MUL_ASSIGN; }
YY_BREAK YY_BREAK
case 194: case 199:
YY_RULE_SETUP YY_RULE_SETUP
{ return DIV_ASSIGN; } { return DIV_ASSIGN; }
YY_BREAK YY_BREAK
case 195: case 200:
YY_RULE_SETUP YY_RULE_SETUP
{ return MOD_ASSIGN; } { return MOD_ASSIGN; }
YY_BREAK YY_BREAK
case 196: case 201:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_ASSIGN; } { return LEFT_ASSIGN; }
YY_BREAK YY_BREAK
case 197: case 202:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_ASSIGN; } { return RIGHT_ASSIGN; }
YY_BREAK YY_BREAK
case 198: case 203:
YY_RULE_SETUP YY_RULE_SETUP
{ return AND_ASSIGN; } { return AND_ASSIGN; }
YY_BREAK YY_BREAK
case 199: case 204:
YY_RULE_SETUP YY_RULE_SETUP
{ return XOR_ASSIGN; } { return XOR_ASSIGN; }
YY_BREAK YY_BREAK
case 200: case 205:
YY_RULE_SETUP YY_RULE_SETUP
{ return OR_ASSIGN; } { return OR_ASSIGN; }
YY_BREAK YY_BREAK
case 201: case 206:
YY_RULE_SETUP YY_RULE_SETUP
{ return INC_OP; } { return INC_OP; }
YY_BREAK YY_BREAK
case 202: case 207:
YY_RULE_SETUP YY_RULE_SETUP
{ return DEC_OP; } { return DEC_OP; }
YY_BREAK YY_BREAK
case 203: case 208:
YY_RULE_SETUP YY_RULE_SETUP
{ return AND_OP; } { return AND_OP; }
YY_BREAK YY_BREAK
case 204: case 209:
YY_RULE_SETUP YY_RULE_SETUP
{ return OR_OP; } { return OR_OP; }
YY_BREAK YY_BREAK
case 205: case 210:
YY_RULE_SETUP YY_RULE_SETUP
{ return XOR_OP; } { return XOR_OP; }
YY_BREAK YY_BREAK
case 206: case 211:
YY_RULE_SETUP YY_RULE_SETUP
{ return LE_OP; } { return LE_OP; }
YY_BREAK YY_BREAK
case 207: case 212:
YY_RULE_SETUP YY_RULE_SETUP
{ return GE_OP; } { return GE_OP; }
YY_BREAK YY_BREAK
case 208: case 213:
YY_RULE_SETUP YY_RULE_SETUP
{ return EQ_OP; } { return EQ_OP; }
YY_BREAK YY_BREAK
case 209: case 214:
YY_RULE_SETUP YY_RULE_SETUP
{ return NE_OP; } { return NE_OP; }
YY_BREAK YY_BREAK
case 210: case 215:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_OP; } { return LEFT_OP; }
YY_BREAK YY_BREAK
case 211: case 216:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_OP; } { return RIGHT_OP; }
YY_BREAK YY_BREAK
case 212: case 217:
YY_RULE_SETUP YY_RULE_SETUP
{ return SEMICOLON; } { return SEMICOLON; }
YY_BREAK YY_BREAK
case 213: case 218:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_BRACE; } { return LEFT_BRACE; }
YY_BREAK YY_BREAK
case 214: case 219:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_BRACE; } { return RIGHT_BRACE; }
YY_BREAK YY_BREAK
case 215: case 220:
YY_RULE_SETUP YY_RULE_SETUP
{ return COMMA; } { return COMMA; }
YY_BREAK YY_BREAK
case 216: case 221:
YY_RULE_SETUP YY_RULE_SETUP
{ return COLON; } { return COLON; }
YY_BREAK YY_BREAK
case 217: case 222:
YY_RULE_SETUP YY_RULE_SETUP
{ return EQUAL; } { return EQUAL; }
YY_BREAK YY_BREAK
case 218: case 223:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_PAREN; } { return LEFT_PAREN; }
YY_BREAK YY_BREAK
case 219: case 224:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_PAREN; } { return RIGHT_PAREN; }
YY_BREAK YY_BREAK
case 220: case 225:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_BRACKET; } { return LEFT_BRACKET; }
YY_BREAK YY_BREAK
case 221: case 226:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_BRACKET; } { return RIGHT_BRACKET; }
YY_BREAK YY_BREAK
case 222: case 227:
YY_RULE_SETUP YY_RULE_SETUP
{ BEGIN(FIELDS); return DOT; } { BEGIN(FIELDS); return DOT; }
YY_BREAK YY_BREAK
case 223: case 228:
YY_RULE_SETUP YY_RULE_SETUP
{ return BANG; } { return BANG; }
YY_BREAK YY_BREAK
case 224: case 229:
YY_RULE_SETUP YY_RULE_SETUP
{ return DASH; } { return DASH; }
YY_BREAK YY_BREAK
case 225: case 230:
YY_RULE_SETUP YY_RULE_SETUP
{ return TILDE; } { return TILDE; }
YY_BREAK YY_BREAK
case 226: case 231:
YY_RULE_SETUP YY_RULE_SETUP
{ return PLUS; } { return PLUS; }
YY_BREAK YY_BREAK
case 227: case 232:
YY_RULE_SETUP YY_RULE_SETUP
{ return STAR; } { return STAR; }
YY_BREAK YY_BREAK
case 228: case 233:
YY_RULE_SETUP YY_RULE_SETUP
{ return SLASH; } { return SLASH; }
YY_BREAK YY_BREAK
case 229: case 234:
YY_RULE_SETUP YY_RULE_SETUP
{ return PERCENT; } { return PERCENT; }
YY_BREAK YY_BREAK
case 230: case 235:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_ANGLE; } { return LEFT_ANGLE; }
YY_BREAK YY_BREAK
case 231: case 236:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_ANGLE; } { return RIGHT_ANGLE; }
YY_BREAK YY_BREAK
case 232: case 237:
YY_RULE_SETUP YY_RULE_SETUP
{ return VERTICAL_BAR; } { return VERTICAL_BAR; }
YY_BREAK YY_BREAK
case 233: case 238:
YY_RULE_SETUP YY_RULE_SETUP
{ return CARET; } { return CARET; }
YY_BREAK YY_BREAK
case 234: case 239:
YY_RULE_SETUP YY_RULE_SETUP
{ return AMPERSAND; } { return AMPERSAND; }
YY_BREAK YY_BREAK
case 235: case 240:
YY_RULE_SETUP YY_RULE_SETUP
{ return QUESTION; } { return QUESTION; }
YY_BREAK YY_BREAK
case 236: case 241:
YY_RULE_SETUP YY_RULE_SETUP
{ {
BEGIN(INITIAL); BEGIN(INITIAL);
...@@ -2144,19 +2202,19 @@ YY_RULE_SETUP ...@@ -2144,19 +2202,19 @@ YY_RULE_SETUP
return FIELD_SELECTION; return FIELD_SELECTION;
} }
YY_BREAK YY_BREAK
case 237: case 242:
YY_RULE_SETUP YY_RULE_SETUP
{} {}
YY_BREAK YY_BREAK
case 238: case 243:
YY_RULE_SETUP YY_RULE_SETUP
{ {
yyextra->error(*yylloc, "Illegal character at fieldname start", yytext); yyextra->error(*yylloc, "Illegal character at fieldname start", yytext);
return 0; return 0;
} }
YY_BREAK YY_BREAK
case 239: case 244:
/* rule 239 can match eol */ /* rule 244 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
{ } { }
YY_BREAK YY_BREAK
...@@ -2164,11 +2222,11 @@ case YY_STATE_EOF(INITIAL): ...@@ -2164,11 +2222,11 @@ case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(FIELDS): case YY_STATE_EOF(FIELDS):
{ yyterminate(); } { yyterminate(); }
YY_BREAK YY_BREAK
case 240: case 245:
YY_RULE_SETUP YY_RULE_SETUP
{ assert(false); return 0; } { assert(false); return 0; }
YY_BREAK YY_BREAK
case 241: case 246:
YY_RULE_SETUP YY_RULE_SETUP
ECHO; ECHO;
YY_BREAK YY_BREAK
...@@ -2467,7 +2525,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) ...@@ -2467,7 +2525,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 824 ) if ( yy_current_state >= 886 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
...@@ -2496,11 +2554,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) ...@@ -2496,11 +2554,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 824 ) if ( yy_current_state >= 886 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 823); yy_is_jam = (yy_current_state == 885);
(void)yyg; (void)yyg;
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
...@@ -3440,6 +3498,21 @@ int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token) ...@@ -3440,6 +3498,21 @@ int ES2_and_ES3_ident_ES3_1_keyword(TParseContext *context, int token)
return token; return token;
} }
int ES3_extension_keyword_else_ident(TParseContext *context, const char* extension, int token)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
yyscan_t yyscanner = (yyscan_t) context->getScanner();
// a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name
if (context->getShaderVersion() >= 300 && context->isExtensionEnabled(extension))
{
return token;
}
yylval->lex.string = NewPoolTString(yytext);
return check_type(yyscanner);
}
int uint_constant(TParseContext *context) int uint_constant(TParseContext *context)
{ {
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner(); struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
...@@ -3501,6 +3574,22 @@ int float_constant(yyscan_t yyscanner) { ...@@ -3501,6 +3574,22 @@ int float_constant(yyscan_t yyscanner) {
return FLOATCONSTANT; return FLOATCONSTANT;
} }
int yuvcscstandardext_constant(TParseContext *context)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->getScanner();
yyscan_t yyscanner = (yyscan_t) context->getScanner();
// a reserved word in GLSL ES 3.00 with enabled extension, otherwise could be used as an identifier/type name
if (context->getShaderVersion() >= 300 && context->isExtensionEnabled("GL_EXT_YUV_target"))
{
yylval->lex.string = NewPoolTString(yytext);
return YUVCSCSTANDARDEXTCONSTANT;
}
yylval->lex.string = NewPoolTString(yytext);
return check_type(yyscanner);
}
int glslang_initialize(TParseContext* context) { int glslang_initialize(TParseContext* context) {
yyscan_t scanner = NULL; yyscan_t scanner = NULL;
if (yylex_init_extra(context,&scanner)) if (yylex_init_extra(context,&scanner))
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -130,71 +130,74 @@ enum yytokentype ...@@ -130,71 +130,74 @@ enum yytokentype
SAMPLER2DSHADOW = 336, SAMPLER2DSHADOW = 336,
SAMPLERCUBESHADOW = 337, SAMPLERCUBESHADOW = 337,
SAMPLER2DARRAYSHADOW = 338, SAMPLER2DARRAYSHADOW = 338,
IMAGE2D = 339, SAMPLEREXTERNAL2DY2YEXT = 339,
IIMAGE2D = 340, IMAGE2D = 340,
UIMAGE2D = 341, IIMAGE2D = 341,
IMAGE3D = 342, UIMAGE2D = 342,
IIMAGE3D = 343, IMAGE3D = 343,
UIMAGE3D = 344, IIMAGE3D = 344,
IMAGE2DARRAY = 345, UIMAGE3D = 345,
IIMAGE2DARRAY = 346, IMAGE2DARRAY = 346,
UIMAGE2DARRAY = 347, IIMAGE2DARRAY = 347,
IMAGECUBE = 348, UIMAGE2DARRAY = 348,
IIMAGECUBE = 349, IMAGECUBE = 349,
UIMAGECUBE = 350, IIMAGECUBE = 350,
LAYOUT = 351, UIMAGECUBE = 351,
IDENTIFIER = 352, LAYOUT = 352,
TYPE_NAME = 353, YUVCSCSTANDARDEXT = 353,
FLOATCONSTANT = 354, YUVCSCSTANDARDEXTCONSTANT = 354,
INTCONSTANT = 355, IDENTIFIER = 355,
UINTCONSTANT = 356, TYPE_NAME = 356,
BOOLCONSTANT = 357, FLOATCONSTANT = 357,
FIELD_SELECTION = 358, INTCONSTANT = 358,
LEFT_OP = 359, UINTCONSTANT = 359,
RIGHT_OP = 360, BOOLCONSTANT = 360,
INC_OP = 361, FIELD_SELECTION = 361,
DEC_OP = 362, LEFT_OP = 362,
LE_OP = 363, RIGHT_OP = 363,
GE_OP = 364, INC_OP = 364,
EQ_OP = 365, DEC_OP = 365,
NE_OP = 366, LE_OP = 366,
AND_OP = 367, GE_OP = 367,
OR_OP = 368, EQ_OP = 368,
XOR_OP = 369, NE_OP = 369,
MUL_ASSIGN = 370, AND_OP = 370,
DIV_ASSIGN = 371, OR_OP = 371,
ADD_ASSIGN = 372, XOR_OP = 372,
MOD_ASSIGN = 373, MUL_ASSIGN = 373,
LEFT_ASSIGN = 374, DIV_ASSIGN = 374,
RIGHT_ASSIGN = 375, ADD_ASSIGN = 375,
AND_ASSIGN = 376, MOD_ASSIGN = 376,
XOR_ASSIGN = 377, LEFT_ASSIGN = 377,
OR_ASSIGN = 378, RIGHT_ASSIGN = 378,
SUB_ASSIGN = 379, AND_ASSIGN = 379,
LEFT_PAREN = 380, XOR_ASSIGN = 380,
RIGHT_PAREN = 381, OR_ASSIGN = 381,
LEFT_BRACKET = 382, SUB_ASSIGN = 382,
RIGHT_BRACKET = 383, LEFT_PAREN = 383,
LEFT_BRACE = 384, RIGHT_PAREN = 384,
RIGHT_BRACE = 385, LEFT_BRACKET = 385,
DOT = 386, RIGHT_BRACKET = 386,
COMMA = 387, LEFT_BRACE = 387,
COLON = 388, RIGHT_BRACE = 388,
EQUAL = 389, DOT = 389,
SEMICOLON = 390, COMMA = 390,
BANG = 391, COLON = 391,
DASH = 392, EQUAL = 392,
TILDE = 393, SEMICOLON = 393,
PLUS = 394, BANG = 394,
STAR = 395, DASH = 395,
SLASH = 396, TILDE = 396,
PERCENT = 397, PLUS = 397,
LEFT_ANGLE = 398, STAR = 398,
RIGHT_ANGLE = 399, SLASH = 399,
VERTICAL_BAR = 400, PERCENT = 400,
CARET = 401, LEFT_ANGLE = 401,
AMPERSAND = 402, RIGHT_ANGLE = 402,
QUESTION = 403 VERTICAL_BAR = 403,
CARET = 404,
AMPERSAND = 405,
QUESTION = 406
}; };
#endif #endif
......
...@@ -609,9 +609,14 @@ void TOutputTraverser::visitConstantUnion(TIntermConstantUnion *node) ...@@ -609,9 +609,14 @@ void TOutputTraverser::visitConstantUnion(TIntermConstantUnion *node)
out << node->getUnionArrayPointer()[i].getUConst(); out << node->getUnionArrayPointer()[i].getUConst();
out << " (const uint)\n"; out << " (const uint)\n";
break; break;
case EbtYuvCscStandardEXT:
out << getYuvCscStandardEXTString(
node->getUnionArrayPointer()[i].getYuvCscStandardEXTConst());
out << " (const yuvCscStandardEXT)\n";
break;
default: default:
out.prefix(SH_ERROR); out.prefix(SH_ERROR);
out << "Unknown constant"; out << "Unknown constant\n";
break; break;
} }
} }
......
...@@ -334,6 +334,8 @@ GLenum GLVariableType(const TType &type) ...@@ -334,6 +334,8 @@ GLenum GLVariableType(const TType &type)
return GL_SAMPLER_CUBE; return GL_SAMPLER_CUBE;
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
return GL_SAMPLER_EXTERNAL_OES; return GL_SAMPLER_EXTERNAL_OES;
case EbtSamplerExternal2DY2YEXT:
return GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT;
case EbtSampler2DRect: case EbtSampler2DRect:
return GL_SAMPLER_2D_RECT_ARB; return GL_SAMPLER_2D_RECT_ARB;
case EbtSampler2DArray: case EbtSampler2DArray:
......
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
'<(angle_path)/src/tests/compiler_tests/DebugShaderPrecision_test.cpp', '<(angle_path)/src/tests/compiler_tests/DebugShaderPrecision_test.cpp',
'<(angle_path)/src/tests/compiler_tests/EmulateGLFragColorBroadcast_test.cpp', '<(angle_path)/src/tests/compiler_tests/EmulateGLFragColorBroadcast_test.cpp',
'<(angle_path)/src/tests/compiler_tests/ExpressionLimit_test.cpp', '<(angle_path)/src/tests/compiler_tests/ExpressionLimit_test.cpp',
'<(angle_path)/src/tests/compiler_tests/EXT_YUV_target_test.cpp',
'<(angle_path)/src/tests/compiler_tests/EXT_blend_func_extended_test.cpp', '<(angle_path)/src/tests/compiler_tests/EXT_blend_func_extended_test.cpp',
'<(angle_path)/src/tests/compiler_tests/FloatLex_test.cpp', '<(angle_path)/src/tests/compiler_tests/FloatLex_test.cpp',
'<(angle_path)/src/tests/compiler_tests/FragDepth_test.cpp', '<(angle_path)/src/tests/compiler_tests/FragDepth_test.cpp',
......
//
// Copyright (c) 2017 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// EXT_YUV_target.cpp:
// Test for EXT_YUV_target implementation.
//
#include "angle_gl.h"
#include "gtest/gtest.h"
#include "GLSLANG/ShaderLang.h"
using testing::Combine;
using testing::Values;
namespace
{
const char ESSLVersion300[] = "#version 300 es\n";
const char EXTYTPragma[] = "#extension GL_EXT_YUV_target : require\n";
const char ESSL300_SimpleShader[] =
"precision mediump float;\n"
"uniform __samplerExternal2DY2YEXT uSampler;\n"
"out vec4 fragColor;\n"
"void main() { \n"
" fragColor = vec4(1.0);\n"
"}\n";
// Shader that samples the texture and writes to FragColor.
const char ESSL300_FragColorShader[] =
"precision mediump float;\n"
"uniform __samplerExternal2DY2YEXT uSampler;\n"
"layout(yuv) out vec4 fragColor;\n"
"void main() { \n"
" fragColor = texture(uSampler, vec2(0.0));\n"
"}\n";
// Shader that specifies yuv layout qualifier multiple times.
const char ESSL300_YUVQualifierMultipleTimesShader[] =
"precision mediump float;\n"
"layout(yuv, yuv, yuv) out vec4 fragColor;\n"
"void main() { \n"
"}\n";
// Shader that specifies yuv layout qualifier for not output fails to compile.
const char ESSL300_YUVQualifierFailureShader1[] =
"precision mediump float;\n"
"layout(yuv) in vec4 fragColor;\n"
"void main() { \n"
"}\n";
const char ESSL300_YUVQualifierFailureShader2[] =
"precision mediump float;\n"
"layout(yuv) uniform;\n"
"layout(yuv) uniform Transform {\n"
" mat4 M1;\n"
"}\n"
"void main() { \n"
"}\n";
// Shader that specifies yuv layout qualifier with location fails to compile.
const char ESSL300_LocationAndYUVFailureShader[] =
"precision mediump float;\n"
"layout(location = 0, yuv) out vec4 fragColor;\n"
"void main() { \n"
"}\n";
// Shader that specifies yuv layout qualifier with multiple color outputs fails to compile.
const char ESSL300_MultipleColorAndYUVOutputsFailureShader1[] =
"precision mediump float;\n"
"layout(yuv) out vec4 fragColor;\n"
"layout out vec4 fragColor1;\n"
"void main() { \n"
"}\n";
const char ESSL300_MultipleColorAndYUVOutputsFailureShader2[] =
"precision mediump float;\n"
"layout(yuv) out vec4 fragColor;\n"
"layout(location = 1) out vec4 fragColor1;\n"
"void main() { \n"
"}\n";
// Shader that specifies yuv layout qualifier with depth output fails to compile.
const char ESSL300_DepthAndYUVOutputsFailureShader[] =
"precision mediump float;\n"
"layout(yuv) out vec4 fragColor;\n"
"void main() { \n"
" gl_FragDepth = 1.0f;\n"
"}\n";
// Shader that specifies yuv layout qualifier with multiple outputs fails to compile.
const char ESSL300_MultipleYUVOutputsFailureShader[] =
"precision mediump float;\n"
"layout(yuv) out vec4 fragColor;\n"
"layout(yuv) out vec4 fragColor1;\n"
"void main() { \n"
"}\n";
// Shader that specifies yuvCscStandartEXT type and associated values.
const char ESSL300_YuvCscStandardEXTShader[] =
"precision mediump float;\n"
"yuvCscStandardEXT;\n"
"yuvCscStandardEXT conv;\n"
"yuvCscStandardEXT conv1 = itu_601;\n"
"yuvCscStandardEXT conv2 = itu_601_full_range;\n"
"yuvCscStandardEXT conv3 = itu_709;\n"
"const yuvCscStandardEXT conv4 = itu_709;\n"
"yuvCscStandardEXT conv_standard() {\n"
" return itu_601;\n"
"}\n"
"bool is_itu_601(inout yuvCscStandardEXT csc) {\n"
" csc = itu_601;\n"
" return csc == itu_601;\n"
"}\n"
"bool is_itu_709(yuvCscStandardEXT csc) {\n"
" return csc == itu_709;\n"
"}\n"
"void main() { \n"
" yuvCscStandardEXT conv = conv_standard();\n"
" bool csc_check1 = is_itu_601(conv);\n"
" bool csc_check2 = is_itu_709(itu_709);\n"
"}\n";
// Shader that specifies yuvCscStandartEXT type constructor fails to compile.
const char ESSL300_YuvCscStandartdEXTConstructFailureShader1[] =
"precision mediump float;\n"
"yuvCscStandardEXT conv = yuvCscStandardEXT();\n"
"void main() { \n"
"}\n";
const char ESSL300_YuvCscStandartdEXTConstructFailureShader2[] =
"precision mediump float;\n"
"yuvCscStandardEXT conv = yuvCscStandardEXT(itu_601);\n"
"void main() { \n"
"}\n";
// Shader that specifies yuvCscStandartEXT type conversion fails to compile.
const char ESSL300_YuvCscStandartdEXTConversionFailureShader1[] =
"precision mediump float;\n"
"yuvCscStandardEXT conv = false;\n"
"void main() { \n"
"}\n";
const char ESSL300_YuvCscStandartdEXTConversionFailureShader2[] =
"precision mediump float;\n"
"yuvCscStandardEXT conv = 0;\n"
"void main() { \n"
"}\n";
const char ESSL300_YuvCscStandartdEXTConversionFailureShader3[] =
"precision mediump float;\n"
"yuvCscStandardEXT conv = 2.0f;\n"
"void main() { \n"
"}\n";
const char ESSL300_YuvCscStandartdEXTConversionFailureShader4[] =
"precision mediump float;\n"
"yuvCscStandardEXT conv = itu_601 | itu_709;\n"
"void main() { \n"
"}\n";
const char ESSL300_YuvCscStandartdEXTConversionFailureShader5[] =
"precision mediump float;\n"
"yuvCscStandardEXT conv = itu_601 & 3.0f;\n"
"void main() { \n"
"}\n";
// Shader that specifies yuvCscStandartEXT type qualifiers fails to compile.
const char ESSL300_YuvCscStandartdEXTQualifiersFailureShader1[] =
"precision mediump float;\n"
"in yuvCscStandardEXT conv = itu_601;\n"
"void main() { \n"
"}\n";
const char ESSL300_YuvCscStandartdEXTQualifiersFailureShader2[] =
"precision mediump float;\n"
"out yuvCscStandardEXT conv = itu_601;\n"
"void main() { \n"
"}\n";
const char ESSL300_YuvCscStandartdEXTQualifiersFailureShader3[] =
"precision mediump float;\n"
"uniform yuvCscStandardEXT conv = itu_601;\n"
"void main() { \n"
"}\n";
// Shader that specifies yuv_to_rgb() and rgb_to_yuv() built-in functions.
const char ESSL300_BuiltInFunctionsShader[] =
"precision mediump float;\n"
"yuvCscStandardEXT conv = itu_601;\n"
"void main() { \n"
" vec3 yuv = rgb_2_yuv(vec3(0.0f), conv);\n"
" vec3 rgb = yuv_2_rgb(yuv, itu_601);\n"
"}\n";
class EXTYUVTargetTest : public testing::TestWithParam<testing::tuple<const char *, const char *>>
{
protected:
virtual void SetUp()
{
sh::InitBuiltInResources(&mResources);
mResources.EXT_YUV_target = 1;
mCompiler = NULL;
}
virtual void TearDown() { DestroyCompiler(); }
void DestroyCompiler()
{
if (mCompiler)
{
sh::Destruct(mCompiler);
mCompiler = NULL;
}
}
void InitializeCompiler()
{
DestroyCompiler();
mCompiler =
sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_GLES3_SPEC, SH_ESSL_OUTPUT, &mResources);
ASSERT_TRUE(mCompiler != NULL) << "Compiler could not be constructed.";
}
testing::AssertionResult TestShaderCompile(const char *pragma)
{
return TestShaderCompile(testing::get<0>(GetParam()), // Version.
pragma,
testing::get<1>(GetParam()) // Shader.
);
}
testing::AssertionResult TestShaderCompile(const char *version,
const char *pragma,
const char *shader)
{
const char *shaderStrings[] = {version, pragma, shader};
bool success = sh::Compile(mCompiler, shaderStrings, 3, 0);
if (success)
{
return ::testing::AssertionSuccess() << "Compilation success";
}
return ::testing::AssertionFailure() << sh::GetInfoLog(mCompiler);
}
protected:
ShBuiltInResources mResources;
ShHandle mCompiler;
};
// Extension flag is required to compile properly. Expect failure when it is
// not present.
TEST_P(EXTYUVTargetTest, CompileFailsWithoutExtension)
{
mResources.EXT_YUV_target = 0;
InitializeCompiler();
EXPECT_FALSE(TestShaderCompile(EXTYTPragma));
}
// Extension directive is required to compile properly. Expect failure when
// it is not present.
TEST_P(EXTYUVTargetTest, CompileFailsWithExtensionWithoutPragma)
{
mResources.EXT_YUV_target = 1;
InitializeCompiler();
EXPECT_FALSE(TestShaderCompile(""));
}
// With extension flag and extension directive, compiling succeeds.
// Also test that the extension directive state is reset correctly.
TEST_P(EXTYUVTargetTest, CompileSucceedsWithExtensionAndPragma)
{
mResources.EXT_YUV_target = 1;
InitializeCompiler();
EXPECT_TRUE(TestShaderCompile(EXTYTPragma));
// Test reset functionality.
EXPECT_FALSE(TestShaderCompile(""));
EXPECT_TRUE(TestShaderCompile(EXTYTPragma));
}
INSTANTIATE_TEST_CASE_P(CorrectVariantsWithExtensionAndPragma,
EXTYUVTargetTest,
Combine(Values(ESSLVersion300),
Values(ESSL300_SimpleShader, ESSL300_FragColorShader)));
class EXTYUVTargetCompileSuccessTest : public EXTYUVTargetTest
{
};
TEST_P(EXTYUVTargetCompileSuccessTest, CompileSucceeds)
{
// Expect compile success.
mResources.EXT_YUV_target = 1;
InitializeCompiler();
EXPECT_TRUE(TestShaderCompile(EXTYTPragma));
}
INSTANTIATE_TEST_CASE_P(CorrectESSL300Shaders,
EXTYUVTargetCompileSuccessTest,
Combine(Values(ESSLVersion300),
Values(ESSL300_FragColorShader,
ESSL300_YUVQualifierMultipleTimesShader,
ESSL300_YuvCscStandardEXTShader,
ESSL300_BuiltInFunctionsShader)));
class EXTYUVTargetCompileFailureTest : public EXTYUVTargetTest
{
};
TEST_P(EXTYUVTargetCompileFailureTest, CompileFails)
{
// Expect compile failure due to shader error, with shader having correct pragma.
mResources.EXT_YUV_target = 1;
InitializeCompiler();
EXPECT_FALSE(TestShaderCompile(EXTYTPragma));
}
INSTANTIATE_TEST_CASE_P(IncorrectESSL300Shaders,
EXTYUVTargetCompileFailureTest,
Combine(Values(ESSLVersion300),
Values(ESSL300_YUVQualifierFailureShader1,
ESSL300_YUVQualifierFailureShader2,
ESSL300_LocationAndYUVFailureShader,
ESSL300_MultipleColorAndYUVOutputsFailureShader1,
ESSL300_MultipleColorAndYUVOutputsFailureShader2,
ESSL300_DepthAndYUVOutputsFailureShader,
ESSL300_MultipleYUVOutputsFailureShader,
ESSL300_YuvCscStandartdEXTConstructFailureShader1,
ESSL300_YuvCscStandartdEXTConstructFailureShader2,
ESSL300_YuvCscStandartdEXTConversionFailureShader1,
ESSL300_YuvCscStandartdEXTConversionFailureShader2,
ESSL300_YuvCscStandartdEXTConversionFailureShader3,
ESSL300_YuvCscStandartdEXTConversionFailureShader4,
ESSL300_YuvCscStandartdEXTConversionFailureShader5,
ESSL300_YuvCscStandartdEXTQualifiersFailureShader1,
ESSL300_YuvCscStandartdEXTQualifiersFailureShader2,
ESSL300_YuvCscStandartdEXTQualifiersFailureShader3)));
} // namespace
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