1 ==========================================
2 0: <program> ::= <optionSequence> <statementSequence> "END"
5 <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
6 <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
7 <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
11 ==========================================
12 1: <optionSequence> ::= <optionSequence2>
15 follow: = <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
16 <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
17 <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
20 ==========================================
21 2: <optionSequence2> ::= <option> <optionSequence2>
27 follow: <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
28 <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
29 <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
32 ==========================================
33 4: <option> ::= "OPTION" <identifier> ";"
37 ==========================================
38 5: <statementSequence> ::= <statementSequence2>
40 first: <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
41 <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
42 <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
46 =========================================
47 6: <statementSequence2> ::= <statement> <statementSequence2>
49 first: <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
50 <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
51 <MAD> <SWZ> <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
57 ==========================================
58 8: <statement> ::= <instruction> ";"
60 first: <ARL> <ABS> <FLR> <FRC> <LIT> <MOV> <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
61 <POW> <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
63 9: | <namingStatement> ";"
65 first: <ATTRIB> <PARAM> <TEMP> <ADDRESS> <OUTPUT> <ALIAS>
67 ==========================================
68 10: <instruction> ::= <ARL_instruction>
71 11: | <VECTORop_instruction>
73 first: <ABS> <FLR> <FRC> <LIT> <MOV>
74 12: | <SCALARop_instruction>
76 first: <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
77 13: | <BINSCop_instruction>
80 14: | <BINop_instruction>
82 first: <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
83 15: | <TRIop_instruction>
86 16: | <SWZ_instruction>
90 ===========================================
91 17: <ARL_instruction> ::= "ARL" <maskedAddrReg> "," <scalarSrcReg>
95 ==========================================
96 18: <VECTORop_instruction> ::= <VECTORop> <maskedDstReg> "," <swizzleSrcReg>
98 first: <ABS> <FLR> <FRC> <LIT> <MOV>
100 ==========================================
101 19: <VECTORop> ::= "ABS"
107 ==========================================
108 24: <SCALARop_instruction> ::= <SCALARop> <maskedDstReg> "," <scalarSrcReg>
110 first: <EX2> <EXP> <LG2> <LOG> <RCP> <RSQ>
112 ==========================================
113 25: <SCALARop> ::= "EX2"
120 ==========================================
121 31: <BINSCop_instruction> ::= <BINSCop> <maskedDstReg> <BINSCop_instruction2>
125 32: <BINSCop_instruction2> ::= "," <scalarSrcReg> "," <scalarSrcReg>
129 ==========================================
130 33: <BINSCop> ::= "POW"
134 ==========================================
135 34: <BINop_instruction> ::= <BINop> <maskedDstReg> <BINop_instruction2>
137 first: <ADD> <DP3> <DP4> <DPH> <DST> <MAX> <MIN> <MUL> <SGE> <SLT> <SUB> <XPD>
139 35: <BINop_instruction2> ::= "," <swizzleSrcReg> "," <swizzleSrcReg>
144 ==========================================
145 36: <BINop> ::= "ADD"
181 ==========================================
182 48: <TRIop_instruction> ::= <TRIop> <maskedDstReg> <TRIop_instruction2>
186 49: <TRIop_instruction2> ::= "," <swizzleSrcReg> <TRIop_instruction3>
190 50: <TRIop_instruction3> ::= "," <swizzleSrcReg> "," <swizzleSrcReg>
194 ==========================================
195 51: <TRIop> ::= "MAD"
199 ==========================================
200 52: <SWZ_instruction> ::= "SWZ" <maskedDstReg> <SWZ_instruction2>
204 53: <SWZ_instruction2> ::= "," <srcReg> "," <extendedSwizzle>
208 ==========================================
209 54: <scalarSrcReg> ::= <optionalSign> <srcReg> <scalarSuffix>
211 first: "+" "-" "vertex" "state" "program" "{" <float> <int>
212 <id> that is vertexAttrib
214 <id> that is a single, <id> that is an array,
216 ==========================================
217 55: <swizzleSrcReg> ::= <optionalSign> <srcReg> <swizzleSuffix>
219 first: "+" "-" "vertex" "state" "program" "{" <float> <int>
220 <id> that is vertexAttrib
222 <id> that is a single, <id> that is an array,
224 ==========================================
225 56: <maskedDstReg> ::= <dstReg> <optionalMask>
227 first: first: <id>, that is a TEMP "result", <id> that is a vertexResult
229 ==========================================
230 57: <maskedAddrReg> ::= <addrReg> <addrWriteMask>
232 first: <id> (that is an addr reg)
234 ==========================================
235 58: <extendedSwizzle> ::= <extSwizComp> "," <extSwizComp> <extendedSwizzle2>
237 first: "+" "-" "0" "1" "x" "y" "z" "w"
239 59: <extendedSwizzle2> ::= "," <extSwizComp> "," <extSwizComp>
243 ==========================================
244 60: <extSwizComp> ::= <optionalSign> <extSwizSel>
246 first: "+" "-" "0" "1" "x" "y" "z" "w"
248 ==========================================
249 61: <extSwizSel> ::= "0"
253 ==========================================
254 64: <srcReg> ::= <vertexAttribReg>
256 first: "vertex" <id> that is vertexAttrib
259 first: <id> that is a TEMP
262 first: <id> that is a single, <id> that is an array, "state" "program" "{" <float> <int>
264 ==========================================
265 67: <dstReg> ::= <temporaryReg>
267 first: <id>, that is a TEMP
268 68: | <vertexResultReg>
270 first: "result", <id> that is a vertexResult
272 ==========================================
273 69: <vertexAttribReg> ::= <establishedName>
276 70: | <vtxAttribBinding>
280 ==========================================
281 71: <temporaryReg> ::= <establishedName>
283 first: <id> that is a TEMP
285 ==========================================
286 72: <progParamReg> ::= <progParamSingle>
288 first: <id>, that is single
289 73: | <progParamArray> "[" <progParamArrayMem> "]"
291 first: <id>, that is an array
292 74: | <paramSingleItemUse>
294 first: "state" "program" "{" <float> <int>
296 ==========================================
297 75: <progParamSingle> ::= <establishedName>
299 first: <id>, that is a single
301 ==========================================
302 76: <progParamArray> ::= <establishedName>
304 first: <id>, that is an array
306 ==========================================
307 77: <progParamArrayMem> ::= <progParamArrayAbs>
310 78: | <progParamArrayRel>
314 ==========================================
315 79: <progParamArrayAbs> ::= <integer>
319 ==========================================
320 80: <progParamArrayRel> ::= <addrReg> <addrComponent> <addrRegRelOffset>
324 ==========================================
325 81: <addrRegRelOffset> ::= ""
329 82: | "+" <addrRegPosOffset>
332 83: | "-" <addrRegNegOffset>
336 ==========================================
337 84: <addrRegPosOffset> ::= <integer> from 0 to 63
341 ==========================================
342 85: <addrRegNegOffset> ::= <integer> from 0 to 64
346 ==========================================
347 86: <vertexResultReg> ::= <establishedName>
350 87: | <resultBinding>
353 ==========================================
354 88: <addrReg> ::= <establishedName>
357 ==========================================
358 89: <addrComponent> ::= "." "x"
362 ==========================================
363 90: <addrWriteMask> ::= "." "x"
367 ==========================================
368 91: <scalarSuffix> ::= "." <component>
372 ==========================================
373 92: <swizzleSuffix> ::= ""
380 custom: | "." <component> | --> Treat as the same production
381 custom: | "." <component> <component> | --> but check the lenght of <component>
382 <component> <component>
384 317: | "." <swizzleSuffix2>
387 318: swizzleSuffix2 ::= <component>
391 ==========================================
392 93: <component> ::= "x"
397 =========================================
398 <component4> := strlen() == 4, chars are from {x, y, z, w} --> push the input onto the stack
401 ==========================================
402 97: <optionalMask> ::= "." <optionalMask2>
410 ==========================================
411 99: <optionalMask2> ::= "x"
427 ==========================================
428 114: <namingStatement> ::= <ATTRIB_statement>
431 115: | <PARAM_statement>
434 116: | <TEMP_statement>
437 117: | <ADDRESS_statement>
440 118: | <OUTPUT_statement>
443 119: | <ALIAS_statement>
447 ==========================================
448 120: <ATTRIB_statement> ::= "ATTRIB" <establishName> "="
453 ==========================================
454 121: <vtxAttribBinding> ::= "vertex" "." <vtxAttribItem>
458 ==========================================
459 122: <vtxAttribItem> ::= "position"
462 123: | "weight" <vtxOptWeightNum>
468 125: | "color" <optColorType>
474 127: | "texcoord" <optTexCoordNum>
477 128: | "matrixindex" "[" <vtxWeightNum> "]"
480 129: | "attrib" "[" <vtxAttribNum> "]"
484 ==========================================
485 130: <vtxAttribNum> ::= <integer> from 0 to MAX_VERTEX_ATTRIBS_ARB-1
489 ==========================================
490 131: <vtxOptWeightNum> ::= ""
494 132: | "[" <vtxWeightNum> "]"
498 ==========================================
499 133: <vtxWeightNum> ::= <integer> from 0 to MAX_VERTEX_UNITS_ARB-1,
500 must be divisible by four
504 ==========================================
505 134: <PARAM_statement> ::= "PARAM" <establishName> <PARAM_statement2>
509 135: <PARAM_statement2> ::= <paramSingleInit>
512 136: | "[" <optArraySize> "]" <paramMultipleInit>
516 ==========================================
517 137: <optArraySize> ::= ""
521 138: | <integer> from 1 to MAX_PROGRAM_PARAMETERS_ARB
522 (maximum number of allowed program
527 ==========================================
528 139: <paramSingleInit> ::= "=" <paramSingleItemDecl>
532 ==========================================
533 140: <paramMultipleInit> ::= "=" "{" <paramMultInitList> "}"
537 ==========================================
538 141: <paramMultInitList> ::= <paramMultipleItem> <paramMultInitList2>
540 first: "state" "program" "+" "-" <float> <int> "{"
542 ==========================================
543 142: <paramMultInitList2> ::= "," <paramMultInitList>
551 ==========================================
552 144: <paramSingleItemDecl> ::= <stateSingleItem>
555 145: | <programSingleItem>
558 146: | <paramConstDecl>
560 first: "+" "-" <float> <int>"{"
562 ==========================================
563 147: <paramSingleItemUse> ::= <stateSingleItem>
566 148: | <programSingleItem>
569 149: | <paramConstUse>
571 first: "{" <float> <int>
573 ==========================================
574 150: <paramMultipleItem> ::= <stateMultipleItem>
577 151: | <programMultipleItem>
580 152: | <paramConstDecl>
582 first: "+" "-" <float> <int> "{"
584 ==========================================
585 153: <stateMultipleItem> ::= "state" "." <stateMultipleItem2>
589 ========================================
590 154: <stateMultipleItem2> ::= <stateMaterialItem>
593 155: | <stateLightItem>
596 156: | <stateLightModelItem>
599 157: | <stateLightProdItem>
602 158: | <stateTexGenItem>
605 159: | <stateFogItem>
608 160: | <stateClipPlaneItem>
611 161: | <statePointItem>
615 162 ::= "matrix" "." <stateMatrixName> <foo>
619 ===========================
620 163: <foo> ::= "." <foo2>
628 164: <foo2> ::= <stateMatModifier> <foo3>
630 first: "inverse" "transpose" "invtrans"
632 165: | "row" "[" <stateMatrixRowNum> <foo4>
636 ===========================
642 167: | "." "row" "[" <foo35>
646 ==============================
647 168: <foo35> ::= <stateMatrixRowNum> <foo4>
651 ==============================
655 170: | ".." <stateMatrixRowNum> "]"
659 ==========================================
660 171: <stateSingleItem> ::= "state" "." <stateSingleItem2>
664 ==========================================
665 172: <stateSingleItem2> ::= <stateMaterialItem>
668 173: | <stateLightItem>
671 174: | <stateLightModelItem>
674 175: | <stateLightProdItem>
677 176: | <stateTexGenItem>
680 177: | <stateFogItem>
683 178: | <stateClipPlaneItem>
686 179: | <statePointItem>
689 180: | <stateMatrixRow>
692 ==========================================
693 181: <stateMaterialItem> ::= "material" "." <stateMaterialItem2>
697 ========================================
698 182: <stateMaterialItem2> ::= <stateMatProperty>
700 first: "ambient" "diffuse" "specular" "emission" "shininess"
701 183: | "." <optFaceType2> "." <stateMatProperty>
705 ==========================================
706 184: <stateMatProperty> ::= "ambient"
721 ==========================================
722 189: <stateLightItem> ::= "light" "[" <stateLightNumber> <stateLightItem2>
726 190: <stateLightItem2> ::= "]" "." <stateLightProperty>
731 ==========================================
732 191: <stateLightProperty> ::= "ambient"
747 196: | "spot" "." <stateSpotProperty>
754 ==========================================
755 198: <stateSpotProperty> ::= "direction"
759 ==========================================
760 199: <stateLightModelItem> ::= "lightmodel" <stateLModProperty>
764 ==========================================
765 200: <stateLModProperty> ::= "." <stateLModProperty2>
769 201: <stateLModProperty2> ::= "ambient"
775 203: | <optFaceType2> "." "scenecolor"
777 first: "front" "back"
778 ==========================================
779 204: <stateLightProdItem> ::= "lightprod" "[" <stateLightNumber> <stateLightProdItem15>
783 205: <stateLightProdItem15> ::= "]" "." <stateLightProdItem2>
788 206: <stateLightProdItem2> ::= <stateLProdProperty>
790 first: "ambient" "diffuse" "specular"
791 207: | <optFaceType2> "." <stateLProdProperty>
793 first: "front" "back"
795 ==========================================
796 208: <stateLProdProperty> ::= "ambient"
806 ==========================================
807 211: <stateLightNumber> ::= <integer> from 0 to MAX_LIGHTS-1
811 ==========================================
812 212: <stateTexGenItem> ::= "texgen" <optTexCoordNum> <stateTexGenItem2>
816 213: <stateTexGenItem2> ::= "." <stateTexGenType> "." <stateTexGenCoord>
818 ==========================================
819 214: <stateTexGenType> ::= "eye"
826 ==========================================
827 216: <stateTexGenCoord> ::= "s"
839 ==========================================
840 220: <stateFogItem> ::= "fog" "." <stateFogProperty>
844 ==========================================
845 221: <stateFogProperty> ::= "color"
851 ==========================================
852 223: <stateClipPlaneItem> ::= "clip" "[" <stateClipPlaneNum> <stateClipPlaneItem2>
856 224: <stateClipPlaneItem2> ::= "]" "." "plane"
860 ==========================================
861 225: <stateClipPlaneNum> ::= <integer> from 0 to MAX_CLIP_PLANES-1
865 ==========================================
866 226: <statePointItem> ::= "point" . <statePointProperty>
870 ==========================================
871 227: <statePointProperty> ::= "size"
878 ==========================================
879 229: <stateMatrixRow> ::= "matrix" "." <stateMatrixName> <stateMatrixRow15>
883 230: <stateMatrixRow15> ::= "." <stateMatrixRow2>
887 ===========================
888 231: <stateMatrixRow2> ::= "row" "[" <stateMatrixRowNum> "]"
891 232: | <stateMatModifier> "." "row" <stateMatrixRow3>
893 first: "inverse" "transpose" "invtrans"
895 233: <stateMatrixRow3> ::= "[" <stateMatrixRowNum> "]"
899 ==========================================
900 234: <stateMatModifier> ::= "inverse"
910 ==========================================
911 237: <stateMatrixRowNum> ::= <integer> from 0 to 3
915 ==========================================
916 238: <stateMatrixName> ::= "modelview" <stateOptModMatNum>
925 241: | "texture" <optTexCoordNum>
928 242: | "palette" "[" <statePaletteMatNum> "]"
931 243: | "program" "[" <stateProgramMatNum> "]"
935 ==========================================
936 244: <stateOptModMatNum> ::= ""
940 245: | "[" <stateModMatNum> "]"
944 ==========================================
945 246: <stateModMatNum> ::= <integer> from 0 to MAX_VERTEX_UNITS_ARB-1
949 ==========================================
950 247: <statePaletteMatNum> ::= <integer> from 0 to MAX_PALETTE_MATRICES_ARB-1
954 ==========================================
955 248: <stateProgramMatNum> ::= <integer> from 0 to MAX_PROGRAM_MATRICES_ARB-1
959 ==========================================
960 249: <programSingleItem> ::= "program" "." <programSingleItem2>
964 250: <programSingleItem2> ::= <progEnvParam>
967 251: | <progLocalParam>
971 ==========================================
972 252: <programMultipleItem> ::= "program" "." <programMultipleItem2>
976 ==========================================
977 253: <programMultipleItem2> ::= <progEnvParams>
980 254: | <progLocalParams>
984 ==========================================
985 255: <progEnvParams> ::= "env" "[" <progEnvParamNums> "]"
989 ==========================================
990 256: <progEnvParamNums> ::= <progEnvParamNum> <progEnvParamNums2>
994 ==========================================
995 257: <progEnvParamNums2> ::= ".." <progEnvParamNum>
1003 ==========================================
1004 259: <progEnvParam> ::= "env" "[" <progEnvParamNum> "]"
1008 ==========================================
1009 260: <progLocalParams> ::= "local" "[" <progLocalParamNums> "]"
1013 ==========================================
1014 261: <progLocalParamNums> ::= <progLocalParamNum> <progLocalParamNums2>
1018 ==========================================
1019 262: <progLocalParamNums2> ::= ".." <progLocalParamNum>
1026 ==========================================
1027 264: <progLocalParam> ::= "local" "[" <progLocalParamNum> "]"
1031 ==========================================
1032 265: <progEnvParamNum> ::= <integer> from 0 to MAX_PROGRAM_ENV_PARAMETERS_ARB - 1
1037 ==========================================
1038 266: <progLocalParamNum> ::= <integer> from 0 to MAX_PROGRAM_LOCAL_PARAMETERS_ARB - 1
1042 ==========================================
1043 267: <paramConstDecl> ::= <paramConstScalarDecl>
1045 first: "+" "-" <float> <int>
1047 268: | <paramConstVector>
1051 ==========================================
1052 269: <paramConstUse> ::= <paramConstScalarUse>
1054 first: <float> <int>
1055 270: | <paramConstVector>
1059 ==========================================
1060 271: <paramConstScalarDecl> ::= <signedFloatConstant>
1062 first: "+" "-" <float> <int>
1064 ==========================================
1065 272: <paramConstScalarUse> ::= <floatConstant>
1067 first: <float> <int>
1069 ==========================================
1070 273: <paramConstVector> ::= "{" <signedFloatConstant> <paramConstVector2>
1073 ==========================================
1074 274: <paramConstVector2> ::= "}"
1077 275: | "," <signedFloatConstant> <paramConstVector3>
1081 ==========================================
1082 276: <paramConstVector3> ::= "}"
1085 277: | "," <signedFloatConstant> <paramConstVector4>
1089 ==========================================
1090 278: <paramConstVector4> ::= "}"
1093 279: | "," <signedFloatConstant> "}"
1097 ==========================================
1098 280: <signedFloatConstant> ::= <optionalSign> <floatConstant>
1100 first: "-" "+" <float> <int>
1102 ==========================================
1103 <floatConstant> ::= see text
1105 first: <float> <int>
1107 ==========================================
1108 281: <optionalSign> ::= ""
1111 follow: <float> <int> "0" "1" "x" "y" "z" "w" "state" "program" "vertex" "{"
1125 ==========================================
1126 284: <TEMP_statement> ::= "TEMP" <varNameList>
1130 ==========================================
1131 285: <ADDRESS_statement> ::= "ADDRESS" <varNameList>
1135 ==========================================
1136 286: <varNameList> ::= <establishName>
1139 287: | <establishName> "," <varNameList>
1143 ==========================================
1144 288: <OUTPUT_statement> ::= "OUTPUT" <establishName> "=" <resultBinding>
1148 ==========================================
1149 289: <resultBinding> ::= "result" "." <resultBinding2>
1153 ==========================================
1154 290: <resultBinding2> ::= "position"
1155 ----------------------------------
1158 ----------------------------------
1161 ----------------------------------
1163 293: | <resultColBinding>
1164 ----------------------------------
1166 294: | "texcoord" <optTexCoordNum>
1167 ----------------------------------
1170 ==========================================
1171 295: <resultColBinding> ::= "color" <resultColBinding2>
1176 296: <resultColBinding2> ::= ""
1180 297: | "." <resultColBinding3>
1183 --> HACK: If we have a ".", look ahead 1 and see if we have
1184 "front" | back". If so, choose the second production.
1185 If not, choose the first.
1188 298: <resultColBinding3> ::= "front" <resultColBinding4>
1191 299: | "back" <resultColBinding4>
1196 300: <resultColBinding4> ::= ""
1200 301: | "." <resultColBinding5>
1204 ----> HACK: If we have a ".", peek ahead 1 and see if we have "primary" | "secondary".
1205 If so, choose teh second production. If not, choose the first.
1208 302: <resultColBinding5> ::= "primary"
1216 ==========================================
1217 304: <optFaceType2> ::= "front"
1218 ----------------------------------
1221 ----------------------------------
1224 ==========================================
1225 306: <optColorType> ::= "." <optColorType2>
1226 ----------------------------------
1229 ----------------------------------
1233 --> HACK: If we get a ".", peek ahead 1 token. if we have
1234 "primary" | "secondary", go choose the first production.
1235 else, choose the second.
1237 ==========================================
1238 308: <optColorType2> ::= "primary"
1239 ----------------------------------
1242 ----------------------------------
1245 ==========================================
1246 310: <optTexCoordNum> ::= ""
1247 ----------------------------------
1249 follow: "." ";" "," "}"
1250 311: | "[" <texCoordNum> "]"
1251 ----------------------------------
1254 ==========================================
1255 312: <texCoordNum> ::= <integer> from 0 to MAX_TEXTURE_UNITS-1
1256 -----------------------------------
1259 ==========================================
1260 313: <ALIAS_statement> ::= "ALIAS" <establishName> "=" <establishedName>
1261 -----------------------------------
1264 ==========================================
1265 314: <establishName> ::= <identifier>
1266 -----------------------------------
1269 ==========================================
1270 315: <establishedName> ::= <identifier>
1271 -----------------------------------
1274 ==========================================
1275 <identifier> ::= see text
1276 -----------------------------------
1279 HIGHEST PRODUCTION: 319