• Home
  • Raw
  • Download

Lines Matching full:token

209   for (auto token = tokenizer->NextToken();; token = tokenizer->NextToken()) {  in ParseBufferData()  local
210 if (token->IsEOL()) in ParseBufferData()
212 if (token->IsEOS()) { in ParseBufferData()
219 if (token->IsIdentifier() && token->AsString() == "END") in ParseBufferData()
221 if (!token->IsInteger() && !token->IsDouble() && !token->IsHex()) in ParseBufferData()
222 return Result("invalid BUFFER data value: " + token->ToOriginalString()); in ParseBufferData()
232 token->ConvertToDouble(); in ParseBufferData()
234 double val = token->IsHex() ? static_cast<double>(token->AsHex()) in ParseBufferData()
235 : token->AsDouble(); in ParseBufferData()
239 if (token->IsDouble()) { in ParseBufferData()
241 token->ToOriginalString()); in ParseBufferData()
244 uint64_t val = token->IsHex() ? token->AsHex() : token->AsUint64(); in ParseBufferData()
290 for (auto token = tokenizer_->NextToken(); !token->IsEOS(); in Parse() local
291 token = tokenizer_->NextToken()) { in Parse()
292 if (token->IsEOL()) in Parse()
294 if (!token->IsIdentifier()) in Parse()
298 std::string tok = token->AsString(); in Parse()
332 r = Result("unknown token: " + tok); in Parse()
467 auto token = tokenizer_->NextToken(); in ValidateEndOfStatement() local
468 if (token->IsEOL() || token->IsEOS()) in ValidateEndOfStatement()
471 token->ToOriginalString()); in ValidateEndOfStatement()
475 auto token = tokenizer_->NextToken(); in ParseShaderBlock() local
476 if (!token->IsIdentifier()) in ParseShaderBlock()
477 return Result("invalid token when looking for shader type"); in ParseShaderBlock()
480 Result r = ToShaderType(token->AsString(), &type); in ParseShaderBlock()
486 token = tokenizer_->NextToken(); in ParseShaderBlock()
487 if (!token->IsIdentifier()) in ParseShaderBlock()
488 return Result("invalid token when looking for shader name"); in ParseShaderBlock()
490 shader->SetName(token->AsString()); in ParseShaderBlock()
492 token = tokenizer_->NextToken(); in ParseShaderBlock()
493 if (!token->IsIdentifier()) in ParseShaderBlock()
494 return Result("invalid token when looking for shader format"); in ParseShaderBlock()
496 std::string fmt = token->AsString(); in ParseShaderBlock()
521 token = tokenizer_->PeekNextToken(); in ParseShaderBlock()
522 if (token->IsIdentifier() && token->AsString() == "TARGET_ENV") { in ParseShaderBlock()
524 token = tokenizer_->NextToken(); in ParseShaderBlock()
525 if (!token->IsIdentifier() && !token->IsString()) in ParseShaderBlock()
527 shader->SetTargetEnv(token->AsString()); in ParseShaderBlock()
530 token = tokenizer_->PeekNextToken(); in ParseShaderBlock()
531 if (token->IsIdentifier() && in ParseShaderBlock()
532 (token->AsString() == "VIRTUAL_FILE" || token->AsString() == "FILE")) { in ParseShaderBlock()
533 bool isVirtual = token->AsString() == "VIRTUAL_FILE"; in ParseShaderBlock()
536 token = tokenizer_->NextToken(); in ParseShaderBlock()
537 if (!token->IsIdentifier() && !token->IsString()) in ParseShaderBlock()
540 auto path = token->AsString(); in ParseShaderBlock()
583 token = tokenizer_->NextToken(); in ParseShaderBlock()
584 if (!token->IsIdentifier() || token->AsString() != "END") in ParseShaderBlock()
598 auto token = tokenizer_->NextToken(); in ParsePipelineBlock() local
599 if (!token->IsIdentifier()) in ParsePipelineBlock()
600 return Result("invalid token when looking for pipeline type"); in ParsePipelineBlock()
603 Result r = ToPipelineType(token->AsString(), &type); in ParsePipelineBlock()
609 token = tokenizer_->NextToken(); in ParsePipelineBlock()
610 if (!token->IsIdentifier()) in ParsePipelineBlock()
611 return Result("invalid token when looking for pipeline name"); in ParsePipelineBlock()
613 pipeline->SetName(token->AsString()); in ParsePipelineBlock()
624 std::unique_ptr<Token> token; in ParsePipelineBody() local
625 for (token = tokenizer_->NextToken(); !token->IsEOS(); in ParsePipelineBody()
626 token = tokenizer_->NextToken()) { in ParsePipelineBody()
627 if (token->IsEOL()) in ParsePipelineBody()
629 if (!token->IsIdentifier()) in ParsePipelineBody()
633 std::string tok = token->AsString(); in ParsePipelineBody()
681 r = Result("unknown token in pipeline block: " + tok); in ParsePipelineBody()
687 if (!token->IsIdentifier() || token->AsString() != "END") in ParsePipelineBody()
698 auto token = tokenizer_->NextToken(); in ParsePipelineAttach() local
699 if (!token->IsIdentifier()) in ParsePipelineAttach()
700 return Result("invalid token in ATTACH command"); in ParsePipelineAttach()
702 auto* shader = script_->GetShader(token->AsString()); in ParsePipelineAttach()
706 token = tokenizer_->NextToken(); in ParsePipelineAttach()
707 if (token->IsEOL() || token->IsEOS()) { in ParsePipelineAttach()
716 if (!token->IsIdentifier()) in ParsePipelineAttach()
717 return Result("invalid token after ATTACH"); in ParsePipelineAttach()
721 auto type = token->AsString(); in ParsePipelineAttach()
723 token = tokenizer_->NextToken(); in ParsePipelineAttach()
724 if (!token->IsIdentifier()) in ParsePipelineAttach()
727 Result r = ToShaderType(token->AsString(), &shader_type); in ParsePipelineAttach()
733 token = tokenizer_->NextToken(); in ParsePipelineAttach()
734 if (!token->IsIdentifier()) in ParsePipelineAttach()
737 type = token->AsString(); in ParsePipelineAttach()
750 token = tokenizer_->NextToken(); in ParsePipelineAttach()
751 if (!token->IsIdentifier()) in ParsePipelineAttach()
754 r = pipeline->SetShaderEntryPoint(shader, token->AsString()); in ParsePipelineAttach()
758 token = tokenizer_->NextToken(); in ParsePipelineAttach()
762 if (token->IsIdentifier() && token->AsString() == "SPECIALIZE") { in ParsePipelineAttach()
767 token = tokenizer_->NextToken(); in ParsePipelineAttach()
769 if (token->IsEOL() || token->IsEOS()) in ParsePipelineAttach()
771 if (token->IsIdentifier()) in ParsePipelineAttach()
772 return Result("unknown ATTACH parameter: " + token->AsString()); in ParsePipelineAttach()
774 token->ToOriginalString()); in ParsePipelineAttach()
780 auto token = tokenizer_->NextToken(); in ParseShaderSpecialization() local
781 if (!token->IsInteger()) in ParseShaderSpecialization()
784 auto spec_id = token->AsUint32(); in ParseShaderSpecialization()
786 token = tokenizer_->NextToken(); in ParseShaderSpecialization()
787 if (!token->IsIdentifier() || token->AsString() != "AS") in ParseShaderSpecialization()
788 return Result("expected AS as next token"); in ParseShaderSpecialization()
790 token = tokenizer_->NextToken(); in ParseShaderSpecialization()
791 if (!token->IsIdentifier()) in ParseShaderSpecialization()
794 auto type = ToType(token->AsString()); in ParseShaderSpecialization()
796 return Result("invalid data type '" + token->AsString() + "' provided"); in ParseShaderSpecialization()
802 token = tokenizer_->NextToken(); in ParseShaderSpecialization()
806 value = token->AsUint32(); in ParseShaderSpecialization()
808 Result r = token->ConvertToDouble(); in ParseShaderSpecialization()
816 u.f = token->AsFloat(); in ParseShaderSpecialization()
829 auto token = tokenizer_->NextToken(); in ParsePipelineShaderOptimizations() local
830 if (!token->IsIdentifier()) in ParsePipelineShaderOptimizations()
833 auto* shader = script_->GetShader(token->AsString()); in ParsePipelineShaderOptimizations()
837 token = tokenizer_->NextToken(); in ParsePipelineShaderOptimizations()
838 if (!token->IsEOL()) in ParsePipelineShaderOptimizations()
840 token->ToOriginalString()); in ParsePipelineShaderOptimizations()
844 token = tokenizer_->NextToken(); in ParsePipelineShaderOptimizations()
845 if (token->IsEOL()) in ParsePipelineShaderOptimizations()
847 if (token->IsEOS()) in ParsePipelineShaderOptimizations()
849 if (!token->IsIdentifier()) in ParsePipelineShaderOptimizations()
851 if (token->AsString() == "END") in ParsePipelineShaderOptimizations()
854 optimizations.push_back(token->AsString()); in ParsePipelineShaderOptimizations()
865 auto token = tokenizer_->NextToken(); in ParsePipelineShaderCompileOptions() local
866 if (!token->IsIdentifier()) in ParsePipelineShaderCompileOptions()
869 auto* shader = script_->GetShader(token->AsString()); in ParsePipelineShaderCompileOptions()
877 token = tokenizer_->NextToken(); in ParsePipelineShaderCompileOptions()
878 if (!token->IsEOL()) in ParsePipelineShaderCompileOptions()
880 token->ToOriginalString()); in ParsePipelineShaderCompileOptions()
884 token = tokenizer_->NextToken(); in ParsePipelineShaderCompileOptions()
885 if (token->IsEOL()) in ParsePipelineShaderCompileOptions()
887 if (token->IsEOS()) in ParsePipelineShaderCompileOptions()
889 if (token->AsString() == "END") in ParsePipelineShaderCompileOptions()
892 options.push_back(token->AsString()); in ParsePipelineShaderCompileOptions()
903 auto token = tokenizer_->NextToken(); in ParsePipelineSubgroup() local
904 if (!token->IsIdentifier()) in ParsePipelineSubgroup()
907 auto* shader = script_->GetShader(token->AsString()); in ParsePipelineSubgroup()
912 token = tokenizer_->NextToken(); in ParsePipelineSubgroup()
913 if (token->IsEOL()) in ParsePipelineSubgroup()
915 if (token->IsEOS()) in ParsePipelineSubgroup()
917 if (!token->IsIdentifier()) in ParsePipelineSubgroup()
919 if (token->AsString() == "END") in ParsePipelineSubgroup()
922 if (token->AsString() == "FULLY_POPULATED") { in ParsePipelineSubgroup()
927 token = tokenizer_->NextToken(); in ParsePipelineSubgroup()
928 if (token->IsEOL() || token->IsEOS()) in ParsePipelineSubgroup()
931 if (token->AsString() == "on") { in ParsePipelineSubgroup()
933 } else if (token->AsString() == "off") { in ParsePipelineSubgroup()
942 } else if (token->AsString() == "VARYING_SIZE") { in ParsePipelineSubgroup()
947 token = tokenizer_->NextToken(); in ParsePipelineSubgroup()
948 if (token->IsEOL() || token->IsEOS()) in ParsePipelineSubgroup()
951 if (token->AsString() == "on") { in ParsePipelineSubgroup()
953 } else if (token->AsString() == "off") { in ParsePipelineSubgroup()
961 } else if (token->AsString() == "REQUIRED_SIZE") { in ParsePipelineSubgroup()
966 token = tokenizer_->NextToken(); in ParsePipelineSubgroup()
967 if (token->IsEOL() || token->IsEOS()) in ParsePipelineSubgroup()
970 if (token->IsInteger()) { in ParsePipelineSubgroup()
971 r = pipeline->SetShaderRequiredSubgroupSize(shader, token->AsUint32()); in ParsePipelineSubgroup()
972 } else if (token->AsString() == "MIN") { in ParsePipelineSubgroup()
974 } else if (token->AsString() == "MAX") { in ParsePipelineSubgroup()
982 return Result("SUBGROUP invalid value for SUBGROUP " + token->AsString()); in ParsePipelineSubgroup()
990 auto token = tokenizer_->NextToken(); in ParsePipelinePatchControlPoints() local
991 if (token->IsEOL() || token->IsEOS()) in ParsePipelinePatchControlPoints()
995 if (!token->IsInteger()) in ParsePipelinePatchControlPoints()
998 pipeline->GetPipelineData()->SetPatchControlPoints(token->AsUint32()); in ParsePipelinePatchControlPoints()
1004 auto token = tokenizer_->NextToken(); in ParsePipelineFramebufferSize() local
1005 if (token->IsEOL() || token->IsEOS()) in ParsePipelineFramebufferSize()
1007 if (!token->IsInteger()) in ParsePipelineFramebufferSize()
1010 pipeline->SetFramebufferWidth(token->AsUint32()); in ParsePipelineFramebufferSize()
1012 token = tokenizer_->NextToken(); in ParsePipelineFramebufferSize()
1013 if (token->IsEOL() || token->IsEOS()) in ParsePipelineFramebufferSize()
1015 if (!token->IsInteger()) in ParsePipelineFramebufferSize()
1018 pipeline->SetFramebufferHeight(token->AsUint32()); in ParsePipelineFramebufferSize()
1030 auto token = tokenizer_->NextToken(); in ParsePipelineViewport() local
1031 if (token->IsEOL() || token->IsEOS()) in ParsePipelineViewport()
1033 Result r = token->ConvertToDouble(); in ParsePipelineViewport()
1037 val[i] = token->AsFloat(); in ParsePipelineViewport()
1042 auto token = tokenizer_->NextToken(); in ParsePipelineViewport() local
1043 if (!token->IsIdentifier() || token->AsString() != "SIZE") in ParsePipelineViewport()
1047 token = tokenizer_->NextToken(); in ParsePipelineViewport()
1048 if (token->IsEOL() || token->IsEOS()) in ParsePipelineViewport()
1050 Result r = token->ConvertToDouble(); in ParsePipelineViewport()
1054 val[i] = token->AsFloat(); in ParsePipelineViewport()
1059 token = tokenizer_->PeekNextToken(); in ParsePipelineViewport()
1060 while (token->IsIdentifier()) { in ParsePipelineViewport()
1061 if (token->AsString() == "MIN_DEPTH") { in ParsePipelineViewport()
1063 token = tokenizer_->NextToken(); in ParsePipelineViewport()
1064 if (token->IsEOL() || token->IsEOS()) in ParsePipelineViewport()
1066 Result r = token->ConvertToDouble(); in ParsePipelineViewport()
1070 vp.mind = token->AsFloat(); in ParsePipelineViewport()
1072 if (token->AsString() == "MAX_DEPTH") { in ParsePipelineViewport()
1074 token = tokenizer_->NextToken(); in ParsePipelineViewport()
1075 if (token->IsEOL() || token->IsEOS()) in ParsePipelineViewport()
1077 Result r = token->ConvertToDouble(); in ParsePipelineViewport()
1081 vp.maxd = token->AsFloat(); in ParsePipelineViewport()
1084 token = tokenizer_->PeekNextToken(); in ParsePipelineViewport()
1127 auto token = tokenizer_->NextToken(); in ParsePipelineBind() local
1129 if (!token->IsIdentifier()) { in ParsePipelineBind()
1135 auto object_type = token->AsString(); in ParsePipelineBind()
1139 token = tokenizer_->NextToken(); in ParsePipelineBind()
1140 if (!token->IsIdentifier()) in ParsePipelineBind()
1143 auto* buffer = script_->GetBuffer(token->AsString()); in ParsePipelineBind()
1145 return Result("unknown buffer: " + token->AsString()); in ParsePipelineBind()
1150 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1151 while (token->IsIdentifier() && token->AsString() != "AS" && in ParsePipelineBind()
1152 token->AsString() != "KERNEL" && in ParsePipelineBind()
1153 token->AsString() != "DESCRIPTOR_SET") { in ParsePipelineBind()
1155 buffer = script_->GetBuffer(token->AsString()); in ParsePipelineBind()
1157 return Result("unknown buffer: " + token->AsString()); in ParsePipelineBind()
1159 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1167 token = tokenizer_->NextToken(); in ParsePipelineBind()
1168 if (token->IsIdentifier() && token->AsString() == "AS") { in ParsePipelineBind()
1169 token = tokenizer_->NextToken(); in ParsePipelineBind()
1170 if (!token->IsIdentifier()) in ParsePipelineBind()
1171 return Result("invalid token for BUFFER type"); in ParsePipelineBind()
1173 Result r = ToBufferType(token->AsString(), &buffer_type); in ParsePipelineBind()
1178 token = tokenizer_->NextToken(); in ParsePipelineBind()
1179 if (!token->IsIdentifier() || token->AsString() != "LOCATION") in ParsePipelineBind()
1182 token = tokenizer_->NextToken(); in ParsePipelineBind()
1183 if (!token->IsInteger()) in ParsePipelineBind()
1185 auto location = token->AsUint32(); in ParsePipelineBind()
1188 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1189 if (token->IsIdentifier() && token->AsString() == "BASE_MIP_LEVEL") { in ParsePipelineBind()
1191 token = tokenizer_->NextToken(); in ParsePipelineBind()
1193 if (!token->IsInteger()) in ParsePipelineBind()
1196 base_mip_level = token->AsUint32(); in ParsePipelineBind()
1200 "base mip level (now " + token->AsString() + in ParsePipelineBind()
1220 token = tokenizer_->NextToken(); in ParsePipelineBind()
1221 if (!token->IsIdentifier() || token->AsString() != "SAMPLER") in ParsePipelineBind()
1224 token = tokenizer_->NextToken(); in ParsePipelineBind()
1225 if (!token->IsIdentifier()) in ParsePipelineBind()
1228 auto* sampler = script_->GetSampler(token->AsString()); in ParsePipelineBind()
1230 return Result("unknown sampler: " + token->AsString()); in ParsePipelineBind()
1252 // and have to advance to the next token. Otherwise, we're already on in ParsePipelineBind()
1253 // the next token and don't want to advance. in ParsePipelineBind()
1255 token = tokenizer_->NextToken(); in ParsePipelineBind()
1258 if (token->IsIdentifier() && token->AsString() == "DESCRIPTOR_SET") { in ParsePipelineBind()
1259 token = tokenizer_->NextToken(); in ParsePipelineBind()
1260 if (!token->IsInteger()) in ParsePipelineBind()
1262 uint32_t descriptor_set = token->AsUint32(); in ParsePipelineBind()
1264 token = tokenizer_->NextToken(); in ParsePipelineBind()
1265 if (!token->IsIdentifier() || token->AsString() != "BINDING") in ParsePipelineBind()
1268 token = tokenizer_->NextToken(); in ParsePipelineBind()
1269 if (!token->IsInteger()) in ParsePipelineBind()
1272 auto binding = token->AsUint32(); in ParsePipelineBind()
1278 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1279 if (token->IsIdentifier() && token->AsString() == "BASE_MIP_LEVEL") { in ParsePipelineBind()
1281 token = tokenizer_->NextToken(); in ParsePipelineBind()
1283 if (!token->IsInteger()) in ParsePipelineBind()
1286 base_mip_level = token->AsUint32(); in ParsePipelineBind()
1289 return Result("base mip level (now " + token->AsString() + in ParsePipelineBind()
1299 token = tokenizer_->NextToken(); in ParsePipelineBind()
1300 if (!token->IsIdentifier() || token->AsString() != "OFFSET") in ParsePipelineBind()
1304 token = tokenizer_->NextToken(); in ParsePipelineBind()
1306 if (!token->IsInteger()) { in ParsePipelineBind()
1315 dynamic_offsets[i] = token->AsUint32(); in ParsePipelineBind()
1327 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1328 if (token->IsIdentifier() && in ParsePipelineBind()
1329 token->AsString() == "DESCRIPTOR_OFFSET") { in ParsePipelineBind()
1330 token = tokenizer_->NextToken(); in ParsePipelineBind()
1332 token = tokenizer_->NextToken(); in ParsePipelineBind()
1333 if (!token->IsInteger()) { in ParsePipelineBind()
1343 descriptor_offsets[i] = token->AsUint64(); in ParsePipelineBind()
1347 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1348 if (token->IsIdentifier() && in ParsePipelineBind()
1349 token->AsString() == "DESCRIPTOR_RANGE") { in ParsePipelineBind()
1350 token = tokenizer_->NextToken(); in ParsePipelineBind()
1352 token = tokenizer_->NextToken(); in ParsePipelineBind()
1353 if (!token->IsInteger()) { in ParsePipelineBind()
1363 descriptor_ranges[i] = token->AsUint64(); in ParsePipelineBind()
1374 } else if (token->IsIdentifier() && token->AsString() == "KERNEL") { in ParsePipelineBind()
1375 token = tokenizer_->NextToken(); in ParsePipelineBind()
1376 if (!token->IsIdentifier()) in ParsePipelineBind()
1379 if (token->AsString() == "ARG_NAME") { in ParsePipelineBind()
1380 token = tokenizer_->NextToken(); in ParsePipelineBind()
1381 if (!token->IsIdentifier()) in ParsePipelineBind()
1384 pipeline->AddBuffer(buffer, buffer_type, token->AsString()); in ParsePipelineBind()
1385 } else if (token->AsString() == "ARG_NUMBER") { in ParsePipelineBind()
1386 token = tokenizer_->NextToken(); in ParsePipelineBind()
1387 if (!token->IsInteger()) in ParsePipelineBind()
1390 pipeline->AddBuffer(buffer, buffer_type, token->AsUint32()); in ParsePipelineBind()
1400 token = tokenizer_->NextToken(); in ParsePipelineBind()
1401 if (!token->IsIdentifier()) in ParsePipelineBind()
1404 auto* sampler = script_->GetSampler(token->AsString()); in ParsePipelineBind()
1406 return Result("unknown sampler: " + token->AsString()); in ParsePipelineBind()
1411 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1412 while (token->IsIdentifier() && token->AsString() != "KERNEL" && in ParsePipelineBind()
1413 token->AsString() != "DESCRIPTOR_SET") { in ParsePipelineBind()
1415 sampler = script_->GetSampler(token->AsString()); in ParsePipelineBind()
1417 return Result("unknown sampler: " + token->AsString()); in ParsePipelineBind()
1419 token = tokenizer_->PeekNextToken(); in ParsePipelineBind()
1426 token = tokenizer_->NextToken(); in ParsePipelineBind()
1427 if (!token->IsIdentifier()) in ParsePipelineBind()
1428 return Result("expected a string token for BIND command"); in ParsePipelineBind()
1430 if (token->AsString() == "DESCRIPTOR_SET") { in ParsePipelineBind()
1431 token = tokenizer_->NextToken(); in ParsePipelineBind()
1432 if (!token->IsInteger()) in ParsePipelineBind()
1434 uint32_t descriptor_set = token->AsUint32(); in ParsePipelineBind()
1436 token = tokenizer_->NextToken(); in ParsePipelineBind()
1437 if (!token->IsIdentifier() || token->AsString() != "BINDING") in ParsePipelineBind()
1440 token = tokenizer_->NextToken(); in ParsePipelineBind()
1441 if (!token->IsInteger()) in ParsePipelineBind()
1444 uint32_t binding = token->AsUint32(); in ParsePipelineBind()
1449 } else if (token->AsString() == "KERNEL") { in ParsePipelineBind()
1450 token = tokenizer_->NextToken(); in ParsePipelineBind()
1451 if (!token->IsIdentifier()) in ParsePipelineBind()
1454 if (token->AsString() == "ARG_NAME") { in ParsePipelineBind()
1455 token = tokenizer_->NextToken(); in ParsePipelineBind()
1456 if (!token->IsIdentifier()) in ParsePipelineBind()
1459 pipeline->AddSampler(sampler, token->AsString()); in ParsePipelineBind()
1460 } else if (token->AsString() == "ARG_NUMBER") { in ParsePipelineBind()
1461 token = tokenizer_->NextToken(); in ParsePipelineBind()
1462 if (!token->IsInteger()) in ParsePipelineBind()
1465 pipeline->AddSampler(sampler, token->AsUint32()); in ParsePipelineBind()
1473 token = tokenizer_->NextToken(); in ParsePipelineBind()
1474 if (!token->IsIdentifier()) in ParsePipelineBind()
1478 TLAS* tlas = script_->GetTLAS(token->AsString()); in ParsePipelineBind()
1481 token->AsString()); in ParsePipelineBind()
1483 token = tokenizer_->NextToken(); in ParsePipelineBind()
1484 if (token->AsString() == "DESCRIPTOR_SET") { in ParsePipelineBind()
1485 token = tokenizer_->NextToken(); in ParsePipelineBind()
1486 if (!token->IsInteger()) in ParsePipelineBind()
1488 uint32_t descriptor_set = token->AsUint32(); in ParsePipelineBind()
1490 token = tokenizer_->NextToken(); in ParsePipelineBind()
1491 if (!token->IsIdentifier() || token->AsString() != "BINDING") in ParsePipelineBind()
1494 token = tokenizer_->NextToken(); in ParsePipelineBind()
1495 if (!token->IsInteger()) in ParsePipelineBind()
1498 uint32_t binding = token->AsUint32(); in ParsePipelineBind()
1512 auto token = tokenizer_->NextToken(); in ParsePipelineVertexData() local
1513 if (!token->IsIdentifier()) in ParsePipelineVertexData()
1516 auto* buffer = script_->GetBuffer(token->AsString()); in ParsePipelineVertexData()
1518 return Result("unknown buffer: " + token->AsString()); in ParsePipelineVertexData()
1520 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1521 if (!token->IsIdentifier() || token->AsString() != "LOCATION") in ParsePipelineVertexData()
1524 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1525 if (!token->IsInteger()) in ParsePipelineVertexData()
1527 const uint32_t location = token->AsUint32(); in ParsePipelineVertexData()
1534 token = tokenizer_->PeekNextToken(); in ParsePipelineVertexData()
1535 while (token->IsIdentifier()) { in ParsePipelineVertexData()
1536 if (token->AsString() == "RATE") { in ParsePipelineVertexData()
1538 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1539 if (!token->IsIdentifier()) in ParsePipelineVertexData()
1541 if (token->AsString() == "instance") { in ParsePipelineVertexData()
1543 } else if (token->AsString() != "vertex") { in ParsePipelineVertexData()
1546 } else if (token->AsString() == "OFFSET") { in ParsePipelineVertexData()
1548 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1549 if (!token->IsInteger()) in ParsePipelineVertexData()
1551 offset = token->AsUint32(); in ParsePipelineVertexData()
1552 } else if (token->AsString() == "STRIDE") { in ParsePipelineVertexData()
1554 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1555 if (!token->IsInteger()) in ParsePipelineVertexData()
1557 stride = token->AsUint32(); in ParsePipelineVertexData()
1560 } else if (token->AsString() == "FORMAT") { in ParsePipelineVertexData()
1562 token = tokenizer_->NextToken(); in ParsePipelineVertexData()
1563 if (!token->IsIdentifier()) in ParsePipelineVertexData()
1565 auto type = script_->ParseType(token->AsString()); in ParsePipelineVertexData()
1573 token->ToOriginalString()); in ParsePipelineVertexData()
1576 token = tokenizer_->PeekNextToken(); in ParsePipelineVertexData()
1591 auto token = tokenizer_->NextToken(); in ParsePipelineIndexData() local
1592 if (!token->IsIdentifier()) in ParsePipelineIndexData()
1595 auto* buffer = script_->GetBuffer(token->AsString()); in ParsePipelineIndexData()
1597 return Result("unknown buffer: " + token->AsString()); in ParsePipelineIndexData()
1613 auto token = tokenizer_->NextToken(); in ParsePipelineSet() local
1614 if (!token->IsIdentifier() || token->AsString() != "KERNEL") in ParsePipelineSet()
1617 token = tokenizer_->NextToken(); in ParsePipelineSet()
1618 if (!token->IsIdentifier()) in ParsePipelineSet()
1623 if (token->AsString() == "ARG_NAME") { in ParsePipelineSet()
1624 token = tokenizer_->NextToken(); in ParsePipelineSet()
1625 if (!token->IsIdentifier()) in ParsePipelineSet()
1628 arg_name = token->AsString(); in ParsePipelineSet()
1629 } else if (token->AsString() == "ARG_NUMBER") { in ParsePipelineSet()
1630 token = tokenizer_->NextToken(); in ParsePipelineSet()
1631 if (!token->IsInteger()) in ParsePipelineSet()
1634 arg_no = token->AsUint32(); in ParsePipelineSet()
1639 token = tokenizer_->NextToken(); in ParsePipelineSet()
1640 if (!token->IsIdentifier() || token->AsString() != "AS") in ParsePipelineSet()
1643 token = tokenizer_->NextToken(); in ParsePipelineSet()
1644 if (!token->IsIdentifier()) in ParsePipelineSet()
1647 auto type = ToType(token->AsString()); in ParsePipelineSet()
1649 return Result("invalid data type '" + token->AsString() + "' provided"); in ParsePipelineSet()
1654 token = tokenizer_->NextToken(); in ParsePipelineSet()
1655 if (!token->IsInteger() && !token->IsDouble()) in ParsePipelineSet()
1661 value.SetDoubleValue(token->AsDouble()); in ParsePipelineSet()
1663 value.SetIntValue(token->AsUint64()); in ParsePipelineSet()
1678 auto token = tokenizer_->NextToken(); in ParsePipelinePolygonMode() local
1679 if (!token->IsIdentifier()) in ParsePipelinePolygonMode()
1682 auto mode = token->AsString(); in ParsePipelinePolygonMode()
1698 auto token = tokenizer_->NextToken(); in ParsePipelineDepth() local
1699 if (token->IsEOL()) in ParsePipelineDepth()
1701 if (token->IsEOS()) in ParsePipelineDepth()
1703 if (!token->IsIdentifier()) in ParsePipelineDepth()
1705 if (token->AsString() == "END") in ParsePipelineDepth()
1708 if (token->AsString() == "TEST") { in ParsePipelineDepth()
1709 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1711 if (!token->IsIdentifier()) in ParsePipelineDepth()
1714 if (token->AsString() == "on") in ParsePipelineDepth()
1716 else if (token->AsString() == "off") in ParsePipelineDepth()
1719 return Result("invalid value for TEST: " + token->AsString()); in ParsePipelineDepth()
1720 } else if (token->AsString() == "CLAMP") { in ParsePipelineDepth()
1721 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1723 if (!token->IsIdentifier()) in ParsePipelineDepth()
1726 if (token->AsString() == "on") in ParsePipelineDepth()
1728 else if (token->AsString() == "off") in ParsePipelineDepth()
1731 return Result("invalid value for CLAMP: " + token->AsString()); in ParsePipelineDepth()
1732 } else if (token->AsString() == "WRITE") { in ParsePipelineDepth()
1733 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1735 if (!token->IsIdentifier()) in ParsePipelineDepth()
1738 if (token->AsString() == "on") in ParsePipelineDepth()
1740 else if (token->AsString() == "off") in ParsePipelineDepth()
1743 return Result("invalid value for WRITE: " + token->AsString()); in ParsePipelineDepth()
1744 } else if (token->AsString() == "COMPARE_OP") { in ParsePipelineDepth()
1745 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1747 if (!token->IsIdentifier()) in ParsePipelineDepth()
1750 CompareOp compare_op = StrToCompareOp(token->AsString()); in ParsePipelineDepth()
1754 return Result("invalid value for COMPARE_OP: " + token->AsString()); in ParsePipelineDepth()
1756 } else if (token->AsString() == "BOUNDS") { in ParsePipelineDepth()
1757 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1758 if (!token->IsIdentifier() || token->AsString() != "min") in ParsePipelineDepth()
1761 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1762 if (!token->IsDouble()) in ParsePipelineDepth()
1764 pipeline->GetPipelineData()->SetMinDepthBounds(token->AsFloat()); in ParsePipelineDepth()
1766 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1767 if (!token->IsIdentifier() || token->AsString() != "max") in ParsePipelineDepth()
1770 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1771 if (!token->IsDouble()) in ParsePipelineDepth()
1773 pipeline->GetPipelineData()->SetMaxDepthBounds(token->AsFloat()); in ParsePipelineDepth()
1774 } else if (token->AsString() == "BIAS") { in ParsePipelineDepth()
1777 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1778 if (!token->IsIdentifier() || token->AsString() != "constant") in ParsePipelineDepth()
1781 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1782 if (!token->IsDouble()) in ParsePipelineDepth()
1784 pipeline->GetPipelineData()->SetDepthBiasConstantFactor(token->AsFloat()); in ParsePipelineDepth()
1786 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1787 if (!token->IsIdentifier() || token->AsString() != "clamp") in ParsePipelineDepth()
1790 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1791 if (!token->IsDouble()) in ParsePipelineDepth()
1793 pipeline->GetPipelineData()->SetDepthBiasClamp(token->AsFloat()); in ParsePipelineDepth()
1795 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1796 if (!token->IsIdentifier() || token->AsString() != "slope") in ParsePipelineDepth()
1799 token = tokenizer_->NextToken(); in ParsePipelineDepth()
1800 if (!token->IsDouble()) in ParsePipelineDepth()
1802 pipeline->GetPipelineData()->SetDepthBiasSlopeFactor(token->AsFloat()); in ParsePipelineDepth()
1804 return Result("invalid value for DEPTH: " + token->AsString()); in ParsePipelineDepth()
1812 auto token = tokenizer_->NextToken(); in ParsePipelineStencil() local
1813 if (!token->IsIdentifier()) in ParsePipelineStencil()
1819 if (token->AsString() == "front") { in ParsePipelineStencil()
1821 } else if (token->AsString() == "back") { in ParsePipelineStencil()
1823 } else if (token->AsString() == "front_and_back") { in ParsePipelineStencil()
1827 return Result("STENCIL invalid face: " + token->AsString()); in ParsePipelineStencil()
1831 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1832 if (token->IsEOL()) in ParsePipelineStencil()
1834 if (token->IsEOS()) in ParsePipelineStencil()
1836 if (!token->IsIdentifier()) in ParsePipelineStencil()
1838 if (token->AsString() == "END") in ParsePipelineStencil()
1841 if (token->AsString() == "TEST") { in ParsePipelineStencil()
1842 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1844 if (!token->IsIdentifier()) in ParsePipelineStencil()
1847 if (token->AsString() == "on") in ParsePipelineStencil()
1849 else if (token->AsString() == "off") in ParsePipelineStencil()
1852 return Result("STENCIL invalid value for TEST: " + token->AsString()); in ParsePipelineStencil()
1853 } else if (token->AsString() == "FAIL_OP") { in ParsePipelineStencil()
1854 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1856 if (!token->IsIdentifier()) in ParsePipelineStencil()
1859 StencilOp stencil_op = StrToStencilOp(token->AsString()); in ParsePipelineStencil()
1862 token->AsString()); in ParsePipelineStencil()
1868 } else if (token->AsString() == "PASS_OP") { in ParsePipelineStencil()
1869 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1871 if (!token->IsIdentifier()) in ParsePipelineStencil()
1874 StencilOp stencil_op = StrToStencilOp(token->AsString()); in ParsePipelineStencil()
1877 token->AsString()); in ParsePipelineStencil()
1883 } else if (token->AsString() == "DEPTH_FAIL_OP") { in ParsePipelineStencil()
1884 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1886 if (!token->IsIdentifier()) in ParsePipelineStencil()
1889 StencilOp stencil_op = StrToStencilOp(token->AsString()); in ParsePipelineStencil()
1892 token->AsString()); in ParsePipelineStencil()
1898 } else if (token->AsString() == "COMPARE_OP") { in ParsePipelineStencil()
1899 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1901 if (!token->IsIdentifier()) in ParsePipelineStencil()
1904 CompareOp compare_op = StrToCompareOp(token->AsString()); in ParsePipelineStencil()
1907 token->AsString()); in ParsePipelineStencil()
1913 } else if (token->AsString() == "COMPARE_MASK") { in ParsePipelineStencil()
1914 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1916 if (!token->IsInteger()) in ParsePipelineStencil()
1920 pipeline->GetPipelineData()->SetFrontCompareMask(token->AsUint32()); in ParsePipelineStencil()
1922 pipeline->GetPipelineData()->SetBackCompareMask(token->AsUint32()); in ParsePipelineStencil()
1923 } else if (token->AsString() == "WRITE_MASK") { in ParsePipelineStencil()
1924 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1926 if (!token->IsInteger()) in ParsePipelineStencil()
1930 pipeline->GetPipelineData()->SetFrontWriteMask(token->AsUint32()); in ParsePipelineStencil()
1932 pipeline->GetPipelineData()->SetBackWriteMask(token->AsUint32()); in ParsePipelineStencil()
1933 } else if (token->AsString() == "REFERENCE") { in ParsePipelineStencil()
1934 token = tokenizer_->NextToken(); in ParsePipelineStencil()
1936 if (!token->IsInteger()) in ParsePipelineStencil()
1940 pipeline->GetPipelineData()->SetFrontReference(token->AsUint32()); in ParsePipelineStencil()
1942 pipeline->GetPipelineData()->SetBackReference(token->AsUint32()); in ParsePipelineStencil()
1944 return Result("STENCIL invalid value for STENCIL: " + token->AsString()); in ParsePipelineStencil()
1955 auto token = tokenizer_->NextToken(); in ParsePipelineBlend() local
1956 if (token->IsEOL()) in ParsePipelineBlend()
1958 if (token->IsEOS()) in ParsePipelineBlend()
1960 if (!token->IsIdentifier()) in ParsePipelineBlend()
1962 if (token->AsString() == "END") in ParsePipelineBlend()
1965 if (token->AsString() == "SRC_COLOR_FACTOR") { in ParsePipelineBlend()
1966 token = tokenizer_->NextToken(); in ParsePipelineBlend()
1968 if (!token->IsIdentifier()) in ParsePipelineBlend()
1971 const auto factor = NameToBlendFactor(token->AsString()); in ParsePipelineBlend()
1974 token->AsString()); in ParsePipelineBlend()
1976 NameToBlendFactor(token->AsString())); in ParsePipelineBlend()
1977 } else if (token->AsString() == "DST_COLOR_FACTOR") { in ParsePipelineBlend()
1978 token = tokenizer_->NextToken(); in ParsePipelineBlend()
1980 if (!token->IsIdentifier()) in ParsePipelineBlend()
1983 const auto factor = NameToBlendFactor(token->AsString()); in ParsePipelineBlend()
1986 token->AsString()); in ParsePipelineBlend()
1988 NameToBlendFactor(token->AsString())); in ParsePipelineBlend()
1989 } else if (token->AsString() == "SRC_ALPHA_FACTOR") { in ParsePipelineBlend()
1990 token = tokenizer_->NextToken(); in ParsePipelineBlend()
1992 if (!token->IsIdentifier()) in ParsePipelineBlend()
1995 const auto factor = NameToBlendFactor(token->AsString()); in ParsePipelineBlend()
1998 token->AsString()); in ParsePipelineBlend()
2000 NameToBlendFactor(token->AsString())); in ParsePipelineBlend()
2001 } else if (token->AsString() == "DST_ALPHA_FACTOR") { in ParsePipelineBlend()
2002 token = tokenizer_->NextToken(); in ParsePipelineBlend()
2004 if (!token->IsIdentifier()) in ParsePipelineBlend()
2007 const auto factor = NameToBlendFactor(token->AsString()); in ParsePipelineBlend()
2010 token->AsString()); in ParsePipelineBlend()
2012 NameToBlendFactor(token->AsString())); in ParsePipelineBlend()
2013 } else if (token->AsString() == "COLOR_OP") { in ParsePipelineBlend()
2014 token = tokenizer_->NextToken(); in ParsePipelineBlend()
2016 if (!token->IsIdentifier()) in ParsePipelineBlend()
2019 const auto op = NameToBlendOp(token->AsString()); in ParsePipelineBlend()
2021 return Result("BLEND invalid value for COLOR_OP: " + token->AsString()); in ParsePipelineBlend()
2023 NameToBlendOp(token->AsString())); in ParsePipelineBlend()
2024 } else if (token->AsString() == "ALPHA_OP") { in ParsePipelineBlend()
2025 token = tokenizer_->NextToken(); in ParsePipelineBlend()
2027 if (!token->IsIdentifier()) in ParsePipelineBlend()
2030 const auto op = NameToBlendOp(token->AsString()); in ParsePipelineBlend()
2032 return Result("BLEND invalid value for ALPHA_OP: " + token->AsString()); in ParsePipelineBlend()
2034 NameToBlendOp(token->AsString())); in ParsePipelineBlend()
2036 return Result("BLEND invalid value for BLEND: " + token->AsString()); in ParsePipelineBlend()
2044 std::unique_ptr<Token> token = tokenizer_->NextToken(); in ParsePipelineShaderGroup() local
2045 if (!token->IsIdentifier()) in ParsePipelineShaderGroup()
2048 auto tok = token->AsString(); in ParsePipelineShaderGroup()
2055 token = tokenizer_->NextToken(); in ParsePipelineShaderGroup()
2056 if (token->IsEOL() || token->IsEOS()) in ParsePipelineShaderGroup()
2058 if (!token->IsIdentifier()) in ParsePipelineShaderGroup()
2061 tok = token->AsString(); in ParsePipelineShaderGroup()
2118 auto token = tokenizer_->NextToken(); in ParseStruct() local
2119 if (!token->IsIdentifier()) in ParseStruct()
2122 auto struct_name = token->AsString(); in ParseStruct()
2133 token = tokenizer_->NextToken(); in ParseStruct()
2134 if (token->IsIdentifier()) { in ParseStruct()
2135 if (token->AsString() != "STRIDE") in ParseStruct()
2136 return Result("invalid token in STRUCT definition"); in ParseStruct()
2138 token = tokenizer_->NextToken(); in ParseStruct()
2139 if (token->IsEOL() || token->IsEOS()) in ParseStruct()
2141 if (!token->IsInteger()) in ParseStruct()
2144 type->SetStrideInBytes(token->AsUint32()); in ParseStruct()
2145 token = tokenizer_->NextToken(); in ParseStruct()
2147 if (!token->IsEOL()) { in ParseStruct()
2148 return Result("extra token " + token->ToOriginalString() + in ParseStruct()
2154 token = tokenizer_->NextToken(); in ParseStruct()
2155 if (!token->IsIdentifier()) in ParseStruct()
2157 if (token->AsString() == "END") in ParseStruct()
2160 if (token->AsString() == struct_name) in ParseStruct()
2163 type::Type* member_type = script_->GetType(token->AsString()); in ParseStruct()
2165 auto t = ToType(token->AsString()); in ParseStruct()
2167 return Result("unknown type '" + token->AsString() + in ParseStruct()
2175 token = tokenizer_->NextToken(); in ParseStruct()
2176 if (token->IsEOL()) in ParseStruct()
2178 if (!token->IsIdentifier()) in ParseStruct()
2181 auto member_name = token->AsString(); in ParseStruct()
2190 token = tokenizer_->NextToken(); in ParseStruct()
2191 while (token->IsIdentifier()) { in ParseStruct()
2192 if (token->AsString() == "OFFSET") { in ParseStruct()
2193 token = tokenizer_->NextToken(); in ParseStruct()
2194 if (token->IsEOL()) in ParseStruct()
2196 if (!token->IsInteger()) in ParseStruct()
2199 m->offset_in_bytes = token->AsInt32(); in ParseStruct()
2200 } else if (token->AsString() == "ARRAY_STRIDE") { in ParseStruct()
2201 token = tokenizer_->NextToken(); in ParseStruct()
2202 if (token->IsEOL()) in ParseStruct()
2204 if (!token->IsInteger()) in ParseStruct()
2209 m->array_stride_in_bytes = token->AsInt32(); in ParseStruct()
2210 } else if (token->AsString() == "MATRIX_STRIDE") { in ParseStruct()
2211 token = tokenizer_->NextToken(); in ParseStruct()
2212 if (token->IsEOL()) in ParseStruct()
2214 if (!token->IsInteger()) in ParseStruct()
2219 m->matrix_stride_in_bytes = token->AsInt32(); in ParseStruct()
2221 return Result("unknown param '" + token->AsString() + in ParseStruct()
2225 token = tokenizer_->NextToken(); in ParseStruct()
2228 if (!token->IsEOL()) in ParseStruct()
2236 auto token = tokenizer_->NextToken(); in ParseBuffer() local
2237 if (!token->IsIdentifier()) in ParseBuffer()
2240 auto name = token->AsString(); in ParseBuffer()
2244 token = tokenizer_->NextToken(); in ParseBuffer()
2245 if (!token->IsIdentifier()) in ParseBuffer()
2249 auto& cmd = token->AsString(); in ParseBuffer()
2257 token = tokenizer_->NextToken(); in ParseBuffer()
2258 if (!token->IsIdentifier()) in ParseBuffer()
2263 auto type = script_->ParseType(token->AsString()); in ParseBuffer()
2271 token = tokenizer_->PeekNextToken(); in ParseBuffer()
2272 while (token->IsIdentifier()) { in ParseBuffer()
2273 if (token->AsString() == "MIP_LEVELS") { in ParseBuffer()
2275 token = tokenizer_->NextToken(); in ParseBuffer()
2277 if (!token->IsInteger()) in ParseBuffer()
2280 buffer->SetMipLevels(token->AsUint32()); in ParseBuffer()
2281 } else if (token->AsString() == "FILE") { in ParseBuffer()
2287 } else if (token->AsString() == "SAMPLES") { in ParseBuffer()
2289 token = tokenizer_->NextToken(); in ParseBuffer()
2290 if (!token->IsInteger()) in ParseBuffer()
2293 const uint32_t samples = token->AsUint32(); in ParseBuffer()
2295 return Result("invalid sample count: " + token->ToOriginalString()); in ParseBuffer()
2301 token = tokenizer_->PeekNextToken(); in ParseBuffer()
2316 auto token = tokenizer_->NextToken(); in ParseImage() local
2317 if (!token->IsIdentifier()) in ParseImage()
2320 auto name = token->AsString(); in ParseImage()
2330 token = tokenizer_->PeekNextToken(); in ParseImage()
2331 while (token->IsIdentifier()) { in ParseImage()
2332 if (token->AsString() == "FILL" || token->AsString() == "SERIES_FROM" || in ParseImage()
2333 token->AsString() == "DATA") { in ParseImage()
2339 if (token->AsString() == "DATA_TYPE") { in ParseImage()
2340 token = tokenizer_->NextToken(); in ParseImage()
2341 if (!token->IsIdentifier()) in ParseImage()
2344 auto type = script_->ParseType(token->AsString()); in ParseImage()
2350 auto new_type = ToType(token->AsString()); in ParseImage()
2352 return Result("invalid data type '" + token->AsString() + in ParseImage()
2361 } else if (token->AsString() == "FORMAT") { in ParseImage()
2362 token = tokenizer_->NextToken(); in ParseImage()
2363 if (!token->IsIdentifier()) in ParseImage()
2366 auto type = script_->ParseType(token->AsString()); in ParseImage()
2373 } else if (token->AsString() == "MIP_LEVELS") { in ParseImage()
2374 token = tokenizer_->NextToken(); in ParseImage()
2376 if (!token->IsInteger()) in ParseImage()
2379 buffer->SetMipLevels(token->AsUint32()); in ParseImage()
2380 } else if (token->AsString() == "DIM_1D") { in ParseImage()
2382 } else if (token->AsString() == "DIM_2D") { in ParseImage()
2384 } else if (token->AsString() == "DIM_3D") { in ParseImage()
2386 } else if (token->AsString() == "WIDTH") { in ParseImage()
2387 token = tokenizer_->NextToken(); in ParseImage()
2388 if (!token->IsInteger() || token->AsUint32() == 0) in ParseImage()
2391 buffer->SetWidth(token->AsUint32()); in ParseImage()
2393 } else if (token->AsString() == "HEIGHT") { in ParseImage()
2394 token = tokenizer_->NextToken(); in ParseImage()
2395 if (!token->IsInteger() || token->AsUint32() == 0) in ParseImage()
2398 buffer->SetHeight(token->AsUint32()); in ParseImage()
2400 } else if (token->AsString() == "DEPTH") { in ParseImage()
2401 token = tokenizer_->NextToken(); in ParseImage()
2402 if (!token->IsInteger() || token->AsUint32() == 0) in ParseImage()
2405 buffer->SetDepth(token->AsUint32()); in ParseImage()
2407 } else if (token->AsString() == "SAMPLES") { in ParseImage()
2408 token = tokenizer_->NextToken(); in ParseImage()
2409 if (!token->IsInteger()) in ParseImage()
2412 const uint32_t samples = token->AsUint32(); in ParseImage()
2414 return Result("invalid sample count: " + token->ToOriginalString()); in ParseImage()
2419 token->ToOriginalString()); in ParseImage()
2421 token = tokenizer_->PeekNextToken(); in ParseImage()
2440 token = tokenizer_->NextToken(); in ParseImage()
2441 if (token->IsIdentifier()) { in ParseImage()
2442 if (token->AsString() == "DATA") { in ParseImage()
2453 } else if (token->AsString() == "FILL") { in ParseImage()
2457 } else if (token->AsString() == "SERIES_FROM") { in ParseImage()
2462 return Result("unexpected IMAGE token: " + token->AsString()); in ParseImage()
2464 } else if (!token->IsEOL() && !token->IsEOS()) { in ParseImage()
2465 return Result("unexpected IMAGE token: " + token->ToOriginalString()); in ParseImage()
2476 auto token = tokenizer_->NextToken(); in ParseBufferInitializer() local
2477 if (!token->IsIdentifier()) in ParseBufferInitializer()
2480 auto type = script_->ParseType(token->AsString()); in ParseBufferInitializer()
2486 auto new_type = ToType(token->AsString()); in ParseBufferInitializer()
2488 return Result("invalid data type '" + token->AsString() + "' provided"); in ParseBufferInitializer()
2497 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2498 if (!token->IsIdentifier()) in ParseBufferInitializer()
2501 if (token->AsString() == "STD140") { in ParseBufferInitializer()
2503 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2504 } else if (token->AsString() == "STD430") { in ParseBufferInitializer()
2506 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2509 if (!token->IsIdentifier()) in ParseBufferInitializer()
2512 if (token->AsString() == "SIZE") in ParseBufferInitializer()
2514 if (token->AsString() == "WIDTH") { in ParseBufferInitializer()
2515 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2516 if (!token->IsInteger()) in ParseBufferInitializer()
2518 const uint32_t width = token->AsUint32(); in ParseBufferInitializer()
2524 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2525 if (token->AsString() != "HEIGHT") in ParseBufferInitializer()
2527 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2528 if (!token->IsInteger()) in ParseBufferInitializer()
2530 const uint32_t height = token->AsUint32(); in ParseBufferInitializer()
2535 token = tokenizer_->NextToken(); in ParseBufferInitializer()
2538 if (token->AsString() == "FILL") in ParseBufferInitializer()
2540 if (token->AsString() == "SERIES_FROM") in ParseBufferInitializer()
2544 if (token->AsString() == "DATA") in ParseBufferInitializer()
2551 auto token = tokenizer_->NextToken(); in ParseBufferInitializerSize() local
2552 if (token->IsEOS() || token->IsEOL()) in ParseBufferInitializerSize()
2554 if (!token->IsInteger()) in ParseBufferInitializerSize()
2557 uint32_t size_in_items = token->AsUint32(); in ParseBufferInitializerSize()
2560 token = tokenizer_->NextToken(); in ParseBufferInitializerSize()
2561 if (!token->IsIdentifier()) in ParseBufferInitializerSize()
2564 if (token->AsString() == "FILL") in ParseBufferInitializerSize()
2566 if (token->AsString() == "SERIES_FROM") in ParseBufferInitializerSize()
2568 if (token->AsString() == "FILE") in ParseBufferInitializerSize()
2576 auto token = tokenizer_->NextToken(); in ParseBufferInitializerFill() local
2577 if (token->IsEOS() || token->IsEOL()) in ParseBufferInitializerFill()
2579 if (!token->IsInteger() && !token->IsDouble()) in ParseBufferInitializerFill()
2592 values[i].SetDoubleValue(token->AsDouble()); in ParseBufferInitializerFill()
2594 values[i].SetIntValue(token->AsUint64()); in ParseBufferInitializerFill()
2605 auto token = tokenizer_->NextToken(); in ParseBufferInitializerSeries() local
2606 if (token->IsEOS() || token->IsEOL()) in ParseBufferInitializerSeries()
2608 if (!token->IsInteger() && !token->IsDouble()) in ParseBufferInitializerSeries()
2622 counter.SetDoubleValue(token->AsDouble()); in ParseBufferInitializerSeries()
2624 counter.SetIntValue(token->AsUint64()); in ParseBufferInitializerSeries()
2627 token = tokenizer_->NextToken(); in ParseBufferInitializerSeries()
2628 if (!token->IsIdentifier()) in ParseBufferInitializerSeries()
2630 if (token->AsString() != "INC_BY") in ParseBufferInitializerSeries()
2633 token = tokenizer_->NextToken(); in ParseBufferInitializerSeries()
2634 if (token->IsEOS() || token->IsEOL()) in ParseBufferInitializerSeries()
2636 if (!token->IsInteger() && !token->IsDouble()) in ParseBufferInitializerSeries()
2646 counter.SetDoubleValue(value + token->AsDouble()); in ParseBufferInitializerSeries()
2650 counter.SetIntValue(value + token->AsUint64()); in ParseBufferInitializerSeries()
2670 auto token = tokenizer_->NextToken(); in ParseBufferInitializerFile() local
2672 if (!token->IsIdentifier()) in ParseBufferInitializerFile()
2677 if (token->AsString() == "TEXT") { in ParseBufferInitializerFile()
2679 token = tokenizer_->NextToken(); in ParseBufferInitializerFile()
2680 } else if (token->AsString() == "BINARY") { in ParseBufferInitializerFile()
2682 token = tokenizer_->NextToken(); in ParseBufferInitializerFile()
2683 } else if (token->AsString() == "PNG") { in ParseBufferInitializerFile()
2684 token = tokenizer_->NextToken(); in ParseBufferInitializerFile()
2687 if (!token->IsIdentifier()) in ParseBufferInitializerFile()
2694 Result r = delegate_->LoadBufferData(token->AsString(), file_type, &info); in ParseBufferInitializerFile()
2724 auto token = tokenizer_->NextToken(); in ParseRun() local
2728 if (token->AsString() == "TIMED_EXECUTION") { in ParseRun()
2729 token = tokenizer_->NextToken(); in ParseRun()
2733 if (!token->IsIdentifier()) in ParseRun()
2738 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseRun()
2740 return Result("unknown pipeline for RUN command: " + token->AsString()); in ParseRun()
2753 token = tokenizer_->NextToken(); in ParseRun()
2755 if (token->IsEOL() || token->IsEOS()) in ParseRun()
2758 if (!token->IsIdentifier()) in ParseRun()
2761 std::string tok = token->AsString(); in ParseRun()
2762 token = tokenizer_->NextToken(); in ParseRun()
2764 if (!token->IsIdentifier()) in ParseRun()
2767 std::string sbtname = token->AsString(); in ParseRun()
2793 token = tokenizer_->NextToken(); in ParseRun()
2795 if (!token->IsInteger()) in ParseRun()
2797 token->ToOriginalString()); in ParseRun()
2799 cmd->SetX(token->AsUint32()); in ParseRun()
2801 cmd->SetY(token->AsUint32()); in ParseRun()
2803 cmd->SetZ(token->AsUint32()); in ParseRun()
2810 token = tokenizer_->NextToken(); in ParseRun()
2811 if (token->IsEOL() || token->IsEOS()) in ParseRun()
2814 if (token->IsInteger()) { in ParseRun()
2820 cmd->SetX(token->AsUint32()); in ParseRun()
2825 token = tokenizer_->NextToken(); in ParseRun()
2826 if (!token->IsInteger()) { in ParseRun()
2828 token->ToOriginalString()); in ParseRun()
2830 cmd->SetY(token->AsUint32()); in ParseRun()
2832 token = tokenizer_->NextToken(); in ParseRun()
2833 if (!token->IsInteger()) { in ParseRun()
2835 token->ToOriginalString()); in ParseRun()
2837 cmd->SetZ(token->AsUint32()); in ParseRun()
2843 if (!token->IsIdentifier()) in ParseRun()
2844 return Result("invalid token in RUN command: " + token->ToOriginalString()); in ParseRun()
2846 if (token->AsString() == "DRAW_RECT") { in ParseRun()
2856 token = tokenizer_->NextToken(); in ParseRun()
2857 if (token->IsEOS() || token->IsEOL()) in ParseRun()
2860 if (!token->IsIdentifier() || token->AsString() != "POS") { in ParseRun()
2861 return Result("invalid token in RUN command: " + in ParseRun()
2862 token->ToOriginalString() + "; expected POS"); in ParseRun()
2865 token = tokenizer_->NextToken(); in ParseRun()
2866 if (!token->IsInteger()) in ParseRun()
2877 Result r = token->ConvertToDouble(); in ParseRun()
2880 cmd->SetX(token->AsFloat()); in ParseRun()
2882 token = tokenizer_->NextToken(); in ParseRun()
2883 if (!token->IsInteger()) in ParseRun()
2886 r = token->ConvertToDouble(); in ParseRun()
2889 cmd->SetY(token->AsFloat()); in ParseRun()
2891 token = tokenizer_->NextToken(); in ParseRun()
2892 if (!token->IsIdentifier() || token->AsString() != "SIZE") { in ParseRun()
2893 return Result("invalid token in RUN command: " + in ParseRun()
2894 token->ToOriginalString() + "; expected SIZE"); in ParseRun()
2897 token = tokenizer_->NextToken(); in ParseRun()
2898 if (!token->IsInteger()) in ParseRun()
2901 r = token->ConvertToDouble(); in ParseRun()
2904 cmd->SetWidth(token->AsFloat()); in ParseRun()
2906 token = tokenizer_->NextToken(); in ParseRun()
2907 if (!token->IsInteger()) in ParseRun()
2910 r = token->ConvertToDouble(); in ParseRun()
2913 cmd->SetHeight(token->AsFloat()); in ParseRun()
2919 if (token->AsString() == "DRAW_GRID") { in ParseRun()
2929 token = tokenizer_->NextToken(); in ParseRun()
2930 if (token->IsEOS() || token->IsEOL()) in ParseRun()
2933 if (!token->IsIdentifier() || token->AsString() != "POS") { in ParseRun()
2934 return Result("invalid token in RUN command: " + in ParseRun()
2935 token->ToOriginalString() + "; expected POS"); in ParseRun()
2938 token = tokenizer_->NextToken(); in ParseRun()
2939 if (!token->IsInteger()) in ParseRun()
2949 Result r = token->ConvertToDouble(); in ParseRun()
2952 cmd->SetX(token->AsFloat()); in ParseRun()
2954 token = tokenizer_->NextToken(); in ParseRun()
2955 if (!token->IsInteger()) in ParseRun()
2958 r = token->ConvertToDouble(); in ParseRun()
2961 cmd->SetY(token->AsFloat()); in ParseRun()
2963 token = tokenizer_->NextToken(); in ParseRun()
2964 if (!token->IsIdentifier() || token->AsString() != "SIZE") { in ParseRun()
2965 return Result("invalid token in RUN command: " + in ParseRun()
2966 token->ToOriginalString() + "; expected SIZE"); in ParseRun()
2969 token = tokenizer_->NextToken(); in ParseRun()
2970 if (!token->IsInteger()) in ParseRun()
2973 r = token->ConvertToDouble(); in ParseRun()
2976 cmd->SetWidth(token->AsFloat()); in ParseRun()
2978 token = tokenizer_->NextToken(); in ParseRun()
2979 if (!token->IsInteger()) in ParseRun()
2982 r = token->ConvertToDouble(); in ParseRun()
2985 cmd->SetHeight(token->AsFloat()); in ParseRun()
2987 token = tokenizer_->NextToken(); in ParseRun()
2988 if (!token->IsIdentifier() || token->AsString() != "CELLS") { in ParseRun()
2989 return Result("invalid token in RUN command: " + in ParseRun()
2990 token->ToOriginalString() + "; expected CELLS"); in ParseRun()
2993 token = tokenizer_->NextToken(); in ParseRun()
2994 if (!token->IsInteger()) in ParseRun()
2997 cmd->SetColumns(token->AsUint32()); in ParseRun()
2999 token = tokenizer_->NextToken(); in ParseRun()
3000 if (!token->IsInteger()) in ParseRun()
3003 cmd->SetRows(token->AsUint32()); in ParseRun()
3009 if (token->AsString() == "DRAW_ARRAY") { in ParseRun()
3016 token = tokenizer_->NextToken(); in ParseRun()
3017 if (!token->IsIdentifier() || token->AsString() != "AS") in ParseRun()
3020 token = tokenizer_->NextToken(); in ParseRun()
3021 if (!token->IsIdentifier()) { in ParseRun()
3023 token->ToOriginalString()); in ParseRun()
3026 Topology topo = NameToTopology(token->AsString()); in ParseRun()
3028 return Result("invalid topology for RUN command: " + token->AsString()); in ParseRun()
3036 token = tokenizer_->PeekNextToken(); in ParseRun()
3038 while (!token->IsEOS() && !token->IsEOL()) { in ParseRun()
3039 token = tokenizer_->NextToken(); in ParseRun()
3041 if (!token->IsIdentifier()) in ParseRun()
3044 if (token->AsString() == "INDEXED") { in ParseRun()
3051 } else if (token->AsString() == "START_IDX") { in ParseRun()
3052 token = tokenizer_->NextToken(); in ParseRun()
3053 if (!token->IsInteger()) { in ParseRun()
3055 token->ToOriginalString()); in ParseRun()
3057 if (token->AsInt32() < 0) in ParseRun()
3059 start_idx = token->AsUint32(); in ParseRun()
3060 } else if (token->AsString() == "COUNT") { in ParseRun()
3061 token = tokenizer_->NextToken(); in ParseRun()
3062 if (!token->IsInteger()) { in ParseRun()
3064 token->ToOriginalString()); in ParseRun()
3066 if (token->AsInt32() <= 0) in ParseRun()
3069 count = token->AsUint32(); in ParseRun()
3070 } else if (token->AsString() == "INSTANCE_COUNT") { in ParseRun()
3071 token = tokenizer_->NextToken(); in ParseRun()
3072 if (!token->IsInteger()) { in ParseRun()
3074 token->ToOriginalString()); in ParseRun()
3076 if (token->AsInt32() <= 0) in ParseRun()
3079 instance_count = token->AsUint32(); in ParseRun()
3080 } else if (token->AsString() == "START_INSTANCE") { in ParseRun()
3081 token = tokenizer_->NextToken(); in ParseRun()
3082 if (!token->IsInteger()) { in ParseRun()
3084 token->ToOriginalString()); in ParseRun()
3086 if (token->AsInt32() < 0) in ParseRun()
3088 start_instance = token->AsUint32(); in ParseRun()
3091 token->ToOriginalString()); in ParseRun()
3094 token = tokenizer_->PeekNextToken(); in ParseRun()
3132 return Result("invalid token in RUN command: " + token->AsString()); in ParseRun()
3136 auto token = tokenizer_->NextToken(); in ParseClear() local
3137 if (!token->IsIdentifier()) in ParseClear()
3142 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseClear()
3144 return Result("unknown pipeline for CLEAR command: " + token->AsString()); in ParseClear()
3160 auto token = tokenizer_->NextToken(); in ParseValues() local
3163 while (!token->IsEOL() && !token->IsEOS()) { in ParseValues()
3173 if (!token->IsInteger() && !token->IsDouble() && !token->IsHex()) { in ParseValues()
3175 " command: " + token->ToOriginalString()); in ParseValues()
3178 Result r = token->ConvertToDouble(); in ParseValues()
3182 v.SetDoubleValue(token->AsDouble()); in ParseValues()
3184 if (!token->IsInteger() && !token->IsHex()) { in ParseValues()
3186 " command: " + token->ToOriginalString()); in ParseValues()
3189 uint64_t val = token->IsHex() ? token->AsHex() : token->AsUint64(); in ParseValues()
3197 token = tokenizer_->NextToken(); in ParseValues()
3203 auto token = tokenizer_->NextToken(); in ParseExpect() local
3204 if (!token->IsIdentifier()) in ParseExpect()
3207 if (token->AsString() == "IDX") in ParseExpect()
3209 if (token->AsString() == "EQ_BUFFER") in ParseExpect()
3211 if (token->AsString() == "RMSE_BUFFER") in ParseExpect()
3213 if (token->AsString() == "EQ_HISTOGRAM_EMD_BUFFER") { in ParseExpect()
3219 auto* buffer = script_->GetBuffer(token->AsString()); in ParseExpect()
3222 token->AsString()); in ParseExpect()
3224 token = tokenizer_->NextToken(); in ParseExpect()
3226 if (!token->IsIdentifier()) in ParseExpect()
3229 if (token->AsString() == "EQ_BUFFER" || token->AsString() == "RMSE_BUFFER" || in ParseExpect()
3230 token->AsString() == "EQ_HISTOGRAM_EMD_BUFFER") { in ParseExpect()
3231 auto type = token->AsString(); in ParseExpect()
3233 token = tokenizer_->NextToken(); in ParseExpect()
3234 if (!token->IsIdentifier()) in ParseExpect()
3237 auto* buffer_2 = script_->GetBuffer(token->AsString()); in ParseExpect()
3240 " command: " + token->AsString()); in ParseExpect()
3266 token = tokenizer_->NextToken(); in ParseExpect()
3267 if (!token->IsIdentifier() && token->AsString() == "TOLERANCE") in ParseExpect()
3270 token = tokenizer_->NextToken(); in ParseExpect()
3271 if (!token->IsInteger() && !token->IsDouble()) in ParseExpect()
3274 Result r = token->ConvertToDouble(); in ParseExpect()
3278 cmd->SetTolerance(token->AsFloat()); in ParseExpect()
3282 token = tokenizer_->NextToken(); in ParseExpect()
3283 if (!token->IsIdentifier() && token->AsString() == "TOLERANCE") in ParseExpect()
3286 token = tokenizer_->NextToken(); in ParseExpect()
3287 if (!token->IsInteger() && !token->IsDouble()) in ParseExpect()
3290 Result r = token->ConvertToDouble(); in ParseExpect()
3294 cmd->SetTolerance(token->AsFloat()); in ParseExpect()
3303 if (token->AsString() != "IDX") in ParseExpect()
3306 token = tokenizer_->NextToken(); in ParseExpect()
3307 if (!token->IsInteger() || token->AsInt32() < 0) in ParseExpect()
3309 token->ConvertToDouble(); in ParseExpect()
3310 float x = token->AsFloat(); in ParseExpect()
3314 token = tokenizer_->NextToken(); in ParseExpect()
3315 if (token->IsInteger()) { in ParseExpect()
3318 if (token->AsInt32() < 0) in ParseExpect()
3320 token->ConvertToDouble(); in ParseExpect()
3321 y = token->AsFloat(); in ParseExpect()
3323 token = tokenizer_->NextToken(); in ParseExpect()
3326 if (token->IsIdentifier() && token->AsString() == "SIZE") { in ParseExpect()
3336 token = tokenizer_->NextToken(); in ParseExpect()
3337 if (!token->IsInteger() || token->AsInt32() <= 0) in ParseExpect()
3339 token->ConvertToDouble(); in ParseExpect()
3340 probe->SetWidth(token->AsFloat()); in ParseExpect()
3342 token = tokenizer_->NextToken(); in ParseExpect()
3343 if (!token->IsInteger() || token->AsInt32() <= 0) in ParseExpect()
3345 token->ConvertToDouble(); in ParseExpect()
3346 probe->SetHeight(token->AsFloat()); in ParseExpect()
3348 token = tokenizer_->NextToken(); in ParseExpect()
3349 if (!token->IsIdentifier()) { in ParseExpect()
3350 return Result("invalid token in EXPECT command:" + in ParseExpect()
3351 token->ToOriginalString()); in ParseExpect()
3354 if (token->AsString() == "EQ_RGBA") { in ParseExpect()
3356 } else if (token->AsString() != "EQ_RGB") { in ParseExpect()
3358 token->ToOriginalString()); in ParseExpect()
3361 token = tokenizer_->NextToken(); in ParseExpect()
3362 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) in ParseExpect()
3364 token->ConvertToDouble(); in ParseExpect()
3365 probe->SetR(token->AsFloat() / 255.f); in ParseExpect()
3367 token = tokenizer_->NextToken(); in ParseExpect()
3368 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) in ParseExpect()
3370 token->ConvertToDouble(); in ParseExpect()
3371 probe->SetG(token->AsFloat() / 255.f); in ParseExpect()
3373 token = tokenizer_->NextToken(); in ParseExpect()
3374 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) in ParseExpect()
3376 token->ConvertToDouble(); in ParseExpect()
3377 probe->SetB(token->AsFloat() / 255.f); in ParseExpect()
3380 token = tokenizer_->NextToken(); in ParseExpect()
3381 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) in ParseExpect()
3383 token->ConvertToDouble(); in ParseExpect()
3384 probe->SetA(token->AsFloat() / 255.f); in ParseExpect()
3387 token = tokenizer_->NextToken(); in ParseExpect()
3388 if (token->IsIdentifier() && token->AsString() == "TOLERANCE") { in ParseExpect()
3410 token = tokenizer_->NextToken(); in ParseExpect()
3413 if (!token->IsEOL() && !token->IsEOS()) { in ParseExpect()
3415 token->ToOriginalString()); in ParseExpect()
3426 if (token->IsIdentifier() && token->AsString() == "TOLERANCE") { in ParseExpect()
3440 token = tokenizer_->NextToken(); in ParseExpect()
3443 if (!token->IsIdentifier() || !IsComparator(token->AsString())) { in ParseExpect()
3444 return Result("unexpected token in EXPECT command: " + in ParseExpect()
3445 token->ToOriginalString()); in ParseExpect()
3451 auto cmp = ToComparator(token->AsString()); in ParseExpect()
3478 auto token = tokenizer_->NextToken(); in ParseCopy() local
3479 if (token->IsEOL() || token->IsEOS()) in ParseCopy()
3481 if (!token->IsIdentifier()) in ParseCopy()
3486 auto name = token->AsString(); in ParseCopy()
3494 token = tokenizer_->NextToken(); in ParseCopy()
3495 if (token->IsEOL() || token->IsEOS()) in ParseCopy()
3497 if (!token->IsIdentifier()) in ParseCopy()
3500 name = token->AsString(); in ParseCopy()
3504 token = tokenizer_->NextToken(); in ParseCopy()
3505 if (token->IsEOL() || token->IsEOS()) in ParseCopy()
3507 if (!token->IsIdentifier()) in ParseCopy()
3510 name = token->AsString(); in ParseCopy()
3531 auto token = tokenizer_->NextToken(); in ParseClearColor() local
3532 if (!token->IsIdentifier()) in ParseClearColor()
3537 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseClearColor()
3540 token->AsString()); in ParseClearColor()
3549 token = tokenizer_->NextToken(); in ParseClearColor()
3550 if (token->IsEOL() || token->IsEOS()) in ParseClearColor()
3552 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearColor()
3554 token->ToOriginalString()); in ParseClearColor()
3556 token->ConvertToDouble(); in ParseClearColor()
3557 cmd->SetR(token->AsFloat() / 255.f); in ParseClearColor()
3559 token = tokenizer_->NextToken(); in ParseClearColor()
3560 if (token->IsEOL() || token->IsEOS()) in ParseClearColor()
3562 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearColor()
3564 token->ToOriginalString()); in ParseClearColor()
3566 token->ConvertToDouble(); in ParseClearColor()
3567 cmd->SetG(token->AsFloat() / 255.f); in ParseClearColor()
3569 token = tokenizer_->NextToken(); in ParseClearColor()
3570 if (token->IsEOL() || token->IsEOS()) in ParseClearColor()
3572 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearColor()
3574 token->ToOriginalString()); in ParseClearColor()
3576 token->ConvertToDouble(); in ParseClearColor()
3577 cmd->SetB(token->AsFloat() / 255.f); in ParseClearColor()
3579 token = tokenizer_->NextToken(); in ParseClearColor()
3580 if (token->IsEOL() || token->IsEOS()) in ParseClearColor()
3582 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearColor()
3584 token->ToOriginalString()); in ParseClearColor()
3586 token->ConvertToDouble(); in ParseClearColor()
3587 cmd->SetA(token->AsFloat() / 255.f); in ParseClearColor()
3594 auto token = tokenizer_->NextToken(); in ParseClearDepth() local
3595 if (!token->IsIdentifier()) in ParseClearDepth()
3600 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseClearDepth()
3603 token->AsString()); in ParseClearDepth()
3612 token = tokenizer_->NextToken(); in ParseClearDepth()
3613 if (token->IsEOL() || token->IsEOS()) in ParseClearDepth()
3615 if (!token->IsDouble()) { in ParseClearDepth()
3617 token->ToOriginalString()); in ParseClearDepth()
3619 cmd->SetValue(token->AsFloat()); in ParseClearDepth()
3626 auto token = tokenizer_->NextToken(); in ParseClearStencil() local
3627 if (!token->IsIdentifier()) in ParseClearStencil()
3632 auto* pipeline = script_->GetPipeline(token->AsString()); in ParseClearStencil()
3635 token->AsString()); in ParseClearStencil()
3644 token = tokenizer_->NextToken(); in ParseClearStencil()
3645 if (token->IsEOL() || token->IsEOS()) in ParseClearStencil()
3647 if (!token->IsInteger() || token->AsInt32() < 0 || token->AsInt32() > 255) { in ParseClearStencil()
3649 token->ToOriginalString()); in ParseClearStencil()
3651 cmd->SetValue(token->AsUint32()); in ParseClearStencil()
3658 auto token = tokenizer_->NextToken(); in ParseDeviceFeature() local
3659 if (token->IsEOS() || token->IsEOL()) in ParseDeviceFeature()
3661 if (!token->IsIdentifier()) in ParseDeviceFeature()
3663 if (!script_->IsKnownFeature(token->AsString())) in ParseDeviceFeature()
3666 script_->AddRequiredFeature(token->AsString()); in ParseDeviceFeature()
3672 auto token = tokenizer_->NextToken(); in ParseDeviceProperty() local
3673 if (token->IsEOS() || token->IsEOL()) in ParseDeviceProperty()
3675 if (!token->IsIdentifier()) in ParseDeviceProperty()
3677 if (!script_->IsKnownProperty(token->AsString())) in ParseDeviceProperty()
3680 script_->AddRequiredProperty(token->AsString()); in ParseDeviceProperty()
3686 auto token = tokenizer_->NextToken(); in ParseRepeat() local
3687 if (token->IsEOL() || token->IsEOL()) in ParseRepeat()
3689 if (!token->IsInteger()) { in ParseRepeat()
3691 token->ToOriginalString()); in ParseRepeat()
3693 if (token->AsInt32() <= 0) in ParseRepeat()
3696 uint32_t count = token->AsUint32(); in ParseRepeat()
3701 for (token = tokenizer_->NextToken(); !token->IsEOS(); in ParseRepeat()
3702 token = tokenizer_->NextToken()) { in ParseRepeat()
3703 if (token->IsEOL()) in ParseRepeat()
3705 if (!token->IsIdentifier()) in ParseRepeat()
3708 std::string tok = token->AsString(); in ParseRepeat()
3712 return Result("unknown token: " + tok); in ParseRepeat()
3718 if (!token->IsIdentifier() || token->AsString() != "END") in ParseRepeat()
3731 auto token = tokenizer_->NextToken(); in ParseDerivePipelineBlock() local
3732 if (!token->IsIdentifier() || token->AsString() == "FROM") in ParseDerivePipelineBlock()
3735 std::string name = token->AsString(); in ParseDerivePipelineBlock()
3739 token = tokenizer_->NextToken(); in ParseDerivePipelineBlock()
3740 if (!token->IsIdentifier() || token->AsString() != "FROM") in ParseDerivePipelineBlock()
3743 token = tokenizer_->NextToken(); in ParseDerivePipelineBlock()
3744 if (!token->IsIdentifier()) in ParseDerivePipelineBlock()
3747 Pipeline* parent = script_->GetPipeline(token->AsString()); in ParseDerivePipelineBlock()
3762 auto token = tokenizer_->NextToken(); in ParseDeviceExtension() local
3763 if (token->IsEOL() || token->IsEOS()) in ParseDeviceExtension()
3765 if (!token->IsIdentifier()) { in ParseDeviceExtension()
3767 token->ToOriginalString()); in ParseDeviceExtension()
3770 script_->AddRequiredDeviceExtension(token->AsString()); in ParseDeviceExtension()
3776 auto token = tokenizer_->NextToken(); in ParseInstanceExtension() local
3777 if (token->IsEOL() || token->IsEOS()) in ParseInstanceExtension()
3779 if (!token->IsIdentifier()) { in ParseInstanceExtension()
3781 token->ToOriginalString()); in ParseInstanceExtension()
3784 script_->AddRequiredInstanceExtension(token->AsString()); in ParseInstanceExtension()
3790 auto token = tokenizer_->NextToken(); in ParseSet() local
3791 if (!token->IsIdentifier() || token->AsString() != "ENGINE_DATA") in ParseSet()
3794 token = tokenizer_->NextToken(); in ParseSet()
3795 if (token->IsEOS() || token->IsEOL()) in ParseSet()
3798 if (!token->IsIdentifier()) in ParseSet()
3799 return Result("SET invalid variable to set: " + token->ToOriginalString()); in ParseSet()
3801 if (token->AsString() != "fence_timeout_ms") in ParseSet()
3802 return Result("SET unknown variable provided: " + token->AsString()); in ParseSet()
3804 token = tokenizer_->NextToken(); in ParseSet()
3805 if (token->IsEOS() || token->IsEOL()) in ParseSet()
3807 if (!token->IsInteger()) in ParseSet()
3810 script_->GetEngineData().fence_timeout_ms = token->AsUint32(); in ParseSet()
3816 auto token = tokenizer_->NextToken(); in ParseSampler() local
3817 if (!token->IsIdentifier()) in ParseSampler()
3818 return Result("invalid token when looking for sampler name"); in ParseSampler()
3821 sampler->SetName(token->AsString()); in ParseSampler()
3823 token = tokenizer_->NextToken(); in ParseSampler()
3824 while (!token->IsEOS() && !token->IsEOL()) { in ParseSampler()
3825 if (!token->IsIdentifier()) in ParseSampler()
3826 return Result("invalid token when looking for sampler parameters"); in ParseSampler()
3828 auto param = token->AsString(); in ParseSampler()
3830 token = tokenizer_->NextToken(); in ParseSampler()
3832 if (!token->IsIdentifier()) in ParseSampler()
3833 return Result("invalid token when looking for MAG_FILTER value"); in ParseSampler()
3835 auto filter = token->AsString(); in ParseSampler()
3844 token = tokenizer_->NextToken(); in ParseSampler()
3846 if (!token->IsIdentifier()) in ParseSampler()
3847 return Result("invalid token when looking for MIN_FILTER value"); in ParseSampler()
3849 auto filter = token->AsString(); in ParseSampler()
3858 token = tokenizer_->NextToken(); in ParseSampler()
3860 if (!token->IsIdentifier()) in ParseSampler()
3861 return Result("invalid token when looking for ADDRESS_MODE_U value"); in ParseSampler()
3863 auto mode_str = token->AsString(); in ParseSampler()
3871 token = tokenizer_->NextToken(); in ParseSampler()
3873 if (!token->IsIdentifier()) in ParseSampler()
3874 return Result("invalid token when looking for ADDRESS_MODE_V value"); in ParseSampler()
3876 auto mode_str = token->AsString(); in ParseSampler()
3884 token = tokenizer_->NextToken(); in ParseSampler()
3886 if (!token->IsIdentifier()) in ParseSampler()
3887 return Result("invalid token when looking for ADDRESS_MODE_W value"); in ParseSampler()
3889 auto mode_str = token->AsString(); in ParseSampler()
3897 token = tokenizer_->NextToken(); in ParseSampler()
3899 if (!token->IsIdentifier()) in ParseSampler()
3900 return Result("invalid token when looking for BORDER_COLOR value"); in ParseSampler()
3902 auto color_str = token->AsString(); in ParseSampler()
3919 token = tokenizer_->NextToken(); in ParseSampler()
3921 if (!token->IsDouble()) in ParseSampler()
3922 return Result("invalid token when looking for MIN_LOD value"); in ParseSampler()
3924 sampler->SetMinLOD(token->AsFloat()); in ParseSampler()
3926 token = tokenizer_->NextToken(); in ParseSampler()
3928 if (!token->IsDouble()) in ParseSampler()
3929 return Result("invalid token when looking for MAX_LOD value"); in ParseSampler()
3931 sampler->SetMaxLOD(token->AsFloat()); in ParseSampler()
3939 token = tokenizer_->NextToken(); in ParseSampler()
3941 if (!token->IsIdentifier()) in ParseSampler()
3944 if (token->AsString() == "on") in ParseSampler()
3946 else if (token->AsString() == "off") in ParseSampler()
3949 return Result("invalid value for COMPARE: " + token->AsString()); in ParseSampler()
3951 token = tokenizer_->NextToken(); in ParseSampler()
3953 if (!token->IsIdentifier()) in ParseSampler()
3956 CompareOp compare_op = StrToCompareOp(token->AsString()); in ParseSampler()
3960 return Result("invalid value for COMPARE_OP: " + token->AsString()); in ParseSampler()
3966 token = tokenizer_->NextToken(); in ParseSampler()
3983 auto token = tokenizer_->NextToken(); in ParseAS() local
3984 if (!token->IsIdentifier()) in ParseAS()
3988 auto type = token->AsString(); in ParseAS()
4000 auto token = tokenizer_->NextToken(); in ParseBLAS() local
4001 if (!token->IsIdentifier()) in ParseBLAS()
4004 auto name = token->AsString(); in ParseBLAS()
4012 token = tokenizer_->NextToken(); in ParseBLAS()
4013 if (!token->IsEOL()) in ParseBLAS()
4018 token = tokenizer_->NextToken(); in ParseBLAS()
4019 if (token->IsEOL()) { in ParseBLAS()
4022 if (token->IsEOS()) { in ParseBLAS()
4025 if (!token->IsIdentifier()) { in ParseBLAS()
4029 auto geom = token->AsString(); in ParseBLAS()
4033 token = tokenizer_->NextToken(); in ParseBLAS()
4034 if (!token->IsIdentifier()) { in ParseBLAS()
4038 auto type = token->AsString(); in ParseBLAS()
4073 auto token = tokenizer_->NextToken(); in ParseBLASTriangle() local
4075 if (token->IsEOS()) in ParseBLASTriangle()
4077 if (token->IsEOL()) in ParseBLASTriangle()
4080 if (token->IsIdentifier()) { in ParseBLASTriangle()
4081 std::string tok = token->AsString(); in ParseBLASTriangle()
4091 } else if (token->IsInteger() || token->IsDouble()) { in ParseBLASTriangle()
4092 g.push_back(token->AsFloat()); in ParseBLASTriangle()
4122 auto token = tokenizer_->NextToken(); in ParseBLASAABB() local
4124 if (token->IsEOS()) in ParseBLASAABB()
4126 if (token->IsEOL()) in ParseBLASAABB()
4129 if (token->IsIdentifier()) { in ParseBLASAABB()
4130 std::string tok = token->AsString(); in ParseBLASAABB()
4140 } else if (token->IsDouble()) { in ParseBLASAABB()
4141 g.push_back(token->AsFloat()); in ParseBLASAABB()
4142 } else if (token->IsInteger()) { in ParseBLASAABB()
4143 g.push_back(static_cast<float>(token->AsInt64())); in ParseBLASAABB()
4166 std::unique_ptr<Token> token; in ParseGeometryFlags() local
4172 token = tokenizer_->NextToken(); in ParseGeometryFlags()
4173 if (token->IsEOL()) { in ParseGeometryFlags()
4183 if (token->IsEOS()) in ParseGeometryFlags()
4186 if (token->IsIdentifier()) { in ParseGeometryFlags()
4187 if (token->AsString() == "END") in ParseGeometryFlags()
4189 else if (token->AsString() == "OPAQUE") in ParseGeometryFlags()
4191 else if (token->AsString() == "NO_DUPLICATE_ANY_HIT") in ParseGeometryFlags()
4194 return Result("Unknown flag: " + token->AsString()); in ParseGeometryFlags()
4207 auto token = tokenizer_->NextToken(); in ParseTLAS() local
4208 if (!token->IsIdentifier()) in ParseTLAS()
4211 auto name = token->AsString(); in ParseTLAS()
4213 token = tokenizer_->NextToken(); in ParseTLAS()
4214 if (!token->IsEOL()) in ParseTLAS()
4222 token = tokenizer_->NextToken(); in ParseTLAS()
4223 if (token->IsEOL()) in ParseTLAS()
4225 if (token->IsEOS()) in ParseTLAS()
4227 if (!token->IsIdentifier()) in ParseTLAS()
4231 std::string tok = token->AsString(); in ParseTLAS()
4237 r = Result("unknown token: " + tok); in ParseTLAS()
4253 std::unique_ptr<Token> token; in ParseBLASInstance() local
4256 token = tokenizer_->NextToken(); in ParseBLASInstance()
4258 if (!token->IsIdentifier()) in ParseBLASInstance()
4261 std::string name = token->AsString(); in ParseBLASInstance()
4271 token = tokenizer_->NextToken(); in ParseBLASInstance()
4272 if (token->IsEOS()) in ParseBLASInstance()
4274 if (token->IsEOL()) in ParseBLASInstance()
4277 if (!token->IsIdentifier()) in ParseBLASInstance()
4281 std::string tok = token->AsString(); in ParseBLASInstance()
4289 token = tokenizer_->NextToken(); in ParseBLASInstance()
4292 if (token->IsInteger()) in ParseBLASInstance()
4293 v = token->AsUint64(); in ParseBLASInstance()
4294 else if (token->IsHex()) in ParseBLASInstance()
4295 v = token->AsHex(); in ParseBLASInstance()
4301 token = tokenizer_->NextToken(); in ParseBLASInstance()
4304 if (token->IsInteger()) in ParseBLASInstance()
4305 v = token->AsUint64(); in ParseBLASInstance()
4306 else if (token->IsHex()) in ParseBLASInstance()
4307 v = token->AsHex(); in ParseBLASInstance()
4313 token = tokenizer_->NextToken(); in ParseBLASInstance()
4316 if (token->IsInteger()) in ParseBLASInstance()
4317 v = token->AsUint64(); in ParseBLASInstance()
4318 else if (token->IsHex()) in ParseBLASInstance()
4319 v = token->AsHex(); in ParseBLASInstance()
4325 r = Result("Unknown token in BOTTOM_LEVEL_INSTANCE block: " + tok); in ParseBLASInstance()
4338 std::unique_ptr<Token> token; in ParseBLASInstanceTransform() local
4344 token = tokenizer_->NextToken(); in ParseBLASInstanceTransform()
4345 if (token->IsEOL()) in ParseBLASInstanceTransform()
4347 if (token->IsEOS()) in ParseBLASInstanceTransform()
4350 if (token->IsIdentifier() && token->AsString() == "END") in ParseBLASInstanceTransform()
4352 else if (token->IsDouble() || token->IsInteger()) in ParseBLASInstanceTransform()
4353 transform.push_back(token->AsFloat()); in ParseBLASInstanceTransform()
4355 return Result("Unknown token: " + token->AsString()); in ParseBLASInstanceTransform()
4367 std::unique_ptr<Token> token; in ParseBLASInstanceFlags() local
4374 token = tokenizer_->NextToken(); in ParseBLASInstanceFlags()
4375 if (token->IsEOL()) { in ParseBLASInstanceFlags()
4385 if (token->IsEOS()) in ParseBLASInstanceFlags()
4388 if (token->IsInteger()) { in ParseBLASInstanceFlags()
4389 flags |= token->AsUint32(); in ParseBLASInstanceFlags()
4390 } else if (token->IsHex()) { in ParseBLASInstanceFlags()
4391 flags |= uint32_t(token->AsHex()); in ParseBLASInstanceFlags()
4392 } else if (token->IsIdentifier()) { in ParseBLASInstanceFlags()
4393 if (token->AsString() == "END") in ParseBLASInstanceFlags()
4395 else if (token->AsString() == "TRIANGLE_FACING_CULL_DISABLE") in ParseBLASInstanceFlags()
4397 else if (token->AsString() == "TRIANGLE_FLIP_FACING") in ParseBLASInstanceFlags()
4399 else if (token->AsString() == "FORCE_OPAQUE") in ParseBLASInstanceFlags()
4401 else if (token->AsString() == "FORCE_NO_OPAQUE") in ParseBLASInstanceFlags()
4403 else if (token->AsString() == "FORCE_OPACITY_MICROMAP_2_STATE") in ParseBLASInstanceFlags()
4405 else if (token->AsString() == "DISABLE_OPACITY_MICROMAPS") in ParseBLASInstanceFlags()
4408 return Result("Unknown flag: " + token->AsString()); in ParseBLASInstanceFlags()
4424 auto token = tokenizer_->NextToken(); in ParseSBT() local
4425 if (!token->IsIdentifier()) in ParseSBT()
4428 auto name = token->AsString(); in ParseSBT()
4435 token = tokenizer_->NextToken(); in ParseSBT()
4436 if (!token->IsEOL()) in ParseSBT()
4440 token = tokenizer_->NextToken(); in ParseSBT()
4441 if (token->IsEOL()) { in ParseSBT()
4444 if (token->IsEOS()) { in ParseSBT()
4447 if (!token->IsIdentifier()) { in ParseSBT()
4451 auto tok = token->AsString(); in ParseSBT()
4480 auto token = tokenizer_->NextToken(); in ParseMaxRayPayloadSize() local
4481 if (!token->IsInteger()) in ParseMaxRayPayloadSize()
4484 pipeline->SetMaxPipelineRayPayloadSize(token->AsUint32()); in ParseMaxRayPayloadSize()
4494 auto token = tokenizer_->NextToken(); in ParseMaxRayHitAttributeSize() local
4495 if (!token->IsInteger()) in ParseMaxRayHitAttributeSize()
4498 pipeline->SetMaxPipelineRayHitAttributeSize(token->AsUint32()); in ParseMaxRayHitAttributeSize()
4508 auto token = tokenizer_->NextToken(); in ParseMaxRayRecursionDepth() local
4509 if (!token->IsInteger()) in ParseMaxRayRecursionDepth()
4512 pipeline->SetMaxPipelineRayRecursionDepth(token->AsUint32()); in ParseMaxRayRecursionDepth()
4521 std::unique_ptr<Token> token; in ParseFlags() local
4528 token = tokenizer_->NextToken(); in ParseFlags()
4529 if (token->IsEOL()) { in ParseFlags()
4539 if (token->IsEOS()) in ParseFlags()
4542 if (token->IsInteger()) { in ParseFlags()
4543 flags |= token->AsUint32(); in ParseFlags()
4544 } else if (token->IsHex()) { in ParseFlags()
4545 flags |= uint32_t(token->AsHex()); in ParseFlags()
4546 } else if (token->IsIdentifier()) { in ParseFlags()
4547 if (token->AsString() == "END") in ParseFlags()
4549 else if (token->AsString() == "LIBRARY") in ParseFlags()
4552 return Result("Unknown flag: " + token->AsString()); in ParseFlags()
4572 auto token = tokenizer_->NextToken(); in ParseUseLibrary() local
4574 if (token->IsEOS()) in ParseUseLibrary()
4576 if (token->IsEOL()) in ParseUseLibrary()
4579 if (token->IsIdentifier()) { in ParseUseLibrary()
4580 std::string tok = token->AsString(); in ParseUseLibrary()
4596 auto token = tokenizer_->PeekNextToken(); in ParseTolerances() local
4597 while (!token->IsEOL() && !token->IsEOS()) { in ParseTolerances()
4598 if (!token->IsInteger() && !token->IsDouble()) in ParseTolerances()
4601 token = tokenizer_->NextToken(); in ParseTolerances()
4602 Result r = token->ConvertToDouble(); in ParseTolerances()
4606 double value = token->AsDouble(); in ParseTolerances()
4607 token = tokenizer_->PeekNextToken(); in ParseTolerances()
4608 if (token->IsIdentifier() && token->AsString() == "%") { in ParseTolerances()
4611 token = tokenizer_->PeekNextToken(); in ParseTolerances()
4621 auto token = tokenizer_->NextToken(); in ParseVirtualFile() local
4622 if (!token->IsIdentifier() && !token->IsString()) in ParseVirtualFile()
4625 auto path = token->AsString(); in ParseVirtualFile()
4633 token = tokenizer_->NextToken(); in ParseVirtualFile()
4634 if (!token->IsIdentifier() || token->AsString() != "END") in ParseVirtualFile()