Best JavaScript code snippet using devicefarmer-stf
app.ts
Source:app.ts
1/**2 * @Description filter function for Rehau3 */4let MainData = {5 "data": {6 "value": null,7 "type": "empty",8 "basicType": {9 "value": 4,10 "type": "int",11 "invalidateTime": 1586423428,12 "updateTime": 158642344913 },14 "genericType": {15 "value": 16,16 "type": "int",17 "invalidateTime": 1586423428,18 "updateTime": 158642344919 },20 "specificType": {21 "value": 6,22 "type": "int",23 "invalidateTime": 1586423428,24 "updateTime": 158642344925 },26 "infoProtocolSpecific": {27 "value": 13868033,28 "type": "int",29 "invalidateTime": 1586423428,30 "updateTime": 158642343031 },32 "deviceTypeString": {33 "value": "Binary Switch",34 "type": "string",35 "invalidateTime": 1586423428,36 "updateTime": 158642344937 },38 "isVirtual": {39 "value": false,40 "type": "bool",41 "invalidateTime": 1586423428,42 "updateTime": 158642342943 },44 "isListening": {45 "value": true,46 "type": "bool",47 "invalidateTime": 1586423428,48 "updateTime": 158642343049 },50 "isRouting": {51 "value": true,52 "type": "bool",53 "invalidateTime": 1586423428,54 "updateTime": 158642343055 },56 "isAwake": {57 "value": true,58 "type": "bool",59 "invalidateTime": 1586423428,60 "updateTime": 158642342961 },62 "optional": {63 "value": true,64 "type": "bool",65 "invalidateTime": 1586423428,66 "updateTime": 158642343067 },68 "isFailed": {69 "value": false,70 "type": "bool",71 "invalidateTime": 1586423428,72 "updateTime": 158642342973 },74 "sensor250": {75 "value": false,76 "type": "bool",77 "invalidateTime": 1586423428,78 "updateTime": 158642343079 },80 "sensor1000": {81 "value": false,82 "type": "bool",83 "invalidateTime": 1586423428,84 "updateTime": 158642343085 },86 "neighbours": {87 "value": [88 1,89 8,90 991 ],92 "type": "binary",93 "invalidateTime": 1586423428,94 "updateTime": 158643589195 },96 "manufacturerId": {97 "value": 1043,98 "type": "int",99 "invalidateTime": 1586423428,100 "updateTime": 1586423452101 },102 "vendorString": {103 "value": "",104 "type": "string",105 "invalidateTime": 1586423428,106 "updateTime": 1586423452107 },108 "manufacturerProductType": {109 "value": 1,110 "type": "int",111 "invalidateTime": 1586423428,112 "updateTime": 1586423452113 },114 "manufacturerProductId": {115 "value": 1,116 "type": "int",117 "invalidateTime": 1586423428,118 "updateTime": 1586423452119 },120 "ZWLib": {121 "value": 3,122 "type": "int",123 "invalidateTime": 1586423428,124 "updateTime": 1586424129125 },126 "ZWProtocolMajor": {127 "value": 5,128 "type": "int",129 "invalidateTime": 1586423428,130 "updateTime": 1586424129131 },132 "ZWProtocolMinor": {133 "value": 3,134 "type": "int",135 "invalidateTime": 1586423428,136 "updateTime": 1586424129137 },138 "SDK": {139 "value": "6.71.03",140 "type": "string",141 "invalidateTime": 1586423428,142 "updateTime": 1586424129143 },144 "applicationMajor": {145 "value": 1,146 "type": "int",147 "invalidateTime": 1586423428,148 "updateTime": 1586424129149 },150 "applicationMinor": {151 "value": 7,152 "type": "int",153 "invalidateTime": 1586423428,154 "updateTime": 1586424129155 },156 "nodeInfoFrame": {157 "value": [158 94,159 108,160 85,161 152,162 159163 ],164 "type": "binary",165 "invalidateTime": 1586423428,166 "updateTime": 1586423449167 },168 "ZDDXMLFile": {169 "value": "",170 "type": "string",171 "invalidateTime": 1586423428,172 "updateTime": 1586423429173 },174 "lastSend": {175 "value": 74369311,176 "type": "int",177 "invalidateTime": 1586423428,178 "updateTime": 1587021605179 },180 "lastNonceGet": {181 "value": 16855289,182 "type": "int",183 "invalidateTime": 1586423428,184 "updateTime": 1586423429185 },186 "lastReceived": {187 "value": 0,188 "type": "int",189 "invalidateTime": 1586423428,190 "updateTime": 1587021605191 },192 "failureCount": {193 "value": 0,194 "type": "int",195 "invalidateTime": 1586423428,196 "updateTime": 1586423429197 },198 "keepAwake": {199 "value": false,200 "type": "bool",201 "invalidateTime": 1586423428,202 "updateTime": 1586423457203 },204 "queueLength": {205 "value": 0,206 "type": "int",207 "invalidateTime": 1586423428,208 "updateTime": 1586423429209 },210 "givenName": {211 "value": "",212 "type": "string",213 "invalidateTime": 1586423428,214 "updateTime": 1586423429215 },216 "interviewDone": {217 "value": true,218 "type": "bool",219 "invalidateTime": 1586423428,220 "updateTime": 1586423457221 },222 "secureChannelEstablished": {223 "value": true,224 "type": "bool",225 "invalidateTime": 1586423428,226 "updateTime": 1586423449227 },228 "securityS2ExchangedKeys": {229 "value": 1,230 "type": "int",231 "invalidateTime": 1586423428,232 "updateTime": 1586423449233 },234 "invalidateTime": 1586423428,235 "updateTime": 1586423429236 },237 "instances": {238 "0": {239 "data": {240 "value": null,241 "type": "empty",242 "dynamic": {243 "value": false,244 "type": "bool",245 "invalidateTime": 1586423428,246 "updateTime": 1586423429247 },248 "genericType": {249 "value": 16,250 "type": "int",251 "invalidateTime": 1586423428,252 "updateTime": 1586423429253 },254 "specificType": {255 "value": 6,256 "type": "int",257 "invalidateTime": 1586423428,258 "updateTime": 1586423429259 },260 "nodeInfoFrame": {261 "value": null,262 "type": "empty",263 "invalidateTime": 1586423428,264 "updateTime": 1586423429265 },266 "invalidateTime": 1586423428,267 "updateTime": 1586423429268 },269 "commandClasses": {270 "32": {271 "name": "Basic",272 "data": {273 "value": null,274 "type": "empty",275 "supported": {276 "value": true,277 "type": "bool",278 "invalidateTime": 1586423453,279 "updateTime": 1586423429280 },281 "version": {282 "value": 1,283 "type": "int",284 "invalidateTime": 1586424126,285 "updateTime": 1586424127286 },287 "security": {288 "value": true,289 "type": "bool",290 "invalidateTime": 1586423428,291 "updateTime": 1586423449292 },293 "interviewDone": {294 "value": true,295 "type": "bool",296 "invalidateTime": 1586423428,297 "updateTime": 1586423453298 },299 "interviewCounter": {300 "value": 9,301 "type": "int",302 "invalidateTime": 1586423428,303 "updateTime": 1586423453304 },305 "level": {306 "value": 255,307 "type": "int",308 "invalidateTime": 1586423452,309 "updateTime": 1586423453310 },311 "invalidateTime": 1586423453,312 "updateTime": 1586423429313 }314 },315 "37": {316 "name": "SwitchBinary",317 "data": {318 "value": null,319 "type": "empty",320 "supported": {321 "value": true,322 "type": "bool",323 "invalidateTime": 1586423428,324 "updateTime": 1586423429325 },326 "version": {327 "value": 1,328 "type": "int",329 "invalidateTime": 1586424126,330 "updateTime": 1586424127331 },332 "security": {333 "value": true,334 "type": "bool",335 "invalidateTime": 1586423428,336 "updateTime": 1586423449337 },338 "interviewDone": {339 "value": true,340 "type": "bool",341 "invalidateTime": 1586423428,342 "updateTime": 1586423453343 },344 "interviewCounter": {345 "value": 9,346 "type": "int",347 "invalidateTime": 1586423428,348 "updateTime": 1586423453349 },350 "level": {351 "value": true,352 "type": "bool",353 "invalidateTime": 1586423452,354 "updateTime": 1587000316355 },356 "invalidateTime": 1586423428,357 "updateTime": 1586423429358 }359 },360 "49": {361 "name": "SensorMultilevel",362 "data": {363 "value": null,364 "type": "empty",365 "supported": {366 "value": true,367 "type": "bool",368 "invalidateTime": 1586423428,369 "updateTime": 1586423429370 },371 "version": {372 "value": 9,373 "type": "int",374 "invalidateTime": 1586424126,375 "updateTime": 1586424127376 },377 "security": {378 "value": true,379 "type": "bool",380 "invalidateTime": 1586423428,381 "updateTime": 1586423449382 },383 "interviewDone": {384 "value": true,385 "type": "bool",386 "invalidateTime": 1586423428,387 "updateTime": 1586423455388 },389 "interviewCounter": {390 "value": 9,391 "type": "int",392 "invalidateTime": 1586423428,393 "updateTime": 1586423453394 },395 "typemask": {396 "value": [397 0,398 0,399 64,400 0,401 0,402 0,403 128,404 1405 ],406 "type": "binary",407 "invalidateTime": 1586423428,408 "updateTime": 1586423453409 },410 "23": {411 "value": null,412 "type": "empty",413 "sensorTypeString": {414 "value": "Water temperature",415 "type": "string",416 "invalidateTime": 1586423453,417 "updateTime": 1586423454418 },419 "val": {420 "value": 21.8,421 "type": "float",422 "invalidateTime": 1586423453,423 "updateTime": 1587019934424 },425 "deviceScale": {426 "value": 0,427 "type": "int",428 "invalidateTime": 1586423453,429 "updateTime": 1587019934430 },431 "scale": {432 "value": 0,433 "type": "int",434 "invalidateTime": 1586423453,435 "updateTime": 1586423454436 },437 "scaleString": {438 "value": "°C",439 "type": "string",440 "invalidateTime": 1586423453,441 "updateTime": 1587019934442 },443 "invalidateTime": 1586960775,444 "updateTime": 1587019934445 },446 "56": {447 "value": null,448 "type": "empty",449 "sensorTypeString": {450 "value": "",451 "type": "string",452 "invalidateTime": 1586423453,453 "updateTime": 1586423454454 },455 "val": {456 "value": 0,457 "type": "float",458 "invalidateTime": 1586423453,459 "updateTime": 1586960773460 },461 "deviceScale": {462 "value": 0,463 "type": "int",464 "invalidateTime": 1586423453,465 "updateTime": 1586960773466 },467 "scale": {468 "value": 0,469 "type": "int",470 "invalidateTime": 1586423453,471 "updateTime": 1586960773472 },473 "scaleString": {474 "value": "",475 "type": "string",476 "invalidateTime": 1586423453,477 "updateTime": 1586960773478 },479 "invalidateTime": 1586960772,480 "updateTime": 1586960773481 },482 "57": {483 "value": null,484 "type": "empty",485 "sensorTypeString": {486 "value": "",487 "type": "string",488 "invalidateTime": 1586423453,489 "updateTime": 1586423454490 },491 "val": {492 "value": 1.5,493 "type": "float",494 "invalidateTime": 1586423453,495 "updateTime": 1587021605496 },497 "deviceScale": {498 "value": 0,499 "type": "int",500 "invalidateTime": 1586423453,501 "updateTime": 1587021605502 },503 "scale": {504 "value": 0,505 "type": "int",506 "invalidateTime": 1586423453,507 "updateTime": 1587021605508 },509 "scaleString": {510 "value": "",511 "type": "string",512 "invalidateTime": 1586423453,513 "updateTime": 1587021605514 },515 "invalidateTime": 1586435557,516 "updateTime": 1587021605517 },518 "invalidateTime": 1586423428,519 "updateTime": 1586423429520 }521 },522 "50": {523 "name": "Meter",524 "data": {525 "value": null,526 "type": "empty",527 "supported": {528 "value": true,529 "type": "bool",530 "invalidateTime": 1586423428,531 "updateTime": 1586423429532 },533 "version": {534 "value": 4,535 "type": "int",536 "invalidateTime": 1586424126,537 "updateTime": 1586424127538 },539 "security": {540 "value": true,541 "type": "bool",542 "invalidateTime": 1586423428,543 "updateTime": 1586423449544 },545 "interviewDone": {546 "value": true,547 "type": "bool",548 "invalidateTime": 1586423428,549 "updateTime": 1586423454550 },551 "interviewCounter": {552 "value": 9,553 "type": "int",554 "invalidateTime": 1586423428,555 "updateTime": 1586423453556 },557 "resettable": {558 "value": false,559 "type": "bool",560 "invalidateTime": 1586423428,561 "updateTime": 1586423453562 },563 "scalemask": {564 "value": 1,565 "type": "int",566 "invalidateTime": 1586423428,567 "updateTime": 1586423453568 },569 "0": {570 "value": null,571 "type": "empty",572 "sensorType": {573 "value": 3,574 "type": "int",575 "invalidateTime": 1586423452,576 "updateTime": 1586423453577 },578 "sensorTypeString": {579 "value": "Water",580 "type": "string",581 "invalidateTime": 1586423452,582 "updateTime": 1586423453583 },584 "val": {585 "value": 0.8813,586 "type": "float",587 "invalidateTime": 1586423452,588 "updateTime": 1587021010589 },590 "scale": {591 "value": 0,592 "type": "int",593 "invalidateTime": 1586423452,594 "updateTime": 1586423453595 },596 "scaleString": {597 "value": "Cubic meter",598 "type": "string",599 "invalidateTime": 1586423452,600 "updateTime": 1586423453601 },602 "ratetype": {603 "value": 1,604 "type": "int",605 "invalidateTime": 1586423452,606 "updateTime": 1587021010607 },608 "delta": {609 "value": 0,610 "type": "int",611 "invalidateTime": 1586423452,612 "updateTime": 1587021010613 },614 "previous": {615 "value": null,616 "type": "empty",617 "invalidateTime": 1586423452,618 "updateTime": 1586423453619 },620 "invalidateTime": 1586960772,621 "updateTime": 1587021010622 },623 "invalidateTime": 1586423428,624 "updateTime": 1586423429625 }626 },627 "85": {628 "name": "TransportService",629 "data": {630 "value": null,631 "type": "empty",632 "supported": {633 "value": true,634 "type": "bool",635 "invalidateTime": 1586423428,636 "updateTime": 1586423429637 },638 "version": {639 "value": 2,640 "type": "int",641 "invalidateTime": 1586424126,642 "updateTime": 1586424127643 },644 "security": {645 "value": false,646 "type": "bool",647 "invalidateTime": 1586423428,648 "updateTime": 1586423429649 },650 "interviewDone": {651 "value": true,652 "type": "bool",653 "invalidateTime": 1586423428,654 "updateTime": 1586423453655 },656 "interviewCounter": {657 "value": 9,658 "type": "int",659 "invalidateTime": 1586423428,660 "updateTime": 1586423453661 },662 "invalidateTime": 1586423428,663 "updateTime": 1586423429664 }665 },666 "89": {667 "name": "AssociationGroupInformation",668 "data": {669 "value": null,670 "type": "empty",671 "supported": {672 "value": true,673 "type": "bool",674 "invalidateTime": 1586423428,675 "updateTime": 1586423429676 },677 "version": {678 "value": 2,679 "type": "int",680 "invalidateTime": 1586424126,681 "updateTime": 1586424127682 },683 "security": {684 "value": true,685 "type": "bool",686 "invalidateTime": 1586423428,687 "updateTime": 1586423449688 },689 "interviewDone": {690 "value": true,691 "type": "bool",692 "invalidateTime": 1586423428,693 "updateTime": 1586423456694 },695 "interviewCounter": {696 "value": 8,697 "type": "int",698 "invalidateTime": 1586423428,699 "updateTime": 1586423455700 },701 "dynamic": {702 "value": false,703 "type": "bool",704 "invalidateTime": 1586423428,705 "updateTime": 1586423456706 },707 "1": {708 "value": null,709 "type": "empty",710 "groupName": {711 "value": "Lifeline",712 "type": "string",713 "invalidateTime": 1586423455,714 "updateTime": 1586423456715 },716 "mode": {717 "value": 0,718 "type": "int",719 "invalidateTime": 1586423455,720 "updateTime": 1586423456721 },722 "profile": {723 "value": 1,724 "type": "int",725 "invalidateTime": 1586423455,726 "updateTime": 1586423456727 },728 "eventCode": {729 "value": 0,730 "type": "int",731 "invalidateTime": 1586423455,732 "updateTime": 1586423456733 },734 "commands": {735 "value": null,736 "type": "empty",737 "37": {738 "value": [739 3740 ],741 "type": "binary",742 "invalidateTime": 1586423455,743 "updateTime": 1586423456744 },745 "113": {746 "value": [747 5748 ],749 "type": "binary",750 "invalidateTime": 1586423455,751 "updateTime": 1586423456752 },753 "50": {754 "value": [755 2756 ],757 "type": "binary",758 "invalidateTime": 1586423455,759 "updateTime": 1586423456760 },761 "49": {762 "value": [763 5764 ],765 "type": "binary",766 "invalidateTime": 1586423455,767 "updateTime": 1586423456768 },769 "90": {770 "value": [771 1772 ],773 "type": "binary",774 "invalidateTime": 1586423455,775 "updateTime": 1586423456776 },777 "129": {778 "value": [779 6780 ],781 "type": "binary",782 "invalidateTime": 1586423455,783 "updateTime": 1586423456784 },785 "128": {786 "value": [787 3788 ],789 "type": "binary",790 "invalidateTime": 1586423455,791 "updateTime": 1586423456792 },793 "invalidateTime": 1586423455,794 "updateTime": 1586423456795 },796 "invalidateTime": 1586423455,797 "updateTime": 1586423456798 },799 "2": {800 "value": null,801 "type": "empty",802 "groupName": {803 "value": "Valve state",804 "type": "string",805 "invalidateTime": 1586423455,806 "updateTime": 1586423456807 },808 "mode": {809 "value": 0,810 "type": "int",811 "invalidateTime": 1586423455,812 "updateTime": 1586423456813 },814 "profile": {815 "value": 8193,816 "type": "int",817 "invalidateTime": 1586423455,818 "updateTime": 1586423456819 },820 "eventCode": {821 "value": 0,822 "type": "int",823 "invalidateTime": 1586423455,824 "updateTime": 1586423456825 },826 "commands": {827 "value": null,828 "type": "empty",829 "32": {830 "value": [831 3832 ],833 "type": "binary",834 "invalidateTime": 1586423455,835 "updateTime": 1586423456836 },837 "invalidateTime": 1586423455,838 "updateTime": 1586423456839 },840 "invalidateTime": 1586423455,841 "updateTime": 1586423456842 },843 "3": {844 "value": null,845 "type": "empty",846 "groupName": {847 "value": "Leak notification",848 "type": "string",849 "invalidateTime": 1586423455,850 "updateTime": 1586423456851 },852 "mode": {853 "value": 0,854 "type": "int",855 "invalidateTime": 1586423455,856 "updateTime": 1586423456857 },858 "profile": {859 "value": 28933,860 "type": "int",861 "invalidateTime": 1586423455,862 "updateTime": 1586423456863 },864 "eventCode": {865 "value": 0,866 "type": "int",867 "invalidateTime": 1586423455,868 "updateTime": 1586423456869 },870 "commands": {871 "value": null,872 "type": "empty",873 "113": {874 "value": [875 5876 ],877 "type": "binary",878 "invalidateTime": 1586423455,879 "updateTime": 1586423456880 },881 "invalidateTime": 1586423455,882 "updateTime": 1586423456883 },884 "invalidateTime": 1586423455,885 "updateTime": 1586423456886 },887 "invalidateTime": 1586423428,888 "updateTime": 1586423429889 }890 },891 "90": {892 "name": "DeviceResetLocally",893 "data": {894 "value": null,895 "type": "empty",896 "supported": {897 "value": true,898 "type": "bool",899 "invalidateTime": 1586423428,900 "updateTime": 1586423429901 },902 "version": {903 "value": 1,904 "type": "int",905 "invalidateTime": 1586424127,906 "updateTime": 1586424128907 },908 "security": {909 "value": true,910 "type": "bool",911 "invalidateTime": 1586423428,912 "updateTime": 1586423449913 },914 "interviewDone": {915 "value": true,916 "type": "bool",917 "invalidateTime": 1586423428,918 "updateTime": 1586423453919 },920 "interviewCounter": {921 "value": 9,922 "type": "int",923 "invalidateTime": 1586423428,924 "updateTime": 1586423453925 },926 "reset": {927 "value": false,928 "type": "bool",929 "invalidateTime": 1586423428,930 "updateTime": 1586423429931 },932 "invalidateTime": 1586423428,933 "updateTime": 1586423429934 }935 },936 "94": {937 "name": "ZWavePlusInfo",938 "data": {939 "value": null,940 "type": "empty",941 "supported": {942 "value": true,943 "type": "bool",944 "invalidateTime": 1586423428,945 "updateTime": 1586423429946 },947 "version": {948 "value": 2,949 "type": "int",950 "invalidateTime": 1586424127,951 "updateTime": 1586424128952 },953 "security": {954 "value": false,955 "type": "bool",956 "invalidateTime": 1586423428,957 "updateTime": 1586423429958 },959 "interviewDone": {960 "value": true,961 "type": "bool",962 "invalidateTime": 1586423428,963 "updateTime": 1586423453964 },965 "interviewCounter": {966 "value": 9,967 "type": "int",968 "invalidateTime": 1586423428,969 "updateTime": 1586423453970 },971 "plusVersion": {972 "value": 1,973 "type": "int",974 "invalidateTime": 1586423452,975 "updateTime": 1586423453976 },977 "roleType": {978 "value": 5,979 "type": "int",980 "invalidateTime": 1586423452,981 "updateTime": 1586423453982 },983 "nodeType": {984 "value": 0,985 "type": "int",986 "invalidateTime": 1586423452,987 "updateTime": 1586423453988 },989 "installerIcon": {990 "value": 5376,991 "type": "int",992 "invalidateTime": 1586423452,993 "updateTime": 1586423453994 },995 "userIcon": {996 "value": 5376,997 "type": "int",998 "invalidateTime": 1586423452,999 "updateTime": 15864234531000 },1001 "roleTypeString": {1002 "value": "Always On Slave",1003 "type": "string",1004 "invalidateTime": 1586423452,1005 "updateTime": 15864234531006 },1007 "invalidateTime": 1586423428,1008 "updateTime": 15864234291009 }1010 },1011 "108": {1012 "name": "Supervision",1013 "data": {1014 "value": null,1015 "type": "empty",1016 "supported": {1017 "value": true,1018 "type": "bool",1019 "invalidateTime": 1586423428,1020 "updateTime": 15864234291021 },1022 "version": {1023 "value": 1,1024 "type": "int",1025 "invalidateTime": 1586424127,1026 "updateTime": 15864241281027 },1028 "security": {1029 "value": false,1030 "type": "bool",1031 "invalidateTime": 1586423428,1032 "updateTime": 15864234291033 },1034 "interviewDone": {1035 "value": true,1036 "type": "bool",1037 "invalidateTime": 1586423428,1038 "updateTime": 15864234531039 },1040 "interviewCounter": {1041 "value": 9,1042 "type": "int",1043 "invalidateTime": 1586423428,1044 "updateTime": 15864234531045 },1046 "lastSession": {1047 "value": 27,1048 "type": "int",1049 "invalidateTime": 1586423428,1050 "updateTime": 15869614141051 },1052 "disabled": {1053 "value": false,1054 "type": "bool",1055 "invalidateTime": 1586423428,1056 "updateTime": 15864234291057 },1058 "1": {1059 "value": null,1060 "type": "empty",1061 "status": {1062 "value": 255,1063 "type": "int",1064 "invalidateTime": 1586423452,1065 "updateTime": 15864234541066 },1067 "duration": {1068 "value": 0,1069 "type": "int",1070 "invalidateTime": 1586423452,1071 "updateTime": 15864234541072 },1073 "moreStatusUpdates": {1074 "value": false,1075 "type": "bool",1076 "invalidateTime": 1586423452,1077 "updateTime": 15864234541078 },1079 "lastEvent": {1080 "value": 16858669,1081 "type": "int",1082 "invalidateTime": 1586423452,1083 "updateTime": 15864234541084 },1085 "invalidateTime": 1586423452,1086 "updateTime": 15864234541087 },1088 "2": {1089 "value": null,1090 "type": "empty",1091 "status": {1092 "value": 255,1093 "type": "int",1094 "invalidateTime": 1586423456,1095 "updateTime": 15864234571096 },1097 "duration": {1098 "value": 0,1099 "type": "int",1100 "invalidateTime": 1586423456,1101 "updateTime": 15864234571102 },1103 "moreStatusUpdates": {1104 "value": false,1105 "type": "bool",1106 "invalidateTime": 1586423456,1107 "updateTime": 15864234571108 },1109 "lastEvent": {1110 "value": 16858973,1111 "type": "int",1112 "invalidateTime": 1586423456,1113 "updateTime": 15864234571114 },1115 "invalidateTime": 1586423456,1116 "updateTime": 15864234571117 },1118 "3": {1119 "value": null,1120 "type": "empty",1121 "status": {1122 "value": 255,1123 "type": "int",1124 "invalidateTime": 1586423460,1125 "updateTime": 15864234701126 },1127 "duration": {1128 "value": 0,1129 "type": "int",1130 "invalidateTime": 1586423460,1131 "updateTime": 15864234701132 },1133 "moreStatusUpdates": {1134 "value": false,1135 "type": "bool",1136 "invalidateTime": 1586423460,1137 "updateTime": 15864234701138 },1139 "lastEvent": {1140 "value": 16860089,1141 "type": "int",1142 "invalidateTime": 1586423460,1143 "updateTime": 15864234701144 },1145 "invalidateTime": 1586423460,1146 "updateTime": 15864234701147 },1148 "4": {1149 "value": null,1150 "type": "empty",1151 "status": {1152 "value": 255,1153 "type": "int",1154 "invalidateTime": 1586435584,1155 "updateTime": 15864355891156 },1157 "duration": {1158 "value": 0,1159 "type": "int",1160 "invalidateTime": 1586435584,1161 "updateTime": 15864355891162 },1163 "moreStatusUpdates": {1164 "value": false,1165 "type": "bool",1166 "invalidateTime": 1586435584,1167 "updateTime": 15864355891168 },1169 "lastEvent": {1170 "value": 18012070,1171 "type": "int",1172 "invalidateTime": 1586435584,1173 "updateTime": 15864355891174 },1175 "invalidateTime": 1586435584,1176 "updateTime": 15864355891177 },1178 "5": {1179 "value": null,1180 "type": "empty",1181 "status": {1182 "value": 255,1183 "type": "int",1184 "invalidateTime": 1586435586,1185 "updateTime": 15864355951186 },1187 "duration": {1188 "value": 0,1189 "type": "int",1190 "invalidateTime": 1586435586,1191 "updateTime": 15864355951192 },1193 "moreStatusUpdates": {1194 "value": false,1195 "type": "bool",1196 "invalidateTime": 1586435586,1197 "updateTime": 15864355951198 },1199 "lastEvent": {1200 "value": 18012654,1201 "type": "int",1202 "invalidateTime": 1586435586,1203 "updateTime": 15864355951204 },1205 "invalidateTime": 1586435586,1206 "updateTime": 15864355951207 },1208 "6": {1209 "value": null,1210 "type": "empty",1211 "status": {1212 "value": 2,1213 "type": "int",1214 "invalidateTime": 1586435735,1215 "updateTime": 15864357361216 },1217 "duration": {1218 "value": 0,1219 "type": "int",1220 "invalidateTime": 1586435735,1221 "updateTime": 15864357361222 },1223 "moreStatusUpdates": {1224 "value": false,1225 "type": "bool",1226 "invalidateTime": 1586435735,1227 "updateTime": 15864357361228 },1229 "lastEvent": {1230 "value": 18025759,1231 "type": "int",1232 "invalidateTime": 1586435735,1233 "updateTime": 15864357361234 },1235 "invalidateTime": 1586435735,1236 "updateTime": 15864357361237 },1238 "7": {1239 "value": null,1240 "type": "empty",1241 "status": {1242 "value": 2,1243 "type": "int",1244 "invalidateTime": 1586435736,1245 "updateTime": 15864357381246 },1247 "duration": {1248 "value": 0,1249 "type": "int",1250 "invalidateTime": 1586435736,1251 "updateTime": 15864357381252 },1253 "moreStatusUpdates": {1254 "value": false,1255 "type": "bool",1256 "invalidateTime": 1586435736,1257 "updateTime": 15864357381258 },1259 "lastEvent": {1260 "value": 18025993,1261 "type": "int",1262 "invalidateTime": 1586435736,1263 "updateTime": 15864357381264 },1265 "invalidateTime": 1586435736,1266 "updateTime": 15864357381267 },1268 "8": {1269 "value": null,1270 "type": "empty",1271 "status": {1272 "value": 2,1273 "type": "int",1274 "invalidateTime": 1586435842,1275 "updateTime": 15864358431276 },1277 "duration": {1278 "value": 0,1279 "type": "int",1280 "invalidateTime": 1586435842,1281 "updateTime": 15864358431282 },1283 "moreStatusUpdates": {1284 "value": false,1285 "type": "bool",1286 "invalidateTime": 1586435842,1287 "updateTime": 15864358431288 },1289 "lastEvent": {1290 "value": 18035759,1291 "type": "int",1292 "invalidateTime": 1586435842,1293 "updateTime": 15864358431294 },1295 "invalidateTime": 1586435842,1296 "updateTime": 15864358431297 },1298 "9": {1299 "value": null,1300 "type": "empty",1301 "status": {1302 "value": 2,1303 "type": "int",1304 "invalidateTime": 1586435843,1305 "updateTime": 15864358451306 },1307 "duration": {1308 "value": 0,1309 "type": "int",1310 "invalidateTime": 1586435843,1311 "updateTime": 15864358451312 },1313 "moreStatusUpdates": {1314 "value": false,1315 "type": "bool",1316 "invalidateTime": 1586435843,1317 "updateTime": 15864358451318 },1319 "lastEvent": {1320 "value": 18035989,1321 "type": "int",1322 "invalidateTime": 1586435843,1323 "updateTime": 15864358451324 },1325 "invalidateTime": 1586435843,1326 "updateTime": 15864358451327 },1328 "10": {1329 "value": null,1330 "type": "empty",1331 "status": {1332 "value": 2,1333 "type": "int",1334 "invalidateTime": 1586435960,1335 "updateTime": 15864359611336 },1337 "duration": {1338 "value": 0,1339 "type": "int",1340 "invalidateTime": 1586435960,1341 "updateTime": 15864359611342 },1343 "moreStatusUpdates": {1344 "value": false,1345 "type": "bool",1346 "invalidateTime": 1586435960,1347 "updateTime": 15864359611348 },1349 "lastEvent": {1350 "value": 18046617,1351 "type": "int",1352 "invalidateTime": 1586435960,1353 "updateTime": 15864359611354 },1355 "invalidateTime": 1586435960,1356 "updateTime": 15864359611357 },1358 "11": {1359 "value": null,1360 "type": "empty",1361 "status": {1362 "value": 2,1363 "type": "int",1364 "invalidateTime": 1586435961,1365 "updateTime": 15864359631366 },1367 "duration": {1368 "value": 0,1369 "type": "int",1370 "invalidateTime": 1586435961,1371 "updateTime": 15864359631372 },1373 "moreStatusUpdates": {1374 "value": false,1375 "type": "bool",1376 "invalidateTime": 1586435961,1377 "updateTime": 15864359631378 },1379 "lastEvent": {1380 "value": 18046846,1381 "type": "int",1382 "invalidateTime": 1586435961,1383 "updateTime": 15864359631384 },1385 "invalidateTime": 1586435961,1386 "updateTime": 15864359631387 },1388 "12": {1389 "value": null,1390 "type": "empty",1391 "status": {1392 "value": 2,1393 "type": "int",1394 "invalidateTime": 1586435963,1395 "updateTime": 15864359661396 },1397 "duration": {1398 "value": 0,1399 "type": "int",1400 "invalidateTime": 1586435963,1401 "updateTime": 15864359661402 },1403 "moreStatusUpdates": {1404 "value": false,1405 "type": "bool",1406 "invalidateTime": 1586435963,1407 "updateTime": 15864359661408 },1409 "lastEvent": {1410 "value": 18047077,1411 "type": "int",1412 "invalidateTime": 1586435963,1413 "updateTime": 15864359661414 },1415 "invalidateTime": 1586435963,1416 "updateTime": 15864359661417 },1418 "13": {1419 "value": null,1420 "type": "empty",1421 "status": {1422 "value": 2,1423 "type": "int",1424 "invalidateTime": 1586435965,1425 "updateTime": 15864359681426 },1427 "duration": {1428 "value": 0,1429 "type": "int",1430 "invalidateTime": 1586435965,1431 "updateTime": 15864359681432 },1433 "moreStatusUpdates": {1434 "value": false,1435 "type": "bool",1436 "invalidateTime": 1586435965,1437 "updateTime": 15864359681438 },1439 "lastEvent": {1440 "value": 18047309,1441 "type": "int",1442 "invalidateTime": 1586435965,1443 "updateTime": 15864359681444 },1445 "invalidateTime": 1586435965,1446 "updateTime": 15864359681447 },1448 "14": {1449 "value": null,1450 "type": "empty",1451 "status": {1452 "value": 2,1453 "type": "int",1454 "invalidateTime": 1586435976,1455 "updateTime": 15864359771456 },1457 "duration": {1458 "value": 0,1459 "type": "int",1460 "invalidateTime": 1586435976,1461 "updateTime": 15864359771462 },1463 "moreStatusUpdates": {1464 "value": false,1465 "type": "bool",1466 "invalidateTime": 1586435976,1467 "updateTime": 15864359771468 },1469 "lastEvent": {1470 "value": 18048112,1471 "type": "int",1472 "invalidateTime": 1586435976,1473 "updateTime": 15864359771474 },1475 "invalidateTime": 1586435976,1476 "updateTime": 15864359771477 },1478 "15": {1479 "value": null,1480 "type": "empty",1481 "status": {1482 "value": 2,1483 "type": "int",1484 "invalidateTime": 1586435976,1485 "updateTime": 15864359791486 },1487 "duration": {1488 "value": 0,1489 "type": "int",1490 "invalidateTime": 1586435976,1491 "updateTime": 15864359791492 },1493 "moreStatusUpdates": {1494 "value": false,1495 "type": "bool",1496 "invalidateTime": 1586435976,1497 "updateTime": 15864359791498 },1499 "lastEvent": {1500 "value": 18048350,1501 "type": "int",1502 "invalidateTime": 1586435976,1503 "updateTime": 15864359791504 },1505 "invalidateTime": 1586435976,1506 "updateTime": 15864359791507 },1508 "16": {1509 "value": null,1510 "type": "empty",1511 "status": {1512 "value": 2,1513 "type": "int",1514 "invalidateTime": 1586436002,1515 "updateTime": 15864360031516 },1517 "duration": {1518 "value": 0,1519 "type": "int",1520 "invalidateTime": 1586436002,1521 "updateTime": 15864360031522 },1523 "moreStatusUpdates": {1524 "value": false,1525 "type": "bool",1526 "invalidateTime": 1586436002,1527 "updateTime": 15864360031528 },1529 "lastEvent": {1530 "value": 18050542,1531 "type": "int",1532 "invalidateTime": 1586436002,1533 "updateTime": 15864360031534 },1535 "invalidateTime": 1586436002,1536 "updateTime": 15864360031537 },1538 "17": {1539 "value": null,1540 "type": "empty",1541 "status": {1542 "value": 2,1543 "type": "int",1544 "invalidateTime": 1586436004,1545 "updateTime": 15864360061546 },1547 "duration": {1548 "value": 0,1549 "type": "int",1550 "invalidateTime": 1586436004,1551 "updateTime": 15864360061552 },1553 "moreStatusUpdates": {1554 "value": false,1555 "type": "bool",1556 "invalidateTime": 1586436004,1557 "updateTime": 15864360061558 },1559 "lastEvent": {1560 "value": 18050784,1561 "type": "int",1562 "invalidateTime": 1586436004,1563 "updateTime": 15864360061564 },1565 "invalidateTime": 1586436004,1566 "updateTime": 15864360061567 },1568 "18": {1569 "value": null,1570 "type": "empty",1571 "status": {1572 "value": 2,1573 "type": "int",1574 "invalidateTime": 1586436005,1575 "updateTime": 15864360081576 },1577 "duration": {1578 "value": 0,1579 "type": "int",1580 "invalidateTime": 1586436005,1581 "updateTime": 15864360081582 },1583 "moreStatusUpdates": {1584 "value": false,1585 "type": "bool",1586 "invalidateTime": 1586436005,1587 "updateTime": 15864360081588 },1589 "lastEvent": {1590 "value": 18051036,1591 "type": "int",1592 "invalidateTime": 1586436005,1593 "updateTime": 15864360081594 },1595 "invalidateTime": 1586436005,1596 "updateTime": 15864360081597 },1598 "19": {1599 "value": null,1600 "type": "empty",1601 "status": {1602 "value": 2,1603 "type": "int",1604 "invalidateTime": 1586863805,1605 "updateTime": 15868638061606 },1607 "duration": {1608 "value": 0,1609 "type": "int",1610 "invalidateTime": 1586863805,1611 "updateTime": 15868638061612 },1613 "moreStatusUpdates": {1614 "value": false,1615 "type": "bool",1616 "invalidateTime": 1586863805,1617 "updateTime": 15868638061618 },1619 "lastEvent": {1620 "value": 59151267,1621 "type": "int",1622 "invalidateTime": 1586863805,1623 "updateTime": 15868638061624 },1625 "invalidateTime": 1586863805,1626 "updateTime": 15868638061627 },1628 "20": {1629 "value": null,1630 "type": "empty",1631 "status": {1632 "value": 2,1633 "type": "int",1634 "invalidateTime": 1586863808,1635 "updateTime": 15868638101636 },1637 "duration": {1638 "value": 0,1639 "type": "int",1640 "invalidateTime": 1586863808,1641 "updateTime": 15868638101642 },1643 "moreStatusUpdates": {1644 "value": false,1645 "type": "bool",1646 "invalidateTime": 1586863808,1647 "updateTime": 15868638101648 },1649 "lastEvent": {1650 "value": 59151577,1651 "type": "int",1652 "invalidateTime": 1586863808,1653 "updateTime": 15868638101654 },1655 "invalidateTime": 1586863808,1656 "updateTime": 15868638101657 },1658 "21": {1659 "value": null,1660 "type": "empty",1661 "status": {1662 "value": 2,1663 "type": "int",1664 "invalidateTime": 1586961256,1665 "updateTime": 15869612571666 },1667 "duration": {1668 "value": 0,1669 "type": "int",1670 "invalidateTime": 1586961256,1671 "updateTime": 15869612571672 },1673 "moreStatusUpdates": {1674 "value": false,1675 "type": "bool",1676 "invalidateTime": 1586961256,1677 "updateTime": 15869612571678 },1679 "lastEvent": {1680 "value": 68562337,1681 "type": "int",1682 "invalidateTime": 1586961256,1683 "updateTime": 15869612571684 },1685 "invalidateTime": 1586961256,1686 "updateTime": 15869612571687 },1688 "22": {1689 "value": null,1690 "type": "empty",1691 "status": {1692 "value": 2,1693 "type": "int",1694 "invalidateTime": 1586961257,1695 "updateTime": 15869612601696 },1697 "duration": {1698 "value": 0,1699 "type": "int",1700 "invalidateTime": 1586961257,1701 "updateTime": 15869612601702 },1703 "moreStatusUpdates": {1704 "value": false,1705 "type": "bool",1706 "invalidateTime": 1586961257,1707 "updateTime": 15869612601708 },1709 "lastEvent": {1710 "value": 68562559,1711 "type": "int",1712 "invalidateTime": 1586961257,1713 "updateTime": 15869612601714 },1715 "invalidateTime": 1586961257,1716 "updateTime": 15869612601717 },1718 "23": {1719 "value": null,1720 "type": "empty",1721 "status": {1722 "value": 2,1723 "type": "int",1724 "invalidateTime": 1586961272,1725 "updateTime": 15869612731726 },1727 "duration": {1728 "value": 0,1729 "type": "int",1730 "invalidateTime": 1586961272,1731 "updateTime": 15869612731732 },1733 "moreStatusUpdates": {1734 "value": false,1735 "type": "bool",1736 "invalidateTime": 1586961272,1737 "updateTime": 15869612731738 },1739 "lastEvent": {1740 "value": 68563843,1741 "type": "int",1742 "invalidateTime": 1586961272,1743 "updateTime": 15869612731744 },1745 "invalidateTime": 1586961272,1746 "updateTime": 15869612731747 },1748 "24": {1749 "value": null,1750 "type": "empty",1751 "status": {1752 "value": 2,1753 "type": "int",1754 "invalidateTime": 1586961364,1755 "updateTime": 15869613651756 },1757 "duration": {1758 "value": 0,1759 "type": "int",1760 "invalidateTime": 1586961364,1761 "updateTime": 15869613651762 },1763 "moreStatusUpdates": {1764 "value": false,1765 "type": "bool",1766 "invalidateTime": 1586961364,1767 "updateTime": 15869613651768 },1769 "lastEvent": {1770 "value": 68572609,1771 "type": "int",1772 "invalidateTime": 1586961364,1773 "updateTime": 15869613651774 },1775 "invalidateTime": 1586961364,1776 "updateTime": 15869613651777 },1778 "25": {1779 "value": null,1780 "type": "empty",1781 "status": {1782 "value": 2,1783 "type": "int",1784 "invalidateTime": 1586961368,1785 "updateTime": 15869613691786 },1787 "duration": {1788 "value": 0,1789 "type": "int",1790 "invalidateTime": 1586961368,1791 "updateTime": 15869613691792 },1793 "moreStatusUpdates": {1794 "value": false,1795 "type": "bool",1796 "invalidateTime": 1586961368,1797 "updateTime": 15869613691798 },1799 "lastEvent": {1800 "value": 68573004,1801 "type": "int",1802 "invalidateTime": 1586961368,1803 "updateTime": 15869613691804 },1805 "invalidateTime": 1586961368,1806 "updateTime": 15869613691807 },1808 "26": {1809 "value": null,1810 "type": "empty",1811 "status": {1812 "value": 2,1813 "type": "int",1814 "invalidateTime": 1586961389,1815 "updateTime": 15869613901816 },1817 "duration": {1818 "value": 0,1819 "type": "int",1820 "invalidateTime": 1586961389,1821 "updateTime": 15869613901822 },1823 "moreStatusUpdates": {1824 "value": false,1825 "type": "bool",1826 "invalidateTime": 1586961389,1827 "updateTime": 15869613901828 },1829 "lastEvent": {1830 "value": 68574982,1831 "type": "int",1832 "invalidateTime": 1586961389,1833 "updateTime": 15869613901834 },1835 "invalidateTime": 1586961389,1836 "updateTime": 15869613901837 },1838 "27": {1839 "value": null,1840 "type": "empty",1841 "status": {1842 "value": 2,1843 "type": "int",1844 "invalidateTime": 1586961413,1845 "updateTime": 15869614141846 },1847 "duration": {1848 "value": 0,1849 "type": "int",1850 "invalidateTime": 1586961413,1851 "updateTime": 15869614141852 },1853 "moreStatusUpdates": {1854 "value": false,1855 "type": "bool",1856 "invalidateTime": 1586961413,1857 "updateTime": 15869614141858 },1859 "lastEvent": {1860 "value": 68577325,1861 "type": "int",1862 "invalidateTime": 1586961413,1863 "updateTime": 15869614141864 },1865 "invalidateTime": 1586961413,1866 "updateTime": 15869614141867 },1868 "invalidateTime": 1586423428,1869 "updateTime": 15864234291870 }1871 },1872 "112": {1873 "name": "Configuration",1874 "data": {1875 "value": null,1876 "type": "empty",1877 "supported": {1878 "value": true,1879 "type": "bool",1880 "invalidateTime": 1586423428,1881 "updateTime": 15864234291882 },1883 "version": {1884 "value": 1,1885 "type": "int",1886 "invalidateTime": 1586424127,1887 "updateTime": 15864241281888 },1889 "security": {1890 "value": true,1891 "type": "bool",1892 "invalidateTime": 1586423428,1893 "updateTime": 15864234491894 },1895 "interviewDone": {1896 "value": true,1897 "type": "bool",1898 "invalidateTime": 1586423428,1899 "updateTime": 15864234531900 },1901 "interviewCounter": {1902 "value": 9,1903 "type": "int",1904 "invalidateTime": 1586423428,1905 "updateTime": 15864234531906 },1907 "1": {1908 "value": null,1909 "type": "empty",1910 "val": {1911 "value": 2,1912 "type": "int",1913 "invalidateTime": 1586781062,1914 "updateTime": 15869614141915 },1916 "size": {1917 "value": 1,1918 "type": "int",1919 "invalidateTime": 1586781062,1920 "updateTime": 15869614141921 },1922 "invalidateTime": 1586781062,1923 "updateTime": 15869614141924 },1925 "3": {1926 "value": null,1927 "type": "empty",1928 "val": {1929 "value": null,1930 "type": "empty",1931 "invalidateTime": 1586781063,1932 "updateTime": 15864234601933 },1934 "size": {1935 "value": null,1936 "type": "empty",1937 "invalidateTime": 1586781063,1938 "updateTime": 15864234601939 },1940 "invalidateTime": 1586781063,1941 "updateTime": 15864234601942 },1943 "4": {1944 "value": null,1945 "type": "empty",1946 "val": {1947 "value": 1,1948 "type": "int",1949 "invalidateTime": 1586781063,1950 "updateTime": 15867810651951 },1952 "size": {1953 "value": 1,1954 "type": "int",1955 "invalidateTime": 1586781063,1956 "updateTime": 15867810651957 },1958 "invalidateTime": 1586781063,1959 "updateTime": 15867810651960 },1961 "5": {1962 "value": null,1963 "type": "empty",1964 "val": {1965 "value": 0,1966 "type": "int",1967 "invalidateTime": 1586781063,1968 "updateTime": 15867810651969 },1970 "size": {1971 "value": 1,1972 "type": "int",1973 "invalidateTime": 1586781063,1974 "updateTime": 15867810651975 },1976 "invalidateTime": 1586781063,1977 "updateTime": 15867810651978 },1979 "6": {1980 "value": null,1981 "type": "empty",1982 "val": {1983 "value": 127,1984 "type": "int",1985 "invalidateTime": 1586781063,1986 "updateTime": 15867810661987 },1988 "size": {1989 "value": 1,1990 "type": "int",1991 "invalidateTime": 1586781063,1992 "updateTime": 15867810661993 },1994 "invalidateTime": 1586781063,1995 "updateTime": 15867810661996 },1997 "7": {1998 "value": null,1999 "type": "empty",2000 "val": {2001 "value": 24,2002 "type": "int",2003 "invalidateTime": 1586781063,2004 "updateTime": 15867810662005 },2006 "size": {2007 "value": 2,2008 "type": "int",2009 "invalidateTime": 1586781063,2010 "updateTime": 15867810662011 },2012 "invalidateTime": 1586781063,2013 "updateTime": 15867810662014 },2015 "8": {2016 "value": null,2017 "type": "empty",2018 "val": {2019 "value": 100,2020 "type": "int",2021 "invalidateTime": 1586781063,2022 "updateTime": 15867810662023 },2024 "size": {2025 "value": 2,2026 "type": "int",2027 "invalidateTime": 1586781063,2028 "updateTime": 15867810662029 },2030 "invalidateTime": 1586781063,2031 "updateTime": 15867810662032 },2033 "9": {2034 "value": null,2035 "type": "empty",2036 "val": {2037 "value": 3,2038 "type": "int",2039 "invalidateTime": 1586781063,2040 "updateTime": 15867810662041 },2042 "size": {2043 "value": 2,2044 "type": "int",2045 "invalidateTime": 1586781063,2046 "updateTime": 15867810662047 },2048 "invalidateTime": 1586781063,2049 "updateTime": 15867810662050 },2051 "10": {2052 "value": null,2053 "type": "empty",2054 "val": {2055 "value": 100,2056 "type": "int",2057 "invalidateTime": 1586781063,2058 "updateTime": 15867810662059 },2060 "size": {2061 "value": 2,2062 "type": "int",2063 "invalidateTime": 1586781063,2064 "updateTime": 15867810662065 },2066 "invalidateTime": 1586781063,2067 "updateTime": 15867810662068 },2069 "11": {2070 "value": null,2071 "type": "empty",2072 "val": {2073 "value": 3,2074 "type": "int",2075 "invalidateTime": 1586781063,2076 "updateTime": 15867810662077 },2078 "size": {2079 "value": 1,2080 "type": "int",2081 "invalidateTime": 1586781063,2082 "updateTime": 15867810662083 },2084 "invalidateTime": 1586781063,2085 "updateTime": 15867810662086 },2087 "12": {2088 "value": null,2089 "type": "empty",2090 "val": {2091 "value": 10,2092 "type": "int",2093 "invalidateTime": 1586781063,2094 "updateTime": 15867810662095 },2096 "size": {2097 "value": 1,2098 "type": "int",2099 "invalidateTime": 1586781063,2100 "updateTime": 15867810662101 },2102 "invalidateTime": 1586781063,2103 "updateTime": 15867810662104 },2105 "13": {2106 "value": null,2107 "type": "empty",2108 "val": {2109 "value": 1,2110 "type": "int",2111 "invalidateTime": 1586781063,2112 "updateTime": 15867810662113 },2114 "size": {2115 "value": 1,2116 "type": "int",2117 "invalidateTime": 1586781063,2118 "updateTime": 15867810662119 },2120 "invalidateTime": 1586781063,2121 "updateTime": 15867810662122 },2123 "14": {2124 "value": null,2125 "type": "empty",2126 "val": {2127 "value": null,2128 "type": "empty",2129 "invalidateTime": 1586781063,2130 "updateTime": 15864234602131 },2132 "size": {2133 "value": null,2134 "type": "empty",2135 "invalidateTime": 1586781063,2136 "updateTime": 15864234602137 },2138 "invalidateTime": 1586781063,2139 "updateTime": 15864234602140 },2141 "15": {2142 "value": null,2143 "type": "empty",2144 "val": {2145 "value": 3600,2146 "type": "int",2147 "invalidateTime": 1586781063,2148 "updateTime": 15867810692149 },2150 "size": {2151 "value": 2,2152 "type": "int",2153 "invalidateTime": 1586781063,2154 "updateTime": 15867810692155 },2156 "invalidateTime": 1586781063,2157 "updateTime": 15867810692158 },2159 "16": {2160 "value": null,2161 "type": "empty",2162 "val": {2163 "value": 1000,2164 "type": "int",2165 "invalidateTime": 1586781063,2166 "updateTime": 15867810692167 },2168 "size": {2169 "value": 2,2170 "type": "int",2171 "invalidateTime": 1586781063,2172 "updateTime": 15867810692173 },2174 "invalidateTime": 1586781063,2175 "updateTime": 15867810692176 },2177 "17": {2178 "value": null,2179 "type": "empty",2180 "val": {2181 "value": 500,2182 "type": "int",2183 "invalidateTime": 1586781063,2184 "updateTime": 15867810692185 },2186 "size": {2187 "value": 2,2188 "type": "int",2189 "invalidateTime": 1586781063,2190 "updateTime": 15867810692191 },2192 "invalidateTime": 1586781063,2193 "updateTime": 15867810692194 },2195 "18": {2196 "value": null,2197 "type": "empty",2198 "val": {2199 "value": 500,2200 "type": "int",2201 "invalidateTime": 1586781063,2202 "updateTime": 15867810692203 },2204 "size": {2205 "value": 2,2206 "type": "int",2207 "invalidateTime": 1586781063,2208 "updateTime": 15867810692209 },2210 "invalidateTime": 1586781063,2211 "updateTime": 15867810692212 },2213 "19": {2214 "value": null,2215 "type": "empty",2216 "val": {2217 "value": 60,2218 "type": "int",2219 "invalidateTime": 1586781063,2220 "updateTime": 15867810692221 },2222 "size": {2223 "value": 2,2224 "type": "int",2225 "invalidateTime": 1586781063,2226 "updateTime": 15867810692227 },2228 "invalidateTime": 1586781063,2229 "updateTime": 15867810692230 },2231 "20": {2232 "value": null,2233 "type": "empty",2234 "val": {2235 "value": 60,2236 "type": "int",2237 "invalidateTime": 1586781063,2238 "updateTime": 15867810692239 },2240 "size": {2241 "value": 2,2242 "type": "int",2243 "invalidateTime": 1586781063,2244 "updateTime": 15867810692245 },2246 "invalidateTime": 1586781063,2247 "updateTime": 15867810692248 },2249 "21": {2250 "value": null,2251 "type": "empty",2252 "val": {2253 "value": 2880,2254 "type": "int",2255 "invalidateTime": 1586781063,2256 "updateTime": 15867810702257 },2258 "size": {2259 "value": 2,2260 "type": "int",2261 "invalidateTime": 1586781063,2262 "updateTime": 15867810702263 },2264 "invalidateTime": 1586781063,2265 "updateTime": 15867810702266 },2267 "22": {2268 "value": null,2269 "type": "empty",2270 "val": {2271 "value": 1000,2272 "type": "int",2273 "invalidateTime": 1586781063,2274 "updateTime": 15867810702275 },2276 "size": {2277 "value": 2,2278 "type": "int",2279 "invalidateTime": 1586781063,2280 "updateTime": 15867810702281 },2282 "invalidateTime": 1586781063,2283 "updateTime": 15867810702284 },2285 "23": {2286 "value": null,2287 "type": "empty",2288 "val": {2289 "value": 20,2290 "type": "int",2291 "invalidateTime": 1586781063,2292 "updateTime": 15867810702293 },2294 "size": {2295 "value": 2,2296 "type": "int",2297 "invalidateTime": 1586781063,2298 "updateTime": 15867810702299 },2300 "invalidateTime": 1586781063,2301 "updateTime": 15867810702302 },2303 "24": {2304 "value": null,2305 "type": "empty",2306 "val": {2307 "value": 20,2308 "type": "int",2309 "invalidateTime": 1586781063,2310 "updateTime": 15867810702311 },2312 "size": {2313 "value": 2,2314 "type": "int",2315 "invalidateTime": 1586781063,2316 "updateTime": 15867810702317 },2318 "invalidateTime": 1586781063,2319 "updateTime": 15867810702320 },2321 "25": {2322 "value": null,2323 "type": "empty",2324 "val": {2325 "value": 30,2326 "type": "int",2327 "invalidateTime": 1586781063,2328 "updateTime": 15867810702329 },2330 "size": {2331 "value": 2,2332 "type": "int",2333 "invalidateTime": 1586781063,2334 "updateTime": 15867810702335 },2336 "invalidateTime": 1586781063,2337 "updateTime": 15867810702338 },2339 "26": {2340 "value": null,2341 "type": "empty",2342 "val": {2343 "value": 30,2344 "type": "int",2345 "invalidateTime": 1586781063,2346 "updateTime": 15867810702347 },2348 "size": {2349 "value": 2,2350 "type": "int",2351 "invalidateTime": 1586781063,2352 "updateTime": 15867810702353 },2354 "invalidateTime": 1586781063,2355 "updateTime": 15867810702356 },2357 "27": {2358 "value": null,2359 "type": "empty",2360 "val": {2361 "value": 2,2362 "type": "int",2363 "invalidateTime": 1586781063,2364 "updateTime": 15867810702365 },2366 "size": {2367 "value": 2,2368 "type": "int",2369 "invalidateTime": 1586781063,2370 "updateTime": 15867810702371 },2372 "invalidateTime": 1586781063,2373 "updateTime": 15867810702374 },2375 "28": {2376 "value": null,2377 "type": "empty",2378 "val": {2379 "value": 2,2380 "type": "int",2381 "invalidateTime": 1586781063,2382 "updateTime": 15867810702383 },2384 "size": {2385 "value": 1,2386 "type": "int",2387 "invalidateTime": 1586781063,2388 "updateTime": 15867810702389 },2390 "invalidateTime": 1586781063,2391 "updateTime": 15867810702392 },2393 "30": {2394 "value": null,2395 "type": "empty",2396 "val": {2397 "value": 1,2398 "type": "int",2399 "invalidateTime": 1586781063,2400 "updateTime": 15867810702401 },2402 "size": {2403 "value": 1,2404 "type": "int",2405 "invalidateTime": 1586781063,2406 "updateTime": 15867810702407 },2408 "invalidateTime": 1586781063,2409 "updateTime": 15867810702410 },2411 "54": {2412 "value": null,2413 "type": "empty",2414 "val": {2415 "value": 28,2416 "type": "int",2417 "invalidateTime": 1587021600,2418 "updateTime": 15870216012419 },2420 "size": {2421 "value": 2,2422 "type": "int",2423 "invalidateTime": 1587021600,2424 "updateTime": 15870216012425 },2426 "invalidateTime": 1587021600,2427 "updateTime": 15870216012428 },2429 "29": {2430 "value": null,2431 "type": "empty",2432 "val": {2433 "value": null,2434 "type": "empty",2435 "invalidateTime": 1586961414,2436 "updateTime": 15864357352437 },2438 "size": {2439 "value": null,2440 "type": "empty",2441 "invalidateTime": 1586961414,2442 "updateTime": 15864357352443 },2444 "invalidateTime": 1586961414,2445 "updateTime": 15864357352446 },2447 "invalidateTime": 1586423428,2448 "updateTime": 15864234292449 }2450 },2451 "113": {2452 "name": "Alarm",2453 "data": {2454 "value": null,2455 "type": "empty",2456 "supported": {2457 "value": true,2458 "type": "bool",2459 "invalidateTime": 1586423428,2460 "updateTime": 15864234292461 },2462 "version": {2463 "value": 8,2464 "type": "int",2465 "invalidateTime": 1586424127,2466 "updateTime": 15864241282467 },2468 "security": {2469 "value": true,2470 "type": "bool",2471 "invalidateTime": 1586423428,2472 "updateTime": 15864234492473 },2474 "interviewDone": {2475 "value": true,2476 "type": "bool",2477 "invalidateTime": 1586423428,2478 "updateTime": 15864234552479 },2480 "interviewCounter": {2481 "value": 9,2482 "type": "int",2483 "invalidateTime": 1586423428,2484 "updateTime": 15864234532485 },2486 "V1supported": {2487 "value": false,2488 "type": "bool",2489 "invalidateTime": 1586423428,2490 "updateTime": 15864234532491 },2492 "typeMask": {2493 "value": [2494 32,2495 1312496 ],2497 "type": "binary",2498 "invalidateTime": 1586423428,2499 "updateTime": 15864234532500 },2501 "V1event": {2502 "value": null,2503 "type": "empty",2504 "alarmType": {2505 "value": null,2506 "type": "empty",2507 "invalidateTime": 1586423428,2508 "updateTime": 15864234292509 },2510 "level": {2511 "value": null,2512 "type": "empty",2513 "invalidateTime": 1586423428,2514 "updateTime": 15864234292515 },2516 "invalidateTime": 1586423428,2517 "updateTime": 15864234292518 },2519 "5": {2520 "value": null,2521 "type": "empty",2522 "typeString": {2523 "value": "Water",2524 "type": "string",2525 "invalidateTime": 1586423453,2526 "updateTime": 15864234542527 },2528 "status": {2529 "value": 255,2530 "type": "int",2531 "invalidateTime": 1586423453,2532 "updateTime": 15867810632533 },2534 "eventMask": {2535 "value": [2536 132,2537 12538 ],2539 "type": "binary",2540 "invalidateTime": 1586423453,2541 "updateTime": 15864234542542 },2543 "event": {2544 "value": 0,2545 "type": "int",2546 "invalidateTime": 1586423453,2547 "updateTime": 15867810632548 },2549 "eventString": {2550 "value": "Off",2551 "type": "string",2552 "invalidateTime": 1586423453,2553 "updateTime": 15867810632554 },2555 "eventParameters": {2556 "value": [2557 82558 ],2559 "type": "binary",2560 "invalidateTime": 1586423453,2561 "updateTime": 15867810632562 },2563 "eventSequence": {2564 "value": null,2565 "type": "empty",2566 "invalidateTime": 1586423453,2567 "updateTime": 15864234542568 },2569 "invalidateTime": 1586423453,2570 "updateTime": 15867810632571 },2572 "8": {2573 "value": null,2574 "type": "empty",2575 "typeString": {2576 "value": "Power Management",2577 "type": "string",2578 "invalidateTime": 1586423454,2579 "updateTime": 15864234552580 },2581 "status": {2582 "value": null,2583 "type": "empty",2584 "invalidateTime": 1586423454,2585 "updateTime": 15864234552586 },2587 "eventMask": {2588 "value": [2589 0,2590 82591 ],2592 "type": "binary",2593 "invalidateTime": 1586423454,2594 "updateTime": 15864234552595 },2596 "event": {2597 "value": null,2598 "type": "empty",2599 "invalidateTime": 1586423454,2600 "updateTime": 15864234552601 },2602 "eventString": {2603 "value": null,2604 "type": "empty",2605 "invalidateTime": 1586423454,2606 "updateTime": 15864234552607 },2608 "eventParameters": {2609 "value": null,2610 "type": "empty",2611 "invalidateTime": 1586423454,2612 "updateTime": 15864234552613 },2614 "eventSequence": {2615 "value": null,2616 "type": "empty",2617 "invalidateTime": 1586423454,2618 "updateTime": 15864234552619 },2620 "invalidateTime": 1586423454,2621 "updateTime": 15864234552622 },2623 "9": {2624 "value": null,2625 "type": "empty",2626 "typeString": {2627 "value": "System",2628 "type": "string",2629 "invalidateTime": 1586423454,2630 "updateTime": 15864234552631 },2632 "status": {2633 "value": null,2634 "type": "empty",2635 "invalidateTime": 1586423454,2636 "updateTime": 15864234552637 },2638 "eventMask": {2639 "value": [2640 22641 ],2642 "type": "binary",2643 "invalidateTime": 1586423454,2644 "updateTime": 15864234552645 },2646 "event": {2647 "value": null,2648 "type": "empty",2649 "invalidateTime": 1586423454,2650 "updateTime": 15864234552651 },2652 "eventString": {2653 "value": null,2654 "type": "empty",2655 "invalidateTime": 1586423454,2656 "updateTime": 15864234552657 },2658 "eventParameters": {2659 "value": null,2660 "type": "empty",2661 "invalidateTime": 1586423454,2662 "updateTime": 15864234552663 },2664 "eventSequence": {2665 "value": null,2666 "type": "empty",2667 "invalidateTime": 1586423454,2668 "updateTime": 15864234552669 },2670 "invalidateTime": 1586423454,2671 "updateTime": 15864234552672 },2673 "15": {2674 "value": null,2675 "type": "empty",2676 "typeString": {2677 "value": "",2678 "type": "string",2679 "invalidateTime": 1586423454,2680 "updateTime": 15864234552681 },2682 "status": {2683 "value": null,2684 "type": "empty",2685 "invalidateTime": 1586423454,2686 "updateTime": 15864234552687 },2688 "eventMask": {2689 "value": [2690 82691 ],2692 "type": "binary",2693 "invalidateTime": 1586423454,2694 "updateTime": 15864234552695 },2696 "event": {2697 "value": null,2698 "type": "empty",2699 "invalidateTime": 1586423454,2700 "updateTime": 15864234552701 },2702 "eventString": {2703 "value": null,2704 "type": "empty",2705 "invalidateTime": 1586423454,2706 "updateTime": 15864234552707 },2708 "eventParameters": {2709 "value": null,2710 "type": "empty",2711 "invalidateTime": 1586423454,2712 "updateTime": 15864234552713 },2714 "eventSequence": {2715 "value": null,2716 "type": "empty",2717 "invalidateTime": 1586423454,2718 "updateTime": 15864234552719 },2720 "invalidateTime": 1586423454,2721 "updateTime": 15864234552722 },2723 "invalidateTime": 1586423428,2724 "updateTime": 15864234292725 }2726 },2727 "114": {2728 "name": "ManufacturerSpecific",2729 "data": {2730 "value": null,2731 "type": "empty",2732 "supported": {2733 "value": true,2734 "type": "bool",2735 "invalidateTime": 1586423452,2736 "updateTime": 15864234292737 },2738 "version": {2739 "value": 2,2740 "type": "int",2741 "invalidateTime": 1586424127,2742 "updateTime": 15864241282743 },2744 "security": {2745 "value": true,2746 "type": "bool",2747 "invalidateTime": 1586423428,2748 "updateTime": 15864234492749 },2750 "interviewDone": {2751 "value": true,2752 "type": "bool",2753 "invalidateTime": 1586423428,2754 "updateTime": 15864234522755 },2756 "interviewCounter": {2757 "value": 9,2758 "type": "int",2759 "invalidateTime": 1586423428,2760 "updateTime": 15864234522761 },2762 "vendorId": {2763 "value": 1043,2764 "type": "int",2765 "invalidateTime": 1586423451,2766 "updateTime": 15864234522767 },2768 "vendor": {2769 "value": "",2770 "type": "string",2771 "invalidateTime": 1586423451,2772 "updateTime": 15864234522773 },2774 "productId": {2775 "value": 1,2776 "type": "int",2777 "invalidateTime": 1586423451,2778 "updateTime": 15864234522779 },2780 "productType": {2781 "value": 1,2782 "type": "int",2783 "invalidateTime": 1586423451,2784 "updateTime": 15864234522785 },2786 "serialNumber": {2787 "value": "",2788 "type": "string",2789 "invalidateTime": 1586423452,2790 "updateTime": 15864234532791 },2792 "invalidateTime": 1586423452,2793 "updateTime": 15864234292794 }2795 },2796 "115": {2797 "name": "PowerLevel",2798 "data": {2799 "value": null,2800 "type": "empty",2801 "supported": {2802 "value": true,2803 "type": "bool",2804 "invalidateTime": 1586423428,2805 "updateTime": 15864234292806 },2807 "version": {2808 "value": 1,2809 "type": "int",2810 "invalidateTime": 1586424127,2811 "updateTime": 15864241282812 },2813 "security": {2814 "value": true,2815 "type": "bool",2816 "invalidateTime": 1586423428,2817 "updateTime": 15864234492818 },2819 "interviewDone": {2820 "value": true,2821 "type": "bool",2822 "invalidateTime": 1586423428,2823 "updateTime": 15864234532824 },2825 "interviewCounter": {2826 "value": 9,2827 "type": "int",2828 "invalidateTime": 1586423428,2829 "updateTime": 15864234532830 },2831 "level": {2832 "value": 0,2833 "type": "int",2834 "invalidateTime": 1586423452,2835 "updateTime": 15864234532836 },2837 "timeout": {2838 "value": 0,2839 "type": "int",2840 "invalidateTime": 1586423452,2841 "updateTime": 15864234532842 },2843 "invalidateTime": 1586423428,2844 "updateTime": 15864234292845 }2846 },2847 "122": {2848 "name": "FirmwareUpdate",2849 "data": {2850 "value": null,2851 "type": "empty",2852 "supported": {2853 "value": true,2854 "type": "bool",2855 "invalidateTime": 1586423428,2856 "updateTime": 15864234292857 },2858 "version": {2859 "value": 4,2860 "type": "int",2861 "invalidateTime": 1586424127,2862 "updateTime": 15864241282863 },2864 "security": {2865 "value": true,2866 "type": "bool",2867 "invalidateTime": 1586423428,2868 "updateTime": 15864234492869 },2870 "interviewDone": {2871 "value": true,2872 "type": "bool",2873 "invalidateTime": 1586423428,2874 "updateTime": 15864234532875 },2876 "interviewCounter": {2877 "value": 9,2878 "type": "int",2879 "invalidateTime": 1586423428,2880 "updateTime": 15864234532881 },2882 "manufacturerId": {2883 "value": 1043,2884 "type": "int",2885 "invalidateTime": 1586423452,2886 "updateTime": 15864234532887 },2888 "firmwareId": {2889 "value": 257,2890 "type": "int",2891 "invalidateTime": 1586423452,2892 "updateTime": 15864234532893 },2894 "checksum": {2895 "value": 47655,2896 "type": "int",2897 "invalidateTime": 1586423452,2898 "updateTime": 15864234532899 },2900 "upgradeable": {2901 "value": true,2902 "type": "bool",2903 "invalidateTime": 1586423452,2904 "updateTime": 15864234532905 },2906 "fragmentSize": {2907 "value": 20,2908 "type": "int",2909 "invalidateTime": 1586423452,2910 "updateTime": 15864234532911 },2912 "firmwareCount": {2913 "value": 1,2914 "type": "int",2915 "invalidateTime": 1586423452,2916 "updateTime": 15864234532917 },2918 "fragmentTransmitted": {2919 "value": null,2920 "type": "empty",2921 "invalidateTime": 1586423428,2922 "updateTime": 15864234292923 },2924 "fragmentCount": {2925 "value": null,2926 "type": "empty",2927 "invalidateTime": 1586423428,2928 "updateTime": 15864234292929 },2930 "updateStatus": {2931 "value": null,2932 "type": "empty",2933 "invalidateTime": 1586423428,2934 "updateTime": 15864234292935 },2936 "waitTime": {2937 "value": null,2938 "type": "empty",2939 "invalidateTime": 1586423428,2940 "updateTime": 15864234292941 },2942 "firmware1": {2943 "value": 257,2944 "type": "int",2945 "invalidateTime": 1586423452,2946 "updateTime": 15864234532947 },2948 "invalidateTime": 1586423428,2949 "updateTime": 15864234292950 }2951 },2952 "128": {2953 "name": "Battery",2954 "data": {2955 "value": null,2956 "type": "empty",2957 "supported": {2958 "value": true,2959 "type": "bool",2960 "invalidateTime": 1586692800,2961 "updateTime": 15864234292962 },2963 "version": {2964 "value": 1,2965 "type": "int",2966 "invalidateTime": 1586692800,2967 "updateTime": 15864238282968 },2969 "security": {2970 "value": true,2971 "type": "bool",2972 "invalidateTime": 1586423428,2973 "updateTime": 15864234492974 },2975 "interviewDone": {2976 "value": true,2977 "type": "bool",2978 "invalidateTime": 1586423428,2979 "updateTime": 15864234542980 },2981 "interviewCounter": {2982 "value": 9,2983 "type": "int",2984 "invalidateTime": 1586423428,2985 "updateTime": 15864234532986 },2987 "lastChange": {2988 "value": null,2989 "type": "empty",2990 "invalidateTime": 1586692800,2991 "updateTime": 15864234292992 },2993 "history": {2994 "value": null,2995 "type": "empty",2996 "0": {2997 "value": 1586692801,2998 "type": "int",2999 "invalidateTime": 1586692800,3000 "updateTime": 15866928013001 },3002 "invalidateTime": 1586692800,3003 "updateTime": 15864234293004 },3005 "last": {3006 "value": 0,3007 "type": "int",3008 "invalidateTime": 1586692800,3009 "updateTime": 15866928013010 },3011 "invalidateTime": 1586692800,3012 "updateTime": 15864234293013 }3014 },3015 "129": {3016 "name": "Clock",3017 "data": {3018 "value": null,3019 "type": "empty",3020 "supported": {3021 "value": true,3022 "type": "bool",3023 "invalidateTime": 1586423428,3024 "updateTime": 15864234293025 },3026 "version": {3027 "value": 1,3028 "type": "int",3029 "invalidateTime": 1586424127,3030 "updateTime": 15864241293031 },3032 "security": {3033 "value": true,3034 "type": "bool",3035 "invalidateTime": 1586423428,3036 "updateTime": 15864234493037 },3038 "interviewDone": {3039 "value": true,3040 "type": "bool",3041 "invalidateTime": 1586423428,3042 "updateTime": 15864234533043 },3044 "interviewCounter": {3045 "value": 9,3046 "type": "int",3047 "invalidateTime": 1586423428,3048 "updateTime": 15864234533049 },3050 "invalidateTime": 1586423428,3051 "updateTime": 15864234293052 }3053 },3054 "133": {3055 "name": "Association",3056 "data": {3057 "value": null,3058 "type": "empty",3059 "supported": {3060 "value": true,3061 "type": "bool",3062 "invalidateTime": 1586423428,3063 "updateTime": 15864234293064 },3065 "version": {3066 "value": 2,3067 "type": "int",3068 "invalidateTime": 1586424127,3069 "updateTime": 15864241293070 },3071 "security": {3072 "value": true,3073 "type": "bool",3074 "invalidateTime": 1586423428,3075 "updateTime": 15864234493076 },3077 "interviewDone": {3078 "value": true,3079 "type": "bool",3080 "invalidateTime": 1586423428,3081 "updateTime": 15864234553082 },3083 "interviewCounter": {3084 "value": 9,3085 "type": "int",3086 "invalidateTime": 1586423428,3087 "updateTime": 15864234533088 },3089 "groups": {3090 "value": 3,3091 "type": "int",3092 "invalidateTime": 1586423453,3093 "updateTime": 15864234543094 },3095 "specificGroup": {3096 "value": 0,3097 "type": "int",3098 "invalidateTime": 1586423453,3099 "updateTime": 15864234543100 },3101 "1": {3102 "value": null,3103 "type": "empty",3104 "max": {3105 "value": 1,3106 "type": "int",3107 "invalidateTime": 1586435746,3108 "updateTime": 15864357473109 },3110 "nodes": {3111 "value": [3112 13113 ],3114 "type": "binary",3115 "invalidateTime": 1586435746,3116 "updateTime": 15864357473117 },3118 "invalidateTime": 1586435746,3119 "updateTime": 15864357473120 },3121 "2": {3122 "value": null,3123 "type": "empty",3124 "max": {3125 "value": 5,3126 "type": "int",3127 "invalidateTime": 1586435746,3128 "updateTime": 15864357473129 },3130 "nodes": {3131 "value": [],3132 "type": "binary",3133 "invalidateTime": 1586435746,3134 "updateTime": 15864357473135 },3136 "invalidateTime": 1586435746,3137 "updateTime": 15864357473138 },3139 "3": {3140 "value": null,3141 "type": "empty",3142 "max": {3143 "value": 5,3144 "type": "int",3145 "invalidateTime": 1586435746,3146 "updateTime": 15864357473147 },3148 "nodes": {3149 "value": [],3150 "type": "binary",3151 "invalidateTime": 1586435746,3152 "updateTime": 15864357473153 },3154 "invalidateTime": 1586435746,3155 "updateTime": 15864357473156 },3157 "invalidateTime": 1586423428,3158 "updateTime": 15864234293159 }3160 },3161 "134": {3162 "name": "Version",3163 "data": {3164 "value": null,3165 "type": "empty",3166 "supported": {3167 "value": true,3168 "type": "bool",3169 "invalidateTime": 1586423428,3170 "updateTime": 15864234293171 },3172 "version": {3173 "value": 2,3174 "type": "int",3175 "invalidateTime": 1586424127,3176 "updateTime": 15864241293177 },3178 "security": {3179 "value": true,3180 "type": "bool",3181 "invalidateTime": 1586423428,3182 "updateTime": 15864234493183 },3184 "interviewDone": {3185 "value": true,3186 "type": "bool",3187 "invalidateTime": 1586423428,3188 "updateTime": 15864234523189 },3190 "interviewCounter": {3191 "value": 9,3192 "type": "int",3193 "invalidateTime": 1586423428,3194 "updateTime": 15864234503195 },3196 "ZWLib": {3197 "value": 3,3198 "type": "int",3199 "invalidateTime": 1586424128,3200 "updateTime": 15864241293201 },3202 "ZWProtocolMajor": {3203 "value": 5,3204 "type": "int",3205 "invalidateTime": 1586424128,3206 "updateTime": 15864241293207 },3208 "ZWProtocolMinor": {3209 "value": 3,3210 "type": "int",3211 "invalidateTime": 1586424128,3212 "updateTime": 15864241293213 },3214 "SDK": {3215 "value": "6.71.03",3216 "type": "string",3217 "invalidateTime": 1586424128,3218 "updateTime": 15864241293219 },3220 "applicationMajor": {3221 "value": 1,3222 "type": "int",3223 "invalidateTime": 1586424128,3224 "updateTime": 15864241293225 },3226 "applicationMinor": {3227 "value": 7,3228 "type": "int",3229 "invalidateTime": 1586424128,3230 "updateTime": 15864241293231 },3232 "hardwareVersion": {3233 "value": 1,3234 "type": "int",3235 "invalidateTime": 1586424128,3236 "updateTime": 15864241293237 },3238 "firmwareCount": {3239 "value": 1,3240 "type": "int",3241 "invalidateTime": 1586424128,3242 "updateTime": 15864241293243 },3244 "firmware1": {3245 "value": null,3246 "type": "empty",3247 "major": {3248 "value": 1,3249 "type": "int",3250 "invalidateTime": 1586423451,3251 "updateTime": 15864241293252 },3253 "minor": {3254 "value": 7,3255 "type": "int",3256 "invalidateTime": 1586423451,3257 "updateTime": 15864241293258 },3259 "invalidateTime": 1586423451,3260 "updateTime": 15864234523261 },3262 "invalidateTime": 1586424128,3263 "updateTime": 15864241293264 }3265 },3266 "152": {3267 "name": "Security",3268 "data": {3269 "value": null,3270 "type": "empty",3271 "supported": {3272 "value": true,3273 "type": "bool",3274 "invalidateTime": 1586423428,3275 "updateTime": 15864234293276 },3277 "version": {3278 "value": 1,3279 "type": "int",3280 "invalidateTime": 1586424127,3281 "updateTime": 15864241293282 },3283 "security": {3284 "value": false,3285 "type": "bool",3286 "invalidateTime": 1586423428,3287 "updateTime": 15864234293288 },3289 "interviewDone": {3290 "value": true,3291 "type": "bool",3292 "invalidateTime": 1586423428,3293 "updateTime": 15864234493294 },3295 "interviewCounter": {3296 "value": 10,3297 "type": "int",3298 "invalidateTime": 1586423428,3299 "updateTime": 15864234293300 },3301 "scheme": {3302 "value": 0,3303 "type": "int",3304 "invalidateTime": 1586423428,3305 "updateTime": 15864234293306 },3307 "secureNodeInfoFrame": {3308 "value": [],3309 "type": "binary",3310 "invalidateTime": 1586423428,3311 "updateTime": 15864234293312 },3313 "securityAbandoned": {3314 "value": false,3315 "type": "bool",3316 "invalidateTime": 1586423428,3317 "updateTime": 15864234293318 },3319 "canStream": {3320 "value": false,3321 "type": "bool",3322 "invalidateTime": 1586423428,3323 "updateTime": 15864234293324 },3325 "toFollow": {3326 "value": null,3327 "type": "empty",3328 "invalidateTime": 1586423428,3329 "updateTime": 15864234293330 },3331 "invalidateTime": 1586423428,3332 "updateTime": 15864234293333 }3334 },3335 "159": {3336 "name": "SecurityS2",3337 "data": {3338 "value": null,3339 "type": "empty",3340 "supported": {3341 "value": true,3342 "type": "bool",3343 "invalidateTime": 1586423428,3344 "updateTime": 15864234293345 },3346 "version": {3347 "value": 1,3348 "type": "int",3349 "invalidateTime": 1586424127,3350 "updateTime": 15864241293351 },3352 "security": {3353 "value": true,3354 "type": "bool",3355 "invalidateTime": 1586423428,3356 "updateTime": 15864234493357 },3358 "interviewDone": {3359 "value": true,3360 "type": "bool",3361 "invalidateTime": 1586423428,3362 "updateTime": 15864234493363 },3364 "interviewCounter": {3365 "value": 9,3366 "type": "int",3367 "invalidateTime": 1586423428,3368 "updateTime": 15864234293369 },3370 "securityAbandoned": {3371 "value": false,3372 "type": "bool",3373 "invalidateTime": 1586423428,3374 "updateTime": 15864234293375 },3376 "csa": {3377 "value": null,3378 "type": "empty",3379 "invalidateTime": 1586423428,3380 "updateTime": 15864234293381 },3382 "requestedKeys": {3383 "value": true,3384 "type": "bool",3385 "S0": {3386 "value": true,3387 "type": "bool",3388 "invalidateTime": 1586423428,3389 "updateTime": 15864234303390 },3391 "S2Unauthenticated": {3392 "value": true,3393 "type": "bool",3394 "invalidateTime": 1586423428,3395 "updateTime": 15864234303396 },3397 "S2Authenticated": {3398 "value": true,3399 "type": "bool",3400 "invalidateTime": 1586423428,3401 "updateTime": 15864234303402 },3403 "S2Access": {3404 "value": false,3405 "type": "bool",3406 "invalidateTime": 1586423428,3407 "updateTime": 15864234293408 },3409 "invalidateTime": 1586423428,3410 "updateTime": 15864234303411 },3412 "grantedKeys": {3413 "value": true,3414 "type": "bool",3415 "S0": {3416 "value": false,3417 "type": "bool",3418 "invalidateTime": 1586423428,3419 "updateTime": 15864234383420 },3421 "S2Unauthenticated": {3422 "value": true,3423 "type": "bool",3424 "invalidateTime": 1586423428,3425 "updateTime": 15864234383426 },3427 "S2Authenticated": {3428 "value": false,3429 "type": "bool",3430 "invalidateTime": 1586423428,3431 "updateTime": 15864234383432 },3433 "S2Access": {3434 "value": false,3435 "type": "bool",3436 "invalidateTime": 1586423428,3437 "updateTime": 15864234383438 },3439 "invalidateTime": 1586423428,3440 "updateTime": 15864234383441 },3442 "guessKeys": {3443 "value": false,3444 "type": "bool",3445 "invalidateTime": 1586423428,3446 "updateTime": 15864234293447 },3448 "secureNodeInfoFrames": {3449 "value": null,3450 "type": "empty",3451 "S2Unauthenticated": {3452 "value": [3453 37,3454 133,3455 89,3456 134,3457 114,3458 128,3459 129,3460 49,3461 90,3462 112,3463 50,3464 113,3465 115,3466 1223467 ],3468 "type": "binary",3469 "invalidateTime": 1586423448,3470 "updateTime": 15864234493471 },3472 "S2Authenticated": {3473 "value": [],3474 "type": "binary",3475 "invalidateTime": 1586423428,3476 "updateTime": 15864234293477 },3478 "S2Access": {3479 "value": [],3480 "type": "binary",3481 "invalidateTime": 1586423428,3482 "updateTime": 15864234293483 },3484 "invalidateTime": 1586423428,3485 "updateTime": 15864234293486 },3487 "publicKey": {3488 "value": [3489 46,3490 197,3491 96,3492 16,3493 127,3494 141,3495 44,3496 99,3497 199,3498 222,3499 245,3500 198,3501 178,3502 176,3503 88,3504 10,3505 181,3506 96,3507 198,3508 184,3509 40,3510 160,3511 197,3512 225,3513 225,3514 113,3515 222,3516 188,3517 153,3518 218,3519 191,3520 83521 ],3522 "type": "binary",3523 "invalidateTime": 1586423428,3524 "updateTime": 15864234383525 },3526 "publicKeyVerified": {3527 "value": [3528 46,3529 197,3530 96,3531 16,3532 127,3533 141,3534 44,3535 99,3536 199,3537 222,3538 245,3539 198,3540 178,3541 176,3542 88,3543 10,3544 181,3545 96,3546 198,3547 184,3548 40,3549 160,3550 197,3551 225,3552 225,3553 113,3554 222,3555 188,3556 153,3557 218,3558 191,3559 83560 ],3561 "type": "binary",3562 "invalidateTime": 1586423428,3563 "updateTime": 15864234413564 },3565 "publicKeyAuthenticationRequired": {3566 "value": false,3567 "type": "bool",3568 "invalidateTime": 1586423428,3569 "updateTime": 15864234383570 },3571 "invalidateTime": 1586423428,3572 "updateTime": 15864234293573 }3574 }3575 }3576 }3577 }3578}3579let requiredData = {3580 Amount: '50-0',3581 Temperature: '49-23',3582 Flow: '49-56',3583 Pressure: '49-57'3584}3585let result = [3586 {3587 title: 'Amount',3588 subTitle: 'l',3589 value: '-.-',3590 timestamp: 03591 },3592 {3593 title: 'Temperature',3594 subTitle: 'C',3595 value: '-.-',3596 timestamp: 03597 },3598 {3599 title: 'Flow',3600 subTitle: 'L/H',3601 value: '-.-',3602 timestamp: 03603 },3604 {3605 title: 'Pressure',3606 subTitle: 'Bar',3607 value: '-.-',3608 timestamp: 03609 }3610];3611function getInitialSensorValues() {3612 let i = 0;3613 for (let sensor in requiredData) {3614 if (sensor) {3615 let temp = requiredData[sensor];3616 let val = temp.split('-');3617 let value = MainData.instances[0].commandClasses[val[0]].data[val[1]].val.value;3618 if (result[i].title == sensor) {3619 result[i].value = value;3620 i++;3621 }3622 }3623 }3624}3625getInitialSensorValues();...
es3fFboInvalidateTests.js
Source:es3fFboInvalidateTests.js
1/*-------------------------------------------------------------------------2 * drawElements Quality Program OpenGL ES Utilities3 * ------------------------------------------------4 *5 * Copyright 2014 The Android Open Source Project6 *7 * Licensed under the Apache License, Version 2.0 (the 'License');8 * you may not use this file except in compliance with the License.9 * You may obtain a copy of the License at10 *11 * http://www.apache.org/licenses/LICENSE-2.012 *13 * Unless required by applicable law or agreed to in writing, software14 * distributed under the License is distributed on an 'AS IS' BASIS,15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.16 * See the License for the specific language governing permissions and17 * limitations under the License.18 *19 */20'use strict';21goog.provide('functional.gles3.es3fFboInvalidateTests');22goog.require('framework.common.tcuImageCompare');23goog.require('framework.common.tcuRGBA');24goog.require('framework.common.tcuTestCase');25goog.require('framework.common.tcuTexture');26goog.require('framework.common.tcuTextureUtil');27goog.require('framework.delibs.debase.deMath');28goog.require('framework.opengl.gluShaderUtil');29goog.require('framework.opengl.gluTextureUtil');30goog.require('framework.referencerenderer.rrUtil');31goog.require('functional.gles3.es3fFboTestCase');32goog.require('functional.gles3.es3fFboTestUtil');33goog.scope(function() {34var es3fFboInvalidateTests = functional.gles3.es3fFboInvalidateTests;35var tcuTestCase = framework.common.tcuTestCase;36var es3fFboTestCase = functional.gles3.es3fFboTestCase;37var es3fFboTestUtil = functional.gles3.es3fFboTestUtil;38var rrUtil = framework.referencerenderer.rrUtil;39var gluShaderUtil = framework.opengl.gluShaderUtil;40var gluTextureUtil = framework.opengl.gluTextureUtil;41var tcuTexture = framework.common.tcuTexture;42var tcuTextureUtil = framework.common.tcuTextureUtil;43var deMath = framework.delibs.debase.deMath;44var tcuRGBA = framework.common.tcuRGBA;45var tcuImageCompare = framework.common.tcuImageCompare;46/** @type {WebGL2RenderingContext} */ var gl;47var setParentClass = function(child, parent) {48 child.prototype = Object.create(parent.prototype);49 child.prototype.constructor = child;50};51var getDefaultFBDiscardAttachments = function(discardBufferBits) {52 var attachments = [];53 if (discardBufferBits & gl.COLOR_BUFFER_BIT)54 attachments.push(gl.COLOR);55 if (discardBufferBits & gl.DEPTH_BUFFER_BIT)56 attachments.push(gl.DEPTH);57 if (discardBufferBits & gl.STENCIL_BUFFER_BIT)58 attachments.push(gl.STENCIL);59 return attachments;60};61var getFBODiscardAttachments = function(discardBufferBits) {62 var attachments = [];63 if (discardBufferBits & gl.COLOR_BUFFER_BIT)64 attachments.push(gl.COLOR_ATTACHMENT0);65 // \note DEPTH_STENCIL_ATTACHMENT is allowed when discarding FBO, but not with default FB66 if ((discardBufferBits & (gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT)) == (gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT))67 attachments.push(gl.DEPTH_STENCIL_ATTACHMENT);68 else if (discardBufferBits & gl.DEPTH_BUFFER_BIT)69 attachments.push(gl.DEPTH_ATTACHMENT);70 else if (discardBufferBits & gl.STENCIL_BUFFER_BIT)71 attachments.push(gl.STENCIL_ATTACHMENT);72 return attachments;73};74var getCompatibleColorFormat = function() {75 var redBits = gl.getParameter(gl.RED_BITS);76 var greenBits = gl.getParameter(gl.GREEN_BITS);77 var blueBits = gl.getParameter(gl.BLUE_BITS);78 var alphaBits = gl.getParameter(gl.ALPHA_BITS);79 switch ('' + redBits + greenBits + blueBits + alphaBits) {80 case '8888' : return gl.RGBA8;81 case '8880' : return gl.RGB8;82 default:83 throw new Error('Unexpected bit depth');84 }85};86var getCompatibleDepthStencilFormat = function() {87 var depthBits = /** @type {number} */ (gl.getParameter(gl.DEPTH_BITS));88 var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS));89 var hasDepth = depthBits > 0;90 var hasStencil = stencilBits > 0;91 if (!hasDepth || !hasStencil || (stencilBits != 8))92 return gl.NONE;93 if (depthBits == 32)94 return gl.DEPTH32F_STENCIL8;95 else if (depthBits == 24)96 return gl.DEPTH24_STENCIL8;97 else98 return gl.NONE;99};100var hasAttachment = function(attachments, attachment) {101 return attachments.indexOf(attachment) >= 0;102};103/**104 * @constructor105 * @extends {es3fFboTestCase.FboTestCase}106 * @param {string} name107 * @param {string} desc108 * @param {number} buffers109 * @param {number=} target110 */111es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase = function(name, desc, buffers, target) {112 es3fFboTestCase.FboTestCase.call(this, name, desc);113 this.m_buffers = buffers;114 this.m_fboTarget = target || gl.FRAMEBUFFER;115};116setParentClass(es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase, es3fFboTestCase.FboTestCase);117es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase.prototype.render = function(dst) {118 var ctx = this.getCurrentContext();119 var attachments = getDefaultFBDiscardAttachments(this.m_buffers);120 var shader = new es3fFboTestUtil.FlatColorShader(gluShaderUtil.DataType.FLOAT_VEC4);121 var program = ctx.createProgram(shader);122 shader.setColor(ctx, program, [1, 0, 0, 1]);123 ctx.clearColor(0, 0, 0, 1);124 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);125 ctx.enable(gl.DEPTH_TEST);126 ctx.enable(gl.STENCIL_TEST);127 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);128 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);129 rrUtil.drawQuad(ctx, program, [-1, -1, -1], [1, 1, 1]);130 ctx.invalidateFramebuffer(this.m_fboTarget, attachments);131 if ((this.m_buffers & gl.COLOR_BUFFER_BIT) != 0) {132 // Color was not preserved - fill with green.133 ctx.disable(gl.DEPTH_TEST);134 ctx.disable(gl.STENCIL_TEST);135 shader.setColor(ctx, program, [0, 1, 0, 1]);136 rrUtil.drawQuad(ctx, program, [-1, -1, 0], [1, 1, 0]);137 ctx.enable(gl.DEPTH_TEST);138 ctx.enable(gl.STENCIL_TEST);139 }140 if ((this.m_buffers & gl.DEPTH_BUFFER_BIT) != 0) {141 // Depth was not preserved.142 ctx.depthFunc(gl.ALWAYS);143 }144 if ((this.m_buffers & gl.STENCIL_BUFFER_BIT) == 0) {145 // Stencil was preserved.146 ctx.stencilFunc(gl.EQUAL, 1, 0xff);147 }148 ctx.enable(gl.BLEND);149 ctx.blendFunc(gl.ONE, gl.ONE);150 ctx.blendEquation(gl.FUNC_ADD);151 shader.setColor(ctx, program, [0, 0, 1, 1]);152 rrUtil.drawQuad(ctx, program, [-1, -1, 0], [1, 1, 0]);153 dst.readViewport(ctx);154};155/**156 * @constructor157 * @extends {es3fFboTestCase.FboTestCase}158 * @param {string} name159 * @param {string} desc160 * @param {number} buffers161 */162es3fFboInvalidateTests.InvalidateDefaultFramebufferBindCase = function(name, desc, buffers) {163 es3fFboTestCase.FboTestCase.call(this, name, desc);164 this.m_buffers = buffers;165};166setParentClass(es3fFboInvalidateTests.InvalidateDefaultFramebufferBindCase, es3fFboTestCase.FboTestCase);167es3fFboInvalidateTests.InvalidateDefaultFramebufferBindCase.prototype.render = function(dst) {168 var ctx = this.getCurrentContext();169 var attachments = getDefaultFBDiscardAttachments(this.m_buffers);170 var shader = new es3fFboTestUtil.FlatColorShader(gluShaderUtil.DataType.FLOAT_VEC4);171 var program = ctx.createProgram(shader);172 /** @type {es3fFboTestUtil.Texture2DShader} */173 var texShader = new es3fFboTestUtil.Texture2DShader(174 [gluShaderUtil.DataType.SAMPLER_2D], gluShaderUtil.DataType.FLOAT_VEC4);175 /** @type {es3fFboTestUtil.GradientShader} */176 var gradShader = new es3fFboTestUtil.GradientShader(gluShaderUtil.DataType.FLOAT_VEC4);177 var texShaderID = ctx.createProgram(texShader);178 var gradShaderID = ctx.createProgram(gradShader);179 ctx.clearColor(0, 0, 0, 1);180 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);181 // Create fbo.182 var fbo = ctx.createFramebuffer();183 var tex = ctx.createTexture();184 ctx.bindTexture(gl.TEXTURE_2D, tex);185 ctx.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, this.getWidth(), this.getHeight(), 0, gl.RGBA, gl.UNSIGNED_BYTE, null);186 ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);187 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);188 ctx.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);189 ctx.bindTexture(gl.TEXTURE_2D, null);190 this.checkFramebufferStatus(gl.FRAMEBUFFER);191 ctx.bindFramebuffer(gl.FRAMEBUFFER, null);192 ctx.enable(gl.DEPTH_TEST);193 ctx.enable(gl.STENCIL_TEST);194 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);195 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);196 shader.setColor(ctx, program, [1, 0, 0, 1]);197 rrUtil.drawQuad(ctx, program, [-1, -1, -1], [1, 1, 1]);198 ctx.invalidateFramebuffer(gl.FRAMEBUFFER, attachments);199 // Switch to fbo and render gradient into it.200 ctx.disable(gl.DEPTH_TEST);201 ctx.disable(gl.STENCIL_TEST);202 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);203 gradShader.setGradient(ctx, gradShaderID, [0, 0, 0, 0], [1, 1, 1, 1]);204 rrUtil.drawQuad(ctx, gradShaderID, [-1, -1, 0], [1, 1, 0]);205 // Restore default fbo.206 ctx.bindFramebuffer(gl.FRAMEBUFFER, null);207 if ((this.m_buffers & gl.COLOR_BUFFER_BIT) != 0) {208 // Color was not preserved - fill with green.209 shader.setColor(ctx, program, [0, 1, 0, 1]);210 rrUtil.drawQuad(ctx, program, [-1, -1, 0], [1, 1, 0]);211 }212 if ((this.m_buffers & gl.DEPTH_BUFFER_BIT) != 0) {213 // Depth was not preserved.214 ctx.depthFunc(gl.ALWAYS);215 }216 if ((this.m_buffers & gl.STENCIL_BUFFER_BIT) == 0) {217 // Stencil was preserved.218 ctx.stencilFunc(gl.EQUAL, 1, 0xff);219 }220 ctx.enable(gl.DEPTH_TEST);221 ctx.enable(gl.STENCIL_TEST);222 ctx.enable(gl.BLEND);223 ctx.blendFunc(gl.ONE, gl.ONE);224 ctx.blendEquation(gl.FUNC_ADD);225 ctx.bindTexture(gl.TEXTURE_2D, tex);226 texShader.setUniforms(ctx, texShaderID);227 rrUtil.drawQuad(ctx, texShaderID, [-1, -1, 0], [1, 1, 0]);228 dst.readViewport(ctx);229};230/**231 * @constructor232 * @extends {es3fFboTestCase.FboTestCase}233 * @param {string} name234 * @param {string} desc235 * @param {number} buffers236 * @param {number=} target237 */238es3fFboInvalidateTests.InvalidateDefaultSubFramebufferRenderCase = function(name, desc, buffers, target) {239 es3fFboTestCase.FboTestCase.call(this, name, desc);240 this.m_buffers = buffers;241 this.m_fboTarget = target || gl.FRAMEBUFFER;242};243setParentClass(es3fFboInvalidateTests.InvalidateDefaultSubFramebufferRenderCase, es3fFboTestCase.FboTestCase);244es3fFboInvalidateTests.InvalidateDefaultSubFramebufferRenderCase.prototype.render = function(dst) {245 var ctx = this.getCurrentContext();246 var invalidateX = this.getWidth() / 4;247 var invalidateY = this.getHeight() / 4;248 var invalidateW = this.getWidth() / 2;249 var invalidateH = this.getHeight() / 2;250 var attachments = getDefaultFBDiscardAttachments(this.m_buffers);251 var shader = new es3fFboTestUtil.FlatColorShader(gluShaderUtil.DataType.FLOAT_VEC4);252 var program = ctx.createProgram(shader);253 shader.setColor(ctx, program, [1, 0, 0, 1]);254 ctx.clearColor(0, 0, 0, 1);255 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);256 ctx.enable(gl.DEPTH_TEST);257 ctx.enable(gl.STENCIL_TEST);258 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);259 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);260 rrUtil.drawQuad(ctx, program, [-1, -1, -1], [1, 1, 1]);261 ctx.invalidateSubFramebuffer(this.m_fboTarget, attachments, invalidateX, invalidateY, invalidateW, invalidateH);262 // Clear invalidated buffers.263 ctx.clearColor(0, 1, 0, 1);264 ctx.clearStencil(1);265 ctx.scissor(invalidateX, invalidateY, invalidateW, invalidateH);266 ctx.enable(gl.SCISSOR_TEST);267 ctx.clear(this.m_buffers);268 ctx.disable(gl.SCISSOR_TEST);269 ctx.enable(gl.BLEND);270 ctx.blendFunc(gl.ONE, gl.ONE);271 ctx.blendEquation(gl.FUNC_ADD);272 shader.setColor(ctx, program, [0, 0, 1, 1]);273 rrUtil.drawQuad(ctx, program, [-1, -1, 0], [1, 1, 0]);274 dst.readViewport(ctx);275};276/**277 * @constructor278 * @extends {es3fFboTestCase.FboTestCase}279 * @param {string} name280 * @param {string} desc281 * @param {number} buffers282 */283es3fFboInvalidateTests.InvalidateDefaultSubFramebufferBindCase = function(name, desc, buffers) {284 es3fFboTestCase.FboTestCase.call(this, name, desc);285 this.m_buffers = buffers;286};287setParentClass(es3fFboInvalidateTests.InvalidateDefaultSubFramebufferBindCase, es3fFboTestCase.FboTestCase);288es3fFboInvalidateTests.InvalidateDefaultSubFramebufferBindCase.prototype.render = function(dst) {289 var ctx = this.getCurrentContext();290 var attachments = getDefaultFBDiscardAttachments(this.m_buffers);291 var invalidateX = this.getWidth() / 4;292 var invalidateY = this.getHeight() / 4;293 var invalidateW = this.getWidth() / 2;294 var invalidateH = this.getHeight() / 2;295 var shader = new es3fFboTestUtil.FlatColorShader(gluShaderUtil.DataType.FLOAT_VEC4);296 var program = ctx.createProgram(shader);297 /** @type {es3fFboTestUtil.Texture2DShader} */298 var texShader = new es3fFboTestUtil.Texture2DShader(299 [gluShaderUtil.DataType.SAMPLER_2D], gluShaderUtil.DataType.FLOAT_VEC4);300 /** @type {es3fFboTestUtil.GradientShader} */301 var gradShader = new es3fFboTestUtil.GradientShader(gluShaderUtil.DataType.FLOAT_VEC4);302 var texShaderID = ctx.createProgram(texShader);303 var gradShaderID = ctx.createProgram(gradShader);304 ctx.clearColor(0, 0, 0, 1);305 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);306 // Create fbo.307 var fbo = ctx.createFramebuffer();308 var tex = ctx.createTexture();309 ctx.bindTexture(gl.TEXTURE_2D, tex);310 ctx.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, this.getWidth(), this.getHeight(), 0, gl.RGBA, gl.UNSIGNED_BYTE, null);311 ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);312 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);313 ctx.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);314 ctx.bindTexture(gl.TEXTURE_2D, null);315 this.checkFramebufferStatus(gl.FRAMEBUFFER);316 ctx.bindFramebuffer(gl.FRAMEBUFFER, null);317 ctx.enable(gl.DEPTH_TEST);318 ctx.enable(gl.STENCIL_TEST);319 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);320 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);321 shader.setColor(ctx, program, [1, 0, 0, 1]);322 rrUtil.drawQuad(ctx, program, [-1, -1, -1], [1, 1, 1]);323 ctx.invalidateSubFramebuffer(gl.FRAMEBUFFER, attachments, invalidateX, invalidateY, invalidateW, invalidateH);324 // Switch to fbo and render gradient into it.325 ctx.disable(gl.DEPTH_TEST);326 ctx.disable(gl.STENCIL_TEST);327 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);328 gradShader.setGradient(ctx, gradShaderID, [0, 0, 0, 0], [1, 1, 1, 1]);329 rrUtil.drawQuad(ctx, gradShaderID, [-1, -1, 0], [1, 1, 0]);330 // Restore default fbo.331 ctx.bindFramebuffer(gl.FRAMEBUFFER, null);332 if ((this.m_buffers & gl.COLOR_BUFFER_BIT) != 0) {333 // Color was not preserved - fill with green.334 shader.setColor(ctx, program, [0, 1, 0, 1]);335 rrUtil.drawQuad(ctx, program, [-1, -1, 0], [1, 1, 0]);336 }337 // Clear invalidated buffers.338 ctx.clearColor(0, 1, 0, 1);339 ctx.clearStencil(1);340 ctx.scissor(invalidateX, invalidateY, invalidateW, invalidateH);341 ctx.enable(gl.SCISSOR_TEST);342 ctx.clear(this.m_buffers);343 ctx.disable(gl.SCISSOR_TEST);344 ctx.enable(gl.DEPTH_TEST);345 ctx.enable(gl.STENCIL_TEST);346 ctx.enable(gl.BLEND);347 ctx.blendFunc(gl.ONE, gl.ONE);348 ctx.blendEquation(gl.FUNC_ADD);349 ctx.bindTexture(gl.TEXTURE_2D, tex);350 texShader.setUniforms(ctx, texShaderID);351 rrUtil.drawQuad(ctx, texShaderID, [-1, -1, 0], [1, 1, 0]);352 dst.readViewport(ctx);353 ctx.disable(gl.DEPTH_TEST);354 ctx.disable(gl.STENCIL_TEST);355 ctx.disable(gl.BLEND);356};357/**358 * @constructor359 * @extends {es3fFboTestCase.FboTestCase}360 * @param {string} name361 * @param {string} desc362 * @param {number} colorFmt363 * @param {number} depthStencilFmt364 * @param {number} invalidateBuffers365 */366es3fFboInvalidateTests.InvalidateFboRenderCase = function(name, desc, colorFmt, depthStencilFmt, invalidateBuffers) {367 es3fFboTestCase.FboTestCase.call(this, name, desc);368 this.m_colorFmt = colorFmt;369 this.m_depthStencilFmt = depthStencilFmt;370 this.m_invalidateBuffers = invalidateBuffers;371};372setParentClass(es3fFboInvalidateTests.InvalidateFboRenderCase, es3fFboTestCase.FboTestCase);373es3fFboInvalidateTests.InvalidateFboRenderCase.prototype.preCheck = function() {374 if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt);375 if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt);376 return true; // No exception thrown377};378es3fFboInvalidateTests.InvalidateFboRenderCase.prototype.render = function(dst) {379 var ctx = this.getCurrentContext();380 var colorFmt = gluTextureUtil.mapGLInternalFormat(this.m_colorFmt);381 var depthStencilFmt = this.m_depthStencilFmt != gl.NONE ? gluTextureUtil.mapGLInternalFormat(this.m_depthStencilFmt) : new tcuTexture.TextureFormat(null, null);382 var colorFmtInfo = tcuTextureUtil.getTextureFormatInfo(colorFmt);383 var depth = depthStencilFmt.order == tcuTexture.ChannelOrder.D || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;384 var stencil = depthStencilFmt.order == tcuTexture.ChannelOrder.S || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;385 var cBias = colorFmtInfo.valueMin;386 var cScale = deMath.subtract(colorFmtInfo.valueMax, colorFmtInfo.valueMin);387 var flatShader = new es3fFboTestUtil.FlatColorShader(gluShaderUtil.DataType.FLOAT_VEC4);388 var attachments = getFBODiscardAttachments(this.m_invalidateBuffers);389 var flatShaderID = ctx.createProgram(flatShader);390 // Create fbo.391 var colorRbo = ctx.createRenderbuffer();392 ctx.bindRenderbuffer(gl.RENDERBUFFER, colorRbo);393 ctx.renderbufferStorage(gl.RENDERBUFFER, this.m_colorFmt, this.getWidth(), this.getHeight());394 if (this.m_depthStencilFmt != gl.NONE) {395 var depthStencilRbo = ctx.createRenderbuffer();396 ctx.bindRenderbuffer(gl.RENDERBUFFER, depthStencilRbo);397 ctx.renderbufferStorage(gl.RENDERBUFFER, this.m_depthStencilFmt, this.getWidth(), this.getHeight());398 }399 var fbo = ctx.createFramebuffer();400 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);401 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorRbo);402 if (depth)403 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);404 if (stencil)405 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);406 this.checkFramebufferStatus(gl.FRAMEBUFFER);407 ctx.clearColor(0, 0, 0, 1);408 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);409 ctx.enable(gl.DEPTH_TEST);410 ctx.enable(gl.STENCIL_TEST);411 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);412 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);413 flatShader.setColor(ctx, flatShaderID, deMath.add(deMath.multiply([1, 0, 0, 1], cScale), cBias));414 rrUtil.drawQuad(ctx, flatShaderID, [-1, -1, -1], [1, 1, 1]);415 ctx.invalidateFramebuffer(gl.FRAMEBUFFER, attachments);416 if ((this.m_invalidateBuffers & gl.COLOR_BUFFER_BIT) != 0) {417 // Color was not preserved - fill with green.418 ctx.disable(gl.DEPTH_TEST);419 ctx.disable(gl.STENCIL_TEST);420 flatShader.setColor(ctx, flatShaderID, deMath.add(deMath.multiply([0, 1, 0, 1], cScale), cBias));421 rrUtil.drawQuad(ctx, flatShaderID, [-1, -1, 0], [1, 1, 0]);422 ctx.enable(gl.DEPTH_TEST);423 ctx.enable(gl.STENCIL_TEST);424 }425 if ((this.m_invalidateBuffers & gl.DEPTH_BUFFER_BIT) != 0) {426 // Depth was not preserved.427 ctx.depthFunc(gl.ALWAYS);428 }429 if ((this.m_invalidateBuffers & gl.STENCIL_BUFFER_BIT) == 0) {430 // Stencil was preserved.431 ctx.stencilFunc(gl.EQUAL, 1, 0xff);432 }433 ctx.enable(gl.BLEND);434 ctx.blendFunc(gl.ONE, gl.ONE);435 ctx.blendEquation(gl.FUNC_ADD);436 flatShader.setColor(ctx, flatShaderID, deMath.add(deMath.multiply([0, 0, 1, 1], cScale), cBias));437 rrUtil.drawQuad(ctx, flatShaderID, [-1, -1, 0], [1, 1, 0]);438 es3fFboTestUtil.readPixels(ctx, dst, 0, 0, this.getWidth(), this.getHeight(), colorFmt, colorFmtInfo.lookupScale, colorFmtInfo.lookupBias);439};440/**441 * @constructor442 * @extends {es3fFboTestCase.FboTestCase}443 * @param {string} name444 * @param {string} desc445 * @param {number} colorFmt446 * @param {number} depthStencilFmt447 * @param {number} invalidateBuffers448 */449es3fFboInvalidateTests.InvalidateFboUnbindReadCase = function(name, desc, colorFmt, depthStencilFmt, invalidateBuffers) {450 es3fFboTestCase.FboTestCase.call(this, name, desc);451 this.m_colorFmt = colorFmt;452 this.m_depthStencilFmt = depthStencilFmt;453 this.m_invalidateBuffers = invalidateBuffers;454};455setParentClass(es3fFboInvalidateTests.InvalidateFboUnbindReadCase, es3fFboTestCase.FboTestCase);456es3fFboInvalidateTests.InvalidateFboUnbindReadCase.prototype.preCheck = function() {457 if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt);458 if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt);459 return true; // No exception thrown460};461es3fFboInvalidateTests.InvalidateFboUnbindReadCase.prototype.render = function(dst) {462 var ctx = this.getCurrentContext();463 var colorFmt = gluTextureUtil.mapGLInternalFormat(this.m_colorFmt);464 var depthStencilFmt = this.m_depthStencilFmt != gl.NONE ? gluTextureUtil.mapGLInternalFormat(this.m_depthStencilFmt) : new tcuTexture.TextureFormat(null, null);465 var colorFmtInfo = tcuTextureUtil.getTextureFormatInfo(colorFmt);466 var depth = depthStencilFmt.order == tcuTexture.ChannelOrder.D || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;467 var stencil = depthStencilFmt.order == tcuTexture.ChannelOrder.S || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;468 var attachments = getFBODiscardAttachments(this.m_invalidateBuffers);469 // Create fbo.470 var transferFmt = gluTextureUtil.getTransferFormat(colorFmt);471 var gradShader = new es3fFboTestUtil.GradientShader(gluShaderUtil.DataType.FLOAT_VEC4);472 var gradShaderID = ctx.createProgram(gradShader);473 var colorTex = ctx.createTexture();474 ctx.bindTexture(gl.TEXTURE_2D, colorTex);475 ctx.texImage2D(gl.TEXTURE_2D, 0, this.m_colorFmt, this.getWidth(), this.getHeight(), 0, transferFmt.format, transferFmt.dataType, null);476 ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);477 if (this.m_depthStencilFmt != gl.NONE) {478 transferFmt = gluTextureUtil.getTransferFormat(depthStencilFmt);479 var depthStencilTex = ctx.createTexture();480 ctx.bindTexture(gl.TEXTURE_2D, depthStencilTex);481 ctx.texImage2D(gl.TEXTURE_2D, 0, this.m_depthStencilFmt, this.getWidth(), this.getHeight(), 0, transferFmt.format, transferFmt.dataType, null);482 ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);483 ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);484 }485 var fbo = ctx.createFramebuffer();486 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);487 ctx.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorTex, 0);488 if (depth)489 ctx.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, depthStencilTex, 0);490 if (stencil)491 ctx.framebufferTexture2D(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.TEXTURE_2D, depthStencilTex, 0);492 this.checkFramebufferStatus(gl.FRAMEBUFFER);493 ctx.clearColor(0, 0, 0, 1);494 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);495 ctx.enable(gl.DEPTH_TEST);496 ctx.enable(gl.STENCIL_TEST);497 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);498 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);499 gradShader.setGradient(ctx, gradShaderID, colorFmtInfo.valueMin, colorFmtInfo.valueMax);500 rrUtil.drawQuad(ctx, gradShaderID, [-1, -1, -1], [1, 1, 1]);501 ctx.invalidateFramebuffer(gl.FRAMEBUFFER, attachments);502 ctx.bindFramebuffer(gl.FRAMEBUFFER, null);503 ctx.disable(gl.DEPTH_TEST);504 ctx.disable(gl.STENCIL_TEST);505 if ((this.m_invalidateBuffers & gl.DEPTH_BUFFER_BIT) != 0) {506 // Render color.507 /** @type {es3fFboTestUtil.Texture2DShader} */508 var texShader = new es3fFboTestUtil.Texture2DShader(509 [gluTextureUtil.getSampler2DType(colorFmt)], gluShaderUtil.DataType.FLOAT_VEC4);510 var texShaderID = ctx.createProgram(texShader);511 texShader.setTexScaleBias(0, colorFmtInfo.lookupScale, colorFmtInfo.lookupBias);512 texShader.setUniforms(ctx, texShaderID);513 ctx.bindTexture(gl.TEXTURE_2D, colorTex);514 rrUtil.drawQuad(ctx, texShaderID, [-1, -1, 0], [1, 1, 0]);515 } else {516 // Render depth.517 texShader = new es3fFboTestUtil.Texture2DShader(518 [gluTextureUtil.getSampler2DType(depthStencilFmt)], gluShaderUtil.DataType.FLOAT_VEC4);519 texShaderID = ctx.createProgram(texShader);520 texShader.setUniforms(ctx, texShaderID);521 ctx.bindTexture(gl.TEXTURE_2D, depthStencilTex);522 rrUtil.drawQuad(ctx, texShaderID, [-1, -1, 0], [1, 1, 0]);523 }524 dst.readViewport(ctx);525};526/**527 * @constructor528 * @extends {es3fFboTestCase.FboTestCase}529 * @param {string} name530 * @param {string} desc531 * @param {number} numSamples532 * @param {number} invalidateBuffers533 */534es3fFboInvalidateTests.InvalidateFboUnbindBlitCase = function(name, desc, numSamples, invalidateBuffers) {535// \note Use fullscreen viewport when multisampling - we can't allow GLES3Context do its536// behing-the-scenes viewport position randomization, because with glBlitFramebuffer,537// source and destination rectangles must match when multisampling.538 es3fFboTestCase.FboTestCase.call(this, name, desc, numSamples > 0);539 this.m_numSamples = numSamples;540 this.m_colorFmt = getCompatibleColorFormat();541 this.m_depthStencilFmt = getCompatibleDepthStencilFormat();542 this.m_invalidateBuffers = invalidateBuffers;543};544setParentClass(es3fFboInvalidateTests.InvalidateFboUnbindBlitCase, es3fFboTestCase.FboTestCase);545es3fFboInvalidateTests.InvalidateFboUnbindBlitCase.prototype.preCheck = function() {546 if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt);547 if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt);548 return true; // No exception thrown549};550es3fFboInvalidateTests.InvalidateFboUnbindBlitCase.prototype.render = function(dst) {551 var ctx = this.getCurrentContext();552 var quadSizePixels = [this.m_numSamples == 0 ? this.getWidth() : Math.min(128, this.getWidth()),553 this.m_numSamples == 0 ? this.getHeight() : Math.min(128, this.getHeight())];554 var quadNDCLeftBottomXY = [-1, -1];555 var quadNDCSize = [2 * quadSizePixels[0] / this.getWidth(), 2 * quadSizePixels[1] / this.getHeight()];556 var quadNDCRightTopXY = deMath.add(quadNDCLeftBottomXY, quadNDCSize);557 var depthStencilFmt = this.m_depthStencilFmt != gl.NONE ? gluTextureUtil.mapGLInternalFormat(this.m_depthStencilFmt) : new tcuTexture.TextureFormat(null, null);558 var depth = depthStencilFmt.order == tcuTexture.ChannelOrder.D || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;559 var stencil = depthStencilFmt.order == tcuTexture.ChannelOrder.S || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;560 var flatShader = new es3fFboTestUtil.FlatColorShader(gluShaderUtil.DataType.FLOAT_VEC4);561 var attachments = getFBODiscardAttachments(this.m_invalidateBuffers);562 var flatShaderID = ctx.createProgram(flatShader);563 ctx.clearColor(0, 0, 0, 1);564 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);565 // Create fbo.566 var colorRbo = ctx.createRenderbuffer();567 ctx.bindRenderbuffer(gl.RENDERBUFFER, colorRbo);568 ctx.renderbufferStorageMultisample(gl.RENDERBUFFER, this.m_numSamples, this.m_colorFmt, quadSizePixels[0], quadSizePixels[1]);569 if (this.m_depthStencilFmt != gl.NONE) {570 var depthStencilRbo = ctx.createRenderbuffer();571 ctx.bindRenderbuffer(gl.RENDERBUFFER, depthStencilRbo);572 ctx.renderbufferStorageMultisample(gl.RENDERBUFFER, this.m_numSamples, this.m_depthStencilFmt, quadSizePixels[0], quadSizePixels[1]);573 }574 var fbo = ctx.createFramebuffer();575 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);576 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorRbo);577 if (depth)578 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);579 if (stencil)580 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);581 this.checkFramebufferStatus(gl.FRAMEBUFFER);582 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);583 ctx.enable(gl.DEPTH_TEST);584 ctx.enable(gl.STENCIL_TEST);585 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);586 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);587 flatShader.setColor(ctx, flatShaderID, [1, 0, 0, 1]);588 rrUtil.drawQuad(ctx, flatShaderID,589 [quadNDCLeftBottomXY[0], quadNDCLeftBottomXY[1], -1],590 [quadNDCRightTopXY[0], quadNDCRightTopXY[1], 1]);591 ctx.invalidateFramebuffer(gl.FRAMEBUFFER, attachments);592 // Set default framebuffer as draw framebuffer and blit preserved buffers.593 ctx.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);594 ctx.blitFramebuffer(0, 0, quadSizePixels[0], quadSizePixels[1],595 0, 0, quadSizePixels[0], quadSizePixels[1],596 (gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT) & ~this.m_invalidateBuffers, gl.NEAREST);597 ctx.bindFramebuffer(gl.READ_FRAMEBUFFER, null);598 if ((this.m_invalidateBuffers & gl.COLOR_BUFFER_BIT) != 0) {599 // Color was not preserved - fill with green.600 ctx.disable(gl.DEPTH_TEST);601 ctx.disable(gl.STENCIL_TEST);602 flatShader.setColor(ctx, flatShaderID, [0, 1, 0, 1]);603 rrUtil.drawQuad(ctx, flatShaderID,604 [quadNDCLeftBottomXY[0], quadNDCLeftBottomXY[1], 0],605 [quadNDCRightTopXY[0], quadNDCRightTopXY[1], 0]);606 ctx.enable(gl.DEPTH_TEST);607 ctx.enable(gl.STENCIL_TEST);608 }609 if ((this.m_invalidateBuffers & gl.DEPTH_BUFFER_BIT) != 0) {610 // Depth was not preserved.611 ctx.depthFunc(gl.ALWAYS);612 }613 if ((this.m_invalidateBuffers & gl.STENCIL_BUFFER_BIT) == 0) {614 // Stencil was preserved.615 ctx.stencilFunc(gl.EQUAL, 1, 0xff);616 }617 ctx.enable(gl.BLEND);618 ctx.blendFunc(gl.ONE, gl.ONE);619 ctx.blendEquation(gl.FUNC_ADD);620 flatShader.setColor(ctx, flatShaderID, [0, 0, 1, 1]);621 rrUtil.drawQuad(ctx, flatShaderID,622 [quadNDCLeftBottomXY[0], quadNDCLeftBottomXY[1], 0],623 [quadNDCRightTopXY[0], quadNDCRightTopXY[1], 0]);624 dst.readViewport(ctx, [0, 0, quadSizePixels[0], quadSizePixels[1]]);625};626/**627 * @constructor628 * @extends {es3fFboTestCase.FboTestCase}629 * @param {string} name630 * @param {string} desc631 * @param {number} colorFmt632 * @param {number} depthStencilFmt633 * @param {number} invalidateBuffers634 */635es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase = function(name, desc, colorFmt, depthStencilFmt, invalidateBuffers) {636 es3fFboTestCase.FboTestCase.call(this, name, desc);637 this.m_colorFmt = colorFmt;638 this.m_depthStencilFmt = depthStencilFmt;639 this.m_invalidateBuffers = invalidateBuffers;640};641setParentClass(es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase, es3fFboTestCase.FboTestCase);642es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase.prototype.preCheck = function() {643 if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt);644 if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt);645 return true; // No exception thrown646};647es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase.prototype.compare = function(reference, result) {648 var threshold = tcuRGBA.max(es3fFboTestUtil.getFormatThreshold(this.m_colorFmt), new tcuRGBA.RGBA([12, 12, 12, 12]));649 return tcuImageCompare.bilinearCompare('Result', 'Image comparison result', reference.getAccess(), result.getAccess(), threshold);650};651es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase.prototype.render = function(dst) {652 var ctx = this.getCurrentContext();653 var colorFmt = gluTextureUtil.mapGLInternalFormat(this.m_colorFmt);654 var depthStencilFmt = this.m_depthStencilFmt != gl.NONE ? gluTextureUtil.mapGLInternalFormat(this.m_depthStencilFmt) : new tcuTexture.TextureFormat(null, null);655 var colorFmtInfo = tcuTextureUtil.getTextureFormatInfo(colorFmt);656 var depth = depthStencilFmt.order == tcuTexture.ChannelOrder.D || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;657 var stencil = depthStencilFmt.order == tcuTexture.ChannelOrder.S || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;658 var attachments = getFBODiscardAttachments(this.m_invalidateBuffers);659 // Create fbo.660 var transferFmt = gluTextureUtil.getTransferFormat(colorFmt);661 var gradShader = new es3fFboTestUtil.GradientShader(es3fFboTestUtil.getFragmentOutputType(colorFmt));662 var gradShaderID = ctx.createProgram(gradShader);663 var invalidateX = 0;664 var invalidateY = 0;665 var invalidateW = this.getWidth() / 2;666 var invalidateH = this.getHeight();667 var readX = invalidateW;668 var readY = 0;669 var readW = this.getWidth() / 2;670 var readH = this.getHeight();671 var colorTex = ctx.createTexture();672 ctx.bindTexture(gl.TEXTURE_2D, colorTex);673 ctx.texImage2D(gl.TEXTURE_2D, 0, this.m_colorFmt, this.getWidth(), this.getHeight(), 0, transferFmt.format, transferFmt.dataType, null);674 ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);675 ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);676 if (this.m_depthStencilFmt != gl.NONE) {677 transferFmt = gluTextureUtil.getTransferFormat(depthStencilFmt);678 var depthStencilTex = ctx.createTexture();679 ctx.bindTexture(gl.TEXTURE_2D, depthStencilTex);680 ctx.texImage2D(gl.TEXTURE_2D, 0, this.m_depthStencilFmt, this.getWidth(), this.getHeight(), 0, transferFmt.format, transferFmt.dataType, null);681 ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);682 ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);683 }684 var fbo = ctx.createFramebuffer();685 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);686 ctx.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorTex, 0);687 if (depth)688 ctx.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, depthStencilTex, 0);689 if (stencil)690 ctx.framebufferTexture2D(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.TEXTURE_2D, depthStencilTex, 0);691 this.checkFramebufferStatus(gl.FRAMEBUFFER);692 this.clearColorBuffer(colorFmt, [0.0, 0.0, 0.0, 1.0]);693 ctx.clear(gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);694 ctx.enable(gl.DEPTH_TEST);695 ctx.enable(gl.STENCIL_TEST);696 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);697 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);698 gradShader.setGradient(ctx, gradShaderID, colorFmtInfo.valueMin, colorFmtInfo.valueMax);699 rrUtil.drawQuad(ctx, gradShaderID, [-1, -1, -1], [1, 1, 1]);700 ctx.invalidateSubFramebuffer(gl.FRAMEBUFFER, attachments, invalidateX, invalidateY, invalidateW, invalidateH);701 ctx.bindFramebuffer(gl.FRAMEBUFFER, null);702 ctx.disable(gl.DEPTH_TEST);703 ctx.disable(gl.STENCIL_TEST);704 ctx.clearColor(0.25, 0.5, 0.75, 1);705 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);706 // Limit read area using scissor.707 ctx.scissor(readX, readY, readW, readH);708 ctx.enable(gl.SCISSOR_TEST);709 if ((this.m_invalidateBuffers & gl.COLOR_BUFFER_BIT) != 0) {710 // Render color.711 /** @type {es3fFboTestUtil.Texture2DShader} */712 var texShader = new es3fFboTestUtil.Texture2DShader(713 [gluTextureUtil.getSampler2DType(colorFmt)], gluShaderUtil.DataType.FLOAT_VEC4);714 var texShaderID = ctx.createProgram(texShader);715 texShader.setTexScaleBias(0, colorFmtInfo.lookupScale, colorFmtInfo.lookupBias);716 texShader.setUniforms(ctx, texShaderID);717 ctx.bindTexture(gl.TEXTURE_2D, colorTex);718 rrUtil.drawQuad(ctx, texShaderID, [-1, -1, 0], [1, 1, 0]);719 } else {720 // Render depth.721 texShader = new es3fFboTestUtil.Texture2DShader(722 [gluTextureUtil.getSampler2DType(depthStencilFmt)], gluShaderUtil.DataType.FLOAT_VEC4);723 texShaderID = ctx.createProgram(texShader);724 texShader.setUniforms(ctx, texShaderID);725 ctx.bindTexture(gl.TEXTURE_2D, depthStencilTex);726 rrUtil.drawQuad(ctx, texShaderID, [-1, -1, 0], [1, 1, 0]);727 }728 dst.readViewport(ctx);729};730/**731 * @constructor732 * @extends {es3fFboTestCase.FboTestCase}733 * @param {string} name734 * @param {string} desc735 * @param {number} colorFmt736 * @param {number} depthStencilFmt737 * @param {number} invalidateBuffers738 */739es3fFboInvalidateTests.InvalidateSubFboRenderCase = function(name, desc, colorFmt, depthStencilFmt, invalidateBuffers) {740 es3fFboTestCase.FboTestCase.call(this, name, desc);741 this.m_colorFmt = colorFmt;742 this.m_depthStencilFmt = depthStencilFmt;743 this.m_invalidateBuffers = invalidateBuffers;744};745setParentClass(es3fFboInvalidateTests.InvalidateSubFboRenderCase, es3fFboTestCase.FboTestCase);746es3fFboInvalidateTests.InvalidateSubFboRenderCase.prototype.preCheck = function() {747 if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt);748 if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt);749 return true; // No exception thrown750};751es3fFboInvalidateTests.InvalidateSubFboRenderCase.prototype.render = function(dst) {752 var ctx = this.getCurrentContext();753 var colorFmt = gluTextureUtil.mapGLInternalFormat(this.m_colorFmt);754 var depthStencilFmt = this.m_depthStencilFmt != gl.NONE ? gluTextureUtil.mapGLInternalFormat(this.m_depthStencilFmt) : new tcuTexture.TextureFormat(null, null);755 var colorFmtInfo = tcuTextureUtil.getTextureFormatInfo(colorFmt);756 var depth = depthStencilFmt.order == tcuTexture.ChannelOrder.D || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;757 var stencil = depthStencilFmt.order == tcuTexture.ChannelOrder.S || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;758 var cBias = colorFmtInfo.valueMin;759 var cScale = deMath.subtract(colorFmtInfo.valueMax, colorFmtInfo.valueMin);760 var flatShader = new es3fFboTestUtil.FlatColorShader(gluShaderUtil.DataType.FLOAT_VEC4);761 var attachments = getFBODiscardAttachments(this.m_invalidateBuffers);762 var flatShaderID = ctx.createProgram(flatShader);763 var invalidateX = this.getWidth() / 4;764 var invalidateY = this.getHeight() / 4;765 var invalidateW = this.getWidth() / 2;766 var invalidateH = this.getHeight() / 2;767 // Create fbo.768 var colorRbo = ctx.createRenderbuffer();769 ctx.bindRenderbuffer(gl.RENDERBUFFER, colorRbo);770 ctx.renderbufferStorage(gl.RENDERBUFFER, this.m_colorFmt, this.getWidth(), this.getHeight());771 if (this.m_depthStencilFmt != gl.NONE) {772 var depthStencilRbo = ctx.createRenderbuffer();773 ctx.bindRenderbuffer(gl.RENDERBUFFER, depthStencilRbo);774 ctx.renderbufferStorage(gl.RENDERBUFFER, this.m_depthStencilFmt, this.getWidth(), this.getHeight());775 }776 var fbo = ctx.createFramebuffer();777 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);778 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorRbo);779 if (depth)780 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);781 if (stencil)782 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);783 this.checkFramebufferStatus(gl.FRAMEBUFFER);784 ctx.clearBufferfv(gl.COLOR, 0, deMath.add(deMath.multiply([0, 0, 0, 1], cScale), cBias));785 ctx.clearBufferfi(gl.DEPTH_STENCIL, 0, 1, 0);786 ctx.enable(gl.DEPTH_TEST);787 ctx.enable(gl.STENCIL_TEST);788 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);789 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);790 flatShader.setColor(ctx, flatShaderID, deMath.add(deMath.multiply([1, 0, 0, 1], cScale), cBias));791 rrUtil.drawQuad(ctx, flatShaderID, [-1, -1, -1], [1, 1, 1]);792 ctx.invalidateSubFramebuffer(gl.FRAMEBUFFER, attachments, invalidateX, invalidateY, invalidateW, invalidateH);793 // Clear invalidated buffers.794 ctx.scissor(invalidateX, invalidateY, invalidateW, invalidateH);795 ctx.enable(gl.SCISSOR_TEST);796 if (this.m_invalidateBuffers & gl.COLOR_BUFFER_BIT)797 ctx.clearBufferfv(gl.COLOR, 0, deMath.add(deMath.multiply([0, 1, 0, 1], cScale), cBias));798 ctx.clear(this.m_invalidateBuffers & ~gl.COLOR_BUFFER_BIT);799 ctx.disable(gl.SCISSOR_TEST);800 ctx.enable(gl.BLEND);801 ctx.blendFunc(gl.ONE, gl.ONE);802 ctx.blendEquation(gl.FUNC_ADD);803 flatShader.setColor(ctx, flatShaderID, deMath.add(deMath.multiply([0, 0, 1, 1], cScale), cBias));804 rrUtil.drawQuad(ctx, flatShaderID, [-1, -1, 0], [1, 1, 0]);805 es3fFboTestUtil.readPixels(ctx, dst, 0, 0, this.getWidth(), this.getHeight(), colorFmt, colorFmtInfo.lookupScale, colorFmtInfo.lookupBias);806};807/**808 * @constructor809 * @extends {es3fFboTestCase.FboTestCase}810 * @param {string} name811 * @param {string} desc812 * @param {number} numSamples813 * @param {number} invalidateBuffers814 */815es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase = function(name, desc, numSamples, invalidateBuffers) {816// \note Use fullscreen viewport when multisampling - we can't allow GLES3Context do its817// behing-the-scenes viewport position randomization, because with glBlitFramebuffer,818// source and destination rectangles must match when multisampling.819 es3fFboTestCase.FboTestCase.call(this, name, desc, numSamples > 0);820 this.m_numSamples = numSamples;821 this.m_colorFmt = getCompatibleColorFormat();822 this.m_depthStencilFmt = getCompatibleDepthStencilFormat();823 this.m_invalidateBuffers = invalidateBuffers;824};825setParentClass(es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase, es3fFboTestCase.FboTestCase);826es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase.prototype.preCheck = function() {827 if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt);828 if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt);829 return true; // No exception thrown830};831es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase.prototype.render = function(dst) {832 var ctx = this.getCurrentContext();833 var quadSizePixels = [this.m_numSamples == 0 ? this.getWidth() : Math.min(128, this.getWidth()),834 this.m_numSamples == 0 ? this.getHeight() : Math.min(128, this.getHeight())];835 var quadNDCLeftBottomXY = [-1, -1];836 var quadNDCSize = [2 * quadSizePixels[0] / this.getWidth(), 2 * quadSizePixels[1] / this.getHeight()];837 var quadNDCRightTopXY = deMath.add(quadNDCLeftBottomXY, quadNDCSize);838 var depthStencilFmt = this.m_depthStencilFmt != gl.NONE ? gluTextureUtil.mapGLInternalFormat(this.m_depthStencilFmt) : new tcuTexture.TextureFormat(null, null);839 var depth = depthStencilFmt.order == tcuTexture.ChannelOrder.D || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;840 var stencil = depthStencilFmt.order == tcuTexture.ChannelOrder.S || depthStencilFmt.order == tcuTexture.ChannelOrder.DS;841 var flatShader = new es3fFboTestUtil.FlatColorShader(gluShaderUtil.DataType.FLOAT_VEC4);842 var attachments = getFBODiscardAttachments(this.m_invalidateBuffers);843 var flatShaderID = ctx.createProgram(flatShader);844 var invalidateX = 0;845 var invalidateY = 0;846 var invalidateW = quadSizePixels[0] / 2;847 var invalidateH = quadSizePixels[1];848 var blitX0 = invalidateW;849 var blitY0 = 0;850 var blitX1 = blitX0 + quadSizePixels[0] / 2;851 var blitY1 = blitY0 + quadSizePixels[1];852 ctx.clearColor(0, 0, 0, 1);853 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);854 // Create fbo.855 var colorRbo = ctx.createRenderbuffer();856 ctx.bindRenderbuffer(gl.RENDERBUFFER, colorRbo);857 ctx.renderbufferStorageMultisample(gl.RENDERBUFFER, this.m_numSamples, this.m_colorFmt, quadSizePixels[0], quadSizePixels[1]);858 if (this.m_depthStencilFmt != gl.NONE) {859 var depthStencilRbo = ctx.createRenderbuffer();860 ctx.bindRenderbuffer(gl.RENDERBUFFER, depthStencilRbo);861 ctx.renderbufferStorageMultisample(gl.RENDERBUFFER, this.m_numSamples, this.m_depthStencilFmt, quadSizePixels[0], quadSizePixels[1]);862 }863 var fbo = ctx.createFramebuffer();864 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);865 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorRbo);866 if (depth)867 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);868 if (stencil)869 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);870 this.checkFramebufferStatus(gl.FRAMEBUFFER);871 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);872 ctx.enable(gl.DEPTH_TEST);873 ctx.enable(gl.STENCIL_TEST);874 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);875 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);876 flatShader.setColor(ctx, flatShaderID, [1, 0, 0, 1]);877 rrUtil.drawQuad(ctx, flatShaderID,878 [quadNDCLeftBottomXY[0], quadNDCLeftBottomXY[1], -1],879 [quadNDCRightTopXY[0], quadNDCRightTopXY[1], 1]);880 ctx.invalidateSubFramebuffer(gl.FRAMEBUFFER, attachments, invalidateX, invalidateY, invalidateW, invalidateH);881 // Set default framebuffer as draw framebuffer and blit preserved buffers.882 ctx.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);883 ctx.blitFramebuffer(blitX0, blitY0, blitX1, blitY1, blitX0, blitY0, blitX1, blitY1,884 (gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT) & ~this.m_invalidateBuffers, gl.NEAREST);885 ctx.bindFramebuffer(gl.READ_FRAMEBUFFER, null);886 if ((this.m_invalidateBuffers & gl.COLOR_BUFFER_BIT) != 0) {887 // Color was not preserved - fill with green.888 ctx.disable(gl.DEPTH_TEST);889 ctx.disable(gl.STENCIL_TEST);890 flatShader.setColor(ctx, flatShaderID, [0, 1, 0, 1]);891 rrUtil.drawQuad(ctx, flatShaderID,892 [quadNDCLeftBottomXY[0], quadNDCLeftBottomXY[1], 0],893 [quadNDCRightTopXY[0], quadNDCRightTopXY[1], 0]);894 ctx.enable(gl.DEPTH_TEST);895 ctx.enable(gl.STENCIL_TEST);896 }897 if ((this.m_invalidateBuffers & gl.DEPTH_BUFFER_BIT) != 0) {898 // Depth was not preserved.899 ctx.depthFunc(gl.ALWAYS);900 }901 if ((this.m_invalidateBuffers & gl.STENCIL_BUFFER_BIT) == 0) {902 // Stencil was preserved.903 ctx.stencilFunc(gl.EQUAL, 1, 0xff);904 }905 ctx.enable(gl.BLEND);906 ctx.blendFunc(gl.ONE, gl.ONE);907 ctx.blendEquation(gl.FUNC_ADD);908 flatShader.setColor(ctx, flatShaderID, [0, 0, 1, 1]);909 rrUtil.drawQuad(ctx, flatShaderID,910 [quadNDCLeftBottomXY[0], quadNDCLeftBottomXY[1], 0],911 [quadNDCRightTopXY[0], quadNDCRightTopXY[1], 0]);912 dst.readViewport(ctx, [0, 0, quadSizePixels[0], quadSizePixels[1]]);913};914/**915 * @constructor916 * @extends {es3fFboTestCase.FboTestCase}917 * @param {string} name918 * @param {string} desc919 * @param {number} boundTarget920 * @param {number} invalidateTarget921 * @param {Array<number>} invalidateAttachments922 */923es3fFboInvalidateTests.InvalidateFboTargetCase = function(name, desc, boundTarget, invalidateTarget, invalidateAttachments) {924 es3fFboTestCase.FboTestCase.call(this, name, desc);925 this.m_boundTarget = boundTarget;926 this.m_invalidateTarget = invalidateTarget;927 this.m_invalidateAttachments = invalidateAttachments;928};929setParentClass(es3fFboInvalidateTests.InvalidateFboTargetCase, es3fFboTestCase.FboTestCase);930es3fFboInvalidateTests.InvalidateFboTargetCase.prototype.render = function(dst) {931 var ctx = this.getCurrentContext();932 var colorFormat = gl.RGBA8;933 var depthStencilFormat = gl.DEPTH24_STENCIL8;934 var colorFmt = gluTextureUtil.mapGLInternalFormat(colorFormat);935 var colorFmtInfo = tcuTextureUtil.getTextureFormatInfo(colorFmt);936 var cBias = colorFmtInfo.valueMin;937 var cScale = deMath.subtract(colorFmtInfo.valueMax, colorFmtInfo.valueMin);938 var isDiscarded = (this.m_boundTarget == gl.FRAMEBUFFER) ||939 (this.m_invalidateTarget == gl.FRAMEBUFFER && this.m_boundTarget == gl.DRAW_FRAMEBUFFER) ||940 (this.m_invalidateTarget == this.m_boundTarget);941 var isColorDiscarded = isDiscarded && hasAttachment(this.m_invalidateAttachments, gl.COLOR_ATTACHMENT0);942 var isDepthDiscarded = isDiscarded && (hasAttachment(this.m_invalidateAttachments, gl.DEPTH_ATTACHMENT) || hasAttachment(this.m_invalidateAttachments, gl.DEPTH_STENCIL_ATTACHMENT));943 var isStencilDiscarded = isDiscarded && (hasAttachment(this.m_invalidateAttachments, gl.STENCIL_ATTACHMENT) || hasAttachment(this.m_invalidateAttachments, gl.DEPTH_STENCIL_ATTACHMENT));944 var flatShader = new es3fFboTestUtil.FlatColorShader(gluShaderUtil.DataType.FLOAT_VEC4);945 var flatShaderID = ctx.createProgram(flatShader);946 // Create fbo.947 var colorRbo = ctx.createRenderbuffer();948 ctx.bindRenderbuffer(gl.RENDERBUFFER, colorRbo);949 ctx.renderbufferStorage(gl.RENDERBUFFER, colorFormat, this.getWidth(), this.getHeight());950 var depthStencilRbo = ctx.createRenderbuffer();951 ctx.bindRenderbuffer(gl.RENDERBUFFER, depthStencilRbo);952 ctx.renderbufferStorage(gl.RENDERBUFFER, depthStencilFormat, this.getWidth(), this.getHeight());953 var fbo = ctx.createFramebuffer();954 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);955 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorRbo);956 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);957 ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, depthStencilRbo);958 this.checkFramebufferStatus(gl.FRAMEBUFFER);959 ctx.clearColor(0, 0, 0, 1);960 ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);961 ctx.enable(gl.DEPTH_TEST);962 ctx.enable(gl.STENCIL_TEST);963 ctx.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);964 ctx.stencilFunc(gl.ALWAYS, 1, 0xff);965 flatShader.setColor(ctx, flatShaderID, deMath.add(deMath.multiply([1, 0, 0, 1], cScale), cBias));966 rrUtil.drawQuad(ctx, flatShaderID, [-1, -1, -1], [1, 1, 1]);967 // Bound FBO to test target and default to other968 if (this.m_boundTarget != gl.FRAMEBUFFER) {969 // Dummy fbo is used as complemeting target (read when discarding draw for example).970 // \note Framework takes care of deleting objects at the end of test case.971 var dummyTarget = this.m_boundTarget == gl.DRAW_FRAMEBUFFER ? gl.READ_FRAMEBUFFER : gl.DRAW_FRAMEBUFFER;972 var dummyColorRbo = ctx.createRenderbuffer();973 ctx.bindRenderbuffer(gl.RENDERBUFFER, dummyColorRbo);974 ctx.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA8, 64, 64);975 var dummyFbo = ctx.createFramebuffer();976 ctx.bindFramebuffer(dummyTarget, dummyFbo);977 ctx.framebufferRenderbuffer(dummyTarget, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, dummyColorRbo);978 ctx.bindFramebuffer(this.m_boundTarget, fbo);979 }980 ctx.invalidateFramebuffer(this.m_invalidateTarget, this.m_invalidateAttachments);981 if (this.m_boundTarget != gl.FRAMEBUFFER)982 ctx.bindFramebuffer(gl.FRAMEBUFFER, fbo);983 if (isColorDiscarded) {984 // Color was not preserved - fill with green.985 ctx.disable(gl.DEPTH_TEST);986 ctx.disable(gl.STENCIL_TEST);987 flatShader.setColor(ctx, flatShaderID, deMath.add(deMath.multiply([0, 1, 0, 1], cScale), cBias));988 rrUtil.drawQuad(ctx, flatShaderID, [-1, -1, 0], [1, 1, 0]);989 ctx.enable(gl.DEPTH_TEST);990 ctx.enable(gl.STENCIL_TEST);991 }992 if (isDepthDiscarded) {993 // Depth was not preserved.994 ctx.depthFunc(gl.ALWAYS);995 }996 if (!isStencilDiscarded) {997 // Stencil was preserved.998 ctx.stencilFunc(gl.EQUAL, 1, 0xff);999 }1000 ctx.enable(gl.BLEND);1001 ctx.blendFunc(gl.ONE, gl.ONE);1002 ctx.blendEquation(gl.FUNC_ADD);1003 flatShader.setColor(ctx, flatShaderID, deMath.add(deMath.multiply([0, 0, 1, 1], cScale), cBias));1004 rrUtil.drawQuad(ctx, flatShaderID, [-1, -1, 0], [1, 1, 0]);1005 es3fFboTestUtil.readPixels(ctx, dst, 0, 0, this.getWidth(), this.getHeight(), colorFmt, colorFmtInfo.lookupScale, colorFmtInfo.lookupBias);1006};1007/**1008* @constructor1009* @extends {tcuTestCase.DeqpTest}1010*/1011es3fFboInvalidateTests.FboInvalidateTests = function() {1012 tcuTestCase.DeqpTest.call(this, 'invalidate', 'Framebuffer invalidate tests');1013};1014es3fFboInvalidateTests.FboInvalidateTests.prototype = Object.create(tcuTestCase.DeqpTest.prototype);1015es3fFboInvalidateTests.FboInvalidateTests.prototype.constructor = es3fFboInvalidateTests.FboInvalidateTests;1016es3fFboInvalidateTests.FboInvalidateTests.prototype.init = function() {1017 var defaultFbGroup = new tcuTestCase.DeqpTest('default', 'Default framebuffer invalidate tests');1018 this.addChild(defaultFbGroup);1019 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('render_none', 'Invalidating no framebuffers (ref)', 0));1020 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('render_color', 'Rendering after invalidating colorbuffer', gl.COLOR_BUFFER_BIT));1021 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('render_depth', 'Rendering after invalidating depthbuffer', gl.DEPTH_BUFFER_BIT));1022 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('render_stencil', 'Rendering after invalidating stencilbuffer', gl.STENCIL_BUFFER_BIT));1023 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('render_depth_stencil', 'Rendering after invalidating depth- and stencilbuffers', gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1024 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('render_all', 'Rendering after invalidating all buffers', gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1025 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferBindCase('bind_color', 'Binding fbo after invalidating colorbuffer', gl.COLOR_BUFFER_BIT));1026 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferBindCase('bind_depth', 'Binding fbo after invalidating depthbuffer', gl.DEPTH_BUFFER_BIT));1027 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferBindCase('bind_stencil', 'Binding fbo after invalidating stencilbuffer', gl.STENCIL_BUFFER_BIT));1028 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferBindCase('bind_depth_stencil', 'Binding fbo after invalidating depth- and stencilbuffers', gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1029 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferBindCase('bind_all', 'Binding fbo after invalidating all buffers', gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1030 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferRenderCase('sub_render_color', 'Rendering after invalidating colorbuffer', gl.COLOR_BUFFER_BIT));1031 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferRenderCase('sub_render_depth', 'Rendering after invalidating depthbuffer', gl.DEPTH_BUFFER_BIT));1032 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferRenderCase('sub_render_stencil', 'Rendering after invalidating stencilbuffer', gl.STENCIL_BUFFER_BIT));1033 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferRenderCase('sub_render_depth_stencil', 'Rendering after invalidating depth- and stencilbuffers', gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1034 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferRenderCase('sub_render_all', 'Rendering after invalidating all buffers', gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1035 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferBindCase('sub_bind_color', 'Binding fbo after invalidating colorbuffer', gl.COLOR_BUFFER_BIT));1036 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferBindCase('sub_bind_depth', 'Binding fbo after invalidating depthbuffer', gl.DEPTH_BUFFER_BIT));1037 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferBindCase('sub_bind_stencil', 'Binding fbo after invalidating stencilbuffer', gl.STENCIL_BUFFER_BIT));1038 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferBindCase('sub_bind_depth_stencil', 'Binding fbo after invalidating depth- and stencilbuffers', gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1039 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultSubFramebufferBindCase('sub_bind_all', 'Binding fbo after invalidating all buffers', gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1040 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('draw_framebuffer_color', 'Invalidating gl.COLOR in gl.DRAW_FRAMEBUFFER', gl.COLOR_BUFFER_BIT, gl.DRAW_FRAMEBUFFER));1041 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('draw_framebuffer_all', 'Invalidating all in gl.DRAW_FRAMEBUFFER', gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT, gl.DRAW_FRAMEBUFFER));1042 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('read_framebuffer_color', 'Invalidating gl.COLOR in gl.READ_FRAMEBUFFER', gl.COLOR_BUFFER_BIT, gl.READ_FRAMEBUFFER));1043 defaultFbGroup.addChild(new es3fFboInvalidateTests.InvalidateDefaultFramebufferRenderCase('read_framebuffer_all', 'Invalidating all in gl.READ_FRAMEBUFFER', gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT, gl.READ_FRAMEBUFFER));1044 // invalidate.whole.1045 var wholeFboGroup = new tcuTestCase.DeqpTest('whole', 'Invalidating whole framebuffer object');1046 this.addChild(wholeFboGroup);1047 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboRenderCase('render_none', '', gl.RGBA8, gl.DEPTH24_STENCIL8, 0));1048 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboRenderCase('render_color', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.COLOR_BUFFER_BIT));1049 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboRenderCase('render_depth', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.DEPTH_BUFFER_BIT));1050 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboRenderCase('render_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.STENCIL_BUFFER_BIT));1051 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboRenderCase('render_depth_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1052 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboRenderCase('render_all', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1053 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindReadCase('unbind_read_color', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.COLOR_BUFFER_BIT));1054 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindReadCase('unbind_read_depth', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.DEPTH_BUFFER_BIT));1055 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindReadCase('unbind_read_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.STENCIL_BUFFER_BIT));1056 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindReadCase('unbind_read_depth_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1057 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindReadCase('unbind_read_color_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.COLOR_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1058 if (getCompatibleDepthStencilFormat() !== gl.NONE) {1059 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindBlitCase('unbind_blit_color', '', 0, gl.COLOR_BUFFER_BIT));1060 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindBlitCase('unbind_blit_depth', '', 0, gl.DEPTH_BUFFER_BIT));1061 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindBlitCase('unbind_blit_stencil', '', 0, gl.STENCIL_BUFFER_BIT));1062 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindBlitCase('unbind_blit_depth_stencil', '', 0, gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1063 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindBlitCase('unbind_blit_msaa_color', '', 4, gl.COLOR_BUFFER_BIT));1064 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindBlitCase('unbind_blit_msaa_depth', '', 4, gl.DEPTH_BUFFER_BIT));1065 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindBlitCase('unbind_blit_msaa_stencil', '', 4, gl.STENCIL_BUFFER_BIT));1066 wholeFboGroup.addChild(new es3fFboInvalidateTests.InvalidateFboUnbindBlitCase('unbind_blit_msaa_depth_stencil', '', 4, gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1067 }1068 // invalidate.sub.1069 var subFboGroup = new tcuTestCase.DeqpTest('sub', 'Invalidating subsection of framebuffer object');1070 this.addChild(subFboGroup);1071 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboRenderCase('render_none', '', gl.RGBA8, gl.DEPTH24_STENCIL8, 0));1072 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboRenderCase('render_color', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.COLOR_BUFFER_BIT));1073 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboRenderCase('render_depth', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.DEPTH_BUFFER_BIT));1074 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboRenderCase('render_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.STENCIL_BUFFER_BIT));1075 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboRenderCase('render_depth_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1076 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboRenderCase('render_all', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1077 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase('unbind_read_color', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.COLOR_BUFFER_BIT));1078 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase('unbind_read_depth', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.DEPTH_BUFFER_BIT));1079 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase('unbind_read_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.STENCIL_BUFFER_BIT));1080 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase('unbind_read_depth_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1081 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase('unbind_read_color_stencil', '', gl.RGBA8, gl.DEPTH24_STENCIL8, gl.COLOR_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1082 if (getCompatibleDepthStencilFormat() !== gl.NONE) {1083 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase('unbind_blit_color', '', 0, gl.COLOR_BUFFER_BIT));1084 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase('unbind_blit_depth', '', 0, gl.DEPTH_BUFFER_BIT));1085 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase('unbind_blit_stencil', '', 0, gl.STENCIL_BUFFER_BIT));1086 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase('unbind_blit_depth_stencil', '', 0, gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1087 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase('unbind_blit_msaa_color', '', 4, gl.COLOR_BUFFER_BIT));1088 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase('unbind_blit_msaa_depth', '', 4, gl.DEPTH_BUFFER_BIT));1089 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase('unbind_blit_msaa_stencil', '', 4, gl.STENCIL_BUFFER_BIT));1090 subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase('unbind_blit_msaa_depth_stencil', '', 4, gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1091 }1092 // invalidate.format.1093 var numFormatSubGroups = 3;1094 var formatGroup = [];1095 for (var ii = 0; ii < numFormatSubGroups; ++ii) {1096 formatGroup[ii] = new tcuTestCase.DeqpTest('format', 'Invalidating framebuffers with selected formats');1097 this.addChild(formatGroup[ii]);1098 }1099 // Color buffer formats.1100 var colorFormats = [1101 // RGBA formats1102 gl.RGBA32I,1103 gl.RGBA32UI,1104 gl.RGBA16I,1105 gl.RGBA16UI,1106 gl.RGBA8,1107 gl.RGBA8I,1108 gl.RGBA8UI,1109 gl.SRGB8_ALPHA8,1110 gl.RGB10_A2,1111 gl.RGB10_A2UI,1112 gl.RGBA4,1113 gl.RGB5_A1,1114 // RGB formats1115 gl.RGB8,1116 gl.RGB565,1117 // RG formats1118 gl.RG32I,1119 gl.RG32UI,1120 gl.RG16I,1121 gl.RG16UI,1122 gl.RG8,1123 gl.RG8I,1124 gl.RG8UI,1125 // R formats1126 gl.R32I,1127 gl.R32UI,1128 gl.R16I,1129 gl.R16UI,1130 gl.R8,1131 gl.R8I,1132 gl.R8UI,1133 // gl.EXT_color_buffer_float1134 gl.RGBA32F,1135 gl.RGBA16F,1136 gl.R11F_G11F_B10F,1137 gl.RG32F,1138 gl.RG16F,1139 gl.R32F,1140 gl.R16F1141 ];1142 // Depth/stencilbuffer formats.1143 var depthStencilFormats = [1144 gl.DEPTH_COMPONENT32F,1145 gl.DEPTH_COMPONENT24,1146 gl.DEPTH_COMPONENT16,1147 gl.DEPTH32F_STENCIL8,1148 gl.DEPTH24_STENCIL8,1149 gl.STENCIL_INDEX81150 ];1151 // Colorbuffer tests use invalidate, unbind, read test.1152 for (var ndx = 0; ndx < colorFormats.length; ndx++)1153 formatGroup[ndx % numFormatSubGroups].addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase(es3fFboTestUtil.getFormatName(colorFormats[ndx]), '', colorFormats[ndx], gl.NONE, gl.COLOR_BUFFER_BIT));1154 // Depth/stencilbuffer tests use invalidate, render test.1155 for (var ndx = 0; ndx < depthStencilFormats.length; ndx++)1156 formatGroup[ndx % numFormatSubGroups].addChild(new es3fFboInvalidateTests.InvalidateSubFboRenderCase(es3fFboTestUtil.getFormatName(depthStencilFormats[ndx]), '', gl.RGBA8, depthStencilFormats[ndx], gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT));1157 // invalidate.target1158 var targetGroup = new tcuTestCase.DeqpTest('target', 'Invalidate target');1159 this.addChild(targetGroup);1160 var s_targetCases = [1161 ['framebuffer_framebuffer', gl.FRAMEBUFFER, gl.FRAMEBUFFER],1162 ['framebuffer_read_framebuffer', gl.FRAMEBUFFER, gl.READ_FRAMEBUFFER],1163 ['framebuffer_draw_framebuffer', gl.FRAMEBUFFER, gl.DRAW_FRAMEBUFFER],1164 ['read_framebuffer_framebuffer', gl.READ_FRAMEBUFFER, gl.FRAMEBUFFER],1165 ['read_framebuffer_read_framebuffer', gl.READ_FRAMEBUFFER, gl.READ_FRAMEBUFFER],1166 ['read_framebuffer_draw_framebuffer', gl.READ_FRAMEBUFFER, gl.DRAW_FRAMEBUFFER],1167 ['draw_framebuffer_framebuffer', gl.DRAW_FRAMEBUFFER, gl.FRAMEBUFFER],1168 ['draw_framebuffer_read_framebuffer', gl.DRAW_FRAMEBUFFER, gl.READ_FRAMEBUFFER],1169 ['draw_framebuffer_draw_framebuffer', gl.DRAW_FRAMEBUFFER, gl.DRAW_FRAMEBUFFER]1170 ];1171 var colorAttachment = [gl.COLOR_ATTACHMENT0];1172 var depthStencilAttachment = [gl.DEPTH_STENCIL_ATTACHMENT];1173 var allAttachments = [gl.COLOR_ATTACHMENT0, gl.DEPTH_ATTACHMENT, gl.STENCIL_ATTACHMENT];1174 for (var caseNdx = 0; caseNdx < s_targetCases.length; caseNdx++) {1175 var baseName = s_targetCases[caseNdx][0];1176 var invalidateT = s_targetCases[caseNdx][1];1177 var boundT = s_targetCases[caseNdx][1];1178 targetGroup.addChild(new es3fFboInvalidateTests.InvalidateFboTargetCase(baseName + '_color', '', boundT, invalidateT, colorAttachment));1179 targetGroup.addChild(new es3fFboInvalidateTests.InvalidateFboTargetCase(baseName + '_depth_stencil', '', boundT, invalidateT, depthStencilAttachment));1180 targetGroup.addChild(new es3fFboInvalidateTests.InvalidateFboTargetCase(baseName + '_all', '', boundT, invalidateT, allAttachments));1181 }1182};1183/**1184* Run test1185* @param {WebGL2RenderingContext} context1186*/1187es3fFboInvalidateTests.run = function(context, range) {1188 gl = context;1189 //Set up Test Root parameters1190 var state = tcuTestCase.runner;1191 state.setRoot(new es3fFboInvalidateTests.FboInvalidateTests());1192 //Set up name and description of this test series.1193 setCurrentTestName(state.testCases.fullName());1194 description(state.testCases.getDescription());1195 try {1196 if (range)1197 state.setRange(range);1198 //Run test cases1199 tcuTestCase.runTestCases();1200 }1201 catch (err) {1202 testFailedOptions('Failed to es3fFboInvalidateTests.run tests', false);1203 tcuTestCase.runner.terminate();1204 }1205};...
LayoutManager.js
Source:LayoutManager.js
...164 */165 __egretProto__.attachListeners = function () {166 gui.UIGlobals.stage.addEventListener(egret.Event.ENTER_FRAME, this.doPhasedInstantiationCallBack, this);167 gui.UIGlobals.stage.addEventListener(egret.Event.RENDER, this.doPhasedInstantiationCallBack, this);168 gui.UIGlobals.stage.invalidate();169 this.listenersAttached = true;170 };171 /**172 * æ§è¡å±æ§åºç¨173 */174 __egretProto__.doPhasedInstantiationCallBack = function (event) {175 if (event === void 0) { event = null; }176 gui.UIGlobals.stage.removeEventListener(egret.Event.ENTER_FRAME, this.doPhasedInstantiationCallBack, this);177 gui.UIGlobals.stage.removeEventListener(egret.Event.RENDER, this.doPhasedInstantiationCallBack, this);178 this.doPhasedInstantiation();179 };180 __egretProto__.doPhasedInstantiation = function () {181 if (this.invalidatePropertiesFlag) {182 this.validateProperties();
...
Using AI Code Generation
1var DeviceFarmer = require('devicefarmer-stf-client');2df.invalidate('1234567890', function(err, res) {3 console.log(res);4});5var DeviceFarmer = require('devicefarmer-stf-client');6df.release('1234567890', function(err, res) {7 console.log(res);8});9var DeviceFarmer = require('devicefarmer-stf-client');10df.getDevice('1234567890', function(err, res) {11 console.log(res);12});13var DeviceFarmer = require('devicefarmer-stf-client');14df.getDevices(function(err, res) {15 console.log(res);16});17var DeviceFarmer = require('devicefarmer-stf-client');18df.getDevicesByOwner('1234567890', function(err, res) {19 console.log(res);20});21var DeviceFarmer = require('devicefarmer-stf-client');22df.getDevicesByGroup('1234567890', function(err, res) {23 console.log(res);24});25var DeviceFarmer = require('devicefarmer-stf-client');26df.getDevicesByModel('1234567890', function(err, res) {27 console.log(res);28});
Using AI Code Generation
1var devicefarmer = require('devicefarmer-stf');2client.invalidate("deviceid");3var devicefarmer = require('devicefarmer-stf');4client.invalidate("deviceid");5var devicefarmer = require('devicefarmer-stf');6client.invalidate("deviceid");7var devicefarmer = require('devicefarmer-stf');8client.invalidate("deviceid");9var devicefarmer = require('devicefarmer-stf');10client.invalidate("deviceid");11var devicefarmer = require('devicefarmer-stf');12client.invalidate("deviceid");13var devicefarmer = require('devicefarmer-stf');14client.invalidate("deviceid");15var devicefarmer = require('devicefarmer-stf');16client.invalidate("deviceid");17var devicefarmer = require('devicefarmer-stf');18client.invalidate("deviceid");19var devicefarmer = require('devicefarmer-stf');20client.invalidate("deviceid");21var devicefarmer = require('devicefarmer-stf');
Using AI Code Generation
1var DeviceFarmer = require('devicefarmer-stf-client');2var device = df.getDevice('deviceSerial');3device.invalidate(function(error, response) {4 if (error) {5 console.log(error);6 }7 else {8 console.log('success');9 }10});11var DeviceFarmer = require('devicefarmer-stf-client');12var device = df.getDevice('deviceSerial');13device.isAvailable(function(error, response) {14 if (error) {15 console.log(error);16 }17 else {18 console.log('success');19 }20});21var DeviceFarmer = require('devicefarmer-stf-client');22var device = df.getDevice('deviceSerial');23device.isOffline(function(error, response) {24 if (error) {25 console.log(error);26 }27 else {28 console.log('success');29 }30});31var DeviceFarmer = require('devicefarmer-stf-client');32var device = df.getDevice('deviceSerial');33device.isPresent(function(error, response) {34 if (error) {35 console.log(error);36 }37 else {38 console.log('success');39 }40});41var DeviceFarmer = require('devicefarmer-stf-client');42var device = df.getDevice('deviceSerial');43device.isRemoteConnectable(function(error, response) {44 if (error) {45 console.log(error);46 }47 else {48 console.log('success');49 }50});51var DeviceFarmer = require('devicefarmer-stf-client');52var df = new DeviceFarmer('http
Using AI Code Generation
1const DeviceFarmer = require('devicefarmer-stf-client');2const deviceFarmer = new DeviceFarmer();3device = deviceFarmer.getDevice("device_id");4device.invalidate();5const DeviceFarmer = require('devicefarmer-stf-client');6const deviceFarmer = new DeviceFarmer();7device = deviceFarmer.getDevice("device_id");8device.invalidate();9const DeviceFarmer = require('devicefarmer-stf-client');10const deviceFarmer = new DeviceFarmer();11device = deviceFarmer.getDevice("device_id");12device.invalidate();13const DeviceFarmer = require('devicefarmer-stf-client');14const deviceFarmer = new DeviceFarmer();15device = deviceFarmer.getDevice("device_id");16device.invalidate();17const DeviceFarmer = require('devicefarmer-stf-client');18const deviceFarmer = new DeviceFarmer();19device = deviceFarmer.getDevice("device_id");20device.invalidate();21const DeviceFarmer = require('devicefarmer-stf-client');22const deviceFarmer = new DeviceFarmer();23device = deviceFarmer.getDevice("device_id");24device.invalidate();25const DeviceFarmer = require('devicefarmer-stf-client');
Using AI Code Generation
1var deviceFarmer = require('devicefarmer-stf');2var stf = new deviceFarmer();3stf.invalidateDevice('1234', function(err, data) {4 console.log(data);5});6var deviceFarmer = require('devicefarmer-stf');7var stf = new deviceFarmer();8stf.invalidateDevice('1234', function(err, data) {9 console.log(data);10});11var deviceFarmer = require('devicefarmer-stf');12var stf = new deviceFarmer();13stf.invalidateDevice('1234', function(err, data) {14 console.log(data);15});16var deviceFarmer = require('devicefarmer-stf');17var stf = new deviceFarmer();18stf.invalidateDevice('1234', function(err, data) {19 console.log(data);20});21var deviceFarmer = require('devicefarmer-stf');22var stf = new deviceFarmer();23stf.invalidateDevice('1234', function(err, data) {24 console.log(data);25});26var deviceFarmer = require('devicefarmer-stf');27var stf = new deviceFarmer();28stf.invalidateDevice('1234', function(err, data) {29 console.log(data);30});31var deviceFarmer = require('devicefarmer-stf');32var stf = new deviceFarmer();33stf.invalidateDevice('1234', function(err, data) {34 console.log(data);35});36var deviceFarmer = require('devicefarmer-stf');37var stf = new deviceFarmer();38stf.invalidateDevice('1234', function(err, data) {39 console.log(data);40});41var deviceFarmer = require('devicefarmer-stf');42var stf = new deviceFarmer();43stf.invalidateDevice('1234', function(err, data) {44 console.log(data);45});
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!