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