CPUs can make a little heat, as a treat

GPU heating added

Stella be23cabf 52241ec4

+1109 -9
Cargo.lock
··· 3 3 version = 4 4 4 5 5 [[package]] 6 + name = "android_system_properties" 7 + version = "0.1.5" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 10 + dependencies = [ 11 + "libc", 12 + ] 13 + 14 + [[package]] 6 15 name = "anstream" 7 16 version = "0.6.21" 8 17 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 53 62 ] 54 63 55 64 [[package]] 65 + name = "arrayvec" 66 + version = "0.7.6" 67 + source = "registry+https://github.com/rust-lang/crates.io-index" 68 + checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 69 + 70 + [[package]] 71 + name = "ash" 72 + version = "0.38.0+1.3.281" 73 + source = "registry+https://github.com/rust-lang/crates.io-index" 74 + checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" 75 + dependencies = [ 76 + "libloading", 77 + ] 78 + 79 + [[package]] 80 + name = "autocfg" 81 + version = "1.5.0" 82 + source = "registry+https://github.com/rust-lang/crates.io-index" 83 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 84 + 85 + [[package]] 86 + name = "bit-set" 87 + version = "0.8.0" 88 + source = "registry+https://github.com/rust-lang/crates.io-index" 89 + checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 90 + dependencies = [ 91 + "bit-vec", 92 + ] 93 + 94 + [[package]] 95 + name = "bit-vec" 96 + version = "0.8.0" 97 + source = "registry+https://github.com/rust-lang/crates.io-index" 98 + checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 99 + 100 + [[package]] 56 101 name = "bitflags" 57 102 version = "2.9.4" 58 103 source = "registry+https://github.com/rust-lang/crates.io-index" 59 104 checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" 60 105 61 106 [[package]] 107 + name = "block" 108 + version = "0.1.6" 109 + source = "registry+https://github.com/rust-lang/crates.io-index" 110 + checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 111 + 112 + [[package]] 113 + name = "bumpalo" 114 + version = "3.19.0" 115 + source = "registry+https://github.com/rust-lang/crates.io-index" 116 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 117 + 118 + [[package]] 119 + name = "bytemuck" 120 + version = "1.24.0" 121 + source = "registry+https://github.com/rust-lang/crates.io-index" 122 + checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" 123 + dependencies = [ 124 + "bytemuck_derive", 125 + ] 126 + 127 + [[package]] 128 + name = "bytemuck_derive" 129 + version = "1.10.2" 130 + source = "registry+https://github.com/rust-lang/crates.io-index" 131 + checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" 132 + dependencies = [ 133 + "proc-macro2", 134 + "quote", 135 + "syn", 136 + ] 137 + 138 + [[package]] 62 139 name = "cfg-if" 63 140 version = "1.0.3" 64 141 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 111 188 checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" 112 189 113 190 [[package]] 191 + name = "codespan-reporting" 192 + version = "0.12.0" 193 + source = "registry+https://github.com/rust-lang/crates.io-index" 194 + checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" 195 + dependencies = [ 196 + "serde", 197 + "termcolor", 198 + "unicode-width", 199 + ] 200 + 201 + [[package]] 114 202 name = "colorchoice" 115 203 version = "1.0.4" 116 204 source = "registry+https://github.com/rust-lang/crates.io-index" 117 205 checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 118 206 119 207 [[package]] 208 + name = "core-foundation" 209 + version = "0.10.1" 210 + source = "registry+https://github.com/rust-lang/crates.io-index" 211 + checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 212 + dependencies = [ 213 + "core-foundation-sys", 214 + "libc", 215 + ] 216 + 217 + [[package]] 218 + name = "core-foundation-sys" 219 + version = "0.8.7" 220 + source = "registry+https://github.com/rust-lang/crates.io-index" 221 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 222 + 223 + [[package]] 224 + name = "core-graphics-types" 225 + version = "0.2.0" 226 + source = "registry+https://github.com/rust-lang/crates.io-index" 227 + checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 228 + dependencies = [ 229 + "bitflags", 230 + "core-foundation", 231 + "libc", 232 + ] 233 + 234 + [[package]] 235 + name = "crunchy" 236 + version = "0.2.4" 237 + source = "registry+https://github.com/rust-lang/crates.io-index" 238 + checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 239 + 240 + [[package]] 120 241 name = "ctrlc" 121 242 version = "3.5.0" 122 243 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 134 255 checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 135 256 136 257 [[package]] 258 + name = "document-features" 259 + version = "0.2.11" 260 + source = "registry+https://github.com/rust-lang/crates.io-index" 261 + checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" 262 + dependencies = [ 263 + "litrs", 264 + ] 265 + 266 + [[package]] 267 + name = "equivalent" 268 + version = "1.0.2" 269 + source = "registry+https://github.com/rust-lang/crates.io-index" 270 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 271 + 272 + [[package]] 273 + name = "foldhash" 274 + version = "0.1.5" 275 + source = "registry+https://github.com/rust-lang/crates.io-index" 276 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 277 + 278 + [[package]] 279 + name = "foldhash" 280 + version = "0.2.0" 281 + source = "registry+https://github.com/rust-lang/crates.io-index" 282 + checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 283 + 284 + [[package]] 285 + name = "foreign-types" 286 + version = "0.5.0" 287 + source = "registry+https://github.com/rust-lang/crates.io-index" 288 + checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 289 + dependencies = [ 290 + "foreign-types-macros", 291 + "foreign-types-shared", 292 + ] 293 + 294 + [[package]] 295 + name = "foreign-types-macros" 296 + version = "0.2.3" 297 + source = "registry+https://github.com/rust-lang/crates.io-index" 298 + checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 299 + dependencies = [ 300 + "proc-macro2", 301 + "quote", 302 + "syn", 303 + ] 304 + 305 + [[package]] 306 + name = "foreign-types-shared" 307 + version = "0.3.1" 308 + source = "registry+https://github.com/rust-lang/crates.io-index" 309 + checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 310 + 311 + [[package]] 312 + name = "gl_generator" 313 + version = "0.14.0" 314 + source = "registry+https://github.com/rust-lang/crates.io-index" 315 + checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" 316 + dependencies = [ 317 + "khronos_api", 318 + "log", 319 + "xml-rs", 320 + ] 321 + 322 + [[package]] 323 + name = "glow" 324 + version = "0.16.0" 325 + source = "registry+https://github.com/rust-lang/crates.io-index" 326 + checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" 327 + dependencies = [ 328 + "js-sys", 329 + "slotmap", 330 + "wasm-bindgen", 331 + "web-sys", 332 + ] 333 + 334 + [[package]] 335 + name = "glutin_wgl_sys" 336 + version = "0.6.1" 337 + source = "registry+https://github.com/rust-lang/crates.io-index" 338 + checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" 339 + dependencies = [ 340 + "gl_generator", 341 + ] 342 + 343 + [[package]] 344 + name = "gpu-alloc" 345 + version = "0.6.0" 346 + source = "registry+https://github.com/rust-lang/crates.io-index" 347 + checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" 348 + dependencies = [ 349 + "bitflags", 350 + "gpu-alloc-types", 351 + ] 352 + 353 + [[package]] 354 + name = "gpu-alloc-types" 355 + version = "0.3.0" 356 + source = "registry+https://github.com/rust-lang/crates.io-index" 357 + checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" 358 + dependencies = [ 359 + "bitflags", 360 + ] 361 + 362 + [[package]] 363 + name = "gpu-allocator" 364 + version = "0.27.0" 365 + source = "registry+https://github.com/rust-lang/crates.io-index" 366 + checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" 367 + dependencies = [ 368 + "log", 369 + "presser", 370 + "thiserror 1.0.69", 371 + "windows", 372 + ] 373 + 374 + [[package]] 375 + name = "gpu-descriptor" 376 + version = "0.3.2" 377 + source = "registry+https://github.com/rust-lang/crates.io-index" 378 + checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" 379 + dependencies = [ 380 + "bitflags", 381 + "gpu-descriptor-types", 382 + "hashbrown 0.15.5", 383 + ] 384 + 385 + [[package]] 386 + name = "gpu-descriptor-types" 387 + version = "0.2.0" 388 + source = "registry+https://github.com/rust-lang/crates.io-index" 389 + checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" 390 + dependencies = [ 391 + "bitflags", 392 + ] 393 + 394 + [[package]] 395 + name = "half" 396 + version = "2.7.0" 397 + source = "registry+https://github.com/rust-lang/crates.io-index" 398 + checksum = "e54c115d4f30f52c67202f079c5f9d8b49db4691f460fdb0b4c2e838261b2ba5" 399 + dependencies = [ 400 + "cfg-if", 401 + "crunchy", 402 + "num-traits", 403 + "zerocopy", 404 + ] 405 + 406 + [[package]] 407 + name = "hashbrown" 408 + version = "0.15.5" 409 + source = "registry+https://github.com/rust-lang/crates.io-index" 410 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 411 + dependencies = [ 412 + "foldhash 0.1.5", 413 + ] 414 + 415 + [[package]] 416 + name = "hashbrown" 417 + version = "0.16.0" 418 + source = "registry+https://github.com/rust-lang/crates.io-index" 419 + checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 420 + dependencies = [ 421 + "foldhash 0.2.0", 422 + ] 423 + 424 + [[package]] 137 425 name = "heater" 138 426 version = "0.1.0" 139 427 dependencies = [ 428 + "bytemuck", 140 429 "clap", 141 430 "ctrlc", 142 431 "num_cpus", 432 + "pollster", 433 + "wgpu", 143 434 ] 144 435 145 436 [[package]] ··· 155 446 checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 156 447 157 448 [[package]] 449 + name = "hexf-parse" 450 + version = "0.2.1" 451 + source = "registry+https://github.com/rust-lang/crates.io-index" 452 + checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 453 + 454 + [[package]] 455 + name = "indexmap" 456 + version = "2.11.4" 457 + source = "registry+https://github.com/rust-lang/crates.io-index" 458 + checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" 459 + dependencies = [ 460 + "equivalent", 461 + "hashbrown 0.16.0", 462 + ] 463 + 464 + [[package]] 158 465 name = "is_terminal_polyfill" 159 466 version = "1.70.1" 160 467 source = "registry+https://github.com/rust-lang/crates.io-index" 161 468 checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 162 469 163 470 [[package]] 471 + name = "jni-sys" 472 + version = "0.3.0" 473 + source = "registry+https://github.com/rust-lang/crates.io-index" 474 + checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 475 + 476 + [[package]] 477 + name = "js-sys" 478 + version = "0.3.81" 479 + source = "registry+https://github.com/rust-lang/crates.io-index" 480 + checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" 481 + dependencies = [ 482 + "once_cell", 483 + "wasm-bindgen", 484 + ] 485 + 486 + [[package]] 487 + name = "khronos-egl" 488 + version = "6.0.0" 489 + source = "registry+https://github.com/rust-lang/crates.io-index" 490 + checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" 491 + dependencies = [ 492 + "libc", 493 + "libloading", 494 + "pkg-config", 495 + ] 496 + 497 + [[package]] 498 + name = "khronos_api" 499 + version = "3.1.0" 500 + source = "registry+https://github.com/rust-lang/crates.io-index" 501 + checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" 502 + 503 + [[package]] 164 504 name = "libc" 165 505 version = "0.2.177" 166 506 source = "registry+https://github.com/rust-lang/crates.io-index" 167 507 checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" 168 508 169 509 [[package]] 510 + name = "libloading" 511 + version = "0.8.9" 512 + source = "registry+https://github.com/rust-lang/crates.io-index" 513 + checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" 514 + dependencies = [ 515 + "cfg-if", 516 + "windows-link", 517 + ] 518 + 519 + [[package]] 520 + name = "libm" 521 + version = "0.2.15" 522 + source = "registry+https://github.com/rust-lang/crates.io-index" 523 + checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 524 + 525 + [[package]] 526 + name = "litrs" 527 + version = "0.4.2" 528 + source = "registry+https://github.com/rust-lang/crates.io-index" 529 + checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" 530 + 531 + [[package]] 532 + name = "lock_api" 533 + version = "0.4.14" 534 + source = "registry+https://github.com/rust-lang/crates.io-index" 535 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 536 + dependencies = [ 537 + "scopeguard", 538 + ] 539 + 540 + [[package]] 541 + name = "log" 542 + version = "0.4.28" 543 + source = "registry+https://github.com/rust-lang/crates.io-index" 544 + checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 545 + 546 + [[package]] 547 + name = "malloc_buf" 548 + version = "0.0.6" 549 + source = "registry+https://github.com/rust-lang/crates.io-index" 550 + checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 551 + dependencies = [ 552 + "libc", 553 + ] 554 + 555 + [[package]] 556 + name = "metal" 557 + version = "0.32.0" 558 + source = "registry+https://github.com/rust-lang/crates.io-index" 559 + checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" 560 + dependencies = [ 561 + "bitflags", 562 + "block", 563 + "core-graphics-types", 564 + "foreign-types", 565 + "log", 566 + "objc", 567 + "paste", 568 + ] 569 + 570 + [[package]] 571 + name = "naga" 572 + version = "27.0.0" 573 + source = "registry+https://github.com/rust-lang/crates.io-index" 574 + checksum = "12b2e757b11b47345d44e7760e45458339bc490463d9548cd8651c53ae523153" 575 + dependencies = [ 576 + "arrayvec", 577 + "bit-set", 578 + "bitflags", 579 + "cfg-if", 580 + "cfg_aliases", 581 + "codespan-reporting", 582 + "half", 583 + "hashbrown 0.16.0", 584 + "hexf-parse", 585 + "indexmap", 586 + "libm", 587 + "log", 588 + "num-traits", 589 + "once_cell", 590 + "rustc-hash", 591 + "spirv", 592 + "thiserror 2.0.17", 593 + "unicode-ident", 594 + ] 595 + 596 + [[package]] 597 + name = "ndk-sys" 598 + version = "0.6.0+11769913" 599 + source = "registry+https://github.com/rust-lang/crates.io-index" 600 + checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" 601 + dependencies = [ 602 + "jni-sys", 603 + ] 604 + 605 + [[package]] 170 606 name = "nix" 171 607 version = "0.30.1" 172 608 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 179 615 ] 180 616 181 617 [[package]] 618 + name = "num-traits" 619 + version = "0.2.19" 620 + source = "registry+https://github.com/rust-lang/crates.io-index" 621 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 622 + dependencies = [ 623 + "autocfg", 624 + "libm", 625 + ] 626 + 627 + [[package]] 182 628 name = "num_cpus" 183 629 version = "1.17.0" 184 630 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 189 635 ] 190 636 191 637 [[package]] 638 + name = "objc" 639 + version = "0.2.7" 640 + source = "registry+https://github.com/rust-lang/crates.io-index" 641 + checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 642 + dependencies = [ 643 + "malloc_buf", 644 + ] 645 + 646 + [[package]] 647 + name = "once_cell" 648 + version = "1.21.3" 649 + source = "registry+https://github.com/rust-lang/crates.io-index" 650 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 651 + 652 + [[package]] 192 653 name = "once_cell_polyfill" 193 654 version = "1.70.1" 194 655 source = "registry+https://github.com/rust-lang/crates.io-index" 195 656 checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" 196 657 197 658 [[package]] 659 + name = "ordered-float" 660 + version = "5.0.0" 661 + source = "registry+https://github.com/rust-lang/crates.io-index" 662 + checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" 663 + dependencies = [ 664 + "num-traits", 665 + ] 666 + 667 + [[package]] 668 + name = "parking_lot" 669 + version = "0.12.5" 670 + source = "registry+https://github.com/rust-lang/crates.io-index" 671 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 672 + dependencies = [ 673 + "lock_api", 674 + "parking_lot_core", 675 + ] 676 + 677 + [[package]] 678 + name = "parking_lot_core" 679 + version = "0.9.12" 680 + source = "registry+https://github.com/rust-lang/crates.io-index" 681 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 682 + dependencies = [ 683 + "cfg-if", 684 + "libc", 685 + "redox_syscall", 686 + "smallvec", 687 + "windows-link", 688 + ] 689 + 690 + [[package]] 691 + name = "paste" 692 + version = "1.0.15" 693 + source = "registry+https://github.com/rust-lang/crates.io-index" 694 + checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 695 + 696 + [[package]] 697 + name = "pkg-config" 698 + version = "0.3.32" 699 + source = "registry+https://github.com/rust-lang/crates.io-index" 700 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 701 + 702 + [[package]] 703 + name = "pollster" 704 + version = "0.4.0" 705 + source = "registry+https://github.com/rust-lang/crates.io-index" 706 + checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" 707 + 708 + [[package]] 709 + name = "portable-atomic" 710 + version = "1.11.1" 711 + source = "registry+https://github.com/rust-lang/crates.io-index" 712 + checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 713 + 714 + [[package]] 715 + name = "portable-atomic-util" 716 + version = "0.2.4" 717 + source = "registry+https://github.com/rust-lang/crates.io-index" 718 + checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 719 + dependencies = [ 720 + "portable-atomic", 721 + ] 722 + 723 + [[package]] 724 + name = "presser" 725 + version = "0.3.1" 726 + source = "registry+https://github.com/rust-lang/crates.io-index" 727 + checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" 728 + 729 + [[package]] 198 730 name = "proc-macro2" 199 731 version = "1.0.101" 200 732 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 204 736 ] 205 737 206 738 [[package]] 739 + name = "profiling" 740 + version = "1.0.17" 741 + source = "registry+https://github.com/rust-lang/crates.io-index" 742 + checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" 743 + 744 + [[package]] 207 745 name = "quote" 208 746 version = "1.0.41" 209 747 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 213 751 ] 214 752 215 753 [[package]] 754 + name = "range-alloc" 755 + version = "0.1.4" 756 + source = "registry+https://github.com/rust-lang/crates.io-index" 757 + checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" 758 + 759 + [[package]] 760 + name = "raw-window-handle" 761 + version = "0.6.2" 762 + source = "registry+https://github.com/rust-lang/crates.io-index" 763 + checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" 764 + 765 + [[package]] 766 + name = "redox_syscall" 767 + version = "0.5.18" 768 + source = "registry+https://github.com/rust-lang/crates.io-index" 769 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 770 + dependencies = [ 771 + "bitflags", 772 + ] 773 + 774 + [[package]] 775 + name = "renderdoc-sys" 776 + version = "1.1.0" 777 + source = "registry+https://github.com/rust-lang/crates.io-index" 778 + checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 779 + 780 + [[package]] 781 + name = "rustc-hash" 782 + version = "1.1.0" 783 + source = "registry+https://github.com/rust-lang/crates.io-index" 784 + checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 785 + 786 + [[package]] 787 + name = "rustversion" 788 + version = "1.0.22" 789 + source = "registry+https://github.com/rust-lang/crates.io-index" 790 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 791 + 792 + [[package]] 793 + name = "scopeguard" 794 + version = "1.2.0" 795 + source = "registry+https://github.com/rust-lang/crates.io-index" 796 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 797 + 798 + [[package]] 799 + name = "serde" 800 + version = "1.0.228" 801 + source = "registry+https://github.com/rust-lang/crates.io-index" 802 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 803 + dependencies = [ 804 + "serde_core", 805 + "serde_derive", 806 + ] 807 + 808 + [[package]] 809 + name = "serde_core" 810 + version = "1.0.228" 811 + source = "registry+https://github.com/rust-lang/crates.io-index" 812 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 813 + dependencies = [ 814 + "serde_derive", 815 + ] 816 + 817 + [[package]] 818 + name = "serde_derive" 819 + version = "1.0.228" 820 + source = "registry+https://github.com/rust-lang/crates.io-index" 821 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 822 + dependencies = [ 823 + "proc-macro2", 824 + "quote", 825 + "syn", 826 + ] 827 + 828 + [[package]] 829 + name = "slotmap" 830 + version = "1.0.7" 831 + source = "registry+https://github.com/rust-lang/crates.io-index" 832 + checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 833 + dependencies = [ 834 + "version_check", 835 + ] 836 + 837 + [[package]] 838 + name = "smallvec" 839 + version = "1.15.1" 840 + source = "registry+https://github.com/rust-lang/crates.io-index" 841 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 842 + 843 + [[package]] 844 + name = "spirv" 845 + version = "0.3.0+sdk-1.3.268.0" 846 + source = "registry+https://github.com/rust-lang/crates.io-index" 847 + checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" 848 + dependencies = [ 849 + "bitflags", 850 + ] 851 + 852 + [[package]] 853 + name = "static_assertions" 854 + version = "1.1.0" 855 + source = "registry+https://github.com/rust-lang/crates.io-index" 856 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 857 + 858 + [[package]] 216 859 name = "strsim" 217 860 version = "0.11.1" 218 861 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 230 873 ] 231 874 232 875 [[package]] 876 + name = "termcolor" 877 + version = "1.4.1" 878 + source = "registry+https://github.com/rust-lang/crates.io-index" 879 + checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 880 + dependencies = [ 881 + "winapi-util", 882 + ] 883 + 884 + [[package]] 885 + name = "thiserror" 886 + version = "1.0.69" 887 + source = "registry+https://github.com/rust-lang/crates.io-index" 888 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 889 + dependencies = [ 890 + "thiserror-impl 1.0.69", 891 + ] 892 + 893 + [[package]] 894 + name = "thiserror" 895 + version = "2.0.17" 896 + source = "registry+https://github.com/rust-lang/crates.io-index" 897 + checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 898 + dependencies = [ 899 + "thiserror-impl 2.0.17", 900 + ] 901 + 902 + [[package]] 903 + name = "thiserror-impl" 904 + version = "1.0.69" 905 + source = "registry+https://github.com/rust-lang/crates.io-index" 906 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 907 + dependencies = [ 908 + "proc-macro2", 909 + "quote", 910 + "syn", 911 + ] 912 + 913 + [[package]] 914 + name = "thiserror-impl" 915 + version = "2.0.17" 916 + source = "registry+https://github.com/rust-lang/crates.io-index" 917 + checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 918 + dependencies = [ 919 + "proc-macro2", 920 + "quote", 921 + "syn", 922 + ] 923 + 924 + [[package]] 233 925 name = "unicode-ident" 234 926 version = "1.0.19" 235 927 source = "registry+https://github.com/rust-lang/crates.io-index" 236 928 checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" 237 929 238 930 [[package]] 931 + name = "unicode-width" 932 + version = "0.2.2" 933 + source = "registry+https://github.com/rust-lang/crates.io-index" 934 + checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 935 + 936 + [[package]] 239 937 name = "utf8parse" 240 938 version = "0.2.2" 241 939 source = "registry+https://github.com/rust-lang/crates.io-index" 242 940 checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 243 941 244 942 [[package]] 943 + name = "version_check" 944 + version = "0.9.5" 945 + source = "registry+https://github.com/rust-lang/crates.io-index" 946 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 947 + 948 + [[package]] 949 + name = "wasm-bindgen" 950 + version = "0.2.104" 951 + source = "registry+https://github.com/rust-lang/crates.io-index" 952 + checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" 953 + dependencies = [ 954 + "cfg-if", 955 + "once_cell", 956 + "rustversion", 957 + "wasm-bindgen-macro", 958 + "wasm-bindgen-shared", 959 + ] 960 + 961 + [[package]] 962 + name = "wasm-bindgen-backend" 963 + version = "0.2.104" 964 + source = "registry+https://github.com/rust-lang/crates.io-index" 965 + checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" 966 + dependencies = [ 967 + "bumpalo", 968 + "log", 969 + "proc-macro2", 970 + "quote", 971 + "syn", 972 + "wasm-bindgen-shared", 973 + ] 974 + 975 + [[package]] 976 + name = "wasm-bindgen-futures" 977 + version = "0.4.54" 978 + source = "registry+https://github.com/rust-lang/crates.io-index" 979 + checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" 980 + dependencies = [ 981 + "cfg-if", 982 + "js-sys", 983 + "once_cell", 984 + "wasm-bindgen", 985 + "web-sys", 986 + ] 987 + 988 + [[package]] 989 + name = "wasm-bindgen-macro" 990 + version = "0.2.104" 991 + source = "registry+https://github.com/rust-lang/crates.io-index" 992 + checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" 993 + dependencies = [ 994 + "quote", 995 + "wasm-bindgen-macro-support", 996 + ] 997 + 998 + [[package]] 999 + name = "wasm-bindgen-macro-support" 1000 + version = "0.2.104" 1001 + source = "registry+https://github.com/rust-lang/crates.io-index" 1002 + checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" 1003 + dependencies = [ 1004 + "proc-macro2", 1005 + "quote", 1006 + "syn", 1007 + "wasm-bindgen-backend", 1008 + "wasm-bindgen-shared", 1009 + ] 1010 + 1011 + [[package]] 1012 + name = "wasm-bindgen-shared" 1013 + version = "0.2.104" 1014 + source = "registry+https://github.com/rust-lang/crates.io-index" 1015 + checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" 1016 + dependencies = [ 1017 + "unicode-ident", 1018 + ] 1019 + 1020 + [[package]] 1021 + name = "web-sys" 1022 + version = "0.3.81" 1023 + source = "registry+https://github.com/rust-lang/crates.io-index" 1024 + checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" 1025 + dependencies = [ 1026 + "js-sys", 1027 + "wasm-bindgen", 1028 + ] 1029 + 1030 + [[package]] 1031 + name = "wgpu" 1032 + version = "27.0.1" 1033 + source = "registry+https://github.com/rust-lang/crates.io-index" 1034 + checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" 1035 + dependencies = [ 1036 + "arrayvec", 1037 + "bitflags", 1038 + "cfg-if", 1039 + "cfg_aliases", 1040 + "document-features", 1041 + "hashbrown 0.16.0", 1042 + "js-sys", 1043 + "log", 1044 + "naga", 1045 + "parking_lot", 1046 + "portable-atomic", 1047 + "profiling", 1048 + "raw-window-handle", 1049 + "smallvec", 1050 + "static_assertions", 1051 + "wasm-bindgen", 1052 + "wasm-bindgen-futures", 1053 + "web-sys", 1054 + "wgpu-core", 1055 + "wgpu-hal", 1056 + "wgpu-types", 1057 + ] 1058 + 1059 + [[package]] 1060 + name = "wgpu-core" 1061 + version = "27.0.1" 1062 + source = "registry+https://github.com/rust-lang/crates.io-index" 1063 + checksum = "e3d654c0b6c6335edfca18c11bdaed964def641b8e9997d3a495a2ff4077c922" 1064 + dependencies = [ 1065 + "arrayvec", 1066 + "bit-set", 1067 + "bit-vec", 1068 + "bitflags", 1069 + "bytemuck", 1070 + "cfg_aliases", 1071 + "document-features", 1072 + "hashbrown 0.16.0", 1073 + "indexmap", 1074 + "log", 1075 + "naga", 1076 + "once_cell", 1077 + "parking_lot", 1078 + "portable-atomic", 1079 + "profiling", 1080 + "raw-window-handle", 1081 + "rustc-hash", 1082 + "smallvec", 1083 + "thiserror 2.0.17", 1084 + "wgpu-core-deps-apple", 1085 + "wgpu-core-deps-emscripten", 1086 + "wgpu-core-deps-windows-linux-android", 1087 + "wgpu-hal", 1088 + "wgpu-types", 1089 + ] 1090 + 1091 + [[package]] 1092 + name = "wgpu-core-deps-apple" 1093 + version = "27.0.0" 1094 + source = "registry+https://github.com/rust-lang/crates.io-index" 1095 + checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233" 1096 + dependencies = [ 1097 + "wgpu-hal", 1098 + ] 1099 + 1100 + [[package]] 1101 + name = "wgpu-core-deps-emscripten" 1102 + version = "27.0.0" 1103 + source = "registry+https://github.com/rust-lang/crates.io-index" 1104 + checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5" 1105 + dependencies = [ 1106 + "wgpu-hal", 1107 + ] 1108 + 1109 + [[package]] 1110 + name = "wgpu-core-deps-windows-linux-android" 1111 + version = "27.0.0" 1112 + source = "registry+https://github.com/rust-lang/crates.io-index" 1113 + checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" 1114 + dependencies = [ 1115 + "wgpu-hal", 1116 + ] 1117 + 1118 + [[package]] 1119 + name = "wgpu-hal" 1120 + version = "27.0.2" 1121 + source = "registry+https://github.com/rust-lang/crates.io-index" 1122 + checksum = "2618a2d6b8a5964ecc1ac32a5db56cb3b1e518725fcd773fd9a782e023453f2b" 1123 + dependencies = [ 1124 + "android_system_properties", 1125 + "arrayvec", 1126 + "ash", 1127 + "bit-set", 1128 + "bitflags", 1129 + "block", 1130 + "bytemuck", 1131 + "cfg-if", 1132 + "cfg_aliases", 1133 + "core-graphics-types", 1134 + "glow", 1135 + "glutin_wgl_sys", 1136 + "gpu-alloc", 1137 + "gpu-allocator", 1138 + "gpu-descriptor", 1139 + "hashbrown 0.16.0", 1140 + "js-sys", 1141 + "khronos-egl", 1142 + "libc", 1143 + "libloading", 1144 + "log", 1145 + "metal", 1146 + "naga", 1147 + "ndk-sys", 1148 + "objc", 1149 + "once_cell", 1150 + "ordered-float", 1151 + "parking_lot", 1152 + "portable-atomic", 1153 + "portable-atomic-util", 1154 + "profiling", 1155 + "range-alloc", 1156 + "raw-window-handle", 1157 + "renderdoc-sys", 1158 + "smallvec", 1159 + "thiserror 2.0.17", 1160 + "wasm-bindgen", 1161 + "web-sys", 1162 + "wgpu-types", 1163 + "windows", 1164 + "windows-core", 1165 + ] 1166 + 1167 + [[package]] 1168 + name = "wgpu-types" 1169 + version = "27.0.1" 1170 + source = "registry+https://github.com/rust-lang/crates.io-index" 1171 + checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" 1172 + dependencies = [ 1173 + "bitflags", 1174 + "bytemuck", 1175 + "js-sys", 1176 + "log", 1177 + "thiserror 2.0.17", 1178 + "web-sys", 1179 + ] 1180 + 1181 + [[package]] 1182 + name = "winapi-util" 1183 + version = "0.1.11" 1184 + source = "registry+https://github.com/rust-lang/crates.io-index" 1185 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 1186 + dependencies = [ 1187 + "windows-sys 0.61.2", 1188 + ] 1189 + 1190 + [[package]] 1191 + name = "windows" 1192 + version = "0.58.0" 1193 + source = "registry+https://github.com/rust-lang/crates.io-index" 1194 + checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 1195 + dependencies = [ 1196 + "windows-core", 1197 + "windows-targets 0.52.6", 1198 + ] 1199 + 1200 + [[package]] 1201 + name = "windows-core" 1202 + version = "0.58.0" 1203 + source = "registry+https://github.com/rust-lang/crates.io-index" 1204 + checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 1205 + dependencies = [ 1206 + "windows-implement", 1207 + "windows-interface", 1208 + "windows-result", 1209 + "windows-strings", 1210 + "windows-targets 0.52.6", 1211 + ] 1212 + 1213 + [[package]] 1214 + name = "windows-implement" 1215 + version = "0.58.0" 1216 + source = "registry+https://github.com/rust-lang/crates.io-index" 1217 + checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 1218 + dependencies = [ 1219 + "proc-macro2", 1220 + "quote", 1221 + "syn", 1222 + ] 1223 + 1224 + [[package]] 1225 + name = "windows-interface" 1226 + version = "0.58.0" 1227 + source = "registry+https://github.com/rust-lang/crates.io-index" 1228 + checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 1229 + dependencies = [ 1230 + "proc-macro2", 1231 + "quote", 1232 + "syn", 1233 + ] 1234 + 1235 + [[package]] 245 1236 name = "windows-link" 246 1237 version = "0.2.1" 247 1238 source = "registry+https://github.com/rust-lang/crates.io-index" 248 1239 checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 249 1240 250 1241 [[package]] 1242 + name = "windows-result" 1243 + version = "0.2.0" 1244 + source = "registry+https://github.com/rust-lang/crates.io-index" 1245 + checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 1246 + dependencies = [ 1247 + "windows-targets 0.52.6", 1248 + ] 1249 + 1250 + [[package]] 1251 + name = "windows-strings" 1252 + version = "0.1.0" 1253 + source = "registry+https://github.com/rust-lang/crates.io-index" 1254 + checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 1255 + dependencies = [ 1256 + "windows-result", 1257 + "windows-targets 0.52.6", 1258 + ] 1259 + 1260 + [[package]] 251 1261 name = "windows-sys" 252 1262 version = "0.60.2" 253 1263 source = "registry+https://github.com/rust-lang/crates.io-index" 254 1264 checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 255 1265 dependencies = [ 256 - "windows-targets", 1266 + "windows-targets 0.53.5", 257 1267 ] 258 1268 259 1269 [[package]] ··· 267 1277 268 1278 [[package]] 269 1279 name = "windows-targets" 1280 + version = "0.52.6" 1281 + source = "registry+https://github.com/rust-lang/crates.io-index" 1282 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1283 + dependencies = [ 1284 + "windows_aarch64_gnullvm 0.52.6", 1285 + "windows_aarch64_msvc 0.52.6", 1286 + "windows_i686_gnu 0.52.6", 1287 + "windows_i686_gnullvm 0.52.6", 1288 + "windows_i686_msvc 0.52.6", 1289 + "windows_x86_64_gnu 0.52.6", 1290 + "windows_x86_64_gnullvm 0.52.6", 1291 + "windows_x86_64_msvc 0.52.6", 1292 + ] 1293 + 1294 + [[package]] 1295 + name = "windows-targets" 270 1296 version = "0.53.5" 271 1297 source = "registry+https://github.com/rust-lang/crates.io-index" 272 1298 checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 273 1299 dependencies = [ 274 1300 "windows-link", 275 - "windows_aarch64_gnullvm", 276 - "windows_aarch64_msvc", 277 - "windows_i686_gnu", 278 - "windows_i686_gnullvm", 279 - "windows_i686_msvc", 280 - "windows_x86_64_gnu", 281 - "windows_x86_64_gnullvm", 282 - "windows_x86_64_msvc", 1301 + "windows_aarch64_gnullvm 0.53.1", 1302 + "windows_aarch64_msvc 0.53.1", 1303 + "windows_i686_gnu 0.53.1", 1304 + "windows_i686_gnullvm 0.53.1", 1305 + "windows_i686_msvc 0.53.1", 1306 + "windows_x86_64_gnu 0.53.1", 1307 + "windows_x86_64_gnullvm 0.53.1", 1308 + "windows_x86_64_msvc 0.53.1", 283 1309 ] 284 1310 285 1311 [[package]] 286 1312 name = "windows_aarch64_gnullvm" 1313 + version = "0.52.6" 1314 + source = "registry+https://github.com/rust-lang/crates.io-index" 1315 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1316 + 1317 + [[package]] 1318 + name = "windows_aarch64_gnullvm" 287 1319 version = "0.53.1" 288 1320 source = "registry+https://github.com/rust-lang/crates.io-index" 289 1321 checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 290 1322 291 1323 [[package]] 292 1324 name = "windows_aarch64_msvc" 1325 + version = "0.52.6" 1326 + source = "registry+https://github.com/rust-lang/crates.io-index" 1327 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1328 + 1329 + [[package]] 1330 + name = "windows_aarch64_msvc" 293 1331 version = "0.53.1" 294 1332 source = "registry+https://github.com/rust-lang/crates.io-index" 295 1333 checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 296 1334 297 1335 [[package]] 298 1336 name = "windows_i686_gnu" 1337 + version = "0.52.6" 1338 + source = "registry+https://github.com/rust-lang/crates.io-index" 1339 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1340 + 1341 + [[package]] 1342 + name = "windows_i686_gnu" 299 1343 version = "0.53.1" 300 1344 source = "registry+https://github.com/rust-lang/crates.io-index" 301 1345 checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 302 1346 303 1347 [[package]] 304 1348 name = "windows_i686_gnullvm" 1349 + version = "0.52.6" 1350 + source = "registry+https://github.com/rust-lang/crates.io-index" 1351 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1352 + 1353 + [[package]] 1354 + name = "windows_i686_gnullvm" 305 1355 version = "0.53.1" 306 1356 source = "registry+https://github.com/rust-lang/crates.io-index" 307 1357 checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 308 1358 309 1359 [[package]] 310 1360 name = "windows_i686_msvc" 1361 + version = "0.52.6" 1362 + source = "registry+https://github.com/rust-lang/crates.io-index" 1363 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1364 + 1365 + [[package]] 1366 + name = "windows_i686_msvc" 311 1367 version = "0.53.1" 312 1368 source = "registry+https://github.com/rust-lang/crates.io-index" 313 1369 checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 314 1370 315 1371 [[package]] 316 1372 name = "windows_x86_64_gnu" 1373 + version = "0.52.6" 1374 + source = "registry+https://github.com/rust-lang/crates.io-index" 1375 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1376 + 1377 + [[package]] 1378 + name = "windows_x86_64_gnu" 317 1379 version = "0.53.1" 318 1380 source = "registry+https://github.com/rust-lang/crates.io-index" 319 1381 checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 320 1382 321 1383 [[package]] 322 1384 name = "windows_x86_64_gnullvm" 1385 + version = "0.52.6" 1386 + source = "registry+https://github.com/rust-lang/crates.io-index" 1387 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1388 + 1389 + [[package]] 1390 + name = "windows_x86_64_gnullvm" 323 1391 version = "0.53.1" 324 1392 source = "registry+https://github.com/rust-lang/crates.io-index" 325 1393 checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 326 1394 327 1395 [[package]] 328 1396 name = "windows_x86_64_msvc" 1397 + version = "0.52.6" 1398 + source = "registry+https://github.com/rust-lang/crates.io-index" 1399 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1400 + 1401 + [[package]] 1402 + name = "windows_x86_64_msvc" 329 1403 version = "0.53.1" 330 1404 source = "registry+https://github.com/rust-lang/crates.io-index" 331 1405 checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 1406 + 1407 + [[package]] 1408 + name = "xml-rs" 1409 + version = "0.8.27" 1410 + source = "registry+https://github.com/rust-lang/crates.io-index" 1411 + checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" 1412 + 1413 + [[package]] 1414 + name = "zerocopy" 1415 + version = "0.8.27" 1416 + source = "registry+https://github.com/rust-lang/crates.io-index" 1417 + checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 1418 + dependencies = [ 1419 + "zerocopy-derive", 1420 + ] 1421 + 1422 + [[package]] 1423 + name = "zerocopy-derive" 1424 + version = "0.8.27" 1425 + source = "registry+https://github.com/rust-lang/crates.io-index" 1426 + checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 1427 + dependencies = [ 1428 + "proc-macro2", 1429 + "quote", 1430 + "syn", 1431 + ]
+3
Cargo.toml
··· 4 4 edition = "2024" 5 5 6 6 [dependencies] 7 + bytemuck = "1.24.0" 7 8 clap = { version = "4.5.48", features = ["derive"] } 8 9 ctrlc = "3.5.0" 9 10 num_cpus = "1.17.0" 11 + pollster = "0.4.0" 12 + wgpu = { version = "27.0.1", features = ["fragile-send-sync-non-atomic-wasm"] }
+79 -17
README.md
··· 1 - # Heater 1 + # Heater 🔥 2 2 3 - A Rust command-line application that churns your CPU cores at maximum capacity so your laptop isn't cold 3 + A Rust command-line application that churns your CPU and GPU at maximum capacity for testing, benchmarking, or keeping your system warm. 4 + 5 + ## Features 6 + 7 + - 🔥 Maximizes CPU usage across multiple cores 8 + - 🎮 Optional GPU heating using compute shaders 9 + - 🛡️ Leaves one core free by default (configurable) 10 + - ⏱️ Run for a specific duration or indefinitely 11 + - 🛑 Graceful shutdown with Ctrl+C 12 + - 📊 Real-time thread and GPU iteration status 13 + - 🌐 Cross-platform GPU support (Metal, Vulkan, DX12, OpenGL) 4 14 5 15 ## Build 6 16 ··· 12 22 13 23 ## Usage 14 24 15 - ### Run indefinitely (until Ctrl+C) 25 + ### CPU heating only (default) 16 26 ```bash 27 + # Run indefinitely (until Ctrl+C) 17 28 cargo run --release 18 - # or 19 - ./target/release/heater 20 - ``` 21 29 22 - ### Run for a specific duration (in seconds) 23 - ```bash 30 + # Run for 30 seconds 24 31 cargo run --release -- --duration 30 25 - # or 26 - ./target/release/heater --duration 30 27 - ``` 28 32 29 - ### Customize the number of free cores 30 - ```bash 31 33 # Leave 2 cores free 32 34 cargo run --release -- --free-cores 2 35 + ``` 33 36 34 - # Use ALL cores (leave 0 free) 35 - cargo run --release -- --free-cores 0 37 + ### GPU heating 38 + ```bash 39 + # Enable GPU heating with the --gpu flag 40 + cargo run --release -- --gpu 36 41 37 - # Run for 60 seconds, leaving 2 cores free 38 - cargo run --release -- --duration 60 --free-cores 2 42 + # GPU + CPU for 60 seconds 43 + cargo run --release -- --gpu --duration 60 44 + 45 + # Max heat: all cores + GPU 46 + cargo run --release -- --gpu --free-cores 0 47 + ``` 48 + 49 + ### Advanced examples 50 + ```bash 51 + # Use ALL cores (leave 0 free) + GPU for 2 minutes 52 + ./target/release/heater --gpu --free-cores 0 --duration 120 53 + 54 + # CPU only, leaving 3 cores free, run indefinitely 55 + ./target/release/heater --free-cores 3 39 56 ``` 40 57 41 58 ## Options ··· 43 60 ``` 44 61 -d, --duration <DURATION> Duration to run in seconds (omit for indefinite run) 45 62 -f, --free-cores <FREE_CORES> Number of cores to leave free (default: 1) 63 + -g, --gpu Enable GPU heating (requires compatible GPU) 46 64 -h, --help Print help 47 65 -V, --version Print version 48 66 ``` 67 + 68 + ## How It Works 69 + 70 + ### CPU Heating 71 + The application: 72 + 1. Detects the number of logical CPU cores on your system 73 + 2. Spawns threads equal to (total cores - free cores) 74 + 3. Each thread performs intensive mathematical operations in a tight loop 75 + 4. Continues until the specified duration expires or you press Ctrl+C 76 + 77 + ### GPU Heating 78 + When `--gpu` is enabled: 79 + 1. Initializes GPU using wgpu (supports Metal, Vulkan, DX12, OpenGL) 80 + 2. Creates compute shaders that perform intensive trigonometric and exponential operations 81 + 3. Dispatches large workgroups (256x256) continuously to maximize GPU utilization 82 + 4. Runs in parallel with CPU heating threads 83 + 84 + ## Use Cases 85 + 86 + - CPU/GPU stress testing 87 + - Thermal testing and validation 88 + - Benchmarking cooling solutions 89 + - Testing throttling behavior 90 + - Power consumption testing 91 + - Keeping your laptop warm in winter ❄️ 92 + 93 + ## GPU Compatibility 94 + 95 + The GPU heater uses `wgpu` which supports: 96 + - **macOS**: Metal 97 + - **Windows**: DirectX 12, Vulkan 98 + - **Linux**: Vulkan, OpenGL 99 + - **Web**: WebGPU 100 + 101 + If GPU initialization fails, the app will fall back to CPU-only heating. 102 + 103 + ## Safety Notes 104 + 105 + ⚠️ **Warning**: This application will significantly increase CPU and GPU temperature and power consumption. 106 + 107 + - Ensure your system has adequate cooling before running for extended periods 108 + - Monitor temperatures if running for long durations 109 + - Some laptops may throttle or shut down if temperatures get too high 110 + - Use `--free-cores` to leave headroom for system processes
+30
src/heater.wgsl
··· 1 + // GPU compute shader for heating 2 + // Performs intensive matrix-like operations on data 3 + 4 + @group(0) @binding(0) 5 + var<storage, read> input: array<f32>; 6 + 7 + @group(0) @binding(1) 8 + var<storage, read_write> output: array<f32>; 9 + 10 + @compute @workgroup_size(256) 11 + fn main(@builtin(global_invocation_id) global_id: vec3<u32>) { 12 + let index = global_id.x; 13 + 14 + // Perform intensive math operations 15 + var value = f32(index); 16 + 17 + // Matrix-like computations (unrolled for more heat) 18 + for (var i = 0u; i < 100u; i++) { 19 + value = sin(value) * cos(value * 1.234); 20 + value = value * value + sqrt(abs(value)); 21 + value = pow(abs(value), 1.5) * 0.001; 22 + value = exp(value * 0.01) - log(abs(value) + 1.0); 23 + value = tan(value * 0.1) + atan(value); 24 + } 25 + 26 + // Write result (if index is in bounds) 27 + if (index < arrayLength(&output)) { 28 + output[index] = value; 29 + } 30 + }
+171 -3
src/main.rs
··· 5 5 use std::time::{Duration, Instant}; 6 6 7 7 #[derive(Parser, Debug)] 8 - #[command(author, version, about = "A CPU heater that churns CPU cores", long_about = None)] 8 + #[command(author, version, about = "A CPU/GPU heater that churns hardware", long_about = None)] 9 9 struct Args { 10 10 /// Duration to run in seconds (omit for indefinite run) 11 11 #[arg(short, long)] ··· 14 14 /// Number of cores to leave free (default: 1) 15 15 #[arg(short = 'f', long, default_value_t = 1)] 16 16 free_cores: usize, 17 + 18 + /// Enable GPU heating (requires compatible GPU) 19 + #[arg(short, long)] 20 + gpu: bool, 17 21 } 18 22 19 23 fn main() { ··· 26 30 println!("Total CPU cores: {}", total_cores); 27 31 println!("Cores to heat: {}", cores_to_use); 28 32 println!("Cores to leave free: {}", args.free_cores); 33 + if args.gpu { 34 + println!("GPU heating: ENABLED"); 35 + } 29 36 30 37 match args.duration { 31 38 Some(seconds) => println!("Running for {} seconds", seconds), ··· 44 51 45 52 let start_time = Instant::now(); 46 53 let duration = args.duration.map(Duration::from_secs); 54 + 55 + // Start GPU heating if requested 56 + let gpu_handle = if args.gpu { 57 + let running = running.clone(); 58 + Some(thread::spawn(move || { 59 + match run_gpu_heater(running) { 60 + Ok(_) => println!("GPU heater stopped successfully"), 61 + Err(e) => eprintln!("GPU heater error: {}", e), 62 + } 63 + })) 64 + } else { 65 + None 66 + }; 47 67 48 68 // Spawn threads to churn CPU 49 69 let mut handles = vec![]; 50 70 for i in 0..cores_to_use { 51 71 let running = running.clone(); 52 72 let handle = thread::spawn(move || { 53 - println!("Thread {} started", i); 73 + println!("CPU Thread {} started", i); 54 74 let mut counter: u64 = 0; 55 75 while running.load(Ordering::SeqCst) { 56 76 //compute something meaningless but CPU-intensive ··· 62 82 .wrapping_rem(2147483648); 63 83 } 64 84 } 65 - println!("Thread {} stopped after {} iterations", i, counter); 85 + println!("CPU Thread {} stopped after {} iterations", i, counter); 66 86 }); 67 87 handles.push(handle); 68 88 } ··· 78 98 for handle in handles { 79 99 handle.join().unwrap(); 80 100 } 101 + if let Some(handle) = gpu_handle { 102 + handle.join().unwrap(); 103 + } 81 104 return; 82 105 } 83 106 ··· 85 108 for handle in handles { 86 109 handle.join().unwrap(); 87 110 } 111 + if let Some(handle) = gpu_handle { 112 + handle.join().unwrap(); 113 + } 88 114 89 115 println!("Finished heating for {:?}", start_time.elapsed()); 90 116 } 117 + 118 + fn run_gpu_heater(running: Arc<AtomicBool>) -> Result<(), Box<dyn std::error::Error>> { 119 + // Initialize GPU 120 + let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor { 121 + backends: wgpu::Backends::all(), 122 + ..Default::default() 123 + }); 124 + 125 + let adapter = pollster::block_on(instance.request_adapter(&wgpu::RequestAdapterOptions { 126 + power_preference: wgpu::PowerPreference::HighPerformance, 127 + compatible_surface: None, 128 + force_fallback_adapter: false, 129 + })); 130 + 131 + let adapter = match adapter { 132 + Ok(a) => a, 133 + Err(_) => return Err("Failed to find GPU adapter".into()), 134 + }; 135 + 136 + println!("GPU: {} ({:?})", adapter.get_info().name, adapter.get_info().backend); 137 + 138 + let (device, queue) = pollster::block_on(adapter.request_device( 139 + &wgpu::DeviceDescriptor { 140 + label: Some("GPU Heater Device"), 141 + required_features: wgpu::Features::empty(), 142 + required_limits: wgpu::Limits::default(), 143 + memory_hints: Default::default(), 144 + experimental_features: Default::default(), 145 + trace: Default::default(), 146 + }, 147 + ))?; 148 + 149 + // Create compute shader that does intensive matrix operations 150 + let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { 151 + label: Some("GPU Heater Shader"), 152 + source: wgpu::ShaderSource::Wgsl(include_str!("heater.wgsl").into()), 153 + }); 154 + 155 + // Create buffers for computation 156 + let buffer_size = 1024 * 1024 * 4; // 4MB of data 157 + let input_buffer = device.create_buffer(&wgpu::BufferDescriptor { 158 + label: Some("Input Buffer"), 159 + size: buffer_size, 160 + usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_DST, 161 + mapped_at_creation: false, 162 + }); 163 + 164 + let output_buffer = device.create_buffer(&wgpu::BufferDescriptor { 165 + label: Some("Output Buffer"), 166 + size: buffer_size, 167 + usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::COPY_SRC, 168 + mapped_at_creation: false, 169 + }); 170 + 171 + let bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { 172 + label: Some("Compute Bind Group Layout"), 173 + entries: &[ 174 + wgpu::BindGroupLayoutEntry { 175 + binding: 0, 176 + visibility: wgpu::ShaderStages::COMPUTE, 177 + ty: wgpu::BindingType::Buffer { 178 + ty: wgpu::BufferBindingType::Storage { read_only: true }, 179 + has_dynamic_offset: false, 180 + min_binding_size: None, 181 + }, 182 + count: None, 183 + }, 184 + wgpu::BindGroupLayoutEntry { 185 + binding: 1, 186 + visibility: wgpu::ShaderStages::COMPUTE, 187 + ty: wgpu::BindingType::Buffer { 188 + ty: wgpu::BufferBindingType::Storage { read_only: false }, 189 + has_dynamic_offset: false, 190 + min_binding_size: None, 191 + }, 192 + count: None, 193 + }, 194 + ], 195 + }); 196 + 197 + let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { 198 + label: Some("Compute Bind Group"), 199 + layout: &bind_group_layout, 200 + entries: &[ 201 + wgpu::BindGroupEntry { 202 + binding: 0, 203 + resource: input_buffer.as_entire_binding(), 204 + }, 205 + wgpu::BindGroupEntry { 206 + binding: 1, 207 + resource: output_buffer.as_entire_binding(), 208 + }, 209 + ], 210 + }); 211 + 212 + let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { 213 + label: Some("Compute Pipeline Layout"), 214 + bind_group_layouts: &[&bind_group_layout], 215 + push_constant_ranges: &[], 216 + }); 217 + 218 + let compute_pipeline = device.create_compute_pipeline(&wgpu::ComputePipelineDescriptor { 219 + label: Some("Compute Pipeline"), 220 + layout: Some(&pipeline_layout), 221 + module: &shader, 222 + entry_point: Some("main"), 223 + compilation_options: Default::default(), 224 + cache: None, 225 + }); 226 + 227 + println!("GPU heater started"); 228 + let mut iteration = 0u64; 229 + 230 + // Main GPU compute loop 231 + while running.load(Ordering::SeqCst) { 232 + let mut encoder = device.create_command_encoder(&wgpu::CommandEncoderDescriptor { 233 + label: Some("Compute Encoder"), 234 + }); 235 + 236 + { 237 + let mut compute_pass = encoder.begin_compute_pass(&wgpu::ComputePassDescriptor { 238 + label: Some("Compute Pass"), 239 + timestamp_writes: None, 240 + }); 241 + compute_pass.set_pipeline(&compute_pipeline); 242 + compute_pass.set_bind_group(0, &bind_group, &[]); 243 + // Dispatch enough work to keep GPU busy 244 + compute_pass.dispatch_workgroups(256, 256, 1); 245 + } 246 + 247 + queue.submit(Some(encoder.finish())); 248 + // Queue submission handles synchronization 249 + 250 + iteration += 1; 251 + //if iteration % 100 == 0 { 252 + // println!("GPU iterations: {}", iteration); 253 + //} 254 + } 255 + 256 + println!("GPU heater stopped after {} iterations", iteration); 257 + Ok(()) 258 + }