@group(0)
@binding(0)
var<storage, read_write> v_indices: array<u32>; // this is used as both input and output for convenience
fn huge_program(n_base: u32) -> u32{
var n: u32 = n_base;
switch(n) {
case 0u { return 0u; }
case 1u { return 1u; }
case 2u { return 2u; }
case 3u { return 3u; }
case 4u { return 4u; }
case 5u { return 5u; }
case 6u { return 6u; }
case 7u { return 7u; }
case 8u { return 8u; }
case 9u { return 9u; }
case 10u { return 10u; }
case 11u { return 11u; }
case 12u { return 12u; }
case 13u { return 13u; }
case 14u { return 14u; }
case 15u { return 15u; }
case 16u { return 16u; }
case 17u { return 17u; }
case 18u { return 18u; }
case 19u { return 19u; }
case 20u { return 20u; }
case 21u { return 21u; }
case 22u { return 22u; }
case 23u { return 23u; }
case 24u { return 24u; }
case 25u { return 25u; }
case 26u { return 26u; }
case 27u { return 27u; }
case 28u { return 28u; }
case 29u { return 29u; }
case 30u { return 30u; }
case 31u { return 31u; }
case 32u { return 32u; }
case 33u { return 33u; }
case 34u { return 34u; }
case 35u { return 35u; }
case 36u { return 36u; }
case 37u { return 37u; }
case 38u { return 38u; }
case 39u { return 39u; }
case 40u { return 40u; }
case 41u { return 41u; }
case 42u { return 42u; }
case 43u { return 43u; }
case 44u { return 44u; }
case 45u { return 45u; }
case 46u { return 46u; }
case 47u { return 47u; }
case 48u { return 48u; }
case 49u { return 49u; }
case 50u { return 50u; }
case 51u { return 51u; }
case 52u { return 52u; }
case 53u { return 53u; }
case 54u { return 54u; }
case 55u { return 55u; }
case 56u { return 56u; }
case 57u { return 57u; }
case 58u { return 58u; }
case 59u { return 59u; }
case 60u { return 60u; }
case 61u { return 61u; }
case 62u { return 62u; }
case 63u { return 63u; }
case 64u { return 64u; }
case 65u { return 65u; }
case 66u { return 66u; }
case 67u { return 67u; }
case 68u { return 68u; }
case 69u { return 69u; }
case 70u { return 70u; }
case 71u { return 71u; }
case 72u { return 72u; }
case 73u { return 73u; }
case 74u { return 74u; }
case 75u { return 75u; }
case 76u { return 76u; }
case 77u { return 77u; }
case 78u { return 78u; }
case 79u { return 79u; }
case 80u { return 80u; }
case 81u { return 81u; }
case 82u { return 82u; }
case 83u { return 83u; }
case 84u { return 84u; }
case 85u { return 85u; }
case 86u { return 86u; }
case 87u { return 87u; }
case 88u { return 88u; }
case 89u { return 89u; }
case 90u { return 90u; }
case 91u { return 91u; }
case 92u { return 92u; }
case 93u { return 93u; }
case 94u { return 94u; }
case 95u { return 95u; }
case 96u { return 96u; }
case 97u { return 97u; }
case 98u { return 98u; }
case 99u { return 99u; }
case 100u { return 100u; }
case 101u { return 101u; }
case 102u { return 102u; }
case 103u { return 103u; }
case 104u { return 104u; }
case 105u { return 105u; }
case 106u { return 106u; }
case 107u { return 107u; }
case 108u { return 108u; }
case 109u { return 109u; }
case 110u { return 110u; }
case 111u { return 111u; }
case 112u { return 112u; }
case 113u { return 113u; }
case 114u { return 114u; }
case 115u { return 115u; }
case 116u { return 116u; }
case 117u { return 117u; }
case 118u { return 118u; }
case 119u { return 119u; }
case 120u { return 120u; }
case 121u { return 121u; }
case 122u { return 122u; }
case 123u { return 123u; }
case 124u { return 124u; }
case 125u { return 125u; }
case 126u { return 126u; }
case 127u { return 127u; }
case 128u { return 128u; }
case 129u { return 129u; }
case 130u { return 130u; }
case 131u { return 131u; }
case 132u { return 132u; }
case 133u { return 133u; }
case 134u { return 134u; }
case 135u { return 135u; }
case 136u { return 136u; }
case 137u { return 137u; }
case 138u { return 138u; }
case 139u { return 139u; }
case 140u { return 140u; }
case 141u { return 141u; }
case 142u { return 142u; }
case 143u { return 143u; }
case 144u { return 144u; }
case 145u { return 145u; }
case 146u { return 146u; }
case 147u { return 147u; }
case 148u { return 148u; }
case 149u { return 149u; }
case 150u { return 150u; }
case 151u { return 151u; }
case 152u { return 152u; }
case 153u { return 153u; }
case 154u { return 154u; }
case 155u { return 155u; }
case 156u { return 156u; }
case 157u { return 157u; }
case 158u { return 158u; }
case 159u { return 159u; }
case 160u { return 160u; }
case 161u { return 161u; }
case 162u { return 162u; }
case 163u { return 163u; }
case 164u { return 164u; }
case 165u { return 165u; }
case 166u { return 166u; }
case 167u { return 167u; }
case 168u { return 168u; }
case 169u { return 169u; }
case 170u { return 170u; }
case 171u { return 171u; }
case 172u { return 172u; }
case 173u { return 173u; }
case 174u { return 174u; }
case 175u { return 175u; }
case 176u { return 176u; }
case 177u { return 177u; }
case 178u { return 178u; }
case 179u { return 179u; }
case 180u { return 180u; }
case 181u { return 181u; }
case 182u { return 182u; }
case 183u { return 183u; }
case 184u { return 184u; }
case 185u { return 185u; }
case 186u { return 186u; }
case 187u { return 187u; }
case 188u { return 188u; }
case 189u { return 189u; }
case 190u { return 190u; }
case 191u { return 191u; }
case 192u { return 192u; }
case 193u { return 193u; }
case 194u { return 194u; }
case 195u { return 195u; }
case 196u { return 196u; }
case 197u { return 197u; }
case 198u { return 198u; }
case 199u { return 199u; }
case 200u { return 200u; }
case 201u { return 201u; }
case 202u { return 202u; }
case 203u { return 203u; }
case 204u { return 204u; }
case 205u { return 205u; }
case 206u { return 206u; }
case 207u { return 207u; }
case 208u { return 208u; }
case 209u { return 209u; }
case 210u { return 210u; }
case 211u { return 211u; }
case 212u { return 212u; }
case 213u { return 213u; }
case 214u { return 214u; }
case 215u { return 215u; }
case 216u { return 216u; }
case 217u { return 217u; }
case 218u { return 218u; }
case 219u { return 219u; }
case 220u { return 220u; }
case 221u { return 221u; }
case 222u { return 222u; }
case 223u { return 223u; }
case 224u { return 224u; }
case 225u { return 225u; }
case 226u { return 226u; }
case 227u { return 227u; }
case 228u { return 228u; }
case 229u { return 229u; }
case 230u { return 230u; }
case 231u { return 231u; }
case 232u { return 232u; }
case 233u { return 233u; }
case 234u { return 234u; }
case 235u { return 235u; }
case 236u { return 236u; }
case 237u { return 237u; }
case 238u { return 238u; }
case 239u { return 239u; }
case 240u { return 240u; }
case 241u { return 241u; }
case 242u { return 242u; }
case 243u { return 243u; }
case 244u { return 244u; }
case 245u { return 245u; }
case 246u { return 246u; }
case 247u { return 247u; }
case 248u { return 248u; }
case 249u { return 249u; }
case 250u { return 250u; }
case 251u { return 251u; }
case 252u { return 252u; }
case 253u { return 253u; }
case 254u { return 254u; }
case 255u { return 255u; }
case 256u { return 256u; }
case 257u { return 257u; }
case 258u { return 258u; }
case 259u { return 259u; }
case 260u { return 260u; }
case 261u { return 261u; }
case 262u { return 262u; }
case 263u { return 263u; }
case 264u { return 264u; }
case 265u { return 265u; }
case 266u { return 266u; }
case 267u { return 267u; }
case 268u { return 268u; }
case 269u { return 269u; }
case 270u { return 270u; }
case 271u { return 271u; }
case 272u { return 272u; }
case 273u { return 273u; }
case 274u { return 274u; }
case 275u { return 275u; }
case 276u { return 276u; }
case 277u { return 277u; }
case 278u { return 278u; }
case 279u { return 279u; }
case 280u { return 280u; }
case 281u { return 281u; }
case 282u { return 282u; }
case 283u { return 283u; }
case 284u { return 284u; }
case 285u { return 285u; }
case 286u { return 286u; }
case 287u { return 287u; }
case 288u { return 288u; }
case 289u { return 289u; }
case 290u { return 290u; }
case 291u { return 291u; }
case 292u { return 292u; }
case 293u { return 293u; }
case 294u { return 294u; }
case 295u { return 295u; }
case 296u { return 296u; }
case 297u { return 297u; }
case 298u { return 298u; }
case 299u { return 299u; }
case 300u { return 300u; }
case 301u { return 301u; }
case 302u { return 302u; }
case 303u { return 303u; }
case 304u { return 304u; }
case 305u { return 305u; }
case 306u { return 306u; }
case 307u { return 307u; }
case 308u { return 308u; }
case 309u { return 309u; }
case 310u { return 310u; }
case 311u { return 311u; }
case 312u { return 312u; }
case 313u { return 313u; }
case 314u { return 314u; }
case 315u { return 315u; }
case 316u { return 316u; }
case 317u { return 317u; }
case 318u { return 318u; }
case 319u { return 319u; }
case 320u { return 320u; }
case 321u { return 321u; }
case 322u { return 322u; }
case 323u { return 323u; }
case 324u { return 324u; }
case 325u { return 325u; }
case 326u { return 326u; }
case 327u { return 327u; }
case 328u { return 328u; }
case 329u { return 329u; }
case 330u { return 330u; }
case 331u { return 331u; }
case 332u { return 332u; }
case 333u { return 333u; }
case 334u { return 334u; }
case 335u { return 335u; }
case 336u { return 336u; }
case 337u { return 337u; }
case 338u { return 338u; }
case 339u { return 339u; }
case 340u { return 340u; }
case 341u { return 341u; }
case 342u { return 342u; }
case 343u { return 343u; }
case 344u { return 344u; }
case 345u { return 345u; }
case 346u { return 346u; }
case 347u { return 347u; }
case 348u { return 348u; }
case 349u { return 349u; }
case 350u { return 350u; }
case 351u { return 351u; }
case 352u { return 352u; }
case 353u { return 353u; }
case 354u { return 354u; }
case 355u { return 355u; }
case 356u { return 356u; }
case 357u { return 357u; }
case 358u { return 358u; }
case 359u { return 359u; }
case 360u { return 360u; }
case 361u { return 361u; }
case 362u { return 362u; }
case 363u { return 363u; }
case 364u { return 364u; }
case 365u { return 365u; }
case 366u { return 366u; }
case 367u { return 367u; }
case 368u { return 368u; }
case 369u { return 369u; }
case 370u { return 370u; }
case 371u { return 371u; }
case 372u { return 372u; }
case 373u { return 373u; }
case 374u { return 374u; }
case 375u { return 375u; }
case 376u { return 376u; }
case 377u { return 377u; }
case 378u { return 378u; }
case 379u { return 379u; }
case 380u { return 380u; }
case 381u { return 381u; }
case 382u { return 382u; }
case 383u { return 383u; }
case 384u { return 384u; }
case 385u { return 385u; }
case 386u { return 386u; }
case 387u { return 387u; }
case 388u { return 388u; }
case 389u { return 389u; }
case 390u { return 390u; }
case 391u { return 391u; }
case 392u { return 392u; }
case 393u { return 393u; }
case 394u { return 394u; }
case 395u { return 395u; }
case 396u { return 396u; }
case 397u { return 397u; }
case 398u { return 398u; }
case 399u { return 399u; }
case 400u { return 400u; }
case 401u { return 401u; }
case 402u { return 402u; }
case 403u { return 403u; }
case 404u { return 404u; }
case 405u { return 405u; }
case 406u { return 406u; }
case 407u { return 407u; }
case 408u { return 408u; }
case 409u { return 409u; }
case 410u { return 410u; }
case 411u { return 411u; }
case 412u { return 412u; }
case 413u { return 413u; }
case 414u { return 414u; }
case 415u { return 415u; }
case 416u { return 416u; }
case 417u { return 417u; }
case 418u { return 418u; }
case 419u { return 419u; }
case 420u { return 420u; }
case 421u { return 421u; }
case 422u { return 422u; }
case 423u { return 423u; }
case 424u { return 424u; }
case 425u { return 425u; }
case 426u { return 426u; }
case 427u { return 427u; }
case 428u { return 428u; }
case 429u { return 429u; }
case 430u { return 430u; }
case 431u { return 431u; }
case 432u { return 432u; }
case 433u { return 433u; }
case 434u { return 434u; }
case 435u { return 435u; }
case 436u { return 436u; }
case 437u { return 437u; }
case 438u { return 438u; }
case 439u { return 439u; }
case 440u { return 440u; }
case 441u { return 441u; }
case 442u { return 442u; }
case 443u { return 443u; }
case 444u { return 444u; }
case 445u { return 445u; }
case 446u { return 446u; }
case 447u { return 447u; }
case 448u { return 448u; }
case 449u { return 449u; }
case 450u { return 450u; }
case 451u { return 451u; }
case 452u { return 452u; }
case 453u { return 453u; }
case 454u { return 454u; }
case 455u { return 455u; }
case 456u { return 456u; }
case 457u { return 457u; }
case 458u { return 458u; }
case 459u { return 459u; }
case 460u { return 460u; }
case 461u { return 461u; }
case 462u { return 462u; }
case 463u { return 463u; }
case 464u { return 464u; }
case 465u { return 465u; }
case 466u { return 466u; }
case 467u { return 467u; }
case 468u { return 468u; }
case 469u { return 469u; }
case 470u { return 470u; }
case 471u { return 471u; }
case 472u { return 472u; }
case 473u { return 473u; }
case 474u { return 474u; }
case 475u { return 475u; }
case 476u { return 476u; }
case 477u { return 477u; }
case 478u { return 478u; }
case 479u { return 479u; }
case 480u { return 480u; }
case 481u { return 481u; }
case 482u { return 482u; }
case 483u { return 483u; }
case 484u { return 484u; }
case 485u { return 485u; }
case 486u { return 486u; }
case 487u { return 487u; }
case 488u { return 488u; }
case 489u { return 489u; }
case 490u { return 490u; }
case 491u { return 491u; }
case 492u { return 492u; }
case 493u { return 493u; }
case 494u { return 494u; }
case 495u { return 495u; }
case 496u { return 496u; }
case 497u { return 497u; }
case 498u { return 498u; }
case 499u { return 499u; }
case 500u { return 500u; }
case 501u { return 501u; }
case 502u { return 502u; }
case 503u { return 503u; }
case 504u { return 504u; }
case 505u { return 505u; }
case 506u { return 506u; }
case 507u { return 507u; }
case 508u { return 508u; }
case 509u { return 509u; }
case 510u { return 510u; }
case 511u { return 511u; }
case 512u { return 512u; }
case 513u { return 513u; }
case 514u { return 514u; }
case 515u { return 515u; }
case 516u { return 516u; }
case 517u { return 517u; }
case 518u { return 518u; }
case 519u { return 519u; }
case 520u { return 520u; }
case 521u { return 521u; }
case 522u { return 522u; }
case 523u { return 523u; }
case 524u { return 524u; }
case 525u { return 525u; }
case 526u { return 526u; }
case 527u { return 527u; }
case 528u { return 528u; }
case 529u { return 529u; }
case 530u { return 530u; }
case 531u { return 531u; }
case 532u { return 532u; }
case 533u { return 533u; }
case 534u { return 534u; }
case 535u { return 535u; }
case 536u { return 536u; }
case 537u { return 537u; }
case 538u { return 538u; }
case 539u { return 539u; }
case 540u { return 540u; }
case 541u { return 541u; }
case 542u { return 542u; }
case 543u { return 543u; }
case 544u { return 544u; }
case 545u { return 545u; }
case 546u { return 546u; }
case 547u { return 547u; }
case 548u { return 548u; }
case 549u { return 549u; }
case 550u { return 550u; }
case 551u { return 551u; }
case 552u { return 552u; }
case 553u { return 553u; }
case 554u { return 554u; }
case 555u { return 555u; }
case 556u { return 556u; }
case 557u { return 557u; }
case 558u { return 558u; }
case 559u { return 559u; }
case 560u { return 560u; }
case 561u { return 561u; }
case 562u { return 562u; }
case 563u { return 563u; }
case 564u { return 564u; }
case 565u { return 565u; }
case 566u { return 566u; }
case 567u { return 567u; }
case 568u { return 568u; }
case 569u { return 569u; }
case 570u { return 570u; }
case 571u { return 571u; }
case 572u { return 572u; }
case 573u { return 573u; }
case 574u { return 574u; }
case 575u { return 575u; }
case 576u { return 576u; }
case 577u { return 577u; }
case 578u { return 578u; }
case 579u { return 579u; }
case 580u { return 580u; }
case 581u { return 581u; }
case 582u { return 582u; }
case 583u { return 583u; }
case 584u { return 584u; }
case 585u { return 585u; }
case 586u { return 586u; }
case 587u { return 587u; }
case 588u { return 588u; }
case 589u { return 589u; }
case 590u { return 590u; }
case 591u { return 591u; }
case 592u { return 592u; }
case 593u { return 593u; }
case 594u { return 594u; }
case 595u { return 595u; }
case 596u { return 596u; }
case 597u { return 597u; }
case 598u { return 598u; }
case 599u { return 599u; }
case 600u { return 600u; }
case 601u { return 601u; }
case 602u { return 602u; }
case 603u { return 603u; }
case 604u { return 604u; }
case 605u { return 605u; }
case 606u { return 606u; }
case 607u { return 607u; }
case 608u { return 608u; }
case 609u { return 609u; }
case 610u { return 610u; }
case 611u { return 611u; }
case 612u { return 612u; }
case 613u { return 613u; }
case 614u { return 614u; }
case 615u { return 615u; }
case 616u { return 616u; }
case 617u { return 617u; }
case 618u { return 618u; }
case 619u { return 619u; }
case 620u { return 620u; }
case 621u { return 621u; }
case 622u { return 622u; }
case 623u { return 623u; }
case 624u { return 624u; }
case 625u { return 625u; }
case 626u { return 626u; }
case 627u { return 627u; }
case 628u { return 628u; }
case 629u { return 629u; }
case 630u { return 630u; }
case 631u { return 631u; }
case 632u { return 632u; }
case 633u { return 633u; }
case 634u { return 634u; }
case 635u { return 635u; }
case 636u { return 636u; }
case 637u { return 637u; }
case 638u { return 638u; }
case 639u { return 639u; }
case 640u { return 640u; }
case 641u { return 641u; }
case 642u { return 642u; }
case 643u { return 643u; }
case 644u { return 644u; }
case 645u { return 645u; }
case 646u { return 646u; }
case 647u { return 647u; }
case 648u { return 648u; }
case 649u { return 649u; }
case 650u { return 650u; }
case 651u { return 651u; }
case 652u { return 652u; }
case 653u { return 653u; }
case 654u { return 654u; }
case 655u { return 655u; }
case 656u { return 656u; }
case 657u { return 657u; }
case 658u { return 658u; }
case 659u { return 659u; }
case 660u { return 660u; }
case 661u { return 661u; }
case 662u { return 662u; }
case 663u { return 663u; }
case 664u { return 664u; }
case 665u { return 665u; }
case 666u { return 666u; }
case 667u { return 667u; }
case 668u { return 668u; }
case 669u { return 669u; }
case 670u { return 670u; }
case 671u { return 671u; }
case 672u { return 672u; }
case 673u { return 673u; }
case 674u { return 674u; }
case 675u { return 675u; }
case 676u { return 676u; }
case 677u { return 677u; }
case 678u { return 678u; }
case 679u { return 679u; }
case 680u { return 680u; }
case 681u { return 681u; }
case 682u { return 682u; }
case 683u { return 683u; }
case 684u { return 684u; }
case 685u { return 685u; }
case 686u { return 686u; }
case 687u { return 687u; }
case 688u { return 688u; }
case 689u { return 689u; }
case 690u { return 690u; }
case 691u { return 691u; }
case 692u { return 692u; }
case 693u { return 693u; }
case 694u { return 694u; }
case 695u { return 695u; }
case 696u { return 696u; }
case 697u { return 697u; }
case 698u { return 698u; }
case 699u { return 699u; }
case 700u { return 700u; }
case 701u { return 701u; }
case 702u { return 702u; }
case 703u { return 703u; }
case 704u { return 704u; }
case 705u { return 705u; }
case 706u { return 706u; }
case 707u { return 707u; }
case 708u { return 708u; }
case 709u { return 709u; }
case 710u { return 710u; }
case 711u { return 711u; }
case 712u { return 712u; }
case 713u { return 713u; }
case 714u { return 714u; }
case 715u { return 715u; }
case 716u { return 716u; }
case 717u { return 717u; }
case 718u { return 718u; }
case 719u { return 719u; }
case 720u { return 720u; }
case 721u { return 721u; }
case 722u { return 722u; }
case 723u { return 723u; }
case 724u { return 724u; }
case 725u { return 725u; }
case 726u { return 726u; }
case 727u { return 727u; }
case 728u { return 728u; }
case 729u { return 729u; }
case 730u { return 730u; }
case 731u { return 731u; }
case 732u { return 732u; }
case 733u { return 733u; }
case 734u { return 734u; }
case 735u { return 735u; }
case 736u { return 736u; }
case 737u { return 737u; }
case 738u { return 738u; }
case 739u { return 739u; }
case 740u { return 740u; }
case 741u { return 741u; }
case 742u { return 742u; }
case 743u { return 743u; }
case 744u { return 744u; }
case 745u { return 745u; }
case 746u { return 746u; }
case 747u { return 747u; }
case 748u { return 748u; }
case 749u { return 749u; }
case 750u { return 750u; }
case 751u { return 751u; }
case 752u { return 752u; }
case 753u { return 753u; }
case 754u { return 754u; }
case 755u { return 755u; }
case 756u { return 756u; }
case 757u { return 757u; }
case 758u { return 758u; }
case 759u { return 759u; }
case 760u { return 760u; }
case 761u { return 761u; }
case 762u { return 762u; }
case 763u { return 763u; }
case 764u { return 764u; }
case 765u { return 765u; }
case 766u { return 766u; }
case 767u { return 767u; }
case 768u { return 768u; }
case 769u { return 769u; }
case 770u { return 770u; }
case 771u { return 771u; }
case 772u { return 772u; }
case 773u { return 773u; }
case 774u { return 774u; }
case 775u { return 775u; }
case 776u { return 776u; }
case 777u { return 777u; }
case 778u { return 778u; }
case 779u { return 779u; }
case 780u { return 780u; }
case 781u { return 781u; }
case 782u { return 782u; }
case 783u { return 783u; }
case 784u { return 784u; }
case 785u { return 785u; }
case 786u { return 786u; }
case 787u { return 787u; }
case 788u { return 788u; }
case 789u { return 789u; }
case 790u { return 790u; }
case 791u { return 791u; }
case 792u { return 792u; }
case 793u { return 793u; }
case 794u { return 794u; }
case 795u { return 795u; }
case 796u { return 796u; }
case 797u { return 797u; }
case 798u { return 798u; }
case 799u { return 799u; }
case 800u { return 800u; }
case 801u { return 801u; }
case 802u { return 802u; }
case 803u { return 803u; }
case 804u { return 804u; }
case 805u { return 805u; }
case 806u { return 806u; }
case 807u { return 807u; }
case 808u { return 808u; }
case 809u { return 809u; }
case 810u { return 810u; }
case 811u { return 811u; }
case 812u { return 812u; }
case 813u { return 813u; }
case 814u { return 814u; }
case 815u { return 815u; }
case 816u { return 816u; }
case 817u { return 817u; }
case 818u { return 818u; }
case 819u { return 819u; }
case 820u { return 820u; }
case 821u { return 821u; }
case 822u { return 822u; }
case 823u { return 823u; }
case 824u { return 824u; }
case 825u { return 825u; }
case 826u { return 826u; }
case 827u { return 827u; }
case 828u { return 828u; }
case 829u { return 829u; }
case 830u { return 830u; }
case 831u { return 831u; }
case 832u { return 832u; }
case 833u { return 833u; }
case 834u { return 834u; }
case 835u { return 835u; }
case 836u { return 836u; }
case 837u { return 837u; }
case 838u { return 838u; }
case 839u { return 839u; }
case 840u { return 840u; }
case 841u { return 841u; }
case 842u { return 842u; }
case 843u { return 843u; }
case 844u { return 844u; }
case 845u { return 845u; }
case 846u { return 846u; }
case 847u { return 847u; }
case 848u { return 848u; }
case 849u { return 849u; }
case 850u { return 850u; }
case 851u { return 851u; }
case 852u { return 852u; }
case 853u { return 853u; }
case 854u { return 854u; }
case 855u { return 855u; }
case 856u { return 856u; }
case 857u { return 857u; }
case 858u { return 858u; }
case 859u { return 859u; }
case 860u { return 860u; }
case 861u { return 861u; }
case 862u { return 862u; }
case 863u { return 863u; }
case 864u { return 864u; }
case 865u { return 865u; }
case 866u { return 866u; }
case 867u { return 867u; }
case 868u { return 868u; }
case 869u { return 869u; }
case 870u { return 870u; }
case 871u { return 871u; }
case 872u { return 872u; }
case 873u { return 873u; }
case 874u { return 874u; }
case 875u { return 875u; }
case 876u { return 876u; }
case 877u { return 877u; }
case 878u { return 878u; }
case 879u { return 879u; }
case 880u { return 880u; }
case 881u { return 881u; }
case 882u { return 882u; }
case 883u { return 883u; }
case 884u { return 884u; }
case 885u { return 885u; }
case 886u { return 886u; }
case 887u { return 887u; }
case 888u { return 888u; }
case 889u { return 889u; }
case 890u { return 890u; }
case 891u { return 891u; }
case 892u { return 892u; }
case 893u { return 893u; }
case 894u { return 894u; }
case 895u { return 895u; }
case 896u { return 896u; }
case 897u { return 897u; }
case 898u { return 898u; }
case 899u { return 899u; }
case 900u { return 900u; }
case 901u { return 901u; }
case 902u { return 902u; }
case 903u { return 903u; }
case 904u { return 904u; }
case 905u { return 905u; }
case 906u { return 906u; }
case 907u { return 907u; }
case 908u { return 908u; }
case 909u { return 909u; }
case 910u { return 910u; }
case 911u { return 911u; }
case 912u { return 912u; }
case 913u { return 913u; }
case 914u { return 914u; }
case 915u { return 915u; }
case 916u { return 916u; }
case 917u { return 917u; }
case 918u { return 918u; }
case 919u { return 919u; }
case 920u { return 920u; }
case 921u { return 921u; }
case 922u { return 922u; }
case 923u { return 923u; }
case 924u { return 924u; }
case 925u { return 925u; }
case 926u { return 926u; }
case 927u { return 927u; }
case 928u { return 928u; }
case 929u { return 929u; }
case 930u { return 930u; }
case 931u { return 931u; }
case 932u { return 932u; }
case 933u { return 933u; }
case 934u { return 934u; }
case 935u { return 935u; }
case 936u { return 936u; }
case 937u { return 937u; }
case 938u { return 938u; }
case 939u { return 939u; }
case 940u { return 940u; }
case 941u { return 941u; }
case 942u { return 942u; }
case 943u { return 943u; }
case 944u { return 944u; }
case 945u { return 945u; }
case 946u { return 946u; }
case 947u { return 947u; }
case 948u { return 948u; }
case 949u { return 949u; }
case 950u { return 950u; }
case 951u { return 951u; }
case 952u { return 952u; }
case 953u { return 953u; }
case 954u { return 954u; }
case 955u { return 955u; }
case 956u { return 956u; }
case 957u { return 957u; }
case 958u { return 958u; }
case 959u { return 959u; }
case 960u { return 960u; }
case 961u { return 961u; }
case 962u { return 962u; }
case 963u { return 963u; }
case 964u { return 964u; }
case 965u { return 965u; }
case 966u { return 966u; }
case 967u { return 967u; }
case 968u { return 968u; }
case 969u { return 969u; }
case 970u { return 970u; }
case 971u { return 971u; }
case 972u { return 972u; }
case 973u { return 973u; }
case 974u { return 974u; }
case 975u { return 975u; }
case 976u { return 976u; }
case 977u { return 977u; }
case 978u { return 978u; }
case 979u { return 979u; }
case 980u { return 980u; }
case 981u { return 981u; }
case 982u { return 982u; }
case 983u { return 983u; }
case 984u { return 984u; }
case 985u { return 985u; }
case 986u { return 986u; }
case 987u { return 987u; }
case 988u { return 988u; }
case 989u { return 989u; }
case 990u { return 990u; }
case 991u { return 991u; }
case 992u { return 992u; }
case 993u { return 993u; }
case 994u { return 994u; }
case 995u { return 995u; }
case 996u { return 996u; }
case 997u { return 997u; }
case 998u { return 998u; }
case 999u { return 999u; }
// 1万まで続く...
default { return 0u; }
}
}
@compute
@workgroup_size(1)
fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
v_indices[global_id.x] = huge_program(global_id.x);
}
あれ
goから越境してrustやるの嫌じゃな~~~。
そもそも、wgpuのレポジトリ見てても動かし方がよくわからん。
なんとなくIssueをcompute shader
で検索して眺めてみる。すでにIssueが出てれば幸甚。
なかったわ。一般的には巨大シェーダーを動かす動機がないらしい。
wgpuのレポジトリにExampleを発見したので動かしてみる。
wgpuでboidsが動いた。やったねたえちゃん!
巨大シェーダー実証の元としてhello-computeが良さそう。コードが簡単。見覚えもある。
サクッとシェーダーを書き換えてみたら動いた。いいぞ。
条件分岐が1万行の巨大シェーダーを試してみた結果、wgpuにおいてはそんなに時間がかからない。500msとかそんなもん。じゃあRustでwgpu使って遺伝的プログラミングすればええやんという判断が浮かび上がってくるが、Rust難しすぎてあれなのであれ。覚悟を決めるのに1週間ぐらいかかるやつ。
とはいえ現状は wgpu → wgpu-native → go-webgpu という依存をしており、wgpuを直接ぶったたくよりも隔靴搔痒となる。依存しているコードがどこでどう変わるかもわからない。wgpuはブラウザでも使われているらしいので、多分大丈夫だろう。
本丸の遺伝的プログラミングのコードは2000行程度なので、1週間もあれば行ける気がする。Rustを理解できれば。
その前にgo-webgpuをアップデートすべく、go get -u
を叩く。よし、最新版でも直ってない。wgpuに乗り換えだ。
遺伝的プログラミングのコード全部を書き換えるのは骨が折れる。泣く。なので、wgpuを叩く部分だけRustで書けばええんちゃうんかという判断が生えてくる。『wgpu-go』や。
念のためにgoでもrustで動かしたのとまったく同じシェーダーを実行してみる。いや、普通に動く。先生……!これは……!条件分岐の数がCreateComputePipelineの処理時間に影響していると思われていたが、実はそうではなかった可能性が高い。Rustのwgpuで行った検証も不十分だった可能性が高い。
配列アクセスが悪いのではないかと思い至り、配列利用型巨大WGSLシェーダーを動かしてみたが普通に動く。機序がわからん。キショい。
関数実行が悪いのではないかと思い至り、配列及関数利用型巨大WGSLシェーダーを動かしてみたが普通に動く。静的だと最適化してないかこいつ。
関数がインライン展開されている気がしてきた。多分。わからんけど。そう考えると、関数の再起呼び出しができないのも、配列の添え字に変数が使えないのもしっくりくる。
「気晴らしにcompute.toysとか言うので遊んでみるかぁ」つって、何気なく配列の添え字に変数を入れてみたところ、なんと動いた。はぁ?じゃあっつって、最新版のgo-webgpuだとどうなんのよって試したら配列の添え字に変数を入れても動く。CreatePipelineも300ms以内に終わる。はぁ???今までの苦労は何だったんだ。3日返してほしい。
なお、最新版が出てきたのは5 days agoである。タイムリー。