Lines Matching full:token

207   for (auto token = tokenizer->NextToken();; token = tokenizer->NextToken()) {  in ParseBufferData()  local
208 if (token->IsEOL()) in ParseBufferData()
210 if (token->IsEOS()) { in ParseBufferData()
217 if (token->IsIdentifier() && token->AsString() == "END") in ParseBufferData()
219 if (!token->IsInteger() && !token->IsDouble() && !token->IsHex()) in ParseBufferData()
220 return Result("invalid BUFFER data value: " + token->ToOriginalString()); in ParseBufferData()
230 token->ConvertToDouble(); in ParseBufferData()
232 double val = token->IsHex() ? static_cast<double>(token->AsHex()) in ParseBufferData()
233 : token->AsDouble(); in ParseBufferData()
237 if (token->IsDouble()) { in ParseBufferData()
239 token->ToOriginalString()); in ParseBufferData()
242 uint64_t val = token->IsHex() ? token->AsHex() : token->AsUint64(); in ParseBufferData()
288 for (auto token = tokenizer_->NextToken(); !token->IsEOS(); in Parse() local
289 token = tokenizer_->NextToken()) { in Parse()
290 if (token->IsEOL()) in Parse()
292 if (!token->IsIdentifier()) in Parse()
296 std::string tok = token->AsString(); in Parse()
326 r = Result("unknown token: " + tok); in Parse()
445 auto token = tokenizer_->NextToken(); in ValidateEndOfStatement() local
446 if (token->IsEOL() || token->IsEOS()) in ValidateEndOfStatement()
449 token->ToOriginalString()); in ValidateEndOfStatement()
453 auto token = tokenizer_->NextToken(); in ParseShaderBlock() local
454 if (!token->IsIdentifier()) in ParseShaderBlock()
455 return Result("invalid token when looking for shader type"); in ParseShaderBlock()
458 Result r = ToShaderType(token->AsString(), &type); in ParseShaderBlock()
464 token = tokenizer_->NextToken(); in ParseShaderBlock()
465 if (!token->IsIdentifier()) in ParseShaderBlock()
466 return Result("invalid token when looking for shader name"); in ParseShaderBlock()
468 shader->SetName(token->AsString()); in ParseShaderBlock()
470 token = tokenizer_->NextToken(); in ParseShaderBlock()
471 if (!token->IsIdentifier()) in ParseShaderBlock()
472 return Result("invalid token when looking for shader format"); in ParseShaderBlock()
474 std::string fmt = token->AsString(); in ParseShaderBlock()
499 token = tokenizer_->PeekNextToken(); in ParseShaderBlock()
500 if (token->IsIdentifier() && token->AsString() == "TARGET_ENV") { in ParseShaderBlock()
502 token = tokenizer_->NextToken(); in ParseShaderBlock()
503 if (!token->IsIdentifier() && !token->IsString()) in ParseShaderBlock()
505 shader->SetTargetEnv(token->AsString()); in ParseShaderBlock()
508 token = tokenizer_->PeekNextToken(); in ParseShaderBlock()
509 if (token->IsIdentifier() && token->AsString() == "VIRTUAL_FILE") { in ParseShaderBlock()
512 token = tokenizer_->NextToken(); in ParseShaderBlock()
513 if (!token->IsIdentifier() && !token->IsString()) in ParseShaderBlock()
516 auto path = token->AsString(); in ParseShaderBlock()
547 token = tokenizer_->NextToken(); in ParseShaderBlock()
548 if (!token->IsIdentifier() || token->AsString() != "END") in ParseShaderBlock()
559 auto token = tokenizer_->NextToken(); in ParsePipelineBlock() local
560 if (!token->IsIdentifier()) in ParsePipelineBlock()
561 return Result("invalid token when looking for pipeline type"); in ParsePipelineBlock()
564 Result r = ToPipelineType(token->AsString(), &type); in ParsePipelineBlock()
570 token = tokenizer_->NextToken(); in ParsePipelineBlock()
571 if (!token->IsIdentifier()) in ParsePipelineBlock()
572 return Result("invalid token when looking for pipeline name"); in ParsePipelineBlock()
574 pipeline->SetName(token->AsString()); in ParsePipelineBlock()
585 std::unique_ptr<Token> token; in ParsePipelineBody() local
586 for (token = tokenizer_->NextToken(); !token->IsEOS(); in ParsePipelineBody()
587 token = tokenizer_->NextToken()) { in ParsePipelineBody()
588 if (token->IsEOL()) in ParsePipelineBody()
590 if (!token->IsIdentifier()) in ParsePipelineBody()
594 std::string tok = token->AsString(); in ParsePipelineBody()
628 r = Result("unknown token in pipeline block: " + tok); in ParsePipelineBody()
634 if (!token->IsIdentifier() || token->AsString() != "END") in ParsePipelineBody()
645 auto token = tokenizer_->NextToken(); in ParsePipelineAttach() local
646 if (!token->IsIdentifier()) in ParsePipelineAttach()
647 return Result("invalid token in ATTACH command"); in ParsePipelineAttach()
649 auto* shader = script_->GetShader(token->AsString()); in ParsePipelineAttach()
653 token = tokenizer_->NextToken(); in ParsePipelineAttach()
654 if (token->IsEOL() || token->IsEOS()) { in ParsePipelineAttach()
663 if (!token->IsIdentifier()) in ParsePipelineAttach()
664 return Result("invalid token after ATTACH"); in ParsePipelineAttach()
668 auto type = token->AsString(); in ParsePipelineAttach()
670 token = tokenizer_->NextToken(); in ParsePipelineAttach()
671 if (!token->IsIdentifier()) in ParsePipelineAttach()
674 Result r = ToShaderType(token->AsString(), &shader_type); in ParsePipelineAttach()
680 token = tokenizer_->NextToken(); in ParsePipelineAttach()
681 if (!token->IsIdentifier()) in ParsePipelineAttach()
684 type = token->AsString(); in ParsePipelineAttach()
697 token = tokenizer_->NextToken(); in ParsePipelineAttach()
698 if (!token->IsIdentifier()) in ParsePipelineAttach()
701 r = pipeline->SetShaderEntryPoint(shader, token->AsString()); in ParsePipelineAttach()
705 token = tokenizer_->NextToken(); in ParsePipelineAttach()
709 if (token->IsIdentifier() && token->AsString() == "SPECIALIZE") { in ParsePipelineAttach()
714 token = tokenizer_->NextToken(); in ParsePipelineAttach()
716 if (token->IsEOL() || token->IsEOS()) in ParsePipelineAttach()
718 if (token->IsIdentifier()) in ParsePipelineAttach()
719 return Result("unknown ATTACH parameter: " + token->AsString()); in ParsePipelineAttach()
721 token->ToOriginalString()); in ParsePipelineAttach()
727 auto token = tokenizer_->NextToken(); in ParseShaderSpecialization() local
728 if (!token->IsInteger()) in ParseShaderSpecialization()
731 auto spec_id = token->AsUint32(); in ParseShaderSpecialization()
733 token = tokenizer_->NextToken(); in ParseShaderSpecialization()
734 if (!token->IsIdentifier() || token->AsString() != "AS") in ParseShaderSpecialization()
735 return Result("expected AS as next token"); in ParseShaderSpecialization()
737 token = tokenizer_->NextToken(); in ParseShaderSpecialization()
738 if (!token->IsIdentifier()) in ParseShaderSpecialization()
741 auto type = ToType(token->AsString()); in ParseShaderSpecialization()
743 return Result("invalid data type '" + token->AsString() + "' provided"); in ParseShaderSpecialization()
749 token = tokenizer_->NextToken(); in ParseShaderSpecialization()
753 value = token->AsUint32(); in ParseShaderSpecialization()
755 Result r = token->ConvertToDouble(); in ParseShaderSpecialization()
763 u.f = token->AsFloat(); in ParseShaderSpecialization()
776 auto token = tokenizer_->NextToken(); in ParsePipelineShaderOptimizations() local
777 if (!token->IsIdentifier()) in ParsePipelineShaderOptimizations()
780 auto* shader = script_->GetShader(token->AsString()); in ParsePipelineShaderOptimizations()
784 token = tokenizer_->NextToken(); in ParsePipelineShaderOptimizations()
785 if (!token->IsEOL()) in ParsePipelineShaderOptimizations()
787 token->ToOriginalString()); in ParsePipelineShaderOptimizations()
791 token = tokenizer_->NextToken(); in ParsePipelineShaderOptimizations()
792 if (token->IsEOL()) in ParsePipelineShaderOptimizations()
794 if (token->IsEOS()) in ParsePipelineShaderOptimizations()
796 if (!token->IsIdentifier()) in ParsePipelineShaderOptimizations()
798 if (token->AsString() == "END") in ParsePipelineShaderOptimizations()
801 optimizations.push_back(token->AsString()); in ParsePipelineShaderOptimizations()
812 auto token = tokenizer_->NextToken(); in ParsePipelineShaderCompileOptions() local
813 if (!token->IsIdentifier()) in ParsePipelineShaderCompileOptions()
816 auto* shader = script_->GetShader(token->AsString()); in ParsePipelineShaderCompileOptions()
824 token = tokenizer_->NextToken(); in ParsePipelineShaderCompileOptions()
825 if (!token->IsEOL()) in ParsePipelineShaderCompileOptions()
827 token->ToOriginalString()); in ParsePipelineShaderCompileOptions()
831 token = tokenizer_->NextToken(); in ParsePipelineShaderCompileOptions()
832 if (token->IsEOL()) in ParsePipelineShaderCompileOptions()
834 if (token->IsEOS()) in ParsePipelineShaderCompileOptions()
836 if (token->AsString() == "END") in ParsePipelineShaderCompileOptions()
839 options.push_back(token->AsString()); in ParsePipelineShaderCompileOptions()
850 auto token = tokenizer_->NextToken(); in ParsePipelineSubgroup() local
851 if (!token->IsIdentifier()) in ParsePipelineSubgroup()
854 auto* shader = script_->GetShader(token->AsString()); in ParsePipelineSubgroup()
859 token = tokenizer_->NextToken(); in ParsePipelineSubgroup()
860 if (token->IsEOL()) in ParsePipelineSubgroup()
862 if (token->IsEOS()) in ParsePipelineSubgroup()
864 if (!token->IsIdentifier()) in ParsePipelineSubgroup()
866 if (token->AsString() == "END") in ParsePipelineSubgroup()
869 if (token->AsString() == "FULLY_POPULATED") { in ParsePipelineSubgroup()
874 token = tokenizer_->NextToken(); in ParsePipelineSubgroup()
875 if (token->IsEOL() || token->IsEOS()) in ParsePipelineSubgroup()
878 if (token->AsString() == "on") { in ParsePipelineSubgroup()
880 } else if (token->AsString() == "off") { in ParsePipelineSubgroup()
889 } else if (token->AsString() == "VARYING_SIZE") { in ParsePipelineSubgroup()
894 token = tokenizer_->NextToken(); in ParsePipelineSubgroup()
895 if (token->IsEOL() || token->IsEOS()) in ParsePipelineSubgroup()
898 if (token->AsString() == "on") { in ParsePipelineSubgroup()
900 } else if (token->AsString() == "off") { in ParsePipelineSubgroup()
908 } else if (token->AsString() == "REQUIRED_SIZE") { in ParsePipelineSubgroup()
913 token = tokenizer_->NextToken(); in ParsePipelineSubgroup()
914 if (token->IsEOL() || token->IsEOS()) in ParsePipelineSubgroup()
917 if (token->IsInteger()) { in ParsePipelineSubgroup()
918 r = pipeline->SetShaderRequiredSubgroupSize(shader, token->AsUint32()); in ParsePipelineSubgroup()
919 } else if (token->AsString() == "MIN") { in ParsePipelineSubgroup()
921 } else if (token->AsString() == "MAX") { in ParsePipelineSubgroup()
929 return Result("SUBGROUP invalid value for SUBGROUP " + token->AsString()); in ParsePipelineSubgroup()
937 auto token = tokenizer_->NextToken(); in ParsePipelinePatchControlPoints() local
938 if (token->IsEOL() || token->IsEOS()) in ParsePipelinePatchControlPoints()
942 if (!token->IsInteger()) in ParsePipelinePatchControlPoints()
945 pipeline->GetPipelineData()->SetPatchControlPoints(token->AsUint32()); in ParsePipelinePatchControlPoints()
951 auto token = tokenizer_->NextToken(); in ParsePipelineFramebufferSize() local
952 if (token->IsEOL() || token->IsEOS()) in ParsePipelineFramebufferSize()
954 if (!token->IsInteger()) in ParsePipelineFramebufferSize()
957 pipeline->SetFramebufferWidth(token->AsUint32()); in ParsePipelineFramebufferSize()
959 token = tokenizer_->NextToken(); in ParsePipelineFramebufferSize()
960 if (token->IsEOL() || token->IsEOS()) in ParsePipelineFramebufferSize()
962 if (!token->IsInteger()) in ParsePipelineFramebufferSize()
965 pipeline->SetFramebufferHeight(token->AsUint32()); in ParsePipelineFramebufferSize()
977 auto token = tokenizer_->NextToken(); in ParsePipelineViewport() local
978 if (token->IsEOL() || token->IsEOS()) in ParsePipelineViewport()
980 Result r = token->ConvertToDouble(); in ParsePipelineViewport()
984 val[i] = token->AsFloat(); in ParsePipelineViewport()
989 auto token = tokenizer_->NextToken(); in ParsePipelineViewport() local
990 if (!token->IsIdentifier() || token->AsString() != "SIZE") in ParsePipelineViewport()
994 token = tokenizer_->NextToken(); in ParsePipelineViewport()
995 if (token->IsEOL() || token->IsEOS()) in ParsePipelineViewport()
997 Result r = token->ConvertToDouble(); in ParsePipelineViewport()
1001 val[i] = token->AsFloat(); in ParsePipelineViewport()
1006 token = tokenizer_->PeekNextToken(); in ParsePipelineViewport()
1007 while (token->IsIdentifier()) { in ParsePipelineViewport()
1008 if (token->AsString() == "MIN_DEPTH") { in ParsePipelineViewport()
1010 token = tokenizer_->NextToken(); in ParsePipelineViewport()
1011 if (token->IsEOL() || token->IsEOS()) in ParsePipelineViewport()
1013 Result r = token->ConvertToDouble(); in ParsePipelineViewport()
1017 vp.mind = token->AsFloat(); in ParsePipelineViewport()
1019 if (token->AsString() == "MAX_DEPTH") { in ParsePipelineViewport()
1021 token = tokenizer_->NextToken(); in ParsePipelineViewport()
1022 if (token->IsEOL() || token->IsEOS()) in ParsePipelineViewport()
1024 Result r = token->ConvertToDouble(); in ParsePipelineViewport()
1028 vp.maxd = token->AsFloat(); in ParsePipelineViewport()
1031 token = tokenizer_->PeekNextToken(); in ParsePipelineViewport()
1074 auto token = tokenizer_->NextToken(); in ParsePipelineBind() local
1076 if (!token->IsIdentifier()) { in ParsePipelineBind()
1082 auto object_type = token->AsString(); in ParsePipelineBind()
1086 token = tokenizer_->NextToken(); in ParsePipelineBind()
1087 if (!token->IsIdentifier()) in ParsePipelineBind()
1090 auto* buffer = script_->GetBuffer(token->AsString()); in ParsePipelineBind()
1092 return Result("unknown buffer: " + token->AsString()); in ParsePipelineBind()
1097 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1098 while (token->IsIdentifier() && token->AsString() != "AS" && in ParsePipelineBind()
1099 token->AsString() != "KERNEL" && in ParsePipelineBind()
1100 token->AsString() != "DESCRIPTOR_SET") { in ParsePipelineBind()
1102 buffer = script_->GetBuffer(token->AsString()); in ParsePipelineBind()
1104 return Result("unknown buffer: " + token->AsString()); in ParsePipelineBind()
1106 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1114 token = tokenizer_->NextToken(); in ParsePipelineBind()
1115 if (token->IsIdentifier() && token->AsString() == "AS") { in ParsePipelineBind()
1116 token = tokenizer_->NextToken(); in ParsePipelineBind()
1117 if (!token->IsIdentifier()) in ParsePipelineBind()
1118 return Result("invalid token for BUFFER type"); in ParsePipelineBind()
1120 Result r = ToBufferType(token->AsString(), &buffer_type); in ParsePipelineBind()
1125 token = tokenizer_->NextToken(); in ParsePipelineBind()
1126 if (!token->IsIdentifier() || token->AsString() != "LOCATION") in ParsePipelineBind()
1129 token = tokenizer_->NextToken(); in ParsePipelineBind()
1130 if (!token->IsInteger()) in ParsePipelineBind()
1132 auto location = token->AsUint32(); in ParsePipelineBind()
1135 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1136 if (token->IsIdentifier() && token->AsString() == "BASE_MIP_LEVEL") { in ParsePipelineBind()
1138 token = tokenizer_->NextToken(); in ParsePipelineBind()
1140 if (!token->IsInteger()) in ParsePipelineBind()
1143 base_mip_level = token->AsUint32(); in ParsePipelineBind()
1147 "base mip level (now " + token->AsString() + in ParsePipelineBind()
1167 token = tokenizer_->NextToken(); in ParsePipelineBind()
1168 if (!token->IsIdentifier() || token->AsString() != "SAMPLER") in ParsePipelineBind()
1171 token = tokenizer_->NextToken(); in ParsePipelineBind()
1172 if (!token->IsIdentifier()) in ParsePipelineBind()
1175 auto* sampler = script_->GetSampler(token->AsString()); in ParsePipelineBind()
1177 return Result("unknown sampler: " + token->AsString()); in ParsePipelineBind()
1199 // and have to advance to the next token. Otherwise, we're already on in ParsePipelineBind()
1200 // the next token and don't want to advance. in ParsePipelineBind()
1202 token = tokenizer_->NextToken(); in ParsePipelineBind()
1205 if (token->IsIdentifier() && token->AsString() == "DESCRIPTOR_SET") { in ParsePipelineBind()
1206 token = tokenizer_->NextToken(); in ParsePipelineBind()
1207 if (!token->IsInteger()) in ParsePipelineBind()
1209 uint32_t descriptor_set = token->AsUint32(); in ParsePipelineBind()
1211 token = tokenizer_->NextToken(); in ParsePipelineBind()
1212 if (!token->IsIdentifier() || token->AsString() != "BINDING") in ParsePipelineBind()
1215 token = tokenizer_->NextToken(); in ParsePipelineBind()
1216 if (!token->IsInteger()) in ParsePipelineBind()
1219 auto binding = token->AsUint32(); in ParsePipelineBind()
1225 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1226 if (token->IsIdentifier() && token->AsString() == "BASE_MIP_LEVEL") { in ParsePipelineBind()
1228 token = tokenizer_->NextToken(); in ParsePipelineBind()
1230 if (!token->IsInteger()) in ParsePipelineBind()
1233 base_mip_level = token->AsUint32(); in ParsePipelineBind()
1236 return Result("base mip level (now " + token->AsString() + in ParsePipelineBind()
1246 token = tokenizer_->NextToken(); in ParsePipelineBind()
1247 if (!token->IsIdentifier() || token->AsString() != "OFFSET") in ParsePipelineBind()
1251 token = tokenizer_->NextToken(); in ParsePipelineBind()
1253 if (!token->IsInteger()) { in ParsePipelineBind()
1262 dynamic_offsets[i] = token->AsUint32(); in ParsePipelineBind()
1274 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1275 if (token->IsIdentifier() && in ParsePipelineBind()
1276 token->AsString() == "DESCRIPTOR_OFFSET") { in ParsePipelineBind()
1277 token = tokenizer_->NextToken(); in ParsePipelineBind()
1279 token = tokenizer_->NextToken(); in ParsePipelineBind()
1280 if (!token->IsInteger()) { in ParsePipelineBind()
1290 descriptor_offsets[i] = token->AsUint64(); in ParsePipelineBind()
1294 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1295 if (token->IsIdentifier() && in ParsePipelineBind()
1296 token->AsString() == "DESCRIPTOR_RANGE") { in ParsePipelineBind()
1297 token = tokenizer_->NextToken(); in ParsePipelineBind()
1299 token = tokenizer_->NextToken(); in ParsePipelineBind()
1300 if (!token->IsInteger()) { in ParsePipelineBind()
1310 descriptor_ranges[i] = token->AsUint64(); in ParsePipelineBind()
1321 } else if (token->IsIdentifier() && token->AsString() == "KERNEL") { in ParsePipelineBind()
1322 token = tokenizer_->NextToken(); in ParsePipelineBind()
1323 if (!token->IsIdentifier()) in ParsePipelineBind()
1326 if (token->AsString() == "ARG_NAME") { in ParsePipelineBind()
1327 token = tokenizer_->NextToken(); in ParsePipelineBind()
1328 if (!token->IsIdentifier()) in ParsePipelineBind()
1331 pipeline->AddBuffer(buffer, buffer_type, token->AsString()); in ParsePipelineBind()
1332 } else if (token->AsString() == "ARG_NUMBER") { in ParsePipelineBind()
1333 token = tokenizer_->NextToken(); in ParsePipelineBind()
1334 if (!token->IsInteger()) in ParsePipelineBind()
1337 pipeline->AddBuffer(buffer, buffer_type, token->AsUint32()); in ParsePipelineBind()
1347 token = tokenizer_->NextToken(); in ParsePipelineBind()
1348 if (!token->IsIdentifier()) in ParsePipelineBind()
1351 auto* sampler = script_->GetSampler(token->AsString()); in ParsePipelineBind()
1353 return Result("unknown sampler: " + token->AsString()); in ParsePipelineBind()
1358 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1359 while (token->IsIdentifier() && token->AsString() != "KERNEL" && in ParsePipelineBind()
1360 token->AsString() != "DESCRIPTOR_SET") { in ParsePipelineBind()
1362 sampler = script_->GetSampler(token->AsString()); in ParsePipelineBind()
1364 return Result("unknown sampler: " + token->AsString()); in ParsePipelineBind()
1366 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1373 token = tokenizer_->NextToken(); in ParsePipelineBind()
1374 if (!token->IsIdentifier()) in ParsePipelineBind()
1375 return Result("expected a string token for BIND command"); in ParsePipelineBind()
1377 if (token->AsString() == "DESCRIPTOR_SET") { in ParsePipelineBind()
1378 token = tokenizer_->NextToken(); in ParsePipelineBind()
1379 if (!token->IsInteger()) in ParsePipelineBind()
1381 uint32_t descriptor_set = token->AsUint32(); in ParsePipelineBind()
1383 token = tokenizer_->NextToken(); in ParsePipelineBind()
1384 if (!token->IsIdentifier() || token->AsString() != "BINDING") in ParsePipelineBind()
1387 token = tokenizer_->NextToken(); in ParsePipelineBind()
1388 if (!token->IsInteger()) in ParsePipelineBind()
1391 uint32_t binding = token->AsUint32(); in ParsePipelineBind()
1396 } else if (token->AsString() == "KERNEL") { in ParsePipelineBind()
1397 token = tokenizer_->NextToken(); in ParsePipelineBind()
1398 if (!token->IsIdentifier()) in ParsePipelineBind()
1401 if (token->AsString() == "ARG_NAME") { in ParsePipelineBind()
1402 token = tokenizer_->NextToken(); in ParsePipelineBind()
1403 if (!token->IsIdentifier()) in ParsePipelineBind()
1406 pipeline->AddSampler(sampler, token->AsString()); in ParsePipelineBind()
1407 } else if (token->AsString() == "ARG_NUMBER") { in ParsePipelineBind()
1408 token = tokenizer_->NextToken(); in ParsePipelineBind()
1409 if (!token->IsInteger()) in ParsePipelineBind()
1412 pipeline->AddSampler(sampler, token->AsUint32()); in ParsePipelineBind()
1427 auto token = tokenizer_->NextToken(); in ParsePipelineVertexData() local
1428 if (!token->IsIdentifier()) in ParsePipelineVertexData()
1431 auto* buffer = script_->GetBuffer(token->AsString()); in ParsePipelineVertexData()
1433 return Result("unknown buffer: " + token->AsString()); in ParsePipelineVertexData()
1435 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1436 if (!token->IsIdentifier() || token->AsString() != "LOCATION") in ParsePipelineVertexData()
1439 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1440 if (!token->IsInteger()) in ParsePipelineVertexData()
1442 const uint32_t location = token->AsUint32(); in ParsePipelineVertexData()
1449 token = tokenizer_->PeekNextToken(); in ParsePipelineVertexData()
1450 while (token->IsIdentifier()) { in ParsePipelineVertexData()
1451 if (token->AsString() == "RATE") { in ParsePipelineVertexData()
1453 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1454 if (!token->IsIdentifier()) in ParsePipelineVertexData()
1456 if (token->AsString() == "instance") { in ParsePipelineVertexData()
1458 } else if (token->AsString() != "vertex") { in ParsePipelineVertexData()
1461 } else if (token->AsString() == "OFFSET") { in ParsePipelineVertexData()
1463 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1464 if (!token->IsInteger()) in ParsePipelineVertexData()
1466 offset = token->AsUint32(); in ParsePipelineVertexData()
1467 } else if (token->AsString() == "STRIDE") { in ParsePipelineVertexData()
1469 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1470 if (!token->IsInteger()) in ParsePipelineVertexData()
1472 stride = token->AsUint32(); in ParsePipelineVertexData()
1475 } else if (token->AsString() == "FORMAT") { in ParsePipelineVertexData()
1477 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1478 if (!token->IsIdentifier()) in ParsePipelineVertexData()
1480 auto type = script_->ParseType(token->AsString()); in ParsePipelineVertexData()
1488 token->ToOriginalString()); in ParsePipelineVertexData()
1491 token = tokenizer_->PeekNextToken(); in ParsePipelineVertexData()
1506 auto token = tokenizer_->NextToken(); in ParsePipelineIndexData() local
1507 if (!token->IsIdentifier()) in ParsePipelineIndexData()
1510 auto* buffer = script_->GetBuffer(token->AsString()); in ParsePipelineIndexData()
1512 return Result("unknown buffer: " + token->AsString()); in ParsePipelineIndexData()
1528 auto token = tokenizer_->NextToken(); in ParsePipelineSet() local
1529 if (!token->IsIdentifier() || token->AsString() != "KERNEL") in ParsePipelineSet()
1532 token = tokenizer_->NextToken(); in ParsePipelineSet()
1533 if (!token->IsIdentifier()) in ParsePipelineSet()
1538 if (token->AsString() == "ARG_NAME") { in ParsePipelineSet()
1539 token = tokenizer_->NextToken(); in ParsePipelineSet()
1540 if (!token->IsIdentifier()) in ParsePipelineSet()
1543 arg_name = token->AsString(); in ParsePipelineSet()
1544 } else if (token->AsString() == "ARG_NUMBER") { in ParsePipelineSet()
1545 token = tokenizer_->NextToken(); in ParsePipelineSet()
1546 if (!token->IsInteger()) in ParsePipelineSet()
1549 arg_no = token->AsUint32(); in ParsePipelineSet()
1554 token = tokenizer_->NextToken(); in ParsePipelineSet()
1555 if (!token->IsIdentifier() || token->AsString() != "AS") in ParsePipelineSet()
1558 token = tokenizer_->NextToken(); in ParsePipelineSet()
1559 if (!token->IsIdentifier()) in ParsePipelineSet()
1562 auto type = ToType(token->AsString()); in ParsePipelineSet()
1564 return Result("invalid data type '" + token->AsString() + "' provided"); in ParsePipelineSet()
1569 token = tokenizer_->NextToken(); in ParsePipelineSet()
1570 if (!token->IsInteger() && !token->IsDouble()) in ParsePipelineSet()
1576 value.SetDoubleValue(token->AsDouble()); in ParsePipelineSet()
1578 value.SetIntValue(token->AsUint64()); in ParsePipelineSet()
1593 auto token = tokenizer_->NextToken(); in ParsePipelinePolygonMode() local
1594 if (!token->IsIdentifier()) in ParsePipelinePolygonMode()
1597 auto mode = token->AsString(); in ParsePipelinePolygonMode()
1613 auto token = tokenizer_->NextToken(); in ParsePipelineDepth() local
1614 if (token->IsEOL()) in ParsePipelineDepth()
1616 if (token->IsEOS()) in ParsePipelineDepth()
1618 if (!token->IsIdentifier()) in ParsePipelineDepth()
1620 if (token->AsString() == "END") in ParsePipelineDepth()
1623 if (token->AsString() == "TEST") { in ParsePipelineDepth()
1624 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1626 if (!token->IsIdentifier()) in ParsePipelineDepth()
1629 if (token->AsString() == "on") in ParsePipelineDepth()
1631 else if (token->AsString() == "off") in ParsePipelineDepth()
1634 return Result("invalid value for TEST: " + token->AsString()); in ParsePipelineDepth()
1635 } else if (token->AsString() == "CLAMP") { in ParsePipelineDepth()
1636 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1638 if (!token->IsIdentifier()) in ParsePipelineDepth()
1641 if (token->AsString() == "on") in ParsePipelineDepth()
1643 else if (token->AsString() == "off") in ParsePipelineDepth()
1646 return Result("invalid value for CLAMP: " + token->AsString()); in ParsePipelineDepth()
1647 } else if (token->AsString() == "WRITE") { in ParsePipelineDepth()
1648 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1650 if (!token->IsIdentifier()) in ParsePipelineDepth()
1653 if (token->AsString() == "on") in ParsePipelineDepth()
1655 else if (token->AsString() == "off") in ParsePipelineDepth()
1658 return Result("invalid value for WRITE: " + token->AsString()); in ParsePipelineDepth()
1659 } else if (token->AsString() == "COMPARE_OP") { in ParsePipelineDepth()
1660 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1662 if (!token->IsIdentifier()) in ParsePipelineDepth()
1665 CompareOp compare_op = StrToCompareOp(token->AsString()); in ParsePipelineDepth()
1669 return Result("invalid value for COMPARE_OP: " + token->AsString()); in ParsePipelineDepth()
1671 } else if (token->AsString() == "BOUNDS") { in ParsePipelineDepth()
1672 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1673 if (!token->IsIdentifier() || token->AsString() != "min") in ParsePipelineDepth()
1676 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1677 if (!token->IsDouble()) in ParsePipelineDepth()
1679 pipeline->GetPipelineData()->SetMinDepthBounds(token->AsFloat()); in ParsePipelineDepth()
1681 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1682 if (!token->IsIdentifier() || token->AsString() != "max") in ParsePipelineDepth()
1685 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1686 if (!token->IsDouble()) in ParsePipelineDepth()
1688 pipeline->GetPipelineData()->SetMaxDepthBounds(token->AsFloat()); in ParsePipelineDepth()
1689 } else if (token->AsString() == "BIAS") { in ParsePipelineDepth()
1692 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1693 if (!token->IsIdentifier() || token->AsString() != "constant") in ParsePipelineDepth()
1696 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1697 if (!token->IsDouble()) in ParsePipelineDepth()
1699 pipeline->GetPipelineData()->SetDepthBiasConstantFactor(token->AsFloat()); in ParsePipelineDepth()
1701 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1702 if (!token->IsIdentifier() || token->AsString() != "clamp") in ParsePipelineDepth()
1705 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1706 if (!token->IsDouble()) in ParsePipelineDepth()
1708 pipeline->GetPipelineData()->SetDepthBiasClamp(token->AsFloat()); in ParsePipelineDepth()
1710 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1711 if (!token->IsIdentifier() || token->AsString() != "slope") in ParsePipelineDepth()
1714 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1715 if (!token->IsDouble()) in ParsePipelineDepth()
1717 pipeline->GetPipelineData()->SetDepthBiasSlopeFactor(token->AsFloat()); in ParsePipelineDepth()
1719 return Result("invalid value for DEPTH: " + token->AsString()); in ParsePipelineDepth()
1727 auto token = tokenizer_->NextToken(); in ParsePipelineStencil() local
1728 if (!token->IsIdentifier()) in ParsePipelineStencil()
1734 if (token->AsString() == "front") { in ParsePipelineStencil()
1736 } else if (token->AsString() == "back") { in ParsePipelineStencil()
1738 } else if (token->AsString() == "front_and_back") { in ParsePipelineStencil()
1742 return Result("STENCIL invalid face: " + token->AsString()); in ParsePipelineStencil()
1746 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1747 if (token->IsEOL()) in ParsePipelineStencil()
1749 if (token->IsEOS()) in ParsePipelineStencil()
1751 if (!token->IsIdentifier()) in ParsePipelineStencil()
1753 if (token->AsString() == "END") in ParsePipelineStencil()
1756 if (token->AsString() == "TEST") { in ParsePipelineStencil()
1757 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1759 if (!token->IsIdentifier()) in ParsePipelineStencil()
1762 if (token->AsString() == "on") in ParsePipelineStencil()
1764 else if (token->AsString() == "off") in ParsePipelineStencil()
1767 return Result("STENCIL invalid value for TEST: " + token->AsString()); in ParsePipelineStencil()
1768 } else if (token->AsString() == "FAIL_OP") { in ParsePipelineStencil()
1769 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1771 if (!token->IsIdentifier()) in ParsePipelineStencil()
1774 StencilOp stencil_op = StrToStencilOp(token->AsString()); in ParsePipelineStencil()
1777 token->AsString()); in ParsePipelineStencil()
1783 } else if (token->AsString() == "PASS_OP") { in ParsePipelineStencil()
1784 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1786 if (!token->IsIdentifier()) in ParsePipelineStencil()
1789 StencilOp stencil_op = StrToStencilOp(token->AsString()); in ParsePipelineStencil()
1792 token->AsString()); in ParsePipelineStencil()
1798 } else if (token->AsString() == "DEPTH_FAIL_OP") { in ParsePipelineStencil()
1799 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1801 if (!token->IsIdentifier()) in ParsePipelineStencil()
1804 StencilOp stencil_op = StrToStencilOp(token->AsString()); in ParsePipelineStencil()
1807 token->AsString()); in ParsePipelineStencil()
1813 } else if (token->AsString() == "COMPARE_OP") { in ParsePipelineStencil()
1814 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1816 if (!token->IsIdentifier()) in ParsePipelineStencil()
1819 CompareOp compare_op = StrToCompareOp(token->AsString()); in ParsePipelineStencil()
1822 token->AsString()); in ParsePipelineStencil()
1828 } else if (token->AsString() == "COMPARE_MASK") { in ParsePipelineStencil()
1829 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1831 if (!token->IsInteger()) in ParsePipelineStencil()
1835 pipeline->GetPipelineData()->SetFrontCompareMask(token->AsUint32()); in ParsePipelineStencil()
1837 pipeline->GetPipelineData()->SetBackCompareMask(token->AsUint32()); in ParsePipelineStencil()
1838 } else if (token->AsString() == "WRITE_MASK") { in ParsePipelineStencil()
1839 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1841 if (!token->IsInteger()) in ParsePipelineStencil()
1845 pipeline->GetPipelineData()->SetFrontWriteMask(token->AsUint32()); in ParsePipelineStencil()
1847 pipeline->GetPipelineData()->SetBackWriteMask(token->AsUint32()); in ParsePipelineStencil()
1848 } else if (token->AsString() == "REFERENCE") { in ParsePipelineStencil()
1849 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1851 if (!token->IsInteger()) in ParsePipelineStencil()
1855 pipeline->GetPipelineData()->SetFrontReference(token->AsUint32()); in ParsePipelineStencil()
1857 pipeline->GetPipelineData()->SetBackReference(token->AsUint32()); in ParsePipelineStencil()
1859 return Result("STENCIL invalid value for STENCIL: " + token->AsString()); in ParsePipelineStencil()
1870 auto token = tokenizer_->NextToken(); in ParsePipelineBlend() local
1871 if (token->IsEOL()) in ParsePipelineBlend()
1873 if (token->IsEOS()) in ParsePipelineBlend()
1875 if (!token->IsIdentifier()) in ParsePipelineBlend()
1877 if (token->AsString() == "END") in ParsePipelineBlend()
1880 if (token->AsString() == "SRC_COLOR_FACTOR") { in ParsePipelineBlend()
1881 token = tokenizer_->NextToken(); in ParsePipelineBlend()
1883 if (!token->IsIdentifier()) in ParsePipelineBlend()
1886 const auto factor = NameToBlendFactor(token->AsString()); in ParsePipelineBlend()
1889 token->AsString()); in ParsePipelineBlend()
1891 NameToBlendFactor(token->AsString())); in ParsePipelineBlend()
1892 } else if (token->AsString() == "DST_COLOR_FACTOR") { in ParsePipelineBlend()
1893 token = tokenizer_->NextToken(); in ParsePipelineBlend()
1895 if (!token->IsIdentifier()) in ParsePipelineBlend()
1898 const auto factor = NameToBlendFactor(token->AsString()); in ParsePipelineBlend()
1901 token->AsString()); in ParsePipelineBlend()
1903 NameToBlendFactor(token->AsString())); in ParsePipelineBlend()
1904 } else if (token->AsString() == "SRC_ALPHA_FACTOR") { in ParsePipelineBlend()
1905 token = tokenizer_->NextToken(); in ParsePipelineBlend()
1907 if (!token->IsIdentifier()) in ParsePipelineBlend()
1910 const auto factor = NameToBlendFactor(token->AsString()); in ParsePipelineBlend()
1913 token->AsString()); in ParsePipelineBlend()
1915 NameToBlendFactor(token->AsString())); in ParsePipelineBlend()
1916 } else if (token->AsString() == "DST_ALPHA_FACTOR") { in ParsePipelineBlend()
1917 token = tokenizer_->NextToken(); in ParsePipelineBlend()
1919 if (!token->IsIdentifier()) in ParsePipelineBlend()
1922 const auto factor = NameToBlendFactor(token->AsString()); in ParsePipelineBlend()
1925 token->AsString()); in ParsePipelineBlend()
1927 NameToBlendFactor(token->AsString())); in ParsePipelineBlend()
1928 } else if (token->AsString() == "COLOR_OP") { in ParsePipelineBlend()
1929 token = tokenizer_->NextToken(); in ParsePipelineBlend()
1931 if (!token->IsIdentifier()) in ParsePipelineBlend()
1934 const auto op = NameToBlendOp(token->AsString()); in ParsePipelineBlend()
1936 return Result("BLEND invalid value for COLOR_OP: " + token->AsString()); in ParsePipelineBlend()
1938 NameToBlendOp(token->AsString())); in ParsePipelineBlend()
1939 } else if (token->AsString() == "ALPHA_OP") { in ParsePipelineBlend()
1940 token = tokenizer_->NextToken(); in ParsePipelineBlend()
1942 if (!token->IsIdentifier()) in ParsePipelineBlend()
1945 const auto op = NameToBlendOp(token->AsString()); in ParsePipelineBlend()
1947 return Result("BLEND invalid value for ALPHA_OP: " + token->AsString()); in ParsePipelineBlend()
1949 NameToBlendOp(token->AsString())); in ParsePipelineBlend()
1951 return Result("BLEND invalid value for BLEND: " + token->AsString()); in ParsePipelineBlend()
1959 auto token = tokenizer_->NextToken(); in ParseStruct() local
1960 if (!token->IsIdentifier()) in ParseStruct()
1963 auto struct_name = token->AsString(); in ParseStruct()
1974 token = tokenizer_->NextToken(); in ParseStruct()
1975 if (token->IsIdentifier()) { in ParseStruct()
1976 if (token->AsString() != "STRIDE") in ParseStruct()
1977 return Result("invalid token in STRUCT definition"); in ParseStruct()
1979 token = tokenizer_->NextToken(); in ParseStruct()
1980 if (token->IsEOL() || token->IsEOS()) in ParseStruct()
1982 if (!token->IsInteger()) in ParseStruct()
1985 type->SetStrideInBytes(token->AsUint32()); in ParseStruct()
1986 token = tokenizer_->NextToken(); in ParseStruct()
1988 if (!token->IsEOL()) { in ParseStruct()
1989 return Result("extra token " + token->ToOriginalString() + in ParseStruct()
1995 token = tokenizer_->NextToken(); in ParseStruct()
1996 if (!token->IsIdentifier()) in ParseStruct()
1998 if (token->AsString() == "END") in ParseStruct()
2001 if (token->AsString() == struct_name) in ParseStruct()
2004 type::Type* member_type = script_->GetType(token->AsString()); in ParseStruct()
2006 auto t = ToType(token->AsString()); in ParseStruct()
2008 return Result("unknown type '" + token->AsString() + in ParseStruct()
2016 token = tokenizer_->NextToken(); in ParseStruct()
2017 if (token->IsEOL()) in ParseStruct()
2019 if (!token->IsIdentifier()) in ParseStruct()
2022 auto member_name = token->AsString(); in ParseStruct()
2031 token = tokenizer_->NextToken(); in ParseStruct()
2032 while (token->IsIdentifier()) { in ParseStruct()
2033 if (token->AsString() == "OFFSET") { in ParseStruct()
2034 token = tokenizer_->NextToken(); in ParseStruct()
2035 if (token->IsEOL()) in ParseStruct()
2037 if (!token->IsInteger()) in ParseStruct()
2040 m->offset_in_bytes = token->AsInt32(); in ParseStruct()
2041 } else if (token->AsString() == "ARRAY_STRIDE") { in ParseStruct()
2042 token = tokenizer_->NextToken(); in ParseStruct()
2043 if (token->IsEOL()) in ParseStruct()
2045 if (!token->IsInteger()) in ParseStruct()
2050 m->array_stride_in_bytes = token->AsInt32(); in ParseStruct()
2051 } else if (token->AsString() == "MATRIX_STRIDE") { in ParseStruct()
2052 token = tokenizer_->NextToken(); in ParseStruct()
2053 if (token->IsEOL()) in ParseStruct()
2055 if (!token->IsInteger()) in ParseStruct()
2060 m->matrix_stride_in_bytes = token->AsInt32(); in ParseStruct()
2062 return Result("unknown param '" + token->AsString() + in ParseStruct()
2066 token = tokenizer_->NextToken(); in ParseStruct()
2069 if (!token->IsEOL()) in ParseStruct()
2077 auto token = tokenizer_->NextToken(); in ParseBuffer() local
2078 if (!token->IsIdentifier()) in ParseBuffer()
2081 auto name = token->AsString(); in ParseBuffer()
2085 token = tokenizer_->NextToken(); in ParseBuffer()
2086 if (!token->IsIdentifier()) in ParseBuffer()
2090 auto& cmd = token->AsString(); in ParseBuffer()
2098 token = tokenizer_->NextToken(); in ParseBuffer()
2099 if (!token->IsIdentifier()) in ParseBuffer()
2104 auto type = script_->ParseType(token->AsString()); in ParseBuffer()
2112 token = tokenizer_->PeekNextToken(); in ParseBuffer()
2113 while (token->IsIdentifier()) { in ParseBuffer()
2114 if (token->AsString() == "MIP_LEVELS") { in ParseBuffer()
2116 token = tokenizer_->NextToken(); in ParseBuffer()
2118 if (!token->IsInteger()) in ParseBuffer()
2121 buffer->SetMipLevels(token->AsUint32()); in ParseBuffer()
2122 } else if (token->AsString() == "FILE") { in ParseBuffer()
2128 } else if (token->AsString() == "SAMPLES") { in ParseBuffer()
2130 token = tokenizer_->NextToken(); in ParseBuffer()
2131 if (!token->IsInteger()) in ParseBuffer()
2134 const uint32_t samples = token->AsUint32(); in ParseBuffer()
2136 return Result("invalid sample count: " + token->ToOriginalString()); in ParseBuffer()
2142 token = tokenizer_->PeekNextToken(); in ParseBuffer()
2157 auto token = tokenizer_->NextToken(); in ParseImage() local
2158 if (!token->IsIdentifier()) in ParseImage()
2161 auto name = token->AsString(); in ParseImage()
2171 token = tokenizer_->PeekNextToken(); in ParseImage()
2172 while (token->IsIdentifier()) { in ParseImage()
2173 if (token->AsString() == "FILL" || token->AsString() == "SERIES_FROM" || in ParseImage()
2174 token->AsString() == "DATA") { in ParseImage()
2180 if (token->AsString() == "DATA_TYPE") { in ParseImage()
2181 token = tokenizer_->NextToken(); in ParseImage()
2182 if (!token->IsIdentifier()) in ParseImage()
2185 auto type = script_->ParseType(token->AsString()); in ParseImage()
2191 auto new_type = ToType(token->AsString()); in ParseImage()
2193 return Result("invalid data type '" + token->AsString() + in ParseImage()
2202 } else if (token->AsString() == "FORMAT") { in ParseImage()
2203 token = tokenizer_->NextToken(); in ParseImage()
2204 if (!token->IsIdentifier()) in ParseImage()
2207 auto type = script_->ParseType(token->AsString()); in ParseImage()
2214 } else if (token->AsString() == "MIP_LEVELS") { in ParseImage()
2215 token = tokenizer_->NextToken(); in ParseImage()
2217 if (!token->IsInteger()) in ParseImage()
2220 buffer->SetMipLevels(token->AsUint32()); in ParseImage()
2221 } else if (token->AsString() == "DIM_1D") { in ParseImage()
2223 } else if (token->AsString() == "DIM_2D") { in ParseImage()
2225 } else if (token->AsString() == "DIM_3D") { in ParseImage()
2227 } else if (token->AsString() == "WIDTH") { in ParseImage()
2228 token = tokenizer_->NextToken(); in ParseImage()
2229 if (!token->IsInteger() || token->AsUint32() == 0) in ParseImage()
2232 buffer->SetWidth(token->AsUint32()); in ParseImage()
2234 } else if (token->AsString() == "HEIGHT") { in ParseImage()
2235 token = tokenizer_->NextToken(); in ParseImage()
2236 if (!token->IsInteger() || token->AsUint32() == 0) in ParseImage()
2239 buffer->SetHeight(token->AsUint32()); in ParseImage()
2241 } else if (token->AsString() == "DEPTH") { in ParseImage()
2242 token = tokenizer_->NextToken(); in ParseImage()
2243 if (!token->IsInteger() || token->AsUint32() == 0) in ParseImage()
2246 buffer->SetDepth(token->AsUint32()); in ParseImage()
2248 } else if (token->AsString() == "SAMPLES") { in ParseImage()
2249 token = tokenizer_->NextToken(); in ParseImage()
2250 if (!token->IsInteger()) in ParseImage()
2253 const uint32_t samples = token->AsUint32(); in ParseImage()
2255 return Result("invalid sample count: " + token->ToOriginalString()); in ParseImage()
2260 token->ToOriginalString()); in ParseImage()
2262 token = tokenizer_->PeekNextToken(); in ParseImage()
2281 token = tokenizer_->NextToken(); in ParseImage()
2282 if (token->IsIdentifier()) { in ParseImage()
2283 if (token->AsString() == "DATA") { in ParseImage()
2294 } else if (token->AsString() == "FILL") { in ParseImage()
2298 } else if (token->AsString() == "SERIES_FROM") { in ParseImage()
2303 return Result("unexpected IMAGE token: " + token->AsString()); in ParseImage()
2305 } else if (!token->IsEOL() && !token->IsEOS()) { in ParseImage()
2306 return Result("unexpected IMAGE token: " + token->ToOriginalString()); in ParseImage()
2317 auto token = tokenizer_->NextToken(); in ParseBufferInitializer() local
2318 if (!token->IsIdentifier()) in ParseBufferInitializer()
2321 auto type = script_->ParseType(token->AsString()); in ParseBufferInitializer()
2327 auto new_type = ToType(token->AsString()); in ParseBufferInitializer()
2329 return Result("invalid data type '" + token->AsString() + "' provided"); in ParseBufferInitializer()
2338 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2339 if (!token->IsIdentifier()) in ParseBufferInitializer()
2342 if (token->AsString() == "STD140") { in ParseBufferInitializer()
2344 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2345 } else if (token->AsString() == "STD430") { in ParseBufferInitializer()
2347 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2350 if (!token->IsIdentifier()) in ParseBufferInitializer()
2353 if (token->AsString() == "SIZE") in ParseBufferInitializer()
2355 if (token->AsString() == "WIDTH") { in ParseBufferInitializer()
2356 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2357 if (!token->IsInteger()) in ParseBufferInitializer()
2359 const uint32_t width = token->AsUint32(); in ParseBufferInitializer()
2365 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2366 if (token->AsString() != "HEIGHT") in ParseBufferInitializer()
2368 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2369 if (!token->IsInteger()) in ParseBufferInitializer()
2371 const uint32_t height = token->AsUint32(); in ParseBufferInitializer()
2376 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2379 if (token->AsString() == "FILL") in ParseBufferInitializer()
2381 if (token->AsString() == "SERIES_FROM") in ParseBufferInitializer()
2385 if (token->AsString() == "DATA") in ParseBufferInitializer()
2392 auto token = tokenizer_->NextToken(); in ParseBufferInitializerSize() local
2393 if (token->IsEOS() || token->IsEOL()) in ParseBufferInitializerSize()
2395 if (!token->IsInteger()) in ParseBufferInitializerSize()
2398 uint32_t size_in_items = token->AsUint32(); in ParseBufferInitializerSize()
2401 token = tokenizer_->NextToken(); in ParseBufferInitializerSize()
2402 if (!token->IsIdentifier()) in ParseBufferInitializerSize()
2405 if (token->AsString() == "FILL") in ParseBufferInitializerSize()
2407 if (token->AsString() == "SERIES_FROM") in ParseBufferInitializerSize()
2409 if (token->AsString() == "FILE") in ParseBufferInitializerSize()
2417 auto token = tokenizer_->NextToken(); in ParseBufferInitializerFill() local
2418 if (token->IsEOS() || token->IsEOL()) in ParseBufferInitializerFill()
2420 if (!token->IsInteger() && !token->IsDouble()) in ParseBufferInitializerFill()
2433 values[i].SetDoubleValue(token->AsDouble()); in ParseBufferInitializerFill()
2435 values[i].SetIntValue(token->AsUint64()); in ParseBufferInitializerFill()
2446 auto token = tokenizer_->NextToken(); in ParseBufferInitializerSeries() local
2447 if (token->IsEOS() || token->IsEOL()) in ParseBufferInitializerSeries()
2449 if (!token->IsInteger() && !token->IsDouble()) in ParseBufferInitializerSeries()
2463 counter.SetDoubleValue(token->AsDouble()); in ParseBufferInitializerSeries()
2465 counter.SetIntValue(token->AsUint64()); in ParseBufferInitializerSeries()
2468 token = tokenizer_->NextToken(); in ParseBufferInitializerSeries()
2469 if (!token->IsIdentifier()) in ParseBufferInitializerSeries()
2471 if (token->AsString() != "INC_BY") in ParseBufferInitializerSeries()
2474 token = tokenizer_->NextToken(); in ParseBufferInitializerSeries()
2475 if (token->IsEOS() || token->IsEOL()) in ParseBufferInitializerSeries()
2477 if (!token->IsInteger() && !token->IsDouble()) in ParseBufferInitializerSeries()
2487 counter.SetDoubleValue(value + token->AsDouble()); in ParseBufferInitializerSeries()
2491 counter.SetIntValue(value + token->AsUint64()); in ParseBufferInitializerSeries()
2511 auto token = tokenizer_->NextToken(); in ParseBufferInitializerFile() local
2513 if (!token->IsIdentifier()) in ParseBufferInitializerFile()
2518 if (token->AsString() == "TEXT") { in ParseBufferInitializerFile()
2520 token = tokenizer_->NextToken(); in ParseBufferInitializerFile()
2521 } else if (token->AsString() == "BINARY") { in ParseBufferInitializerFile()
2523 token = tokenizer_->NextToken(); in ParseBufferInitializerFile()
2524 } else if (token->AsString() == "PNG") { in ParseBufferInitializerFile()
2525 token = tokenizer_->NextToken(); in ParseBufferInitializerFile()
2528 if (!token->IsIdentifier()) in ParseBufferInitializerFile()
2535 Result r = delegate_->LoadBufferData(token->AsString(), file_type, &info); in ParseBufferInitializerFile()
2565 auto token = tokenizer_->NextToken(); in ParseRun() local
2566 if (!token->IsIdentifier()) in ParseRun()
2571 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseRun()
2573 return Result("unknown pipeline for RUN command: " + token->AsString()); in ParseRun()
2575 token = tokenizer_->NextToken(); in ParseRun()
2576 if (token->IsEOL() || token->IsEOS()) in ParseRun()
2579 if (token->IsInteger()) { in ParseRun()
2585 cmd->SetX(token->AsUint32()); in ParseRun()
2587 token = tokenizer_->NextToken(); in ParseRun()
2588 if (!token->IsInteger()) { in ParseRun()
2590 token->ToOriginalString()); in ParseRun()
2592 cmd->SetY(token->AsUint32()); in ParseRun()
2594 token = tokenizer_->NextToken(); in ParseRun()
2595 if (!token->IsInteger()) { in ParseRun()
2597 token->ToOriginalString()); in ParseRun()
2599 cmd->SetZ(token->AsUint32()); in ParseRun()
2605 if (!token->IsIdentifier()) in ParseRun()
2606 return Result("invalid token in RUN command: " + token->ToOriginalString()); in ParseRun()
2608 if (token->AsString() == "DRAW_RECT") { in ParseRun()
2618 token = tokenizer_->NextToken(); in ParseRun()
2619 if (token->IsEOS() || token->IsEOL()) in ParseRun()
2622 if (!token->IsIdentifier() || token->AsString() != "POS") { in ParseRun()
2623 return Result("invalid token in RUN command: " + in ParseRun()
2624 token->ToOriginalString() + "; expected POS"); in ParseRun()
2627 token = tokenizer_->NextToken(); in ParseRun()
2628 if (!token->IsInteger()) in ParseRun()
2636 Result r = token->ConvertToDouble(); in ParseRun()
2639 cmd->SetX(token->AsFloat()); in ParseRun()
2641 token = tokenizer_->NextToken(); in ParseRun()
2642 if (!token->IsInteger()) in ParseRun()
2645 r = token->ConvertToDouble(); in ParseRun()
2648 cmd->SetY(token->AsFloat()); in ParseRun()
2650 token = tokenizer_->NextToken(); in ParseRun()
2651 if (!token->IsIdentifier() || token->AsString() != "SIZE") { in ParseRun()
2652 return Result("invalid token in RUN command: " + in ParseRun()
2653 token->ToOriginalString() + "; expected SIZE"); in ParseRun()
2656 token = tokenizer_->NextToken(); in ParseRun()
2657 if (!token->IsInteger()) in ParseRun()
2660 r = token->ConvertToDouble(); in ParseRun()
2663 cmd->SetWidth(token->AsFloat()); in ParseRun()
2665 token = tokenizer_->NextToken(); in ParseRun()
2666 if (!token->IsInteger()) in ParseRun()
2669 r = token->ConvertToDouble(); in ParseRun()
2672 cmd->SetHeight(token->AsFloat()); in ParseRun()
2678 if (token->AsString() == "DRAW_GRID") { in ParseRun()
2688 token = tokenizer_->NextToken(); in ParseRun()
2689 if (token->IsEOS() || token->IsEOL()) in ParseRun()
2692 if (!token->IsIdentifier() || token->AsString() != "POS") { in ParseRun()
2693 return Result("invalid token in RUN command: " + in ParseRun()
2694 token->ToOriginalString() + "; expected POS"); in ParseRun()
2697 token = tokenizer_->NextToken(); in ParseRun()
2698 if (!token->IsInteger()) in ParseRun()
2705 Result r = token->ConvertToDouble(); in ParseRun()
2708 cmd->SetX(token->AsFloat()); in ParseRun()
2710 token = tokenizer_->NextToken(); in ParseRun()
2711 if (!token->IsInteger()) in ParseRun()
2714 r = token->ConvertToDouble(); in ParseRun()
2717 cmd->SetY(token->AsFloat()); in ParseRun()
2719 token = tokenizer_->NextToken(); in ParseRun()
2720 if (!token->IsIdentifier() || token->AsString() != "SIZE") { in ParseRun()
2721 return Result("invalid token in RUN command: " + in ParseRun()
2722 token->ToOriginalString() + "; expected SIZE"); in ParseRun()
2725 token = tokenizer_->NextToken(); in ParseRun()
2726 if (!token->IsInteger()) in ParseRun()
2729 r = token->ConvertToDouble(); in ParseRun()
2732 cmd->SetWidth(token->AsFloat()); in ParseRun()
2734 token = tokenizer_->NextToken(); in ParseRun()
2735 if (!token->IsInteger()) in ParseRun()
2738 r = token->ConvertToDouble(); in ParseRun()
2741 cmd->SetHeight(token->AsFloat()); in ParseRun()
2743 token = tokenizer_->NextToken(); in ParseRun()
2744 if (!token->IsIdentifier() || token->AsString() != "CELLS") { in ParseRun()
2745 return Result("invalid token in RUN command: " + in ParseRun()
2746 token->ToOriginalString() + "; expected CELLS"); in ParseRun()
2749 token = tokenizer_->NextToken(); in ParseRun()
2750 if (!token->IsInteger()) in ParseRun()
2753 cmd->SetColumns(token->AsUint32()); in ParseRun()
2755 token = tokenizer_->NextToken(); in ParseRun()
2756 if (!token->IsInteger()) in ParseRun()
2759 cmd->SetRows(token->AsUint32()); in ParseRun()
2765 if (token->AsString() == "DRAW_ARRAY") { in ParseRun()
2772 token = tokenizer_->NextToken(); in ParseRun()
2773 if (!token->IsIdentifier() || token->AsString() != "AS") in ParseRun()
2776 token = tokenizer_->NextToken(); in ParseRun()
2777 if (!token->IsIdentifier()) { in ParseRun()
2779 token->ToOriginalString()); in ParseRun()
2782 Topology topo = NameToTopology(token->AsString()); in ParseRun()
2784 return Result("invalid topology for RUN command: " + token->AsString()); in ParseRun()
2792 token = tokenizer_->PeekNextToken(); in ParseRun()
2794 while (!token->IsEOS() && !token->IsEOL()) { in ParseRun()
2795 token = tokenizer_->NextToken(); in ParseRun()
2797 if (!token->IsIdentifier()) in ParseRun()
2800 if (token->AsString() == "INDEXED") { in ParseRun()
2807 } else if (token->AsString() == "START_IDX") { in ParseRun()
2808 token = tokenizer_->NextToken(); in ParseRun()
2809 if (!token->IsInteger()) { in ParseRun()
2811 token->ToOriginalString()); in ParseRun()
2813 if (token->AsInt32() < 0) in ParseRun()
2815 start_idx = token->AsUint32(); in ParseRun()
2816 } else if (token->AsString() == "COUNT") { in ParseRun()
2817 token = tokenizer_->NextToken(); in ParseRun()
2818 if (!token->IsInteger()) { in ParseRun()
2820 token->ToOriginalString()); in ParseRun()
2822 if (token->AsInt32() <= 0) in ParseRun()
2825 count = token->AsUint32(); in ParseRun()
2826 } else if (token->AsString() == "INSTANCE_COUNT") { in ParseRun()
2827 token = tokenizer_->NextToken(); in ParseRun()
2828 if (!token->IsInteger()) { in ParseRun()
2830 token->ToOriginalString()); in ParseRun()
2832 if (token->AsInt32() <= 0) in ParseRun()
2835 instance_count = token->AsUint32(); in ParseRun()
2836 } else if (token->AsString() == "START_INSTANCE") { in ParseRun()
2837 token = tokenizer_->NextToken(); in ParseRun()
2838 if (!token->IsInteger()) { in ParseRun()
2840 token->ToOriginalString()); in ParseRun()
2842 if (token->AsInt32() < 0) in ParseRun()
2844 start_instance = token->AsUint32(); in ParseRun()
2847 token->ToOriginalString()); in ParseRun()
2850 token = tokenizer_->PeekNextToken(); in ParseRun()
2885 return Result("invalid token in RUN command: " + token->AsString()); in ParseRun()
2889 auto token = tokenizer_->NextToken(); in ParseClear() local
2890 if (!token->IsIdentifier()) in ParseClear()
2895 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseClear()
2897 return Result("unknown pipeline for CLEAR command: " + token->AsString()); in ParseClear()
2913 auto token = tokenizer_->NextToken(); in ParseValues() local
2916 while (!token->IsEOL() && !token->IsEOS()) { in ParseValues()
2926 if (!token->IsInteger() && !token->IsDouble() && !token->IsHex()) { in ParseValues()
2928 " command: " + token->ToOriginalString()); in ParseValues()
2931 Result r = token->ConvertToDouble(); in ParseValues()
2935 v.SetDoubleValue(token->AsDouble()); in ParseValues()
2937 if (!token->IsInteger() && !token->IsHex()) { in ParseValues()
2939 " command: " + token->ToOriginalString()); in ParseValues()
2942 uint64_t val = token->IsHex() ? token->AsHex() : token->AsUint64(); in ParseValues()
2950 token = tokenizer_->NextToken(); in ParseValues()
2956 auto token = tokenizer_->NextToken(); in ParseExpect() local
2957 if (!token->IsIdentifier()) in ParseExpect()
2960 if (token->AsString() == "IDX") in ParseExpect()
2962 if (token->AsString() == "EQ_BUFFER") in ParseExpect()
2964 if (token->AsString() == "RMSE_BUFFER") in ParseExpect()
2966 if (token->AsString() == "EQ_HISTOGRAM_EMD_BUFFER") { in ParseExpect()
2972 auto* buffer = script_->GetBuffer(token->AsString()); in ParseExpect()
2975 token->AsString()); in ParseExpect()
2977 token = tokenizer_->NextToken(); in ParseExpect()
2979 if (!token->IsIdentifier()) in ParseExpect()
2982 if (token->AsString() == "EQ_BUFFER" || token->AsString() == "RMSE_BUFFER" || in ParseExpect()
2983 token->AsString() == "EQ_HISTOGRAM_EMD_BUFFER") { in ParseExpect()
2984 auto type = token->AsString(); in ParseExpect()
2986 token = tokenizer_->NextToken(); in ParseExpect()
2987 if (!token->IsIdentifier()) in ParseExpect()
2990 auto* buffer_2 = script_->GetBuffer(token->AsString()); in ParseExpect()
2993 " command: " + token->AsString()); in ParseExpect()
3019 token = tokenizer_->NextToken(); in ParseExpect()
3020 if (!token->IsIdentifier() && token->AsString() == "TOLERANCE") in ParseExpect()
3023 token = tokenizer_->NextToken(); in ParseExpect()
3024 if (!token->IsInteger() && !token->IsDouble()) in ParseExpect()
3027 Result r = token->ConvertToDouble(); in ParseExpect()
3031 cmd->SetTolerance(token->AsFloat()); in ParseExpect()
3035 token = tokenizer_->NextToken(); in ParseExpect()
3036 if (!token->IsIdentifier() && token->AsString() == "TOLERANCE") in ParseExpect()
3039 token = tokenizer_->NextToken(); in ParseExpect()
3040 if (!token->IsInteger() && !token->IsDouble()) in ParseExpect()
3043 Result r = token->ConvertToDouble(); in ParseExpect()
3047 cmd->SetTolerance(token->AsFloat()); in ParseExpect()
3056 if (token->AsString() != "IDX") in ParseExpect()
3059 token = tokenizer_->NextToken(); in ParseExpect()
3060 if (!token->IsInteger() || token->AsInt32() < 0) in ParseExpect()
3062 token->ConvertToDouble(); in ParseExpect()
3063 float x = token->AsFloat(); in ParseExpect()
3067 token = tokenizer_->NextToken(); in ParseExpect()
3068 if (token->IsInteger()) { in ParseExpect()
3071 if (token->AsInt32() < 0) in ParseExpect()
3073 token->ConvertToDouble(); in ParseExpect()
3074 y = token->AsFloat(); in ParseExpect()
3076 token = tokenizer_->NextToken(); in ParseExpect()
3079 if (token->IsIdentifier() && token->AsString() == "SIZE") { in ParseExpect()
3089 token = tokenizer_->NextToken(); in ParseExpect()
3090 if (!token->IsInteger() || token->AsInt32() <= 0) in ParseExpect()
3092 token->ConvertToDouble(); in ParseExpect()
3093 probe->SetWidth(token->AsFloat()); in ParseExpect()
3095 token = tokenizer_->NextToken(); in ParseExpect()
3096 if (!token->IsInteger() || token->AsInt32() <= 0) in ParseExpect()
3098 token->ConvertToDouble(); in ParseExpect()
3099 probe->SetHeight(token->AsFloat()); in ParseExpect()
3101 token = tokenizer_->NextToken(); in ParseExpect()
3102 if (!token->IsIdentifier()) { in ParseExpect()
3103 return Result("invalid token in EXPECT command:" + in ParseExpect()
3104 token->ToOriginalString()); in ParseExpect()
3107 if (token->AsString() == "EQ_RGBA") { in ParseExpect()
3109 } else if (token->AsString() != "EQ_RGB") { in ParseExpect()
3111 token->ToOriginalString()); in ParseExpect()
3114 token = tokenizer_->NextToken(); in ParseExpect()
3115 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) in ParseExpect()
3117 token->ConvertToDouble(); in ParseExpect()
3118 probe->SetR(token->AsFloat() / 255.f); in ParseExpect()
3120 token = tokenizer_->NextToken(); in ParseExpect()
3121 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) in ParseExpect()
3123 token->ConvertToDouble(); in ParseExpect()
3124 probe->SetG(token->AsFloat() / 255.f); in ParseExpect()
3126 token = tokenizer_->NextToken(); in ParseExpect()
3127 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) in ParseExpect()
3129 token->ConvertToDouble(); in ParseExpect()
3130 probe->SetB(token->AsFloat() / 255.f); in ParseExpect()
3133 token = tokenizer_->NextToken(); in ParseExpect()
3134 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) in ParseExpect()
3136 token->ConvertToDouble(); in ParseExpect()
3137 probe->SetA(token->AsFloat() / 255.f); in ParseExpect()
3140 token = tokenizer_->NextToken(); in ParseExpect()
3141 if (token->IsIdentifier() && token->AsString() == "TOLERANCE") { in ParseExpect()
3163 token = tokenizer_->NextToken(); in ParseExpect()
3166 if (!token->IsEOL() && !token->IsEOS()) { in ParseExpect()
3168 token->ToOriginalString()); in ParseExpect()
3179 if (token->IsIdentifier() && token->AsString() == "TOLERANCE") { in ParseExpect()
3193 token = tokenizer_->NextToken(); in ParseExpect()
3196 if (!token->IsIdentifier() || !IsComparator(token->AsString())) { in ParseExpect()
3197 return Result("unexpected token in EXPECT command: " + in ParseExpect()
3198 token->ToOriginalString()); in ParseExpect()
3204 auto cmp = ToComparator(token->AsString()); in ParseExpect()
3231 auto token = tokenizer_->NextToken(); in ParseCopy() local
3232 if (token->IsEOL() || token->IsEOS()) in ParseCopy()
3234 if (!token->IsIdentifier()) in ParseCopy()
3239 auto name = token->AsString(); in ParseCopy()
3247 token = tokenizer_->NextToken(); in ParseCopy()
3248 if (token->IsEOL() || token->IsEOS()) in ParseCopy()
3250 if (!token->IsIdentifier()) in ParseCopy()
3253 name = token->AsString(); in ParseCopy()
3257 token = tokenizer_->NextToken(); in ParseCopy()
3258 if (token->IsEOL() || token->IsEOS()) in ParseCopy()
3260 if (!token->IsIdentifier()) in ParseCopy()
3263 name = token->AsString(); in ParseCopy()
3284 auto token = tokenizer_->NextToken(); in ParseClearColor() local
3285 if (!token->IsIdentifier()) in ParseClearColor()
3290 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseClearColor()
3293 token->AsString()); in ParseClearColor()
3302 token = tokenizer_->NextToken(); in ParseClearColor()
3303 if (token->IsEOL() || token->IsEOS()) in ParseClearColor()
3305 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearColor()
3307 token->ToOriginalString()); in ParseClearColor()
3309 token->ConvertToDouble(); in ParseClearColor()
3310 cmd->SetR(token->AsFloat() / 255.f); in ParseClearColor()
3312 token = tokenizer_->NextToken(); in ParseClearColor()
3313 if (token->IsEOL() || token->IsEOS()) in ParseClearColor()
3315 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearColor()
3317 token->ToOriginalString()); in ParseClearColor()
3319 token->ConvertToDouble(); in ParseClearColor()
3320 cmd->SetG(token->AsFloat() / 255.f); in ParseClearColor()
3322 token = tokenizer_->NextToken(); in ParseClearColor()
3323 if (token->IsEOL() || token->IsEOS()) in ParseClearColor()
3325 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearColor()
3327 token->ToOriginalString()); in ParseClearColor()
3329 token->ConvertToDouble(); in ParseClearColor()
3330 cmd->SetB(token->AsFloat() / 255.f); in ParseClearColor()
3332 token = tokenizer_->NextToken(); in ParseClearColor()
3333 if (token->IsEOL() || token->IsEOS()) in ParseClearColor()
3335 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearColor()
3337 token->ToOriginalString()); in ParseClearColor()
3339 token->ConvertToDouble(); in ParseClearColor()
3340 cmd->SetA(token->AsFloat() / 255.f); in ParseClearColor()
3347 auto token = tokenizer_->NextToken(); in ParseClearDepth() local
3348 if (!token->IsIdentifier()) in ParseClearDepth()
3353 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseClearDepth()
3356 token->AsString()); in ParseClearDepth()
3365 token = tokenizer_->NextToken(); in ParseClearDepth()
3366 if (token->IsEOL() || token->IsEOS()) in ParseClearDepth()
3368 if (!token->IsDouble()) { in ParseClearDepth()
3370 token->ToOriginalString()); in ParseClearDepth()
3372 cmd->SetValue(token->AsFloat()); in ParseClearDepth()
3379 auto token = tokenizer_->NextToken(); in ParseClearStencil() local
3380 if (!token->IsIdentifier()) in ParseClearStencil()
3385 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseClearStencil()
3388 token->AsString()); in ParseClearStencil()
3397 token = tokenizer_->NextToken(); in ParseClearStencil()
3398 if (token->IsEOL() || token->IsEOS()) in ParseClearStencil()
3400 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearStencil()
3402 token->ToOriginalString()); in ParseClearStencil()
3404 cmd->SetValue(token->AsUint32()); in ParseClearStencil()
3411 auto token = tokenizer_->NextToken(); in ParseDeviceFeature() local
3412 if (token->IsEOS() || token->IsEOL()) in ParseDeviceFeature()
3414 if (!token->IsIdentifier()) in ParseDeviceFeature()
3416 if (!script_->IsKnownFeature(token->AsString())) in ParseDeviceFeature()
3419 script_->AddRequiredFeature(token->AsString()); in ParseDeviceFeature()
3425 auto token = tokenizer_->NextToken(); in ParseRepeat() local
3426 if (token->IsEOL() || token->IsEOL()) in ParseRepeat()
3428 if (!token->IsInteger()) { in ParseRepeat()
3430 token->ToOriginalString()); in ParseRepeat()
3432 if (token->AsInt32() <= 0) in ParseRepeat()
3435 uint32_t count = token->AsUint32(); in ParseRepeat()
3440 for (token = tokenizer_->NextToken(); !token->IsEOS(); in ParseRepeat()
3441 token = tokenizer_->NextToken()) { in ParseRepeat()
3442 if (token->IsEOL()) in ParseRepeat()
3444 if (!token->IsIdentifier()) in ParseRepeat()
3447 std::string tok = token->AsString(); in ParseRepeat()
3451 return Result("unknown token: " + tok); in ParseRepeat()
3457 if (!token->IsIdentifier() || token->AsString() != "END") in ParseRepeat()
3470 auto token = tokenizer_->NextToken(); in ParseDerivePipelineBlock() local
3471 if (!token->IsIdentifier() || token->AsString() == "FROM") in ParseDerivePipelineBlock()
3474 std::string name = token->AsString(); in ParseDerivePipelineBlock()
3478 token = tokenizer_->NextToken(); in ParseDerivePipelineBlock()
3479 if (!token->IsIdentifier() || token->AsString() != "FROM") in ParseDerivePipelineBlock()
3482 token = tokenizer_->NextToken(); in ParseDerivePipelineBlock()
3483 if (!token->IsIdentifier()) in ParseDerivePipelineBlock()
3486 Pipeline* parent = script_->GetPipeline(token->AsString()); in ParseDerivePipelineBlock()
3501 auto token = tokenizer_->NextToken(); in ParseDeviceExtension() local
3502 if (token->IsEOL() || token->IsEOS()) in ParseDeviceExtension()
3504 if (!token->IsIdentifier()) { in ParseDeviceExtension()
3506 token->ToOriginalString()); in ParseDeviceExtension()
3509 script_->AddRequiredDeviceExtension(token->AsString()); in ParseDeviceExtension()
3515 auto token = tokenizer_->NextToken(); in ParseInstanceExtension() local
3516 if (token->IsEOL() || token->IsEOS()) in ParseInstanceExtension()
3518 if (!token->IsIdentifier()) { in ParseInstanceExtension()
3520 token->ToOriginalString()); in ParseInstanceExtension()
3523 script_->AddRequiredInstanceExtension(token->AsString()); in ParseInstanceExtension()
3529 auto token = tokenizer_->NextToken(); in ParseSet() local
3530 if (!token->IsIdentifier() || token->AsString() != "ENGINE_DATA") in ParseSet()
3533 token = tokenizer_->NextToken(); in ParseSet()
3534 if (token->IsEOS() || token->IsEOL()) in ParseSet()
3537 if (!token->IsIdentifier()) in ParseSet()
3538 return Result("SET invalid variable to set: " + token->ToOriginalString()); in ParseSet()
3540 if (token->AsString() != "fence_timeout_ms") in ParseSet()
3541 return Result("SET unknown variable provided: " + token->AsString()); in ParseSet()
3543 token = tokenizer_->NextToken(); in ParseSet()
3544 if (token->IsEOS() || token->IsEOL()) in ParseSet()
3546 if (!token->IsInteger()) in ParseSet()
3549 script_->GetEngineData().fence_timeout_ms = token->AsUint32(); in ParseSet()
3555 auto token = tokenizer_->NextToken(); in ParseSampler() local
3556 if (!token->IsIdentifier()) in ParseSampler()
3557 return Result("invalid token when looking for sampler name"); in ParseSampler()
3560 sampler->SetName(token->AsString()); in ParseSampler()
3562 token = tokenizer_->NextToken(); in ParseSampler()
3563 while (!token->IsEOS() && !token->IsEOL()) { in ParseSampler()
3564 if (!token->IsIdentifier()) in ParseSampler()
3565 return Result("invalid token when looking for sampler parameters"); in ParseSampler()
3567 auto param = token->AsString(); in ParseSampler()
3569 token = tokenizer_->NextToken(); in ParseSampler()
3571 if (!token->IsIdentifier()) in ParseSampler()
3572 return Result("invalid token when looking for MAG_FILTER value"); in ParseSampler()
3574 auto filter = token->AsString(); in ParseSampler()
3583 token = tokenizer_->NextToken(); in ParseSampler()
3585 if (!token->IsIdentifier()) in ParseSampler()
3586 return Result("invalid token when looking for MIN_FILTER value"); in ParseSampler()
3588 auto filter = token->AsString(); in ParseSampler()
3597 token = tokenizer_->NextToken(); in ParseSampler()
3599 if (!token->IsIdentifier()) in ParseSampler()
3600 return Result("invalid token when looking for ADDRESS_MODE_U value"); in ParseSampler()
3602 auto mode_str = token->AsString(); in ParseSampler()
3610 token = tokenizer_->NextToken(); in ParseSampler()
3612 if (!token->IsIdentifier()) in ParseSampler()
3613 return Result("invalid token when looking for ADDRESS_MODE_V value"); in ParseSampler()
3615 auto mode_str = token->AsString(); in ParseSampler()
3623 token = tokenizer_->NextToken(); in ParseSampler()
3625 if (!token->IsIdentifier()) in ParseSampler()
3626 return Result("invalid token when looking for ADDRESS_MODE_W value"); in ParseSampler()
3628 auto mode_str = token->AsString(); in ParseSampler()
3636 token = tokenizer_->NextToken(); in ParseSampler()
3638 if (!token->IsIdentifier()) in ParseSampler()
3639 return Result("invalid token when looking for BORDER_COLOR value"); in ParseSampler()
3641 auto color_str = token->AsString(); in ParseSampler()
3658 token = tokenizer_->NextToken(); in ParseSampler()
3660 if (!token->IsDouble()) in ParseSampler()
3661 return Result("invalid token when looking for MIN_LOD value"); in ParseSampler()
3663 sampler->SetMinLOD(token->AsFloat()); in ParseSampler()
3665 token = tokenizer_->NextToken(); in ParseSampler()
3667 if (!token->IsDouble()) in ParseSampler()
3668 return Result("invalid token when looking for MAX_LOD value"); in ParseSampler()
3670 sampler->SetMaxLOD(token->AsFloat()); in ParseSampler()
3678 token = tokenizer_->NextToken(); in ParseSampler()
3680 if (!token->IsIdentifier()) in ParseSampler()
3683 if (token->AsString() == "on") in ParseSampler()
3685 else if (token->AsString() == "off") in ParseSampler()
3688 return Result("invalid value for COMPARE: " + token->AsString()); in ParseSampler()
3690 token = tokenizer_->NextToken(); in ParseSampler()
3692 if (!token->IsIdentifier()) in ParseSampler()
3695 CompareOp compare_op = StrToCompareOp(token->AsString()); in ParseSampler()
3699 return Result("invalid value for COMPARE_OP: " + token->AsString()); in ParseSampler()
3705 token = tokenizer_->NextToken(); in ParseSampler()
3716 auto token = tokenizer_->PeekNextToken(); in ParseTolerances() local
3717 while (!token->IsEOL() && !token->IsEOS()) { in ParseTolerances()
3718 if (!token->IsInteger() && !token->IsDouble()) in ParseTolerances()
3721 token = tokenizer_->NextToken(); in ParseTolerances()
3722 Result r = token->ConvertToDouble(); in ParseTolerances()
3726 double value = token->AsDouble(); in ParseTolerances()
3727 token = tokenizer_->PeekNextToken(); in ParseTolerances()
3728 if (token->IsIdentifier() && token->AsString() == "%") { in ParseTolerances()
3731 token = tokenizer_->PeekNextToken(); in ParseTolerances()
3741 auto token = tokenizer_->NextToken(); in ParseVirtualFile() local
3742 if (!token->IsIdentifier() && !token->IsString()) in ParseVirtualFile()
3745 auto path = token->AsString(); in ParseVirtualFile()
3753 token = tokenizer_->NextToken(); in ParseVirtualFile()
3754 if (!token->IsIdentifier() || token->AsString() != "END") in ParseVirtualFile()